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: falseField reference
| Field | Values | Notes |
|---|---|---|
project_name | free text | Defaults to the repo’s basename. Set during /conclave-init. |
project_type | backend | frontend | mobile | devops | multi | Inferred from the detected stack during /conclave-init. |
project_language | ISO 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_prefix | free 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_date | ISO date or "TBD" | v1.1.0+. Target launch date, carried through generated artifacts. Set during /conclave-init. |
product_doc_path | relative path | v1.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 text | Detected and confirmed during /conclave-init. stack.language is the programming language, not the natural language used for docs. |
repo_url | URL | Used to build links (edit-on-GitHub, PR templates). |
claude_md_path | path | Where Conclave looks for project context when generating founding artifacts. |
conclave_version | semver-ish string | Schema version. Commands check this to decide whether to degrade gracefully against older artifacts. |
team_mode | solo | team | Set 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_profile | lean | full-scrum | custom | Controls which ceremonies are enforced. See team profiles. |
ceremonies.sprint_planning.required | always true | Structural. Rejecting an edit to false is enforced by /conclave-planning. |
ceremonies.qa_verification.required | always true | Structural. Enforced by /conclave-qa. |
ceremonies.qa_verification.ci_wait_timeout_minutes | integer, default 20 | How 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.required | true | false | Off by default in lean, on in full-scrum. |
ceremonies.backlog_grooming.required | true | false | When off, grooming happens inside /conclave-planning instead of a separate ceremony. |
ceremonies.peer_pr_review.required | true | false | Gates whether /conclave-pr-review runs at all — the Tech Lead PR-approval step. |
ceremonies.sprint_review.required | true | false | Sprint-closeout ceremony. Planned command, not yet shipped. |
ceremonies.sprint_retrospective.required | true | false | Sprint-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-6Resolution 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.
| Field | Notes |
|---|---|
models.default | Fallback 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 itcommands.dev.interactive—true(default) orfalse(autonomous/conclave-dev, ending atreview). See/conclave-dev.commands.dev.loop(v0.15.0+) —false(default) ortrue(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). Impliesinteractive: false. CLI:/conclave-dev --loop. Note this key makes every/conclave-devrun 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, orcron. The pre-0.15.0window_start/window_endpair 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.interactive—true(default) orfalse(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_methodare ignored no-ops. See/conclave-sprint.- Model routing — the loop reuses the top-level
models:block (developer,designer,devops,qa,tech_lead). There is nocommands.dev.modelsschema.
Coercion table — a mis-typed boolean falls back with a warning:
| Value | Resolved | Warning |
|---|---|---|
true (boolean) | true — interactive | no |
false (boolean) | false — autonomous | no |
"true" / "false" (strings, case-insensitive) | boolean equivalent | yes |
1 (or any non-zero integer) | true | yes |
0 | false | yes |
| any other value | true (safe fallback) | yes |
| absent | true (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 levelAll fields are optional when enabled: false. When enabled: true:
| Field | Default | Notes |
|---|---|---|
integration_branch | develop | The branch QA switches to before running the lab test. Must match repo.integration_branch. |
runner | auto | Runner selection. auto lets the TL infer from the stack and integration type. |
timebox_minutes | 30 | If the Verify command does not exit within this many minutes, the run is marked blocked. |
stories.generate_on | pr-review | When to generate the lab spec for stories. Only pr-review is supported in this version. |
bugs.severity_threshold | high | Minimum 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
| Member | GitHub handle | Discipline | Process role(s) | Notes |
|---|---|---|---|---|
| Ada | @ada | Tech Lead | ||
| Bea | @bea | Frontend | PM | |
| Cy | @cy | Backend | ||
| Dee | @dee | QA | ||
| TBD | Designer | Unstaffed | ||
| Fen | @fen | DevOps | SM |
- The
Disciplinecolumn can hold more than one value (comma-separated) when one person covers several. - An unstaffed discipline keeps its row with
TBDin 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
| Member | GitHub handle | Discipline | Process role(s) | Notes |
|---|---|---|---|---|
| Ada | @ada | Tech Lead, Frontend, Backend, QA, Designer, DevOps | PM, SM | Solo 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
Disciplinecolumn) is not rejected — commands treat every member asmulti-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).