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-rootsettings.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 themcp.servers map of a layer-root settings.yaml (merged across layers, tokens
interpolated). The per-agent mcp section is a selector over that catalog:
Worked example
Configuration
Layer resolution, the resource tier, flavour overlays, and
migrate-config.Permissions
The
permissions section in depth.