Skip to content

presets

const presets: object

Defined in: types/src/config.ts:605

production: object

optional $schema?: string

acDiscipline: "strict"

boundaryEnforcement: "warn" | "block"

Boundary enforcement mode (Phase 155). warn (default, back-compat) — an out-of-boundary edit is only notified via anomaly-notify, never blocked. blockhandlePreToolEdit refuses an out-of-boundary edit at edit time, wherever the host surfaces the touched files. Top-level (not nested under hooks, which is boolean-only gate toggles) because a settle-time counterpart is planned as a follow-on (rec-20260704-001). Overridable per-phase via DRAFT frontmatter, mirroring profile.

codeReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Code-review verifier provider selection (Phase 24.3). Fires at cadence settle run when 'code-review' is in the effective gate set. HIGH findings refuse settle unless --force / --allow-code-review-failure.

commitCadence: "task" | "draft" | "manual"

convergence: object

maxAttempts: number

gates: object

evidenceFloor: "executed"

sealed: string[]

handoff: object

Handoff retention (Phase 88, v1.20). Opt-in, count-based pruning of dated SESSION-*.md docs under .cadence/handoff/, applied at handoff-write time (not settle — settle fires per-phase and would race the lastHandoff pointer). retain: N keeps the N most-recent docs (the just-written lastHandoff is always newest, so never deleted) and hard-deletes the rest, best-effort. Omitting retain (the default empty block) disables pruning entirely — same non-destructive-by-default posture the manual dated archive relies on.

optional retain?: number

hooks: object

preToolUseBuildGate: true = true

sessionStart: boolean

stopReminder: boolean

userPromptSubmit: boolean

logging: object

Operational diagnostic logging (Phase 80, Post-v1.0 observability). Persistent default for the structured stderr logger. Env vars override these at runtime: CADENCE_LOG_LEVEL > logging.level, and CADENCE_LOG_FORMAT > logging.format. format omitted → the logger picks pretty on a TTY, else json. Default level silent = off. Distinct from telemetry/skillAudit (user-behavior tracking).

optional format?: "pretty" | "json"

level: "info" | "warn" | "error" | "silent" | "debug" | "trace"

loopEnforcement: "strict"

modelPerClass: object

Model id per task class, read by classifyTaskExecution (packages/core/src/dispatch/policy.ts) to resolve the model field it attaches to each task’s dispatch plan entry.

complex: string

drafting: string

mechanical: string

standard: string

notify: object

optional file?: string

Path for the file transport. Defaults to .cadence/anomalies.log.

transport: "file" | "stderr" | "none" | "webhook"

Anomaly-event transport. stderr (default) writes one line per event; file appends NDJSON to notify.file; none drops events; webhook POSTs {events: [...]} JSON to notify.webhook.url (Phase 19.1). Only fires when 'anomaly-notify' is in the effective gate set.

optional webhook?: object

Webhook target for the webhook transport (Phase 19.1). Required when transport === ‘webhook’; ignored otherwise. URL is sensitive (may carry a token); never logged on failure.

optional headers?: Record<string, string>

optional timeoutMs?: number

url: string

packs: object

disabled: string[]

enabled: string[]

perTaskVerifier: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Per-task verifier provider selection (Phase 24.2). Fires at cadence build task <id> --status=DONE when 'per-task-verify' is in the effective gate set (strict×standard, strict×complex).

phaseGuard: object

Phase-collision guard (Phase 83, v1.18 worktree-safety). Refuses to scaffold a phase number already claimed by a sibling git worktree or by origin/<integrationRef>, so a cross-worktree collision fails loud before wasted work instead of silently dual-merging. Observes ground truth (the worktree list + upstream tree) — no reservation registry. enabled: false disables the guard entirely; omitting the block applies the defaults.

enabled: boolean

integrationRef: string

planReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Plan-review verifier provider selection (Phase 25.1). Fires at cadence draft approve when 'plan-review' is in the effective gate set (strict×complex). pass=false refuses approve unless --allow-plan-review-failure.

profile: "strict" | "standard" | "auto"

User-involvement profile per DESIGN.md Section 3.1. Defaults to auto.

recommendations: object

Recommendation retention (Phase 102, v1.24). autoArchive (default true) soft-archives a rec the moment it reaches a terminal state: shipped/rejected immediately on promote, and a converted rec when its phase completes SETTLE. Archival is recoverable (recommendation unarchive), so unlike handoff.retain (a hard delete, opt-in) this defaults on. Set false to keep terminal recs in the active ledger; manual recommendation archive still works either way.

autoRoute (Phase 242, default true) is the settle-time writer that turns identified code-review findings into source: 'review' recommendations instead of leaving them stranded in the SUMMARY. Routing is dedup-safe (keyed on Finding.id, never mints a duplicate) and best-effort (a routing failure never blocks settle), so — like autoArchive — it defaults on. Set false to keep settle’s ledger writes limited to the existing auto-archive hook.

autoArchive: boolean

autoRoute: boolean

redundantWorkEnforcement: "warn" | "block" | "off"

Redundant-work enforcement mode (subagent task-redundancy monitoring). off — the check never runs. warn (default) — an edit touching a file owned by an already-terminal (DONE/DONE_WITH_CONCERNS) task is only notified via anomaly-notify. blockhandlePreToolEdit refuses the edit, and the SubagentStop safety net hard-blocks the subagent’s stop. A third off value exists (unlike boundaryEnforcement) because re-touching finished work is a more subjective, more commonly legitimate signal than an out-of-boundary edit. Overridable per-phase via DRAFT frontmatter, mirroring boundaryEnforcement.

resume: object

Resume cross-worktree discovery (Phase 142/143, v1.38 cross-worktree-handoff-discovery). Configures cadence resume behavior when multiple handoff candidates exist across git worktrees. crossWorktree: false disables discovery entirely (today’s exact behavior). autoList: true means when 2+ candidates exist, the interactive picker opens automatically instead of just nudging. Omitting the block applies the defaults.

autoList: boolean

crossWorktree: boolean

remoteCheck: boolean

Origin-freshness probe on resume (fetch + behind-count). The fetch touches remote-tracking refs only. false = never probe.

retro: object

Post-settle retro artifact (Phase 174, rec-20260712-001). enabled (default true) is the master switch: on every successful settle, synthesize a friction digest from the SUMMARY already assembled and write <draftId>-RETRO.json/.md alongside it. offerGithubIssue (default true) is a sub-toggle — when the digest is non-empty and the run is interactive, offer to file a GitHub issue via gh. Setting enabled: false disables both the artifact and the offer; setting only offerGithubIssue: false keeps the artifact but never prompts.

enabled: boolean

offerGithubIssue: boolean

ruleProvider: string

schemaVersion: 1

securityAudit: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Security-audit verifier provider selection (Phase 25.2). Fires at cadence settle run (after code-review, before SUMMARY write) when 'security-audit' is in the effective gate set (strict×complex only). CRITICAL findings refuse settle unless --force / --allow-security-audit-failure.

skillAudit: object

required: string[]

specReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

subagentPolicy: object

Thresholds consumed by packages/core/src/dispatch/policy.ts’s classifyTaskExecution to decide, per task, whether execution should be dispatch or inline (batch-size, size, and context-budget signals).

production.subagentPolicy.contextBudgetThreshold

Section titled “production.subagentPolicy.contextBudgetThreshold”

contextBudgetThreshold: number

largeTaskTokens: number

production.subagentPolicy.mechanicalBatchMin

Section titled “production.subagentPolicy.mechanicalBatchMin”

mechanicalBatchMin: number

telemetry: object

remoteOptIn: boolean

skillInvocations: boolean

tokenUtilization: boolean

templates: object

dir: string

overrides: string[]

tier: object

complex: object

maxTasks: number

minTasks: number

quickFix: object

maxFiles: number

maxTasks: number

standard: object

maxFiles: number

maxTasks: number

uiSpecReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

verification: object

coverageMode: "assertion" | "mention"

How strictly an AC token must be referenced by a test (phase 108). mention (default) — any AC-N occurrence anywhere in a matched file counts (whole-file string search; unchanged historical behavior). assertion — the token must appear inside an it()/test() block that contains at least one assertion (expect( / assert / .should).

coverageProfiles: object[]

Operator-extensible assertion-coverage profiles for languages no built-in profile claims (phase 167, T7). Add-only: an entry claiming an extension a BUILT-IN profile already owns (.ts, .py, .go, .rs, .php, …) is refused loudly at config-load time, naming the collision and suggesting a fix — overriding a built-in is not supported. Validated (regex compiles, required fields present, no collision) by packages/core/src/config/loader.ts via mergeCustomProfiles (packages/core/src/verify/coverage-profiles/ registry.ts), never silently accepted or ignored.

coverageScheme: "bare" | "phase-qualified"

Whether an AC test-coverage token must be phase-qualified (phase 239). bare (default) — the historical unqualified AC-N token, which every config predating this field keeps on upgrade. phase-qualified — the token must carry its phase-slice prefix (239-01/AC-3), making it globally unique across the repo’s history.

NOTE on where back-compat actually lives: this field-level .default('bare') is NOT the mechanism that keeps upgraders on ‘bare’. Core’s loadConfig merges the user’s config.json over defaultConfig (below) before parsing, so on that path the key is always present and this default never fires — defaultConfig holding ‘bare’ is the real back-compat contract. This default only covers direct schema parses where verification is present but the key is absent. Both this default, the object-level .default({...}) literal below, and defaultConfig must all carry ‘bare’ independently (in Zod 4 the object-level literal is returned as-is, not re-parsed through the inner field defaults).

optional testCommand?: string

Shell command the build-test-must-pass gate runs at settle time (Phase 39.2). When set, settle runs it and refuses on a non-zero exit unless --allow-failing-build / --force. When absent, the gate is evaluated but cannot enforce — it passes with a one-time note.

testGlobs: string[]

Glob patterns the test-coverage scanner walks. Supports ** and *. Default scans the workspace packages/**/*.test.ts(x).

verifier: object

diffCapBytes: number

Byte budget for the unified diff sent to the --deep verifier (Phase 70). Oversized diffs are truncated with an explicit marker so the verifier knows it saw a partial picture. Default 256KB.

optional localHeaders?: Record<string, string>

Phase 72: extra HTTP headers for the local provider (e.g. an Authorization bearer for a token-gated OpenAI-compatible proxy). Merged over the base content-type. Prefer the CADENCE_LOCAL_API_KEY env var for the bearer; use this for arbitrary headers. Never logged.

optional maxRetries?: number

Phase 72: retry budget for the anthropic provider on transient (429/5xx/network) errors. Omitted → the SDK default holds; 0 disables retries explicitly.

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

--deep verifier provider selection (Phase 15). mock always works offline; anthropic requires ANTHROPIC_API_KEY in env.

optional timeoutMs?: number

Phase 72: request timeout (ms) for the anthropic provider. Omitted → the Anthropic SDK default holds. A transient slow call in a settle gate should time out and retry, not hang.

workstreamBackend: string

solo: object

optional $schema?: string

acDiscipline: "optional"

boundaryEnforcement: "warn" | "block"

Boundary enforcement mode (Phase 155). warn (default, back-compat) — an out-of-boundary edit is only notified via anomaly-notify, never blocked. blockhandlePreToolEdit refuses an out-of-boundary edit at edit time, wherever the host surfaces the touched files. Top-level (not nested under hooks, which is boolean-only gate toggles) because a settle-time counterpart is planned as a follow-on (rec-20260704-001). Overridable per-phase via DRAFT frontmatter, mirroring profile.

codeReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Code-review verifier provider selection (Phase 24.3). Fires at cadence settle run when 'code-review' is in the effective gate set. HIGH findings refuse settle unless --force / --allow-code-review-failure.

commitCadence: "manual"

convergence: object

maxAttempts: number

gates: object

evidenceFloor: "assertion"

sealed: string[]

handoff: object

Handoff retention (Phase 88, v1.20). Opt-in, count-based pruning of dated SESSION-*.md docs under .cadence/handoff/, applied at handoff-write time (not settle — settle fires per-phase and would race the lastHandoff pointer). retain: N keeps the N most-recent docs (the just-written lastHandoff is always newest, so never deleted) and hard-deletes the rest, best-effort. Omitting retain (the default empty block) disables pruning entirely — same non-destructive-by-default posture the manual dated archive relies on.

optional retain?: number

hooks: object

preToolUseBuildGate: boolean

sessionStart: boolean

stopReminder: boolean

userPromptSubmit: boolean

logging: object

Operational diagnostic logging (Phase 80, Post-v1.0 observability). Persistent default for the structured stderr logger. Env vars override these at runtime: CADENCE_LOG_LEVEL > logging.level, and CADENCE_LOG_FORMAT > logging.format. format omitted → the logger picks pretty on a TTY, else json. Default level silent = off. Distinct from telemetry/skillAudit (user-behavior tracking).

optional format?: "pretty" | "json"

level: "info" | "warn" | "error" | "silent" | "debug" | "trace"

loopEnforcement: "reminder"

modelPerClass: object

Model id per task class, read by classifyTaskExecution (packages/core/src/dispatch/policy.ts) to resolve the model field it attaches to each task’s dispatch plan entry.

complex: string

drafting: string

mechanical: string

standard: string

notify: object

optional file?: string

Path for the file transport. Defaults to .cadence/anomalies.log.

transport: "file" | "stderr" | "none" | "webhook"

Anomaly-event transport. stderr (default) writes one line per event; file appends NDJSON to notify.file; none drops events; webhook POSTs {events: [...]} JSON to notify.webhook.url (Phase 19.1). Only fires when 'anomaly-notify' is in the effective gate set.

optional webhook?: object

Webhook target for the webhook transport (Phase 19.1). Required when transport === ‘webhook’; ignored otherwise. URL is sensitive (may carry a token); never logged on failure.

optional headers?: Record<string, string>

optional timeoutMs?: number

url: string

packs: object

disabled: string[]

enabled: string[]

perTaskVerifier: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Per-task verifier provider selection (Phase 24.2). Fires at cadence build task <id> --status=DONE when 'per-task-verify' is in the effective gate set (strict×standard, strict×complex).

phaseGuard: object

Phase-collision guard (Phase 83, v1.18 worktree-safety). Refuses to scaffold a phase number already claimed by a sibling git worktree or by origin/<integrationRef>, so a cross-worktree collision fails loud before wasted work instead of silently dual-merging. Observes ground truth (the worktree list + upstream tree) — no reservation registry. enabled: false disables the guard entirely; omitting the block applies the defaults.

enabled: boolean

integrationRef: string

planReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Plan-review verifier provider selection (Phase 25.1). Fires at cadence draft approve when 'plan-review' is in the effective gate set (strict×complex). pass=false refuses approve unless --allow-plan-review-failure.

profile: "strict" | "standard" | "auto"

User-involvement profile per DESIGN.md Section 3.1. Defaults to auto.

recommendations: object

Recommendation retention (Phase 102, v1.24). autoArchive (default true) soft-archives a rec the moment it reaches a terminal state: shipped/rejected immediately on promote, and a converted rec when its phase completes SETTLE. Archival is recoverable (recommendation unarchive), so unlike handoff.retain (a hard delete, opt-in) this defaults on. Set false to keep terminal recs in the active ledger; manual recommendation archive still works either way.

autoRoute (Phase 242, default true) is the settle-time writer that turns identified code-review findings into source: 'review' recommendations instead of leaving them stranded in the SUMMARY. Routing is dedup-safe (keyed on Finding.id, never mints a duplicate) and best-effort (a routing failure never blocks settle), so — like autoArchive — it defaults on. Set false to keep settle’s ledger writes limited to the existing auto-archive hook.

autoArchive: boolean

autoRoute: boolean

redundantWorkEnforcement: "warn" | "block" | "off"

Redundant-work enforcement mode (subagent task-redundancy monitoring). off — the check never runs. warn (default) — an edit touching a file owned by an already-terminal (DONE/DONE_WITH_CONCERNS) task is only notified via anomaly-notify. blockhandlePreToolEdit refuses the edit, and the SubagentStop safety net hard-blocks the subagent’s stop. A third off value exists (unlike boundaryEnforcement) because re-touching finished work is a more subjective, more commonly legitimate signal than an out-of-boundary edit. Overridable per-phase via DRAFT frontmatter, mirroring boundaryEnforcement.

resume: object

Resume cross-worktree discovery (Phase 142/143, v1.38 cross-worktree-handoff-discovery). Configures cadence resume behavior when multiple handoff candidates exist across git worktrees. crossWorktree: false disables discovery entirely (today’s exact behavior). autoList: true means when 2+ candidates exist, the interactive picker opens automatically instead of just nudging. Omitting the block applies the defaults.

autoList: boolean

crossWorktree: boolean

remoteCheck: boolean

Origin-freshness probe on resume (fetch + behind-count). The fetch touches remote-tracking refs only. false = never probe.

retro: object

Post-settle retro artifact (Phase 174, rec-20260712-001). enabled (default true) is the master switch: on every successful settle, synthesize a friction digest from the SUMMARY already assembled and write <draftId>-RETRO.json/.md alongside it. offerGithubIssue (default true) is a sub-toggle — when the digest is non-empty and the run is interactive, offer to file a GitHub issue via gh. Setting enabled: false disables both the artifact and the offer; setting only offerGithubIssue: false keeps the artifact but never prompts.

enabled: boolean

offerGithubIssue: boolean

ruleProvider: string

schemaVersion: 1

securityAudit: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Security-audit verifier provider selection (Phase 25.2). Fires at cadence settle run (after code-review, before SUMMARY write) when 'security-audit' is in the effective gate set (strict×complex only). CRITICAL findings refuse settle unless --force / --allow-security-audit-failure.

skillAudit: object

required: string[]

specReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

subagentPolicy: object

Thresholds consumed by packages/core/src/dispatch/policy.ts’s classifyTaskExecution to decide, per task, whether execution should be dispatch or inline (batch-size, size, and context-budget signals).

solo.subagentPolicy.contextBudgetThreshold

Section titled “solo.subagentPolicy.contextBudgetThreshold”

contextBudgetThreshold: number

largeTaskTokens: number

mechanicalBatchMin: number

telemetry: object

remoteOptIn: boolean

skillInvocations: boolean

tokenUtilization: boolean

templates: object

dir: string

overrides: string[]

tier: object

complex: object

maxTasks: number

minTasks: number

quickFix: object

maxFiles: number

maxTasks: number

standard: object

maxFiles: number

maxTasks: number

uiSpecReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

verification: object

coverageMode: "assertion" | "mention"

How strictly an AC token must be referenced by a test (phase 108). mention (default) — any AC-N occurrence anywhere in a matched file counts (whole-file string search; unchanged historical behavior). assertion — the token must appear inside an it()/test() block that contains at least one assertion (expect( / assert / .should).

coverageProfiles: object[]

Operator-extensible assertion-coverage profiles for languages no built-in profile claims (phase 167, T7). Add-only: an entry claiming an extension a BUILT-IN profile already owns (.ts, .py, .go, .rs, .php, …) is refused loudly at config-load time, naming the collision and suggesting a fix — overriding a built-in is not supported. Validated (regex compiles, required fields present, no collision) by packages/core/src/config/loader.ts via mergeCustomProfiles (packages/core/src/verify/coverage-profiles/ registry.ts), never silently accepted or ignored.

coverageScheme: "bare" | "phase-qualified"

Whether an AC test-coverage token must be phase-qualified (phase 239). bare (default) — the historical unqualified AC-N token, which every config predating this field keeps on upgrade. phase-qualified — the token must carry its phase-slice prefix (239-01/AC-3), making it globally unique across the repo’s history.

NOTE on where back-compat actually lives: this field-level .default('bare') is NOT the mechanism that keeps upgraders on ‘bare’. Core’s loadConfig merges the user’s config.json over defaultConfig (below) before parsing, so on that path the key is always present and this default never fires — defaultConfig holding ‘bare’ is the real back-compat contract. This default only covers direct schema parses where verification is present but the key is absent. Both this default, the object-level .default({...}) literal below, and defaultConfig must all carry ‘bare’ independently (in Zod 4 the object-level literal is returned as-is, not re-parsed through the inner field defaults).

optional testCommand?: string

Shell command the build-test-must-pass gate runs at settle time (Phase 39.2). When set, settle runs it and refuses on a non-zero exit unless --allow-failing-build / --force. When absent, the gate is evaluated but cannot enforce — it passes with a one-time note.

testGlobs: string[]

Glob patterns the test-coverage scanner walks. Supports ** and *. Default scans the workspace packages/**/*.test.ts(x).

verifier: object

diffCapBytes: number

Byte budget for the unified diff sent to the --deep verifier (Phase 70). Oversized diffs are truncated with an explicit marker so the verifier knows it saw a partial picture. Default 256KB.

optional localHeaders?: Record<string, string>

Phase 72: extra HTTP headers for the local provider (e.g. an Authorization bearer for a token-gated OpenAI-compatible proxy). Merged over the base content-type. Prefer the CADENCE_LOCAL_API_KEY env var for the bearer; use this for arbitrary headers. Never logged.

optional maxRetries?: number

Phase 72: retry budget for the anthropic provider on transient (429/5xx/network) errors. Omitted → the SDK default holds; 0 disables retries explicitly.

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

--deep verifier provider selection (Phase 15). mock always works offline; anthropic requires ANTHROPIC_API_KEY in env.

optional timeoutMs?: number

Phase 72: request timeout (ms) for the anthropic provider. Omitted → the Anthropic SDK default holds. A transient slow call in a settle gate should time out and retry, not hang.

workstreamBackend: string

team: object

optional $schema?: string

acDiscipline: "optional" | "strict" | "tier-scaled"

boundaryEnforcement: "warn" | "block"

Boundary enforcement mode (Phase 155). warn (default, back-compat) — an out-of-boundary edit is only notified via anomaly-notify, never blocked. blockhandlePreToolEdit refuses an out-of-boundary edit at edit time, wherever the host surfaces the touched files. Top-level (not nested under hooks, which is boolean-only gate toggles) because a settle-time counterpart is planned as a follow-on (rec-20260704-001). Overridable per-phase via DRAFT frontmatter, mirroring profile.

codeReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Code-review verifier provider selection (Phase 24.3). Fires at cadence settle run when 'code-review' is in the effective gate set. HIGH findings refuse settle unless --force / --allow-code-review-failure.

commitCadence: "task" | "draft" | "manual"

convergence: object

maxAttempts: number

gates: object

evidenceFloor: "executed"

sealed: string[]

handoff: object

Handoff retention (Phase 88, v1.20). Opt-in, count-based pruning of dated SESSION-*.md docs under .cadence/handoff/, applied at handoff-write time (not settle — settle fires per-phase and would race the lastHandoff pointer). retain: N keeps the N most-recent docs (the just-written lastHandoff is always newest, so never deleted) and hard-deletes the rest, best-effort. Omitting retain (the default empty block) disables pruning entirely — same non-destructive-by-default posture the manual dated archive relies on.

optional retain?: number

hooks: object

preToolUseBuildGate: boolean

sessionStart: boolean

stopReminder: boolean

userPromptSubmit: boolean

logging: object

Operational diagnostic logging (Phase 80, Post-v1.0 observability). Persistent default for the structured stderr logger. Env vars override these at runtime: CADENCE_LOG_LEVEL > logging.level, and CADENCE_LOG_FORMAT > logging.format. format omitted → the logger picks pretty on a TTY, else json. Default level silent = off. Distinct from telemetry/skillAudit (user-behavior tracking).

optional format?: "pretty" | "json"

level: "info" | "warn" | "error" | "silent" | "debug" | "trace"

loopEnforcement: "strict" | "soft" | "reminder"

modelPerClass: object

Model id per task class, read by classifyTaskExecution (packages/core/src/dispatch/policy.ts) to resolve the model field it attaches to each task’s dispatch plan entry.

complex: string

drafting: string

mechanical: string

standard: string

notify: object

optional file?: string

Path for the file transport. Defaults to .cadence/anomalies.log.

transport: "file" | "stderr" | "none" | "webhook"

Anomaly-event transport. stderr (default) writes one line per event; file appends NDJSON to notify.file; none drops events; webhook POSTs {events: [...]} JSON to notify.webhook.url (Phase 19.1). Only fires when 'anomaly-notify' is in the effective gate set.

optional webhook?: object

Webhook target for the webhook transport (Phase 19.1). Required when transport === ‘webhook’; ignored otherwise. URL is sensitive (may carry a token); never logged on failure.

optional headers?: Record<string, string>

optional timeoutMs?: number

url: string

packs: object

disabled: string[]

enabled: string[]

perTaskVerifier: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Per-task verifier provider selection (Phase 24.2). Fires at cadence build task <id> --status=DONE when 'per-task-verify' is in the effective gate set (strict×standard, strict×complex).

phaseGuard: object

Phase-collision guard (Phase 83, v1.18 worktree-safety). Refuses to scaffold a phase number already claimed by a sibling git worktree or by origin/<integrationRef>, so a cross-worktree collision fails loud before wasted work instead of silently dual-merging. Observes ground truth (the worktree list + upstream tree) — no reservation registry. enabled: false disables the guard entirely; omitting the block applies the defaults.

enabled: boolean

integrationRef: string

planReview: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Plan-review verifier provider selection (Phase 25.1). Fires at cadence draft approve when 'plan-review' is in the effective gate set (strict×complex). pass=false refuses approve unless --allow-plan-review-failure.

profile: "strict" | "standard" | "auto"

User-involvement profile per DESIGN.md Section 3.1. Defaults to auto.

recommendations: object

Recommendation retention (Phase 102, v1.24). autoArchive (default true) soft-archives a rec the moment it reaches a terminal state: shipped/rejected immediately on promote, and a converted rec when its phase completes SETTLE. Archival is recoverable (recommendation unarchive), so unlike handoff.retain (a hard delete, opt-in) this defaults on. Set false to keep terminal recs in the active ledger; manual recommendation archive still works either way.

autoRoute (Phase 242, default true) is the settle-time writer that turns identified code-review findings into source: 'review' recommendations instead of leaving them stranded in the SUMMARY. Routing is dedup-safe (keyed on Finding.id, never mints a duplicate) and best-effort (a routing failure never blocks settle), so — like autoArchive — it defaults on. Set false to keep settle’s ledger writes limited to the existing auto-archive hook.

autoArchive: boolean

autoRoute: boolean

redundantWorkEnforcement: "warn" | "block" | "off"

Redundant-work enforcement mode (subagent task-redundancy monitoring). off — the check never runs. warn (default) — an edit touching a file owned by an already-terminal (DONE/DONE_WITH_CONCERNS) task is only notified via anomaly-notify. blockhandlePreToolEdit refuses the edit, and the SubagentStop safety net hard-blocks the subagent’s stop. A third off value exists (unlike boundaryEnforcement) because re-touching finished work is a more subjective, more commonly legitimate signal than an out-of-boundary edit. Overridable per-phase via DRAFT frontmatter, mirroring boundaryEnforcement.

resume: object

Resume cross-worktree discovery (Phase 142/143, v1.38 cross-worktree-handoff-discovery). Configures cadence resume behavior when multiple handoff candidates exist across git worktrees. crossWorktree: false disables discovery entirely (today’s exact behavior). autoList: true means when 2+ candidates exist, the interactive picker opens automatically instead of just nudging. Omitting the block applies the defaults.

autoList: boolean

crossWorktree: boolean

remoteCheck: boolean

Origin-freshness probe on resume (fetch + behind-count). The fetch touches remote-tracking refs only. false = never probe.

retro: object

Post-settle retro artifact (Phase 174, rec-20260712-001). enabled (default true) is the master switch: on every successful settle, synthesize a friction digest from the SUMMARY already assembled and write <draftId>-RETRO.json/.md alongside it. offerGithubIssue (default true) is a sub-toggle — when the digest is non-empty and the run is interactive, offer to file a GitHub issue via gh. Setting enabled: false disables both the artifact and the offer; setting only offerGithubIssue: false keeps the artifact but never prompts.

enabled: boolean

offerGithubIssue: boolean

ruleProvider: string

schemaVersion: 1

securityAudit: object

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

Security-audit verifier provider selection (Phase 25.2). Fires at cadence settle run (after code-review, before SUMMARY write) when 'security-audit' is in the effective gate set (strict×complex only). CRITICAL findings refuse settle unless --force / --allow-security-audit-failure.

skillAudit: object

required: string[]

specReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

subagentPolicy: object

Thresholds consumed by packages/core/src/dispatch/policy.ts’s classifyTaskExecution to decide, per task, whether execution should be dispatch or inline (batch-size, size, and context-budget signals).

team.subagentPolicy.contextBudgetThreshold

Section titled “team.subagentPolicy.contextBudgetThreshold”

contextBudgetThreshold: number

largeTaskTokens: number

mechanicalBatchMin: number

telemetry: object

remoteOptIn: boolean

skillInvocations: boolean

tokenUtilization: boolean

templates: object

dir: string

overrides: string[]

tier: object

complex: object

maxTasks: number

minTasks: number

quickFix: object

maxFiles: number

maxTasks: number

standard: object

maxFiles: number

maxTasks: number

uiSpecReview: object

optional model?: string

provider: "local" | "mock" | "anthropic" | "host-cli"

verification: object

coverageMode: "assertion" | "mention"

How strictly an AC token must be referenced by a test (phase 108). mention (default) — any AC-N occurrence anywhere in a matched file counts (whole-file string search; unchanged historical behavior). assertion — the token must appear inside an it()/test() block that contains at least one assertion (expect( / assert / .should).

coverageProfiles: object[]

Operator-extensible assertion-coverage profiles for languages no built-in profile claims (phase 167, T7). Add-only: an entry claiming an extension a BUILT-IN profile already owns (.ts, .py, .go, .rs, .php, …) is refused loudly at config-load time, naming the collision and suggesting a fix — overriding a built-in is not supported. Validated (regex compiles, required fields present, no collision) by packages/core/src/config/loader.ts via mergeCustomProfiles (packages/core/src/verify/coverage-profiles/ registry.ts), never silently accepted or ignored.

coverageScheme: "bare" | "phase-qualified"

Whether an AC test-coverage token must be phase-qualified (phase 239). bare (default) — the historical unqualified AC-N token, which every config predating this field keeps on upgrade. phase-qualified — the token must carry its phase-slice prefix (239-01/AC-3), making it globally unique across the repo’s history.

NOTE on where back-compat actually lives: this field-level .default('bare') is NOT the mechanism that keeps upgraders on ‘bare’. Core’s loadConfig merges the user’s config.json over defaultConfig (below) before parsing, so on that path the key is always present and this default never fires — defaultConfig holding ‘bare’ is the real back-compat contract. This default only covers direct schema parses where verification is present but the key is absent. Both this default, the object-level .default({...}) literal below, and defaultConfig must all carry ‘bare’ independently (in Zod 4 the object-level literal is returned as-is, not re-parsed through the inner field defaults).

optional testCommand?: string

Shell command the build-test-must-pass gate runs at settle time (Phase 39.2). When set, settle runs it and refuses on a non-zero exit unless --allow-failing-build / --force. When absent, the gate is evaluated but cannot enforce — it passes with a one-time note.

testGlobs: string[]

Glob patterns the test-coverage scanner walks. Supports ** and *. Default scans the workspace packages/**/*.test.ts(x).

verifier: object

diffCapBytes: number

Byte budget for the unified diff sent to the --deep verifier (Phase 70). Oversized diffs are truncated with an explicit marker so the verifier knows it saw a partial picture. Default 256KB.

optional localHeaders?: Record<string, string>

Phase 72: extra HTTP headers for the local provider (e.g. an Authorization bearer for a token-gated OpenAI-compatible proxy). Merged over the base content-type. Prefer the CADENCE_LOCAL_API_KEY env var for the bearer; use this for arbitrary headers. Never logged.

optional maxRetries?: number

Phase 72: retry budget for the anthropic provider on transient (429/5xx/network) errors. Omitted → the SDK default holds; 0 disables retries explicitly.

optional model?: string

Optional model override for the Anthropic provider.

provider: "local" | "mock" | "anthropic" | "host-cli"

--deep verifier provider selection (Phase 15). mock always works offline; anthropic requires ANTHROPIC_API_KEY in env.

optional timeoutMs?: number

Phase 72: request timeout (ms) for the anthropic provider. Omitted → the Anthropic SDK default holds. A transient slow call in a settle gate should time out and retry, not hang.

workstreamBackend: string