← Schema index / Config Reference

projects 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.

Project definitions — repositories managed by Cacophony. Accepts both a list of projects (with 'name' field) and a map keyed by project name.

Field pathTypeRequiredDefaultCanonical description
projectssectionoptionalProject definitions — repositories managed by Cacophony. Accepts both a list of projects (with 'name' field) and a map keyed by project name.
└ projects.namestringrequiredUnique project name.
└ projects.remotestringrequiredGit remote URL.
└ projects.default_branchstringoptionalmainDefault branch name.
└ projects.canonical_nodeslist[string]optionalHard allowlist of nodes permitted to materialize and use this project's canonical source checkout. Omission preserves legacy derived placement.
└ projects.always_updatebooloptionalfalseKeep the canonical checkout materialized and periodically refreshed on every node permitted by canonical_nodes, independent of local agent/default/friend selection.
└ projects.identitystringoptionalIdentity to use for git operations.
└ projects.github_ssh_routingstringoptionalautoGitHub SSH routing for daemon-managed git in this project: auto (respect configured host/port), ssh_over_443, or default_port. Node-level policy wins when set.
└ projects.reintegration_max_stale_countu32optional5Maximum reintegration-count staleness tolerated by future reintegration guards.
└ projects.auth_tokenstringoptionalInline auth token for repo-backed project registries.
└ projects.statusstringoptionalactiveProject lifecycle status: active or pending_creation.
└ projects.beadsmapoptionalBeads config.
└ projects.beads.enabledbooloptionalfalseWhether beads are enabled.
└ projects.beads.branchstringoptionalBeads branch name.
└ projects.beads.dispatch_queue_ttlstringoptionalAuto-clean TTL for queued async bead dispatch intents.
└ projects.beads.sync_interval_secsu64optional10Floor cadence for background beads sync in seconds.
└ projects.beads.sync_backoffmapoptionalOpt-in exponential backoff after consecutive no-change syncs.
└ projects.beads.sync_backoff.enabledbooloptionalfalseEnable no-change backoff.
└ projects.beads.sync_backoff.max_interval_secsu64optional1800Maximum no-change interval; must be at least sync_interval_secs.
└ projects.beads.sync_backoff.multiplierf64optional2.0No-change interval multiplier (1.0..=16.0).
└ projects.beads.sync_backoff.jitter_secsu64optional0Deterministic per-project jitter, capped by max_interval_secs.
└ projects.beads.failovermapoptionalProject-level failover overrides.
└ projects.beads.failover.reclaim_unavailable_agents_afterdurationoptionalProject-level override for global reclaim timer.
└ projects.worktreemapoptionalWorktree base directory.
└ projects.worktree.base_dirstringoptionalBase directory for worktrees.
└ projects.friend_projectslist[friend_project]optionalProject-level friends inherited by all agents unless narrowed or disabled by more-specific config.
└ projects.friend_projects.projectstringrequiredTarget project name.
└ projects.friend_projects.branchstringoptionalTarget branch; omitted means the friend project's default_branch. Mutually exclusive with revision.
└ projects.friend_projects.revisionstringoptionalPinned git revision. Mutually exclusive with branch.
└ projects.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.
└ projects.friend_projects.materializebooloptionalfalseMaterialize a real friend checkout cloned from the friend project's remote; omitted means a virtual friend with no checkout.
└ projects.friend_projects.enabledbooloptionaltrueSet false in a narrower layer to disable an inherited friend.
└ projects.agent_defaultsmapoptionalDefault agent spawn parameters.
└ projects.agent_defaults.typestringoptionalDefault agent type.
└ projects.agent_defaults.effortstringoptionalRuntime reasoning effort; explicit requests win.
└ projects.agent_defaults.profilestring | list[string]optionalProfile or ordered list for composite composition.
└ projects.agent_defaults.presetstringoptionalDefault preset ID.
└ projects.agent_defaults.readiness_timeout_secsu64optional60Readiness sentinel timeout.
└ projects.agent_defaults.node_selectorstringoptionalSpawn placement: local_only, round_robin, or least_overloaded.
└ projects.agent_defaults.resourcesmapoptionalPer-agent resource ceilings.
└ projects.agent_defaults.resources.vcpuf64optionalLogical CPU budget (e.g. 2.0 for two cores).
└ projects.agent_defaults.resources.memorystringoptionalMemory ceiling (e.g. '8GiB', '512MiB').
└ projects.agent_defaults.modelstringoptionalModel to use for agent launches (e.g. 'opus', 'sonnet'). Passed as --model.
└ projects.agent_defaults.providerstringoptionalProvider for agent launches (e.g. 'openai', 'anthropic', 'google', 'github-copilot').
└ projects.agent_defaults.short_name_strategymapoptionalStrategy for generating a short human-friendly display name at agent creation time.
└ projects.agent_defaults.short_name_strategy.strategystringrequiredShort-name strategy: adj_noun, template or llm.
└ projects.agent_defaults.short_name_strategy.templatestringoptionalBounded display template for strategy = template. Placeholders: {adj}, {noun}, {profile}, {bead}, {node}, {n}. Names remain aliases, not identities.
└ projects.agent_defaults.short_name_strategy.llmstringoptionalTop-level llm alias used when strategy = llm.
└ projects.agent_defaults.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.
└ projects.agent_defaults.persistent_agent_idle_timeout_secsu64optional1800Auto-restart persistent agents after this much tool inactivity.
└ projects.agent_defaults.completed_retention_hoursu64optional72Delete acknowledged completed agent checkouts after N hours.
└ projects.agent_defaults.completed_retention_countu32optional20Keep at most N acknowledged completed agent checkouts per project, pruning oldest first.
└ projects.agent_defaults.completed_retention_bytesstringoptional50GBHard cap on acknowledged completed checkout disk usage for this project.
└ projects.agent_defaults.pi_extra_config_dirslist[string]optionalExtra config directories merged into managed Pi workspaces.
└ projects.agent_defaults.override_pi_agent_dirstringoptionalRead-only operator-owned Pi agent directory passed directly to managed Pi launches instead of materializing .pi-agent config.
└ projects.agent_defaults.warmup_cache_injectionmapoptionalDisabled-by-default advisory warmup-cache prompt injection settings for spawned agents.
└ projects.agent_defaults.warmup_cache_injection.enabledbooloptionalfalseEnable advisory warmup-cache prompt injection.
└ projects.agent_defaults.warmup_cache_injection.max_age_secondsi64optional86400Maximum accepted warmup summary age before skipping injection.
└ projects.agent_defaults.warmup_cache_injection.max_charsusizeoptional2048Maximum characters injected from the warmup summary.
└ projects.agent_defaults.pane_error_detectionbooloptionalfalseEnable tmux pane content scanning for Pi agent fatal error detection.
└ projects.agent_defaults.eligible_nodeslist[string]optionalAllowlist of node names for round_robin/least_overloaded placement. Manual --node overrides bypass this.
└ projects.agent_defaults.friend_projectslist[friend_project]optionalAgent-default friend project overlays inherited by agents in this project.
└ projects.agent_defaults.friend_projects.projectstringrequiredTarget project name.
└ projects.agent_defaults.friend_projects.branchstringoptionalTarget branch; omitted means the friend project's default_branch. Mutually exclusive with revision.
└ projects.agent_defaults.friend_projects.revisionstringoptionalPinned git revision. Mutually exclusive with branch.
└ projects.agent_defaults.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.
└ projects.agent_defaults.friend_projects.materializebooloptionalfalseMaterialize a real friend checkout cloned from the friend project's remote; omitted means a virtual friend with no checkout.
└ projects.agent_defaults.friend_projects.enabledbooloptionaltrueSet false in a narrower layer to disable an inherited friend.
└ projects.contextmapoptionalPer-project `caco context` section-limit overrides.
└ projects.context.beads_limitusizeoptional12Max recent open/in-progress beads in the dump.
└ projects.context.inbox_limitusizeoptional8Max recent inbox messages in the dump.
└ projects.context.commits_limitusizeoptional12Max recent commits in the dump.
└ projects.context.summaries_limitusizeoptional1Max recent session summaries in the dump.
└ projects.context.section_byte_capusizeoptional8192Max bytes per section before truncation.
└ projects.agent_runtimemapoptionalPer-project managed shell/runtime overrides.
└ projects.agent_runtime.multiplexerstringoptionalherdrPersistent terminal host for new shell agents: herdr or tmux. Existing agents retain their backend.
└ projects.agent_runtime.herdrmapoptionalHerdr terminal host settings.
└ projects.agent_runtime.herdr.sessionstringoptionalcacoNamed Herdr session shared by Caco agents; default selects the user's main Herdr session.
└ projects.agent_runtime.herdr.binarystringoptionalherdrHerdr executable on the owning node.
└ projects.agent_runtime.shellmapoptionalShell/interpreter configuration.
└ projects.agent_runtime.shell.programstringoptionalbashShell binary path or name.
└ projects.agent_runtime.shell.initstringoptionalminimalInit mode: minimal (default), user, or file.
└ projects.agent_runtime.shell.init_filestringoptionalCustom init file path (when init is 'file').
└ projects.agent_runtime.shell.argslist[string]optionalExtra arguments passed to the shell.
└ projects.agent_runtime.shell.shell_rcstringoptionalInline shell init content sourced into every agent shell (concatenated across layers).
└ projects.agent_runtime.pathmapoptionalOrdered PATH additions.
└ projects.agent_runtime.path.prependlist[string]optionalDirectories prepended to PATH.
└ projects.agent_runtime.environmentmap[string, string]optionalNon-secret environment defaults.
└ projects.environmentmap[string, string]optionalNon-secret env defaults for managed agent launches.
└ projects.checkout_bootstraplist[string]optionalShell snippets run during checkout bootstrap.
└ projects.concurrencymapoptionalAgent spawn concurrency ceilings for this project.
└ projects.concurrency.globalmapoptionalGlobal ceiling across all profiles.
└ projects.concurrency.global.max_parallelu32requiredMaximum live non-terminal agents.
└ projects.concurrency.profilemap[string, map]optionalPer-profile ceilings keyed by profile name.
└ projects.concurrency.profile.max_parallelu32requiredMaximum live non-terminal agents for this profile.
└ projects.testmapoptionalQueued test defaults for this project.
└ projects.test.commandstringoptionalDefault test command (autodetected if omitted).
└ projects.test.max_parallelu32optional1Maximum concurrent test jobs.
└ projects.test.wait_timeout_secsu64optional60How long caco test run --wait blocks before returning the job ID.
└ projects.test.max_runtime_secsu64optional7200Runaway safety net on queued test job execution time in seconds.
└ projects.buildmapoptionalQueued build defaults for this project.
└ projects.build.commandstringoptionalDefault build command (autodetected if omitted).
└ projects.build.max_parallelu32optional1Maximum concurrent build jobs.
└ projects.build.wait_timeout_secsu64optional60How long caco build run --wait blocks before returning the job ID.
└ projects.build.max_runtime_secsu64optional7200Runaway safety net on queued build job execution time in seconds.
└ projects.releasesmapoptionalRelease system configuration.
└ projects.releases.channelsmap[string, map]optionalNamed release channels keyed by channel name.
└ projects.releases.channels.<channel-name>mapoptionalRelease channel definition.
└ projects.releases.channels.<channel-name>.strategystringrequiredRelease strategy: node, cluster, github, bead_dispatch, command, or a named custom release type.
└ projects.releases.channels.<channel-name>.build_commandstringoptionalBuild command to run in the release worktree.
└ projects.releases.channels.<channel-name>.push_commandstringoptionalPush/upload command to run after a successful build.
└ projects.releases.channels.<channel-name>.runs_onmap[string, list[string]]optionalPer-architecture node mappings for cluster strategy.
└ projects.releases.channels.<channel-name>.workflowstringoptionalGitHub Actions workflow file name for github strategy.
└ projects.releases.channels.<channel-name>.trigger_refstringoptionalGit ref to trigger the workflow against.
└ projects.releases.channels.<channel-name>.max_runtime_secsu64optional1800Hard ceiling on release job execution time in seconds.
└ projects.releases.android_companionmapoptionalAndroid companion release automation (Play internal-testing auto-push toggle,).
└ projects.releases.android_companion.owner_nodestringoptionalSingle node that owns companion detection, notification/choice creation, and Play dispatch. Required for unattended auto-push to prevent one dispatch per daemon node.
└ projects.releases.android_companion.auto_pushstringoptionaloffUnattended Play internal-testing auto-push mode: off (default) keeps the operator-gated caco choices promotion path; rollout/draft skip the choice and dispatch the companion workflow with the matching play_upload_mode.
└ projects.releases.app_storesmap[string, map]optionalFirst-party mobile app-store release sources keyed by a stable id; their store-derived state is surfaced by caco release refresh/list/status alongside GitHub Actions release jobs.
└ projects.releases.app_stores.<source-id>mapoptionalMobile app-store release source definition.
└ projects.releases.app_stores.<source-id>.providerstringrequiredStore provider: google_play or app_store_connect.
└ projects.releases.app_stores.<source-id>.app_idstringrequiredApp identifier: Android applicationId or iOS bundle id.
└ projects.releases.app_stores.<source-id>.platformstringrequiredPlatform surface: android, wearos, ios, or watchos.
└ projects.releases.app_stores.<source-id>.trackstringoptionalStore track/channel to track (e.g. internal, wear:internal, a TestFlight group). Defaults to the provider's primary internal track.
└ projects.releases.app_stores.<source-id>.credentialstringoptionalName of a configured credential wrapper supplying store API credentials. Only the wrapper name is stored; secrets are never inlined.
└ projects.releases.app_stores.<source-id>.labelstringoptionalOptional human-readable label for status surfaces.
└ projects.agentsmapoptionalProject-scoped agent declarations and groups.
└ projects.agents.flowmapoptionalFlow-created worker preferences.
└ projects.agents.flow.defaultmapoptionalProject Flow launch overlay.
└ projects.agents.flow.default.typestringoptionalDefault agent type.
└ projects.agents.flow.default.effortstringoptionalRuntime reasoning effort; explicit requests win.
└ projects.agents.flow.default.profilestring | list[string]optionalProfile or ordered list for composite composition.
└ projects.agents.flow.default.presetstringoptionalDefault preset ID.
└ projects.agents.flow.default.readiness_timeout_secsu64optional60Readiness sentinel timeout.
└ projects.agents.flow.default.node_selectorstringoptionalSpawn placement: local_only, round_robin, or least_overloaded.
└ projects.agents.flow.default.resourcesmapoptionalPer-agent resource ceilings.
└ projects.agents.flow.default.resources.vcpuf64optionalLogical CPU budget (e.g. 2.0 for two cores).
└ projects.agents.flow.default.resources.memorystringoptionalMemory ceiling (e.g. '8GiB', '512MiB').
└ projects.agents.flow.default.modelstringoptionalModel to use for agent launches (e.g. 'opus', 'sonnet'). Passed as --model.
└ projects.agents.flow.default.providerstringoptionalProvider for agent launches (e.g. 'openai', 'anthropic', 'google', 'github-copilot').
└ projects.agents.flow.default.short_name_strategymapoptionalStrategy for generating a short human-friendly display name at agent creation time.
└ projects.agents.flow.default.short_name_strategy.strategystringrequiredShort-name strategy: adj_noun, template or llm.
└ projects.agents.flow.default.short_name_strategy.templatestringoptionalBounded display template for strategy = template. Placeholders: {adj}, {noun}, {profile}, {bead}, {node}, {n}. Names remain aliases, not identities.
└ projects.agents.flow.default.short_name_strategy.llmstringoptionalTop-level llm alias used when strategy = llm.
└ projects.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.
└ projects.agents.flow.default.persistent_agent_idle_timeout_secsu64optional1800Auto-restart persistent agents after this much tool inactivity.
└ projects.agents.flow.default.completed_retention_hoursu64optional72Delete acknowledged completed agent checkouts after N hours.
└ projects.agents.flow.default.completed_retention_countu32optional20Keep at most N acknowledged completed agent checkouts per project, pruning oldest first.
└ projects.agents.flow.default.completed_retention_bytesstringoptional50GBHard cap on acknowledged completed checkout disk usage for this project.
└ projects.agents.flow.default.pi_extra_config_dirslist[string]optionalExtra config directories merged into managed Pi workspaces.