← 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 path | Type | Required | Default | Canonical description |
|---|---|---|---|---|
└ projects.webhooks.entries.<hook-id>.nodes | list[string] | optional | Per-hook node filter (overrides the section nodes). | |
└ projects.webhooks.entries.<hook-id>.description | string | optional | Human-readable description. | |
└ projects.webhooks.entries.<hook-id>.command | string | optional | type=bash: shell command (sh -c) with the body in $CACO_HOOK_BODY. | |
└ projects.webhooks.entries.<hook-id>.action | string | optional | type=action: name of a configured action to run. | |
└ projects.webhooks.entries.<hook-id>.profile | string | optional | type=agent: profile of the bead-creator agent to dispatch. | |
└ projects.webhooks.entries.<hook-id>.bead | map | optional | type=bead: defaults applied to the created bead. | |
└ projects.webhooks.entries.<hook-id>.bead.project | string | optional | Target project for the created bead (defaults to the hook scope project). | |
└ projects.webhooks.entries.<hook-id>.bead.title | string | optional | Literal bead title. | |
└ projects.webhooks.entries.<hook-id>.bead.title_prefix | string | optional | Prefix prepended to the resolved title. | |
└ projects.webhooks.entries.<hook-id>.bead.title_from | string | optional | Top-level JSON body field to take the title from. | |
└ projects.webhooks.entries.<hook-id>.bead.labels | list[string] | optional | Labels applied to the created bead. | |
└ projects.webhooks.entries.<hook-id>.bead.type | string | optional | Bead type (task/bug/feature/epic). Defaults to task. | |
└ projects.webhooks.entries.<hook-id>.bead.priority | int | optional | Bead priority 0-4. | |
└ projects.webhooks.entries.<hook-id>.timeout_secs | int | optional | Handler timeout in seconds (bash/action). Default 300. | |
└ projects.interactive_defaults | map[string, map] | optional | Project-level interactive agent defaults keyed by runtime type. | |
└ projects.interactive_defaults.<runtime-type> | map | optional | Defaults for a specific runtime type. | |
└ projects.interactive_defaults.<runtime-type>.project | string | optional | Default project for interactive sessions when --project is not provided. | |
└ projects.interactive_defaults.<runtime-type>.profile | string | list[string] | optional | Default profile or profile composition list. | |
└ projects.interactive_defaults.<runtime-type>.goal | string | optional | Default goal / task description. Supports {{project}}, {{node}} template expressions. | |
└ projects.interactive_defaults.<runtime-type>.model | string | optional | Default model override. | |
└ projects.interactive_defaults.<runtime-type>.provider | string | optional | Default provider override. | |
└ projects.interactive_defaults.<runtime-type>.env | map[string, string] | optional | Additional environment variables to inject. | |
└ projects.interactive_defaults.<runtime-type>.mcp_servers | list[string] | optional | Additional MCP server names to attach. | |
└ projects.remotes | map[string, map] | optional | First-class upstream/fork remotes. | |
└ projects.remotes.<remote-name> | map | optional | Named git remote for a fork-and-PR topology. | |
└ projects.remotes.<remote-name>.url | string | required | Git URL for the remote. | |
└ projects.remotes.<remote-name>.push | string | optional | allowed | Push policy: allowed or forbidden. |
└ projects.remotes.<remote-name>.pr_target | bool | optional | false | When true, PRs are filed against this remote. |
└ projects.integration | map | optional | Integration workflow hints. | |
└ projects.integration.reintegrate_target | string | optional | <remote>/<branch> where caco agent reintegrate lands. | |
└ projects.integration.pr_base | string | optional | <remote>/<branch> PR base reference. | |
└ projects.integration.default_intent | string | optional | Project-default reintegration intent: direct, review, artifact_only, pr_submit, upstream_draft_pr, or none. Unset defaults to direct. | |
└ projects.integration.backend | string | optional | Project integration backend: local_merge (default) or pull_request. | |
└ projects.github_integration | map | optional | Native 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.enabled | bool | optional | false | Opt this project into native GitHub PR integration. |
└ projects.sync | map | optional | Periodic integration-branch sync from an upstream ref. | |
└ projects.sync.from | string | required | Source ref to integrate, e.g. upstream/main. | |
└ projects.sync.strategy | string | optional | merge | Sync strategy: merge, rebase, or merge-ff-only. |
└ projects.sync.interval_secs | u64 | optional | 1800 | Minimum seconds between background sync attempts. |
└ projects.sync.on_canonical | bool | optional | true | Attempt sync from the daemon canonical refresh loop. |
└ projects.sync.on_agent_spawn | bool | optional | true | Attempt sync before spawning agents. |
└ projects.sync.on_conflict | string | optional | spawn-stale | Conflict policy: spawn-stale, block, or file-bead. |
└ projects.branches | map | optional | Per-project branch namespace customisation. | |
└ projects.branches.prefix | string | optional | Prepended to default branch names. | |
└ projects.branches.cacophony_state | string | optional | Explicit override for the cacophony-state branch name. | |
└ projects.branches.agent_format | string | optional | Template for agent branch names; supports {node}, {project}, {id}. | |
└ projects.branches.target_branch | string | optional | Override for the project's reintegration target branch. | |
└ projects.git | map | optional | Per-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.backend | string (subprocess|gitoxide) | optional | subprocess | Global default git backend for all operation classes. |
└ projects.git.backends | map | optional | Optional per-operation-class backend overrides. | |
└ projects.git.backends.checkouts | string (subprocess|gitoxide) | optional | Backend for checkout management (clone/fetch/keep-fresh/local-clone/checkout). Defaults to git.backend. | |
└ projects.git.backends.reintegration | string (subprocess|gitoxide) | optional | Backend for reintegration (merge/rebase/push). Defaults to git.backend; subprocess recommended. | |
└ projects.git.backends.cacophony_state | string (subprocess|gitoxide) | optional | Backend for cacophony-state sidecar git ops (state-branch read/write/publish, summaries/artefact publication). Defaults to git.backend. | |
└ projects.git.config | map (git config key -> value) | optional | Declarative 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_smudge | bool | optional | false | foolproof 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. |