← Schema index / Config Reference
dynamic_nodes 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.Dynamic node templates — joinable node classes whose instances are not listed statically.
| Field path | Type | Required | Default | Canonical description |
|---|---|---|---|---|
dynamic_nodes | section | optional | Dynamic node templates — joinable node classes whose instances are not listed statically. | |
└ dynamic_nodes.<template-name> | map | optional | A named dynamic node template. | |
└ dynamic_nodes.<template-name>.name_regex | string | required | Regex pattern that concrete node names must match. | |
└ dynamic_nodes.<template-name>.transport | string | required | Transport mode: direct_mesh or relay. | |
└ dynamic_nodes.<template-name>.bootstrap | map | required | Bootstrap configuration for joining. | |
└ dynamic_nodes.<template-name>.bootstrap.token_env | string | optional | Env var name containing the bearer token for join auth (mutually exclusive with token_file). | |
└ dynamic_nodes.<template-name>.bootstrap.token_file | string | optional | File path containing the bearer token for join auth (mutually exclusive with token_env). | |
└ dynamic_nodes.<template-name>.bootstrap.lease_ttl | string | required | Lease TTL duration string (e.g. '2m', '30s'). | |
└ dynamic_nodes.<template-name>.services | map | required | Service listeners for this template. | |
└ dynamic_nodes.<template-name>.services.caco-daemon | map | required | Daemon listener. | |
└ dynamic_nodes.<template-name>.services.caco-daemon.port | u16 | required | Local service port. | |
└ dynamic_nodes.<template-name>.services.caco-daemon.cluster_port | u16 | optional | port + 1000 | Cluster-facing port. |
└ dynamic_nodes.<template-name>.services.caco-daemon.public_cluster_port | u16 | optional | cluster_port | Externally advertised cluster port when it differs from the local bind port. |
└ dynamic_nodes.<template-name>.services.caco-daemon.bind_host | string | optional | node.host | Explicit cluster-listener bind host when it differs from node.host; literal 'tailnet' is temporarily rejected after pending a live canary with rollback. |
└ dynamic_nodes.<template-name>.services.caco-daemon.local_bind_host | string | optional | 127.0.0.1 | Explicit local bearer-API bind host; adds a dual-listener candidate, but literal 'tailnet' remains rejected pending the one-node canary with rollback. |
└ dynamic_nodes.<template-name>.services.caco-daemon.sidecar | u16 | optional | Sidecar port. | |
└ dynamic_nodes.<template-name>.services.caco-daemon.sidecar_cluster_port | u16 | optional | sidecar + 1000 | Sidecar cluster port. |
└ dynamic_nodes.<template-name>.ssh | map | optional | Optional SSH transport metadata for live dynamic nodes. | |
└ dynamic_nodes.<template-name>.ssh.mode | string | optional | openssh | SSH transport mode: openssh/default or tailscale. |
└ dynamic_nodes.<template-name>.ssh.username | string | optional | SSH username. | |
└ dynamic_nodes.<template-name>.ssh.port | u16 | optional | 22 | SSH port (OpenSSH mode). |
└ dynamic_nodes.<template-name>.ssh.key | map | optional | SSH identity key path for OpenSSH mode. | |
└ dynamic_nodes.<template-name>.ssh.key.path | string | required | Path to the SSH identity key. | |
└ dynamic_nodes.<template-name>.relay | map | optional | Relay-mode config (required when transport is relay). | |
└ dynamic_nodes.<template-name>.relay.peers | list[string] | optional | Ordered list of direct-mesh node names eligible as relay peers. | |
└ dynamic_nodes.<template-name>.defaults | map | optional | Legacy node-scoped defaults (prefer 'node' instead). | |
└ dynamic_nodes.<template-name>.node | map | optional | Reusable node-scoped config (replaces 'defaults'). | |
└ dynamic_nodes.<template-name>.node.role | string | optional | daemon_only | Capability role for template nodes. |
└ dynamic_nodes.<template-name>.node.concurrency | map | optional | Agent spawn concurrency ceilings. | |
└ dynamic_nodes.<template-name>.node.concurrency.global | map | optional | Global ceiling across all profiles. | |
└ dynamic_nodes.<template-name>.node.concurrency.global.max_parallel | u32 | required | Maximum live non-terminal agents. | |
└ dynamic_nodes.<template-name>.node.concurrency.profile | map[string, map] | optional | Per-profile ceilings keyed by profile name. | |
└ dynamic_nodes.<template-name>.node.concurrency.profile.max_parallel | u32 | required | Maximum live non-terminal agents for this profile. | |
└ dynamic_nodes.<template-name>.node.tests | map | optional | Queued test ceilings. | |
└ dynamic_nodes.<template-name>.node.tests.max_parallel | u32 | optional | 1 | Maximum concurrent test jobs. |
└ dynamic_nodes.<template-name>.node.builds | map | optional | Queued build ceilings and managed-worker validation policy. | |
└ dynamic_nodes.<template-name>.node.builds.max_parallel | u32 | optional | 1 | Maximum concurrent build jobs. |
└ dynamic_nodes.<template-name>.node.builds.node_heavy_max_parallel | u32 | optional | 2 | Shared per-node ceiling on concurrent heavy (cargo/nix) builds across the test AND build queues, incl. queued release/darwin self-builds. Env CACO_NODE_HEAVY_MAX_PARALLEL overrides; 0 disables. |
└ dynamic_nodes.<template-name>.node.builds.node_heavy_min_available_memory_mb | u32 | optional | 0 | Host available-memory floor (MiB) below which new heavy ops are refused admission even if a count slot is free (memory-aware admission; covers cross-project load via MemAvailable). Env CACO_NODE_HEAVY_MIN_AVAILABLE_MB overrides; 0 (default) disables -- opt-in, since no fixed MiB default is fleet-safe. Recommended per-node: ~2-3G cargo-only nodes, ~4-6G darwin/swift nodes like ms-mac. |
└ dynamic_nodes.<template-name>.node.builds.node_heavy_min_available_memory_pct | u32 | optional | 0 | Host available-memory floor as a PERCENT of total RAM (0-100); when >0 the floor is max(2048 MiB, pct% total RAM), composing with the fixed *_mb floor (larger wins) -- auto-scaling so one setting is safe across small+big nodes. Env CACO_NODE_HEAVY_MIN_AVAILABLE_PCT overrides; 0 (default) disables (opt-in; ~15 a reasonable auto-enable value). |
└ dynamic_nodes.<template-name>.node.builds.source_only_workers | bool | optional | false | Refuse compiler/build work from managed-agent direct shells and daemon queues on this node; node/operator calls remain available. |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions | list[map] | optional | Exact expiring managed-agent exceptions to source-only mode. | |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.agent | string | required | Exact agent ID or stable persistent name. | |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.command_classes | list[string] | required | Allowed classes: cargo, rustc, nix, caco_test, caco_build, just, make, gradle, emulator, test_runner, platform_build. | |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.expires_at | RFC3339 timestamp | required | Exception expiry. | |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.max_timeout_secs | u64 | required | Maximum required timeout wrapper in seconds. | |
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.reason | string | required | Non-empty operator/controller audit reason. | |
└ dynamic_nodes.<template-name>.node.agents | map | optional | Node-scoped persistent agents. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name> | map | optional | Persistent agent declaration. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.name | string | optional | Stable human-readable agent name (alphanumeric + hyphens, max 32 chars). | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.profile | string | list[string] | required | Profile name or ordered list for composite composition. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.preset | string | optional | Preset ID to launch with. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.ahp_host | string | optional | For `ahp` agents: the AHP host (agents.ahp_hosts) the session lives on; optional when the node has exactly one. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.type | string | optional | Explicit agent type when not implied by preset. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.environment | map[string, string] | optional | Non-secret declaration overrides applied after project, preset, and profile env. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.auto_start | bool | optional | true | Whether daemon auto-converges toward a live instance. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.restart | string | optional | failure | Restart policy: 'failure' (default), 'always', or 'never'. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.restart_backoff_secs | u32 | optional | 30 | Minimum backoff between failed restart attempts. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.nodes | list[string] | optional | Node allowlist (project-scoped only). Omit for all nodes. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence | map | optional | Controller idle polling timers. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.reconcile_interval_secs | u64 | optional | 120 | Idle reconciliation cadence. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.inbox_poll_interval_secs | u64 | optional | 120 | Inbox poll cadence. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.jitter_secs | u64 | optional | 30 | Max random jitter to prevent thundering herd. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.claimed_heartbeat_interval_secs | u64 | optional | 1800 | Claimed-bead heartbeat cadence (PostToolUse hook reminds agents of active claims + goal; 0 disables).. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.wait | map | optional | Controller wait mode configuration. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.wait.inbox_delay_secs | u64 | optional | 60 | Minimum delay before inbox wait reads state. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.wait.choice_timeout_secs | u64 | optional | Timeout for choice wait mode (null = indefinite). | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.model | string | optional | Model to use for this persistent agent (e.g. 'opus', 'sonnet'). Passed as --model. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.provider | string | optional | Provider to use for this persistent agent (e.g. 'openai', 'anthropic', 'google'). | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.mcp_policy | string | optional | profile | Final declaration-scoped MCP policy: profile (default) or disabled. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy | map | optional | Strategy for generating a short human-friendly display name at agent creation time. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy.strategy | string | required | Short-name strategy: adj_noun, template or llm. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy.template | string | optional | Bounded display template for strategy = template. Placeholders: {adj}, {noun}, {profile}, {bead}, {node}, {n}. Names remain aliases, not identities. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy.llm | string | optional | Top-level llm alias used when strategy = llm. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.checkout_type | string | optional | worktree | How the agent's working checkout is materialized: worktree (default; a git worktree sharing the canonical.git, fastest startup), clone (a shared clone), full (a 1st-party clone of the real remote), read_only_symlink (observers), or pr_branch (a full-clone whose working branch is an existing GitHub PR head; requires github_integration.enabled,). made worktree the default. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.confirm_before_spawn | bool | optional | false | Require operator approval through caco choices before spawning this persistent agent. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.confirm_before_spawn_timeout_secs | u64 | optional | 300 | Timeout in seconds for the operator confirmation prompt. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.confirm_before_spawn_auto_approve | bool | optional | false | Auto-approve the spawn when the confirmation timeout expires. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.all_projects | bool | optional | false | Allow this persistent agent to access all configured projects instead of only its bound project. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.goal | string | optional | Default goal/task description for managed launches via this declaration; used when --goal is not passed. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedule | map | optional | Schedule configuration for periodic persistent agent launches. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedule.cron | string | required | Standard 5-field cron expression. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedule.launch_mode | string | optional | restart-or-recreate | Launch mode: recreate, restart, or restart-or-recreate. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.pane_error_detection | bool | optional | false | Enable tmux pane content scanning for fatal error detection. Overrides agent_defaults. Default false. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.project | string | optional | Explicit project binding for node-scoped persistent agents. When set, this project is used for checkout, bead visibility, and profile resolution instead of the first configured project. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.depends_on_node | string | optional | Cross-node reachability dependency: defer launch until the named remote node is reachable per PeerReachabilityMap. When omitted, no gate is applied. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects | list[friend_project] | optional | Per-declaration friend project overlay; entries can narrow or disable inherited friends. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.project | string | required | Target project name. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.branch | string | optional | Target branch; omitted means the friend project's default_branch. Mutually exclusive with revision. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.revision | string | optional | Pinned git revision. Mutually exclusive with branch. | |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.permissions | list[string] | optional | [checkout_read] | Granted operations: checkout_read, checkout_write, beads_read, beads_create, beads_update, beads_claim, beads_close, beads_dispatch. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.materialize | bool | optional | false | Materialize a real friend checkout cloned from the friend project's remote; omitted means a virtual friend with no checkout. |
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.enabled | bool | optional | true | Set false in a narrower layer to disable an inherited friend. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat | map | optional | Node-local managed-agent heartbeat defaults and per-agent overrides. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.enabled | bool | optional | false | Enable local daemon-owned managed-agent heartbeat delivery for this scope. Defaults to false for safe rollout. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.selector | string | optional | persistent | Agent selector for this scope: all, persistent, workers, or none. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.interval_secs | u64 | optional | 300 | Base heartbeat cadence in seconds. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.jitter_secs | u64 | optional | 0 | Optional jitter in seconds; must not exceed interval_secs. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.max_backoff_secs | u64 | optional | 300 | Optional delivery-failure backoff ceiling in seconds; must be at least interval_secs. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.allow_runtime_opt_out | bool | optional | true | Allow runtime/profile code to decline heartbeats even when config enables them. |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.conditions | list[string] | optional | Optional 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. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides | map[string, map] | optional | Per-agent overrides keyed by persistent declaration name, composed profile, or concrete agent id. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent> | map | optional | One per-agent heartbeat override; inherits unspecified fields from the surrounding scope. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.enabled | bool | optional | Enable or disable heartbeat for this agent. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.selector | string | optional | Optional selector override: all, persistent, workers, or none. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.interval_secs | u64 | optional | Override base heartbeat cadence in seconds. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.jitter_secs | u64 | optional | Override jitter in seconds; must not exceed interval_secs when both are set. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.max_backoff_secs | u64 | optional | Override delivery-failure backoff ceiling in seconds. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.allow_runtime_opt_out | bool | optional | Override runtime opt-out permission for this agent. | |
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.conditions | list[string] | optional | Replace inherited OR timer gates (claimed_beads, unmerged_prs, pending_inbox); [] restores unconditional delivery. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery | map | optional | Node-local managed-agent message-delivery cadence defaults and per-agent overrides (wake vs batch). | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.enabled | bool | optional | false | Enable local daemon-owned managed-agent message-delivery batching for this scope. Defaults to false (immediate wake) for safe rollout. |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.selector | string | optional | all | Agent selector for this scope: all, persistent, workers, or none. |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.default_mode | string | optional | immediate | Wake mode for a message with no explicit wake flag: immediate (wake now) or batch (defer to next heartbeat). |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.always_wake_kinds | list[string] | optional | Message kinds that always wake regardless of mode (e.g. lifecycle, system). | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.allow_runtime_opt_out | bool | optional | true | Allow runtime/profile code to decline batching even when config enables it. |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.batch_flush_interval_secs | u64 | optional | Optional 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. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.direct_message_wake | bool | optional | true | Operator- 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. |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides | map[string, map] | optional | Per-agent overrides keyed by persistent declaration name or concrete agent id. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent> | map | optional | One per-agent message-delivery override; inherits unspecified fields from the surrounding scope. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.enabled | bool | optional | Enable or disable message-delivery batching for this agent. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.selector | string | optional | Optional selector override: all, persistent, workers, or none. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.default_mode | string | optional | Override wake mode: immediate or batch. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.always_wake_kinds | list[string] | optional | Override always-wake message kinds. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.allow_runtime_opt_out | bool | optional | Override runtime opt-out permission for this agent. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.batch_flush_interval_secs | u64 | optional | Override the dedicated batch-flush cadence in seconds. | |
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.direct_message_wake | bool | optional | Override the direct-message wake for this agent. | |
└ dynamic_nodes.<template-name>.node.agents.paratenic | map | optional | Node-local Paratenic AHP client settings for pi-paratenic agents. | |
└ dynamic_nodes.<template-name>.node.agents.paratenic.apply_to_pi | bool | optional | false | Route ordinary managed Pi delivery through an exact schema-v2 Paratenic binding first, with normal Pi fallback when evidence is absent or stale. |
└ dynamic_nodes.<template-name>.node.agents.paratenic.url | string | required | ws://127.0.0.1:7788/ahp | Paratenic AHP WebSocket endpoint including /ahp. |
└ dynamic_nodes.<template-name>.node.agents.paratenic.token_file | string | required | ~/.config/paratenic/token | Owner-private Paratenic bearer-token file. |
└ dynamic_nodes.<template-name>.node.agents.paratenic.backend_socket | string | required | ~/.local/state/paratenic/backend.sock | Owner-private Paratenic backend registration socket. |
└ dynamic_nodes.<template-name>.node.agents.paratenic.extension_path | string | required | Reviewed Paratenic Pi extension loaded by managed Pi. | |
└ dynamic_nodes.<template-name>.node.agents.paratenic.registration_timeout_secs | u64 | optional | 30 | Legacy registration timeout exported for runtime compatibility; not a launch or resume gate. |
└ dynamic_nodes.<template-name>.node.agents.paratenic.dispatch_timeout_secs | u64 | optional | 30 | Maximum AHP dispatch/acceptance wait. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon | map | optional | Node-local standalone Pi SDK host client settings for pi-daemon logical agents (pico-daemon is a migration alias). | |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.socket_path | string | required | Owner-local Unix socket exposed by the separately supervised standalone pi-daemon host. | |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.binary | string | optional | pi-daemon | Standalone pi-daemon executable path/name. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.state_dir | string | optional | $CACOPHONY_DIR/pi-daemon | Standalone host state directory. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.agent_dir | string | optional | Pi auth/model directory; omitted uses Pi's default. | |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.allow_root | string | optional | $CACOPHONY_DIR/agents | Canonical workload root allowed by the standalone host. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.tool_adapter_dir | string | optional | Owner-private mode-0700 directory for Cacophony per-session neutral filesystem adapter sockets; used only by host_adapter mode. | |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.session_mode | enum | optional | configured_session when api.enabled, otherwise host_adapter | Logical-session launch boundary: configured_session uses the authenticated typed Session API; host_adapter retains filesystem-only protocol-v2 compatibility/isolation. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_line_bytes | usize | optional | 1048576 | Maximum NDJSON command/response bytes accepted by the Cacophony client. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_events_per_request | usize | optional | 4096 | Maximum matching events retained while awaiting one terminal response. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_sessions | u32 | optional | 128 | Maximum resident logical SDK sessions in the standalone host. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_concurrent_turns | u32 | optional | 4 | Maximum concurrent model turns in the standalone host. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_session_queue_depth | u32 | optional | 32 | Maximum queued turns per logical session; zero allows only the active turn. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_connections | u32 | optional | 64 | Maximum Unix control connections in the standalone host, including wakes awaiting settlement. |
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_api_connections | u32 | optional | 64 | Maximum HTTP and upgraded WebSocket connections, independent of Unix connections. |