← Schema index / Config Reference

projects schema (301-355)

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
└ projects.webhooks.entries.<hook-id>.nodeslist[string]optionalPer-hook node filter (overrides the section nodes).
└ projects.webhooks.entries.<hook-id>.descriptionstringoptionalHuman-readable description.
└ projects.webhooks.entries.<hook-id>.commandstringoptionaltype=bash: shell command (sh -c) with the body in $CACO_HOOK_BODY.
└ projects.webhooks.entries.<hook-id>.actionstringoptionaltype=action: name of a configured action to run.
└ projects.webhooks.entries.<hook-id>.profilestringoptionaltype=agent: profile of the bead-creator agent to dispatch.
└ projects.webhooks.entries.<hook-id>.beadmapoptionaltype=bead: defaults applied to the created bead.
└ projects.webhooks.entries.<hook-id>.bead.projectstringoptionalTarget project for the created bead (defaults to the hook scope project).
└ projects.webhooks.entries.<hook-id>.bead.titlestringoptionalLiteral bead title.
└ projects.webhooks.entries.<hook-id>.bead.title_prefixstringoptionalPrefix prepended to the resolved title.
└ projects.webhooks.entries.<hook-id>.bead.title_fromstringoptionalTop-level JSON body field to take the title from.
└ projects.webhooks.entries.<hook-id>.bead.labelslist[string]optionalLabels applied to the created bead.
└ projects.webhooks.entries.<hook-id>.bead.typestringoptionalBead type (task/bug/feature/epic). Defaults to task.
└ projects.webhooks.entries.<hook-id>.bead.priorityintoptionalBead priority 0-4.
└ projects.webhooks.entries.<hook-id>.timeout_secsintoptionalHandler timeout in seconds (bash/action). Default 300.
└ projects.interactive_defaultsmap[string, map]optionalProject-level interactive agent defaults keyed by runtime type.
└ projects.interactive_defaults.<runtime-type>mapoptionalDefaults for a specific runtime type.
└ projects.interactive_defaults.<runtime-type>.projectstringoptionalDefault project for interactive sessions when --project is not provided.
└ projects.interactive_defaults.<runtime-type>.profilestring | list[string]optionalDefault profile or profile composition list.
└ projects.interactive_defaults.<runtime-type>.goalstringoptionalDefault goal / task description. Supports {{project}}, {{node}} template expressions.
└ projects.interactive_defaults.<runtime-type>.modelstringoptionalDefault model override.
└ projects.interactive_defaults.<runtime-type>.providerstringoptionalDefault provider override.
└ projects.interactive_defaults.<runtime-type>.envmap[string, string]optionalAdditional environment variables to inject.
└ projects.interactive_defaults.<runtime-type>.mcp_serverslist[string]optionalAdditional MCP server names to attach.
└ projects.remotesmap[string, map]optionalFirst-class upstream/fork remotes.
└ projects.remotes.<remote-name>mapoptionalNamed git remote for a fork-and-PR topology.
└ projects.remotes.<remote-name>.urlstringrequiredGit URL for the remote.
└ projects.remotes.<remote-name>.pushstringoptionalallowedPush policy: allowed or forbidden.
└ projects.remotes.<remote-name>.pr_targetbooloptionalfalseWhen true, PRs are filed against this remote.
└ projects.integrationmapoptionalIntegration workflow hints.
└ projects.integration.reintegrate_targetstringoptional<remote>/<branch> where caco agent reintegrate lands.
└ projects.integration.pr_basestringoptional<remote>/<branch> PR base reference.
└ projects.integration.default_intentstringoptionalProject-default reintegration intent: direct, review, artifact_only, pr_submit, upstream_draft_pr, or none. Unset defaults to direct.
└ projects.integration.backendstringoptionalProject integration backend: local_merge (default) or pull_request.
└ projects.github_integrationmapoptionalNative GitHub PR integration opt-in: when enabled, the project gets PR<->bead links + the pr-branch checkout type. Requires integration.pr_base on a pr_target remote. Off by default.
└ projects.github_integration.enabledbooloptionalfalseOpt this project into native GitHub PR integration.
└ projects.syncmapoptionalPeriodic integration-branch sync from an upstream ref.
└ projects.sync.fromstringrequiredSource ref to integrate, e.g. upstream/main.
└ projects.sync.strategystringoptionalmergeSync strategy: merge, rebase, or merge-ff-only.
└ projects.sync.interval_secsu64optional1800Minimum seconds between background sync attempts.
└ projects.sync.on_canonicalbooloptionaltrueAttempt sync from the daemon canonical refresh loop.
└ projects.sync.on_agent_spawnbooloptionaltrueAttempt sync before spawning agents.
└ projects.sync.on_conflictstringoptionalspawn-staleConflict policy: spawn-stale, block, or file-bead.
└ projects.branchesmapoptionalPer-project branch namespace customisation.
└ projects.branches.prefixstringoptionalPrepended to default branch names.
└ projects.branches.cacophony_statestringoptionalExplicit override for the cacophony-state branch name.
└ projects.branches.agent_formatstringoptionalTemplate for agent branch names; supports {node}, {project}, {id}.
└ projects.branches.target_branchstringoptionalOverride for the project's reintegration target branch.
└ projects.gitmapoptionalPer-project git config override: daemon git backend selection plus declarative git.config enforcement, resolved over the global top-level git. Absent => global git => current behavior.
└ projects.git.backendstring (subprocess|gitoxide)optionalsubprocessGlobal default git backend for all operation classes.
└ projects.git.backendsmapoptionalOptional per-operation-class backend overrides.
└ projects.git.backends.checkoutsstring (subprocess|gitoxide)optionalBackend for checkout management (clone/fetch/keep-fresh/local-clone/checkout). Defaults to git.backend.
└ projects.git.backends.reintegrationstring (subprocess|gitoxide)optionalBackend for reintegration (merge/rebase/push). Defaults to git.backend; subprocess recommended.
└ projects.git.backends.cacophony_statestring (subprocess|gitoxide)optionalBackend for cacophony-state sidecar git ops (state-branch read/write/publish, summaries/artefact publication). Defaults to git.backend.
└ projects.git.configmap (git config key -> value)optionalDeclarative git config entries the daemon reconciles and enforces (anti-drift) into managed checkouts (canonical, agent, integration clones) on each pass, e.g. filter.lfs.smudge='git-lfs smudge --skip -- %f' to keep Git-LFS assets as pointers so reconciliation/reintegration never materialize them.
└ projects.git.lfs_skip_smudgebooloptionalfalsefoolproof per-project flag that expands into the SAFE Git-LFS skip-smudge form (filter.lfs.smudge/process => 'git-lfs... --skip' plus filter.lfs.required=false) enforced into managed checkouts, so checkouts and reintegration keep LFS assets as pointers and never block on (or fail because of) LFS blob fetches. The one-line alternative to hand-writing those config entries, avoiding the gotcha where filter.lfs.smudge=false with required=true fails the checkout. Explicit `config` entries override the expanded defaults on key collision. Default false => inert.