Skip to main content

Configuration Reference

Complete reference for the nao_config.yaml file. This page is auto-generated from the Pydantic models in cli/nao_core/config/. Values wrapped in ${{ env('VAR') }} or {{ env('VAR') }} are resolved from environment variables at load time.

Resolving secrets

In addition to env(), any value in nao_config.yaml can pull a secret from AWS Secrets Manager or Kubernetes Secrets, so deployments can keep credentials out of plain environment variables:

AWS payloads and nested fields

An AWS secret payload must be a JSON object (binary secrets are not supported). The field part is a dot-path, so nested keys are addressed with .:
The resolved value must be a scalar (string, number, or boolean); pointing at a nested object raises an error. Referencing the same secret several times in one config triggers a single backend call, the payload is cached for the duration of the load. The aws and k8s resolvers require optional dependencies: install nao-core[aws-secrets] or nao-core[k8s-secrets]. Unlike env, which resolves missing variables to an empty string and warns, aws and k8s raise a clear error at load time when a secret or field cannot be resolved.

Top-level properties

Databases

All database configurations share these common fields: Template values: columns, preview, query_history, profiling, ai_summary Patterns in include / exclude use glob syntax against schema.table (e.g. prod_*.*, analytics.dim_*).

PostgreSQL (type: postgres)

Snowflake (type: snowflake)

BigQuery (type: bigquery)

DuckDB (type: duckdb)

Databricks (type: databricks)

Microsoft SQL Server (type: mssql)

Amazon Redshift (type: redshift)

StarRocks (type: starrocks)

Trino (type: trino)

ClickHouse (type: clickhouse)

Unlike other database types, ClickHouse renders all available templates by default rather than the shared default set. System databases (system, information_schema, INFORMATION_SCHEMA) are skipped unless explicitly listed in include.

Amazon Athena (type: athena)

RedshiftSSHTunnelConfig

Nested under ssh_tunnel in a Redshift database entry.

LLM

Declaring the provider inline (llm.provider, llm.api_key, …) still works but is deprecated. Run nao migrate to rewrite an existing file into the llm.providers shape.

ProviderConfig

One entry per provider under llm.providers.

ModelConfig

One entry per model under llm.providers[].models. Leave models empty to expose the provider’s built-in models.

ModelCosts

Nested under costs in a model entry. Prices are in US dollars per million tokens.

Provider authentication

Default annotation models

Used for ai_summary generation when annotation_model is not set.

Repos

Set exactly one of url or local_path: supplying both, or neither, fails validation. branch cannot be combined with local_path. include and exclude are applied to both source types. For a url repository the full repo is cloned first, then non-matching files are dropped, so the globs control what ends up in your context rather than what is fetched.

Notion

Slack

MCP

Skills

Test

Defaults for nao test. Every property is overridden by the matching command line flag.

ComparisonConfig

Nested under test.comparison. Controls how results are compared to the expected data.

Example

JSON Schema

The raw JSON Schema is available at config-schema.json.