Skip to Content
Configuration reference

Configuration reference

Every /conclave-* command reads conclave/config.md. This page documents every field, plus the roster schema it works alongside.

conclave/config.md

project_name: "my-project" project_type: "backend" # backend | frontend | mobile | devops | multi project_language: "es" # ISO 639-1 — all generated prose uses this language (v0.16.0+) story_prefix: "US" # prefix for story IDs: US → US-001, TASK → TASK-001 (v1.1.0+) launch_date: "2026-10-01" # target launch date (ISO 8601) or "TBD" (v1.1.0+) product_doc_path: "docs/mvp.md" # relative path to the product planning document (v1.1.0+) stack: language: "TypeScript" # programming language (not the same as project_language) framework: "NestJS" datastore: "PostgreSQL" infrastructure: "Docker + AWS ECS" repo_url: "https://github.com/org/my-project" claude_md_path: "CLAUDE.md" initialized_at: "2026-01-01T00:00:00Z" conclave_version: "1.0.0" team_mode: "solo" # solo | team team_profile: "lean" # lean | full-scrum | custom ceremonies: sprint_planning: required: true # always true — structural qa_verification: required: true # always true — structural ci_wait_timeout_minutes: 20 # how long /conclave-qa polls CI for the UAT run's conclusion daily_standup: required: false backlog_grooming: required: false peer_pr_review: required: false sprint_review: required: false sprint_retrospective: required: false

Field reference

FieldValuesNotes
project_namefree textDefaults to the repo’s basename. Set during /conclave-init.
project_typebackend | frontend | mobile | devops | multiInferred from the detected stack during /conclave-init.
project_languageISO 639-1 code (es, en, pt, …)v0.16.0+. All generated prose (stories, acceptance criteria, bug files, reports, comments) is written in this language. Default es when absent. Set during /conclave-init. Distinct from stack.language (the programming language).
story_prefixfree text (default US)v1.1.0+. Prefix for all story and acceptance file names: US-001-slug.md / AC-US-001.md, or TASK-001-slug.md if overridden. Set during /conclave-init; hand-edit to change (existing files are not renamed).
launch_dateISO date or "TBD"v1.1.0+. Target launch date, carried through generated artifacts. Set during /conclave-init.
product_doc_pathrelative pathv1.1.0+. Path to the product planning document (e.g. docs/mvp.md). /conclave-planning reads this file on Phase A to generate the backlog, architecture, stories, and acceptance criteria. Set during /conclave-init; update to point to a different document at any time.
stack.*free textDetected and confirmed during /conclave-init. stack.language is the programming language, not the natural language used for docs.
repo_urlURLUsed to build links (edit-on-GitHub, PR templates).
claude_md_pathpathWhere Conclave looks for project context when generating founding artifacts.
conclave_versionsemver-ish stringSchema version. Commands check this to decide whether to degrade gracefully against older artifacts.
team_modesolo | teamSet once by /conclave-init. Controls roster shape — see below. Not meant to be hand-edited; growing from solo to a team is a manual roster.md edit plus flipping this field.
team_profilelean | full-scrum | customControls which ceremonies are enforced. See team profiles.
ceremonies.sprint_planning.requiredalways trueStructural. Rejecting an edit to false is enforced by /conclave-planning.
ceremonies.qa_verification.requiredalways trueStructural. Enforced by /conclave-qa.
ceremonies.qa_verification.ci_wait_timeout_minutesinteger, default 20How long a single /conclave-qa run polls the target repo’s CI for the UAT tests it generated before treating “no conclusion yet” as blocked.
ceremonies.daily_standup.requiredtrue | falseOff by default in lean, on in full-scrum.
ceremonies.backlog_grooming.requiredtrue | falseWhen off, grooming happens inside /conclave-planning instead of a separate ceremony.
ceremonies.peer_pr_review.requiredtrue | falseGates whether /conclave-pr-review runs at all — the Tech Lead PR-approval step.
ceremonies.sprint_review.requiredtrue | falseSprint-closeout ceremony. Planned command, not yet shipped.
ceremonies.sprint_retrospective.requiredtrue | falseSprint-closeout ceremony. Planned command, not yet shipped.

Model configuration block (optional, v0.7.0+)

Assign a specific Claude model to each role subagent. Add a models: block to the frontmatter — the entire block is optional; omitting it is a silent no-op and preserves v0.6.0 behaviour exactly.

# Model configuration (optional). Omit this block entirely to use the parent session model for all roles. # Valid model IDs: claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251001 models: default: claude-sonnet-4-6 # fallback for any role not listed below overrides: tech_lead: claude-opus-4-6 # heavyweight: architecture review, ADR evaluation developer: claude-haiku-4-5-20251001 # bulk parallel dev work — speed + cost qa: claude-sonnet-4-6

Resolution chain (per Agent call): models.overrides.<role>models.default → parent session model.

Invalid model name: the command prints WARNING: Unknown model '<value>' for role <role>. Falling back to <fallback>. and continues. Never a hard error.

Role keys: product_manager, tech_lead, scrum_master, developer, designer, devops, qa.

FieldNotes
models.defaultFallback model for any role whose override is absent. Must be a known model ID.
models.overrides.<role>Model for one specific role. Takes precedence over models.default.

Command configuration block (optional)

Assign per-command interaction behavior, and configure the delivery loop.

# commands: # dev: # interactive: false # /conclave-dev autonomous (v0.9.0+) — ends at review # loop: false # Three-Wave Delivery Loop (v0.15.0+); implies interactive: false # schedule: # recurring local-time gate # timezone: "America/Argentina/Buenos_Aires" # IANA; required when schedule is present # days: [fri, sat, sun] # mon..sun # start_time: "19:00" # local wall clock # end_time: "07:00" # may cross midnight # duration_days: 3 # campaign length # active_from: "2026-07-31" # local start date; omit = first eligible day # enforce: true # budgets: # max_attempts_per_story: 3 # counts every return to Wave 1 # max_ci_wait_minutes: 20 # max_total_tokens: 2000000 # best-effort ledger — not a billing guarantee # max_wall_clock_hours: 12 # exact backstop # sprint: # interactive: false # headless one-pass; never merges, no schedule, no budgets # notifications: # slack: # enabled: false # webhook_env: SLACK_WEBHOOK_URL # env var NAME only — never paste the URL here # on_success: true # on_partial: true # on_hitl: true # sent the moment a blocker needs a human # repo: # integration_branch: develop # PR base branch; Conclave never merges into it
  • commands.dev.interactivetrue (default) or false (autonomous /conclave-dev, ending at review). See /conclave-dev.
  • commands.dev.loop (v0.15.0+) — false (default) or true (Three-Wave Delivery Loop: W1 Dev + green CI → W2 QA → W3 forced Tech Lead, failures return to W1, run report, no merge, never closes the sprint). Implies interactive: false. CLI: /conclave-dev --loop. Note this key makes every /conclave-dev run in the repo a full three-wave run — prefer the flag.
  • commands.dev.schedule — recurring local-time gate (see Scheduling). Conclave does not start itself — you supply /loop, an Automation, or cron. The pre-0.15.0 window_start / window_end pair is no longer honored: the loop prints a migration message and stops.
  • commands.dev.budgets.max_total_tokens — best-effort dispatch ledger with disclosed precision (estimated / measured / mixed). Set provider-side limits for a hard spend cap. Budgets are per run.
  • commands.sprint.interactivetrue (default) or false (headless one-pass with documented planning defaults). Since 0.15.0 it is not a delivery loop: no self-heal, no schedule, no budgets, no merge. commands.sprint.schedule / budgets / merge_method are ignored no-ops. See /conclave-sprint.
  • Model routing — the loop reuses the top-level models: block (developer, designer, devops, qa, tech_lead). There is no commands.dev.models schema.

Coercion table — a mis-typed boolean falls back with a warning:

ValueResolvedWarning
true (boolean)true — interactiveno
false (boolean)false — autonomousno
"true" / "false" (strings, case-insensitive)boolean equivalentyes
1 (or any non-zero integer)trueyes
0falseyes
any other valuetrue (safe fallback)yes
absenttrue (silent default)no

commands.dev.loop uses the same table with inverted polarity: absent or unrecognised resolves to false (no loop), because the safe default is a single dev pass rather than an unattended three-wave run.

Ad-hoc CLI override/conclave-dev --no-interaction US-042, /conclave-dev --loop, or /conclave-sprint --no-interaction (also --headless). There is no --force-interaction flag, and no flag to disable a configured loop.

Lab test configuration block (optional)

Enable and configure executable integration probes (see Lab tests).

# lab_test: # enabled: false # integration_branch: develop # branch where lab tests run (post-merge) # runner: auto # auto | playwright | newman | bash # timebox_minutes: 30 # max seconds before marking the run as blocked # stories: # generate_on: pr-review # pr-review — TL generates the spec on PR approval # bugs: # severity_threshold: high # high | critical — only generate lab specs for bugs at or above this level

All fields are optional when enabled: false. When enabled: true:

FieldDefaultNotes
integration_branchdevelopThe branch QA switches to before running the lab test. Must match repo.integration_branch.
runnerautoRunner selection. auto lets the TL infer from the stack and integration type.
timebox_minutes30If the Verify command does not exit within this many minutes, the run is marked blocked.
stories.generate_onpr-reviewWhen to generate the lab spec for stories. Only pr-review is supported in this version.
bugs.severity_thresholdhighMinimum severity for lab spec generation on bugs. high = generates for high and critical.

Lab tests also require conclave/lab-config.md — a gitignored file with real environment variable values. The committed lab-config.template.md documents the schema. Copy it and fill in values before running /conclave-qa --lab.

Conventions block

config.md’s body (below the frontmatter) also documents team conventions every command respects:

  • Branch naming: feat/US-NNN-<slug> for stories, fix/<short-slug> for bugs, chore/<short-slug> for maintenance.
  • Commit messages: reference the story ID, e.g. feat(US-001): add JWT middleware.
  • PR titles: mirror the story title, e.g. US-001: Add JWT middleware.

Edit this file directly to change any of these — the next /conclave-* command picks up the change. Commit the edit so the rest of the team sees it.

conclave/team/roster.md

The roster’s primary axis is Discipline, not a Scrum role. Its shape depends on team_mode:

team_mode: team

MemberGitHub handleDisciplineProcess role(s)Notes
Ada@adaTech Lead
Bea@beaFrontendPM
Cy@cyBackend
Dee@deeQA
TBDDesignerUnstaffed
Fen@fenDevOpsSM
  • The Discipline column can hold more than one value (comma-separated) when one person covers several.
  • An unstaffed discipline keeps its row with TBD in place of the name/handle — the discipline still exists, it’s just not covered yet.
  • Process role(s) is optional: PM, SM, both, or blank.

team_mode: solo

MemberGitHub handleDisciplineProcess role(s)Notes
Ada@adaTech Lead, Frontend, Backend, QA, Designer, DevOpsPM, SMSolo project — one person covers every discipline.

Role rules

  • One person can hold multiple disciplines and process roles at once.
  • The Tech Lead has final say on architectural decisions and ADRs.
  • Whoever holds the Product Manager process role has final say on priority and acceptance.
  • Whoever holds the Scrum Master process role has final say on process and ceremony cadence.
  • If no one holds PM or SM, the Tech Lead and team decide priority and process by consensus.
  • A roster written before the discipline model shipped (no Discipline column) is not rejected — commands treat every member as multi-discipline and print a one-time compatibility hint.

Story frontmatter

Every story file (conclave/sprints/SPRINT-NNN/stories/US-NNN-<slug>.md) carries:

id: "US-042" title: "Add JWT middleware" priority: "must" # must | should | could | wont estimate: "M" # XS | S | M | L | XL status: backlog # backlog | ready | in-progress | review | verified | done dependencies: [] assignee: "" discipline: "" # frontend | backend | qa | design | devops | mobile | multi sprint: "SPRINT-003" created_at: "2026-01-01T00:00:00Z"

discipline starts empty and is set by the Tech Lead during /conclave-planning — see the story state machine for exactly when each field becomes required.

conclave/team/testing-environments.md

Rendered by /conclave-init as a placeholder. Declares the names of the CI environment variables and secrets the UAT tests QA generates read at run time — never real values. QA never resolves, reads, or writes a secret itself; the target repo’s own CI does, from its own secrets store.

## Environments | Name | Playwright base URL env var | API base URL env var | Notes | |---|---|---|---| | TBD | TBD | TBD | Fill in before UAT is enabled. | ## Postman variables | Postman variable | Populated from CI secret/env var | |---|---| | TBD | TBD | ## Test users | Label | Represents | CI secret/env var holding the credential | |---|---|---| | TBD | e.g. standard-user, admin | TBD |

Until every TBD is replaced with a real variable/secret name, /conclave-qa skips UAT generation entirely and verifies acceptance criteria exactly as it did before this file existed — a missing or unfilled testing-environments.md is never a hard failure.

conclave/team/board.md

Rendered by /conclave-board — the one config surface for the Kanban board’s branding. No secrets belong here.

--- status: living last_updated_at: "2026-01-01T00:00:00Z" company_name: "Acme Corp" # TBD renders a generic default header logo_path: "logo.svg" # relative to conclave-board/public/, or a URL — TBD shows no logo primary_color: "#4F46E5" # hex — invalid/TBD falls back to a neutral default accent_color: "#14B8A6" # hex — same fallback behavior ---

The board’s font is fixed to Poppins and is not configurable here. Edits apply live on the board’s next hot reload — unlike story data, which flows through a generated JSON snapshot regenerated by a plugin hook (see the command page for details).

Last updated on