Skip to main content

Full schema


[runtime]


[start]


[limits]

The global execution ceiling. Any one limit stopping the agent stops the entire run. Named limit sets[limits.<name>] inherits all fields from [limits] and overrides only the fields it declares:
Activate a named set from the CLI:
Or from inside agent code using @agent("researcher") (Python) or #[nanny::agent("researcher")] (Rust).

[tools]

Per-tool configuration — [tools.<name>]

The tool name in [tools.<name>] must exactly match the function name used in the @tool decorator or #[nanny::tool] macro.

[observability]


[proxy]

Optional. Enables HTTP CONNECT proxy mode on the governance server. Proxy mode is active only when allowed_hosts is present and non-empty. An empty list — or omitting [proxy] entirely — disables proxy mode. See HTTP proxy mode for full details.

[managed]

Only read when [runtime] mode = "managed". Cloud connection config.

Supplying the API key

The key is read from the NANNY_API_KEY environment variable, so nanny.toml stays safe to commit:
Resolution order:
  1. NANNY_API_KEY — wins whenever it is set to a non-empty value.
  2. [managed] api_key in nanny.toml — fallback.
A blank or whitespace-only NANNY_API_KEY counts as unset (an unset CI secret usually surfaces as ""), so it falls through to the config file rather than authenticating with an empty string. If no key is found, Nanny prints a warning and keeps enforcing locally — it simply does not forward events to the cloud. Enforcement never depends on the network.
Your organization is derived from the API key on the cloud side, so there is no org_id field to configure.