Skip to main content
An agent is configured by one agents/<id>/settings.yaml with an optional section per concern. Sections resolve across <project>/.ziro/, then ~/.ziro/, then the bundled package, deep-merged most-specific-last. A missing section falls back to built-in defaults. Legacy split files (shell_policy.yaml, …) still resolve at each layer as an alternative to the matching section; see the configuration guide.

Per-agent sections

The section key is the old file name minus its _policy / _servers / _config suffix. Two rules worth knowing: an agent no layer supplies a plugins section for surfaces zero plugins (absence is opt-out, unlike every other section), and a malformed plugins section fails closed rather than falling back to permissive.

Top-level (app / instance) tier

Host-resource knobs live in a layer-root settings.yaml, not on an agent, because a thread can switch agents mid-conversation. Where a knob is unset here it falls back to the matching per-agent section. resources are ceilings (a project may lower, never raise, and an untrusted project is ignored). security.fs_deny_paths is the symmetric floor: it only ever tightens what the filesystem tools refuse.

Shared MCP catalog

Server definitions are a workspace resource, so they live once in the mcp.servers map of a layer-root settings.yaml (merged across layers, tokens interpolated). The per-agent mcp section is a selector over that catalog:
An untrusted project’s catalog is ignored wholesale. See MCP.

Worked example

Configuration

Layer resolution, the resource tier, flavour overlays, and migrate-config.

Permissions

The permissions section in depth.