← Schema index / Config Reference

agents schema (1-150)

Canonical generated docsThis section is generated from caco config schema --json. The table below preserves the runtime field path, type, required/default markers, and canonical description for every value in this slice.

Agent presets, retry policy, and managed runtime defaults. Model availability is defined canonically under providers.*.models plus model_discovery; legacy agents.{claude,codex,pi}.models is removed.

Field pathTypeRequiredDefaultCanonical description
agentssectionoptionalAgent presets, retry policy, and managed runtime defaults. Model availability is defined canonically under providers.*.models plus model_discovery; legacy agents.{claude,codex,pi}.models is removed.
└ agents.presetslist[map]optionalReusable agent launch presets.
└ agents.presets.idstringrequiredStable preset identifier.
└ agents.presets.labelstringrequiredHuman-readable display label.
└ agents.presets.typestringoptionalLogical agent type.
└ agents.presets.commandstringrequiredShell command template for agent launch.
└ agents.presets.profilestring | list[string]optionalDefault profile selection.
└ agents.presets.readiness_timeout_secsu64optionalReadiness timeout override.
└ agents.presets.providerstringoptionalProvider for agent launches (e.g. 'openai', 'anthropic', 'github-copilot'). Used with model for provider+model selection.
└ agents.presets.modelstringoptionalModel to use for agent launches (e.g. 'gpt-5.4', 'claude-opus-4-6'). Passed as --model.
└ agents.presets.node_selectorstringoptionalSpawn placement: local_only, round_robin, or least_overloaded.
└ agents.presets.environmentmap[string, string]optionalNon-secret env defaults merged onto the managed launch.
└ agents.transient_computemapoptionalProvider-neutral transient per-agent compute scheduler.
└ agents.transient_compute.defaultstringoptionalDefault transient compute provider key.
└ agents.transient_compute.max_parallelu32optionalGlobal active transient job ceiling.
└ agents.transient_compute.max_runtime_secsu64optionalGlobal transient job runtime ceiling in seconds.
└ agents.transient_compute.launch_spec_ttl_secsu64optionalGlobal launch-spec validity window in seconds, capped by the runtime ceiling.
└ agents.transient_compute.max_retriesu32optionalGlobal retry-attempt ceiling recorded for transient jobs.
└ agents.transient_compute.reaper_grace_secsu64optionalGrace period before terminal transient jobs enter the first reaping phase.
└ agents.transient_compute.budget_cents_per_dayu32optionalDaily transient compute admission budget in cents.
└ agents.transient_compute.providersmap[string, map]optionalTransient compute providers keyed by name.
└ agents.transient_compute.providers.<provider>mapoptionalOne transient compute provider definition.
└ agents.transient_compute.providers.<provider>.typestringrequiredProvider implementation type. This slice supports 'fake' for deterministic tests.
└ agents.transient_compute.providers.<provider>.enabledbooloptionaltrueWhether this provider may accept new jobs.
└ agents.transient_compute.providers.<provider>.dynamic_node_templatestringoptionalDynamic-node template expected for joined transient runtimes.
└ agents.transient_compute.providers.<provider>.max_parallelu32optionalProvider-local active job ceiling.
└ agents.transient_compute.providers.<provider>.max_runtime_secsu64optionalProvider-local runtime ceiling in seconds.
└ agents.transient_compute.providers.<provider>.launch_spec_ttl_secsu64optionalProvider-local launch-spec validity window in seconds.
└ agents.transient_compute.providers.<provider>.max_retriesu32optionalProvider-local retry-attempt ceiling.
└ agents.transient_compute.providers.<provider>.skustringoptionalSelected provider SKU / VM size / node shape.
└ agents.transient_compute.providers.<provider>.allowed_skuslist[string]optionalAllow-list of provider SKU / VM size / node shape values.
└ agents.transient_compute.providers.<provider>.workload_profilestringoptionalSelected workload profile / pool / class.
└ agents.transient_compute.providers.<provider>.allowed_workload_profileslist[string]optionalAllow-list of workload profile / pool / class values.
└ agents.transient_compute.providers.<provider>.cost_per_minute_centsu32optionalEstimated cents per minute for budget admission.
└ agents.transient_compute.providers.<provider>.artifact_uristringoptionalArtifact destination hint for result-bundle import.
└ agents.flowmapoptionalFlow-created worker preferences.
└ agents.flow.defaultmapoptionalShared Flow launch defaults.
└ agents.flow.default.typestringoptionalDefault agent type.
└ agents.flow.default.effortstringoptionalRuntime reasoning effort; explicit requests win.
└ agents.flow.default.profilestring | list[string]optionalProfile or ordered list for composite composition.
└ agents.flow.default.presetstringoptionalDefault preset ID.
└ agents.flow.default.readiness_timeout_secsu64optional60Readiness sentinel timeout.
└ agents.flow.default.node_selectorstringoptionalSpawn placement: local_only, round_robin, or least_overloaded.
└ agents.flow.default.resourcesmapoptionalPer-agent resource ceilings.
└ agents.flow.default.resources.vcpuf64optionalLogical CPU budget (e.g. 2.0 for two cores).
└ agents.flow.default.resources.memorystringoptionalMemory ceiling (e.g. '8GiB', '512MiB').
└ agents.flow.default.modelstringoptionalModel to use for agent launches (e.g. 'opus', 'sonnet'). Passed as --model.
└ agents.flow.default.providerstringoptionalProvider for agent launches (e.g. 'openai', 'anthropic', 'google', 'github-copilot').
└ agents.flow.default.short_name_strategymapoptionalStrategy for generating a short human-friendly display name at agent creation time.
└ agents.flow.default.short_name_strategy.strategystringrequiredShort-name strategy: adj_noun, template or llm.
└ agents.flow.default.short_name_strategy.templatestringoptionalBounded display template for strategy = template. Placeholders: {adj}, {noun}, {profile}, {bead}, {node}, {n}. Names remain aliases, not identities.
└ agents.flow.default.short_name_strategy.llmstringoptionalTop-level llm alias used when strategy = llm.
└ agents.flow.default.checkout_typestringoptionalworktreeHow this project's agents materialize their working checkout: worktree (default; a git worktree sharing the canonical.git, fastest startup), clone, full, read_only_symlink, or pr_branch (an existing GitHub PR head branch; requires github_integration.enabled,). made worktree the default.
└ agents.flow.default.persistent_agent_idle_timeout_secsu64optional1800Auto-restart persistent agents after this much tool inactivity.
└ agents.flow.default.completed_retention_hoursu64optional72Delete acknowledged completed agent checkouts after N hours.
└ agents.flow.default.completed_retention_countu32optional20Keep at most N acknowledged completed agent checkouts per project, pruning oldest first.
└ agents.flow.default.completed_retention_bytesstringoptional50GBHard cap on acknowledged completed checkout disk usage for this project.
└ agents.flow.default.pi_extra_config_dirslist[string]optionalExtra config directories merged into managed Pi workspaces.
└ agents.flow.default.override_pi_agent_dirstringoptionalRead-only operator-owned Pi agent directory passed directly to managed Pi launches instead of materializing .pi-agent config.
└ agents.flow.default.warmup_cache_injectionmapoptionalDisabled-by-default advisory warmup-cache prompt injection settings for spawned agents.
└ agents.flow.default.warmup_cache_injection.enabledbooloptionalfalseEnable advisory warmup-cache prompt injection.
└ agents.flow.default.warmup_cache_injection.max_age_secondsi64optional86400Maximum accepted warmup summary age before skipping injection.
└ agents.flow.default.warmup_cache_injection.max_charsusizeoptional2048Maximum characters injected from the warmup summary.
└ agents.flow.default.pane_error_detectionbooloptionalfalseEnable tmux pane content scanning for Pi agent fatal error detection.
└ agents.flow.default.eligible_nodeslist[string]optionalAllowlist of node names for round_robin/least_overloaded placement. Manual --node overrides bypass this.
└ agents.flow.default.friend_projectslist[friend_project]optionalAgent-default friend project overlays inherited by agents in this project.
└ agents.flow.default.friend_projects.projectstringrequiredTarget project name.
└ agents.flow.default.friend_projects.branchstringoptionalTarget branch; omitted means the friend project's default_branch. Mutually exclusive with revision.
└ agents.flow.default.friend_projects.revisionstringoptionalPinned git revision. Mutually exclusive with branch.
└ agents.flow.default.friend_projects.permissionslist[string]optional[checkout_read]Granted operations: checkout_read, checkout_write, beads_read, beads_create, beads_update, beads_claim, beads_close, beads_dispatch.
└ agents.flow.default.friend_projects.materializebooloptionalfalseMaterialize a real friend checkout cloned from the friend project's remote; omitted means a virtual friend with no checkout.
└ agents.flow.default.friend_projects.enabledbooloptionaltrueSet false in a narrower layer to disable an inherited friend.
└ agents.heartbeatmapoptionalGlobal managed-agent heartbeat defaults and per-agent overrides. Delivery remains local-daemon owned.
└ agents.heartbeat.enabledbooloptionalfalseEnable local daemon-owned managed-agent heartbeat delivery for this scope. Defaults to false for safe rollout.
└ agents.heartbeat.selectorstringoptionalpersistentAgent selector for this scope: all, persistent, workers, or none.
└ agents.heartbeat.interval_secsu64optional300Base heartbeat cadence in seconds.
└ agents.heartbeat.jitter_secsu64optional0Optional jitter in seconds; must not exceed interval_secs.
└ agents.heartbeat.max_backoff_secsu64optional300Optional delivery-failure backoff ceiling in seconds; must be at least interval_secs.
└ agents.heartbeat.allow_runtime_opt_outbooloptionaltrueAllow runtime/profile code to decline heartbeats even when config enables them.
└ agents.heartbeat.conditionslist[string]optionalOptional OR timer gates: claimed_beads (owned unfinished claims), unmerged_prs (linked open PRs), pending_inbox (visible unread messages). Inherits when omitted; [] is unconditional. Runtime on never bypasses conditions.
└ agents.heartbeat.overridesmap[string, map]optionalPer-agent overrides keyed by persistent declaration name, composed profile, or concrete agent id.
└ agents.heartbeat.overrides.<agent>mapoptionalOne per-agent heartbeat override; inherits unspecified fields from the surrounding scope.
└ agents.heartbeat.overrides.<agent>.enabledbooloptionalEnable or disable heartbeat for this agent.
└ agents.heartbeat.overrides.<agent>.selectorstringoptionalOptional selector override: all, persistent, workers, or none.
└ agents.heartbeat.overrides.<agent>.interval_secsu64optionalOverride base heartbeat cadence in seconds.
└ agents.heartbeat.overrides.<agent>.jitter_secsu64optionalOverride jitter in seconds; must not exceed interval_secs when both are set.
└ agents.heartbeat.overrides.<agent>.max_backoff_secsu64optionalOverride delivery-failure backoff ceiling in seconds.
└ agents.heartbeat.overrides.<agent>.allow_runtime_opt_outbooloptionalOverride runtime opt-out permission for this agent.
└ agents.heartbeat.overrides.<agent>.conditionslist[string]optionalReplace inherited OR timer gates (claimed_beads, unmerged_prs, pending_inbox); [] restores unconditional delivery.
└ agents.message_deliverymapoptionalGlobal managed-agent message-delivery cadence defaults and per-agent overrides (wake vs batch). Delivery remains local-daemon owned.
└ agents.message_delivery.enabledbooloptionalfalseEnable local daemon-owned managed-agent message-delivery batching for this scope. Defaults to false (immediate wake) for safe rollout.
└ agents.message_delivery.selectorstringoptionalallAgent selector for this scope: all, persistent, workers, or none.
└ agents.message_delivery.default_modestringoptionalimmediateWake mode for a message with no explicit wake flag: immediate (wake now) or batch (defer to next heartbeat).
└ agents.message_delivery.always_wake_kindslist[string]optionalMessage kinds that always wake regardless of mode (e.g. lifecycle, system).
└ agents.message_delivery.allow_runtime_opt_outbooloptionaltrueAllow runtime/profile code to decline batching even when config enables it.
└ agents.message_delivery.batch_flush_interval_secsu64optionalOptional shorter dedicated cadence in seconds for surfacing deferred (batched) messages via a coalesced summary wake, instead of waiting for the full heartbeat. A flush with no pending messages costs zero model turns.
└ agents.message_delivery.direct_message_wakebooloptionaltrueOperator- or agent-authored direct messages the batch policy would defer instead force one coalesced wake carrying them inline, including for idle, dormant and queue-parked recipients; paused or starting recipients are held until live. Automated notices, broadcast batching and heartbeat intervals are unchanged. false restores pure batching of direct messages.
└ agents.message_delivery.overridesmap[string, map]optionalPer-agent overrides keyed by persistent declaration name or concrete agent id.
└ agents.message_delivery.overrides.<agent>mapoptionalOne per-agent message-delivery override; inherits unspecified fields from the surrounding scope.
└ agents.message_delivery.overrides.<agent>.enabledbooloptionalEnable or disable message-delivery batching for this agent.
└ agents.message_delivery.overrides.<agent>.selectorstringoptionalOptional selector override: all, persistent, workers, or none.
└ agents.message_delivery.overrides.<agent>.default_modestringoptionalOverride wake mode: immediate or batch.
└ agents.message_delivery.overrides.<agent>.always_wake_kindslist[string]optionalOverride always-wake message kinds.
└ agents.message_delivery.overrides.<agent>.allow_runtime_opt_outbooloptionalOverride runtime opt-out permission for this agent.
└ agents.message_delivery.overrides.<agent>.batch_flush_interval_secsu64optionalOverride the dedicated batch-flush cadence in seconds.
└ agents.message_delivery.overrides.<agent>.direct_message_wakebooloptionalOverride the direct-message wake for this agent.
└ agents.on_demandmapoptionalGlobal runtime policy for opt-in pi-on-demand / pico-on-demand agents.
└ agents.on_demand.idle_timeout_secsu64optional300Seconds without tool activity before an on-demand Pi-family runtime is stopped and returns to dormant.
└ agents.on_demand.max_wake_concurrencyu32optional1Maximum simultaneous cold wakes on one daemon (reserved for scheduler admission follow-up).
└ agents.on_demand.warm_pool_sizeu32optional0Pre-warmed on-demand runtimes to retain (reserved for warm-pool follow-up).
└ agents.paratenicmapoptionalGlobal fallback Paratenic AHP client settings; node-local agents.paratenic wins.
└ agents.paratenic.apply_to_pibooloptionalfalseRoute ordinary managed Pi delivery through an exact schema-v2 Paratenic binding first, with normal Pi fallback when evidence is absent or stale.
└ agents.paratenic.urlstringrequiredws://127.0.0.1:7788/ahpParatenic AHP WebSocket endpoint including /ahp.
└ agents.paratenic.token_filestringrequired~/.config/paratenic/tokenOwner-private Paratenic bearer-token file.
└ agents.paratenic.backend_socketstringrequired~/.local/state/paratenic/backend.sockOwner-private Paratenic backend registration socket.
└ agents.paratenic.extension_pathstringrequiredReviewed Paratenic Pi extension loaded by managed Pi.
└ agents.paratenic.registration_timeout_secsu64optional30Legacy registration timeout exported for runtime compatibility; not a launch or resume gate.
└ agents.paratenic.dispatch_timeout_secsu64optional30Maximum AHP dispatch/acceptance wait.
└ agents.pi_daemonmapoptionalGlobal fallback standalone Pi SDK host client settings; node-local agents.pi_daemon wins.
└ agents.pi_daemon.socket_pathstringrequiredOwner-local Unix socket exposed by the separately supervised standalone pi-daemon host.
└ agents.pi_daemon.binarystringoptionalpi-daemonStandalone pi-daemon executable path/name.
└ agents.pi_daemon.state_dirstringoptional$CACOPHONY_DIR/pi-daemonStandalone host state directory.
└ agents.pi_daemon.agent_dirstringoptionalPi auth/model directory; omitted uses Pi's default.
└ agents.pi_daemon.allow_rootstringoptional$CACOPHONY_DIR/agentsCanonical workload root allowed by the standalone host.
└ agents.pi_daemon.tool_adapter_dirstringoptionalOwner-private mode-0700 directory for Cacophony per-session neutral filesystem adapter sockets; used only by host_adapter mode.
└ agents.pi_daemon.session_modeenumoptionalconfigured_session when api.enabled, otherwise host_adapterLogical-session launch boundary: configured_session uses the authenticated typed Session API; host_adapter retains filesystem-only protocol-v2 compatibility/isolation.
└ agents.pi_daemon.max_line_bytesusizeoptional1048576Maximum NDJSON command/response bytes accepted by the Cacophony client.
└ agents.pi_daemon.max_events_per_requestusizeoptional4096Maximum matching events retained while awaiting one terminal response.
└ agents.pi_daemon.max_sessionsu32optional128Maximum resident logical SDK sessions in the standalone host.
└ agents.pi_daemon.max_concurrent_turnsu32optional4Maximum concurrent model turns in the standalone host.
└ agents.pi_daemon.max_session_queue_depthu32optional32Maximum queued turns per logical session; zero allows only the active turn.
└ agents.pi_daemon.max_connectionsu32optional64Maximum Unix control connections in the standalone host, including wakes awaiting settlement.
└ agents.pi_daemon.max_api_connectionsu32optional64Maximum HTTP and upgraded WebSocket connections, independent of Unix connections.
└ agents.pi_daemon.max_rpc_hubsu32optional32Maximum concurrently attached RPC session generations.
└ agents.pi_daemon.max_rpc_replay_bytesu64optional2097152Replay byte budget per RPC hub.
└ agents.pi_daemon.max_rpc_total_replay_bytesu64optional67108864Aggregate replay budget; must cover max_rpc_hubs multiplied by max_rpc_replay_bytes.
└ agents.pi_daemon.max_residency_leasesu32optional256Maximum resident-runtime leases across attached clients.
└ agents.pi_daemon.recovery_open_timeout_msu64optional30000Startup recovery budget per retained runtime in milliseconds.
└ agents.pi_daemon.recovery_total_timeout_msu64optional120000Total startup runtime recovery budget in milliseconds.
└ agents.pi_daemon.node_max_old_space_size_mbu32optionalV8 old-space MiB for the Pi-Daemon service launch, not sibling services; not an RSS reservation or CPU quota. Node child tools may inherit NODE_OPTIONS.
└ agents.pi_daemon.idle_session_ttl_msu64optional1800000Idle SDK-session eviction interval in milliseconds; zero disables eviction.
└ agents.pi_daemon.apimapoptionalAuthenticated HTTP API listener settings; omission preserves socket-only launch byte-for-byte.
└ agents.pi_daemon.api.enabledboolrequiredExplicitly enable or disable the authenticated HTTP API listener.
└ agents.pi_daemon.api.bindstringoptionalAPI listener address; non-loopback plaintext also requires allow_insecure_http=true.
└ agents.pi_daemon.api.portu16optionalAPI listener port; required when enabled and distinct from the embedded Dashboard port.
└ agents.pi_daemon.api.token_filestringoptional$CACOPHONY_DIR/pi-daemon/api-tokenOwner-private bearer-token file reference; bearer bytes are forbidden in config.
└ agents.pi_daemon.api.allow_insecure_httpbooloptionalfalseExplicit acknowledgement required for non-loopback plaintext API binding.
└ agents.pi_daemon.webmapoptionalEmbedded browser Dashboard settings in the same supervised pi-daemon process.
└ agents.pi_daemon.web.enabledboolrequiredExplicitly enable or disable the embedded Dashboard in the supervised host process.
└ agents.pi_daemon.web.bindstringoptionalEmbedded Dashboard listener address.