agent/prompts/ folder in your context repo - no code changes or forking required.
Because the files live in your context repo, prompt changes are versioned with the rest of your context and stay reviewable in pull requests. nao init scaffolds the agent/prompts/ folder for you with a README.md and an example slack.md.
Per-surface files
Place any of these files inagent/prompts/:
Resolution order for a given surface:
- The surface-specific file (e.g.
slack.md), if present. - Otherwise
system.md, if present. - Otherwise nao’s built-in default prompt.
system.md when present, otherwise the built-in default.
Replace vs. extend: {{ nao_prompt }}
By default, a prompt file fully replaces the built-in prompt for that surface.
To keep the default and only add to it, include the {{ nao_prompt }} placeholder. At runtime it expands to nao’s default prompt for that surface (in slack.md it expands to the default Slack prompt, in system.md to the web prompt, and so on). The placeholder tolerates whitespace variations ({{nao_prompt}} or {{ nao_prompt }}) and can appear more than once.
Extend the default Slack prompt - agent/prompts/slack.md:
agent/prompts/system.md:
{{ nao_prompt }}, the file content becomes the entire prompt.
Internal runs that pass an explicit system prompt (for example, context recommendations) are not affected by these overrides.
Warehouse dialect rules
nao also adds SQL rules to the built-in prompt based on the warehouses your project is connected to. This happens automatically: the rules for a dialect are injected whenever a connection of that type exists, so you do not have to restate them inRULES.md.
The exact rules for each dialect live in one file in the nao repo. Rather than restate them here (they evolve as we add coverage), each row links to the source:
Warehouses without a dialect entry (for example PostgreSQL, Snowflake, Databricks, DuckDB) use the generic SQL rules in the built-in prompt.
Dialect rules are part of nao’s built-in prompt. A prompt file that fully replaces the default drops them; keep
{{ nao_prompt }} in the file if you want to preserve them.Rules
Shape per-message behavior with RULES.md
Custom Context
Organize your context repo however works best