Skip to main content

Prompts live in files, not in YAML

You declare a path to a Markdown file. The engine loads and renders it per request.

Variables

Prompt files can contain {{variable}} placeholders:
Variables are filled by resolvers — Python methods that run before the agent executes. The LLM never sees the variable names, only the rendered values. Declare which resolvers a node uses:
The resolver implementation (scaffolded by generate):

When rendering happens

At startup — prompt file paths are validated. If a file doesn’t exist, the engine fails before serving requests. Per request — resolvers run, variables are substituted, the final prompt string is produced. Rendered prompts are never cached globally — each request gets a fresh render with its own resolved values. This means dynamic values like current_date, customer_name, or account_tier are always accurate per request, regardless of when the engine started.

Rules

  • A variable with no matching resolver fails clearly — the engine names the node, the variable, and what’s missing.
  • Prompt text is not a security boundary. Don’t rely on prompt instructions to enforce access control — use the access plugin and runtime hooks instead.
  • Secrets must never appear in prompt files or YAML.