← 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 pathTypeRequiredDefaultCanonical description
dynamic_nodessectionoptionalDynamic node templates — joinable node classes whose instances are not listed statically.
└ dynamic_nodes.<template-name>mapoptionalA named dynamic node template.
└ dynamic_nodes.<template-name>.name_regexstringrequiredRegex pattern that concrete node names must match.
└ dynamic_nodes.<template-name>.transportstringrequiredTransport mode: direct_mesh or relay.
└ dynamic_nodes.<template-name>.bootstrapmaprequiredBootstrap configuration for joining.
└ dynamic_nodes.<template-name>.bootstrap.token_envstringoptionalEnv var name containing the bearer token for join auth (mutually exclusive with token_file).
└ dynamic_nodes.<template-name>.bootstrap.token_filestringoptionalFile path containing the bearer token for join auth (mutually exclusive with token_env).
└ dynamic_nodes.<template-name>.bootstrap.lease_ttlstringrequiredLease TTL duration string (e.g. '2m', '30s').
└ dynamic_nodes.<template-name>.servicesmaprequiredService listeners for this template.
└ dynamic_nodes.<template-name>.services.caco-daemonmaprequiredDaemon listener.
└ dynamic_nodes.<template-name>.services.caco-daemon.portu16requiredLocal service port.
└ dynamic_nodes.<template-name>.services.caco-daemon.cluster_portu16optionalport + 1000Cluster-facing port.
└ dynamic_nodes.<template-name>.services.caco-daemon.public_cluster_portu16optionalcluster_portExternally advertised cluster port when it differs from the local bind port.
└ dynamic_nodes.<template-name>.services.caco-daemon.bind_hoststringoptionalnode.hostExplicit 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_hoststringoptional127.0.0.1Explicit 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.sidecaru16optionalSidecar port.
└ dynamic_nodes.<template-name>.services.caco-daemon.sidecar_cluster_portu16optionalsidecar + 1000Sidecar cluster port.
└ dynamic_nodes.<template-name>.sshmapoptionalOptional SSH transport metadata for live dynamic nodes.
└ dynamic_nodes.<template-name>.ssh.modestringoptionalopensshSSH transport mode: openssh/default or tailscale.
└ dynamic_nodes.<template-name>.ssh.usernamestringoptionalSSH username.
└ dynamic_nodes.<template-name>.ssh.portu16optional22SSH port (OpenSSH mode).
└ dynamic_nodes.<template-name>.ssh.keymapoptionalSSH identity key path for OpenSSH mode.
└ dynamic_nodes.<template-name>.ssh.key.pathstringrequiredPath to the SSH identity key.
└ dynamic_nodes.<template-name>.relaymapoptionalRelay-mode config (required when transport is relay).
└ dynamic_nodes.<template-name>.relay.peerslist[string]optionalOrdered list of direct-mesh node names eligible as relay peers.
└ dynamic_nodes.<template-name>.defaultsmapoptionalLegacy node-scoped defaults (prefer 'node' instead).
└ dynamic_nodes.<template-name>.nodemapoptionalReusable node-scoped config (replaces 'defaults').
└ dynamic_nodes.<template-name>.node.rolestringoptionaldaemon_onlyCapability role for template nodes.
└ dynamic_nodes.<template-name>.node.concurrencymapoptionalAgent spawn concurrency ceilings.
└ dynamic_nodes.<template-name>.node.concurrency.globalmapoptionalGlobal ceiling across all profiles.
└ dynamic_nodes.<template-name>.node.concurrency.global.max_parallelu32requiredMaximum live non-terminal agents.
└ dynamic_nodes.<template-name>.node.concurrency.profilemap[string, map]optionalPer-profile ceilings keyed by profile name.
└ dynamic_nodes.<template-name>.node.concurrency.profile.max_parallelu32requiredMaximum live non-terminal agents for this profile.
└ dynamic_nodes.<template-name>.node.testsmapoptionalQueued test ceilings.
└ dynamic_nodes.<template-name>.node.tests.max_parallelu32optional1Maximum concurrent test jobs.
└ dynamic_nodes.<template-name>.node.buildsmapoptionalQueued build ceilings and managed-worker validation policy.
└ dynamic_nodes.<template-name>.node.builds.max_parallelu32optional1Maximum concurrent build jobs.
└ dynamic_nodes.<template-name>.node.builds.node_heavy_max_parallelu32optional2Shared 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_mbu32optional0Host 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_pctu32optional0Host 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_workersbooloptionalfalseRefuse 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_exceptionslist[map]optionalExact expiring managed-agent exceptions to source-only mode.
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.agentstringrequiredExact agent ID or stable persistent name.
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.command_classeslist[string]requiredAllowed 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_atRFC3339 timestamprequiredException expiry.
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.max_timeout_secsu64requiredMaximum required timeout wrapper in seconds.
└ dynamic_nodes.<template-name>.node.builds.source_only_exceptions.reasonstringrequiredNon-empty operator/controller audit reason.
└ dynamic_nodes.<template-name>.node.agentsmapoptionalNode-scoped persistent agents.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>mapoptionalPersistent agent declaration.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.namestringoptionalStable human-readable agent name (alphanumeric + hyphens, max 32 chars).
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.profilestring | list[string]requiredProfile name or ordered list for composite composition.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.presetstringoptionalPreset ID to launch with.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.ahp_hoststringoptionalFor `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>.typestringoptionalExplicit agent type when not implied by preset.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.environmentmap[string, string]optionalNon-secret declaration overrides applied after project, preset, and profile env.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.auto_startbooloptionaltrueWhether daemon auto-converges toward a live instance.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.restartstringoptionalfailureRestart policy: 'failure' (default), 'always', or 'never'.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.restart_backoff_secsu32optional30Minimum backoff between failed restart attempts.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.nodeslist[string]optionalNode allowlist (project-scoped only). Omit for all nodes.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadencemapoptionalController idle polling timers.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.reconcile_interval_secsu64optional120Idle reconciliation cadence.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.inbox_poll_interval_secsu64optional120Inbox poll cadence.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.jitter_secsu64optional30Max random jitter to prevent thundering herd.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.cadence.claimed_heartbeat_interval_secsu64optional1800Claimed-bead heartbeat cadence (PostToolUse hook reminds agents of active claims + goal; 0 disables)..
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.waitmapoptionalController wait mode configuration.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.wait.inbox_delay_secsu64optional60Minimum delay before inbox wait reads state.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.wait.choice_timeout_secsu64optionalTimeout for choice wait mode (null = indefinite).
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.modelstringoptionalModel to use for this persistent agent (e.g. 'opus', 'sonnet'). Passed as --model.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.providerstringoptionalProvider to use for this persistent agent (e.g. 'openai', 'anthropic', 'google').
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.mcp_policystringoptionalprofileFinal declaration-scoped MCP policy: profile (default) or disabled.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategymapoptionalStrategy for generating a short human-friendly display name at agent creation time.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy.strategystringrequiredShort-name strategy: adj_noun, template or llm.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.short_name_strategy.templatestringoptionalBounded 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.llmstringoptionalTop-level llm alias used when strategy = llm.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.checkout_typestringoptionalworktreeHow 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_spawnbooloptionalfalseRequire operator approval through caco choices before spawning this persistent agent.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.confirm_before_spawn_timeout_secsu64optional300Timeout in seconds for the operator confirmation prompt.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.confirm_before_spawn_auto_approvebooloptionalfalseAuto-approve the spawn when the confirmation timeout expires.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.all_projectsbooloptionalfalseAllow this persistent agent to access all configured projects instead of only its bound project.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.goalstringoptionalDefault goal/task description for managed launches via this declaration; used when --goal is not passed.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedulemapoptionalSchedule configuration for periodic persistent agent launches.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedule.cronstringrequiredStandard 5-field cron expression.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.schedule.launch_modestringoptionalrestart-or-recreateLaunch mode: recreate, restart, or restart-or-recreate.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.pane_error_detectionbooloptionalfalseEnable tmux pane content scanning for fatal error detection. Overrides agent_defaults. Default false.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.projectstringoptionalExplicit 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_nodestringoptionalCross-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_projectslist[friend_project]optionalPer-declaration friend project overlay; entries can narrow or disable inherited friends.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.projectstringrequiredTarget project name.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.branchstringoptionalTarget branch; omitted means the friend project's default_branch. Mutually exclusive with revision.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.revisionstringoptionalPinned git revision. Mutually exclusive with branch.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.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.
└ dynamic_nodes.<template-name>.node.agents.persistent.<name>.friend_projects.materializebooloptionalfalseMaterialize 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.enabledbooloptionaltrueSet false in a narrower layer to disable an inherited friend.
└ dynamic_nodes.<template-name>.node.agents.heartbeatmapoptionalNode-local managed-agent heartbeat defaults and per-agent overrides.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.enabledbooloptionalfalseEnable local daemon-owned managed-agent heartbeat delivery for this scope. Defaults to false for safe rollout.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.selectorstringoptionalpersistentAgent selector for this scope: all, persistent, workers, or none.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.interval_secsu64optional300Base heartbeat cadence in seconds.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.jitter_secsu64optional0Optional jitter in seconds; must not exceed interval_secs.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.max_backoff_secsu64optional300Optional delivery-failure backoff ceiling in seconds; must be at least interval_secs.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.allow_runtime_opt_outbooloptionaltrueAllow runtime/profile code to decline heartbeats even when config enables them.
└ dynamic_nodes.<template-name>.node.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.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overridesmap[string, map]optionalPer-agent overrides keyed by persistent declaration name, composed profile, or concrete agent id.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>mapoptionalOne per-agent heartbeat override; inherits unspecified fields from the surrounding scope.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.enabledbooloptionalEnable or disable heartbeat for this agent.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.selectorstringoptionalOptional selector override: all, persistent, workers, or none.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.interval_secsu64optionalOverride base heartbeat cadence in seconds.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.jitter_secsu64optionalOverride jitter in seconds; must not exceed interval_secs when both are set.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.max_backoff_secsu64optionalOverride delivery-failure backoff ceiling in seconds.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.allow_runtime_opt_outbooloptionalOverride runtime opt-out permission for this agent.
└ dynamic_nodes.<template-name>.node.agents.heartbeat.overrides.<agent>.conditionslist[string]optionalReplace inherited OR timer gates (claimed_beads, unmerged_prs, pending_inbox); [] restores unconditional delivery.
└ dynamic_nodes.<template-name>.node.agents.message_deliverymapoptionalNode-local managed-agent message-delivery cadence defaults and per-agent overrides (wake vs batch).
└ dynamic_nodes.<template-name>.node.agents.message_delivery.enabledbooloptionalfalseEnable 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.selectorstringoptionalallAgent selector for this scope: all, persistent, workers, or none.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.default_modestringoptionalimmediateWake 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_kindslist[string]optionalMessage kinds that always wake regardless of mode (e.g. lifecycle, system).
└ dynamic_nodes.<template-name>.node.agents.message_delivery.allow_runtime_opt_outbooloptionaltrueAllow runtime/profile code to decline batching even when config enables it.
└ dynamic_nodes.<template-name>.node.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.
└ dynamic_nodes.<template-name>.node.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.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overridesmap[string, map]optionalPer-agent overrides keyed by persistent declaration name or concrete agent id.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>mapoptionalOne per-agent message-delivery override; inherits unspecified fields from the surrounding scope.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.enabledbooloptionalEnable or disable message-delivery batching for this agent.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.selectorstringoptionalOptional selector override: all, persistent, workers, or none.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.default_modestringoptionalOverride wake mode: immediate or batch.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.always_wake_kindslist[string]optionalOverride always-wake message kinds.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.allow_runtime_opt_outbooloptionalOverride runtime opt-out permission for this agent.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.batch_flush_interval_secsu64optionalOverride the dedicated batch-flush cadence in seconds.
└ dynamic_nodes.<template-name>.node.agents.message_delivery.overrides.<agent>.direct_message_wakebooloptionalOverride the direct-message wake for this agent.
└ dynamic_nodes.<template-name>.node.agents.paratenicmapoptionalNode-local Paratenic AHP client settings for pi-paratenic agents.
└ dynamic_nodes.<template-name>.node.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.
└ dynamic_nodes.<template-name>.node.agents.paratenic.urlstringrequiredws://127.0.0.1:7788/ahpParatenic AHP WebSocket endpoint including /ahp.
└ dynamic_nodes.<template-name>.node.agents.paratenic.token_filestringrequired~/.config/paratenic/tokenOwner-private Paratenic bearer-token file.
└ dynamic_nodes.<template-name>.node.agents.paratenic.backend_socketstringrequired~/.local/state/paratenic/backend.sockOwner-private Paratenic backend registration socket.
└ dynamic_nodes.<template-name>.node.agents.paratenic.extension_pathstringrequiredReviewed Paratenic Pi extension loaded by managed Pi.
└ dynamic_nodes.<template-name>.node.agents.paratenic.registration_timeout_secsu64optional30Legacy registration timeout exported for runtime compatibility; not a launch or resume gate.
└ dynamic_nodes.<template-name>.node.agents.paratenic.dispatch_timeout_secsu64optional30Maximum AHP dispatch/acceptance wait.
└ dynamic_nodes.<template-name>.node.agents.pi_daemonmapoptionalNode-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_pathstringrequiredOwner-local Unix socket exposed by the separately supervised standalone pi-daemon host.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.binarystringoptionalpi-daemonStandalone pi-daemon executable path/name.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.state_dirstringoptional$CACOPHONY_DIR/pi-daemonStandalone host state directory.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.agent_dirstringoptionalPi auth/model directory; omitted uses Pi's default.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.allow_rootstringoptional$CACOPHONY_DIR/agentsCanonical workload root allowed by the standalone host.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.tool_adapter_dirstringoptionalOwner-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_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.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_line_bytesusizeoptional1048576Maximum NDJSON command/response bytes accepted by the Cacophony client.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_events_per_requestusizeoptional4096Maximum matching events retained while awaiting one terminal response.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_sessionsu32optional128Maximum resident logical SDK sessions in the standalone host.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_concurrent_turnsu32optional4Maximum concurrent model turns in the standalone host.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_session_queue_depthu32optional32Maximum queued turns per logical session; zero allows only the active turn.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_connectionsu32optional64Maximum Unix control connections in the standalone host, including wakes awaiting settlement.
└ dynamic_nodes.<template-name>.node.agents.pi_daemon.max_api_connectionsu32optional64Maximum HTTP and upgraded WebSocket connections, independent of Unix connections.