This guide covers the day-to-day Specrew lifecycle: planning, execution, review/demo, retrospective, and drift handling.
After specrew init, start feature work with:
specrew startspecrew start is the canonical downstream entrypoint. The specrew command
resolves through the PowerShell module alias (installed via Install-Module Specrew -Scope CurrentUser -SkipPublisherCheck, or via
Import-Module C:\Dev\Specrew\Specrew.psd1 from a local clone). For environments
that can't load the module, the direct-script fallback is
pwsh -File C:\Dev\Specrew\scripts\specrew.ps1 start — same arguments otherwise.
It prepares the Crew handoff, launches the selected host CLI (--host copilot|claude|codex|antigravity, default copilot) when available, and tells the Crew to drive the full Spec Kit lifecycle with an explicit clarify gate: specify, then clarify, then plan, tasks, and implement, with skip rationale reserved for resumed specs that are already clarified and materially unchanged. The intended human role is to answer only the unresolved questions the Crew cannot safely answer from repo context or current artifacts. You can optionally pass a short plain-language request if you already know the next feature or fix.
For new brownfield projects, the handoff includes discovery from existing code, manifests, docs, and recent git history so the Crew can reconstruct the current system baseline, seed the starting spec, and propose concrete stack/domain specialists before it asks broad intake questions. If you start without a grounded request, Specrew keeps the host out of autopilot so the Crew can ask the next intake question and wait for your answer before it invokes speckit.specify.
Once the scope is grounded, Specrew launches from the project directory, reuses the current terminal by default, and auto-loads a compact bootstrap message that points the host at .specrew\last-start-prompt.md, .specrew\start-context.json, and the human-readable .specrew\start-summary.md. Specrew defaults to gate-respecting mode — the Crew stops at every lifecycle approval boundary (specify, clarify, plan, tasks, implement, review, retro) and waits for explicit human verdict before advancing. Specrew also defaults to --allow-all for tool-call approval (translated per host: Copilot --allow-all, Claude --dangerously-skip-permissions, Codex --full-auto, Antigravity --dangerously-skip-permissions); use --prompt-approvals to keep each tool call interactive. The two flags are independent: --allow-all controls tool-call approval; --autonomous controls whether the Crew advances through lifecycle gates without human input. Pass --autonomous only for unattended runs such as overnight execution where you have already authorized the full lifecycle. Pass --new-window if you explicitly want a detached PowerShell window.
As of v0.27.0, four host runtimes are supported — Claude Code, Codex CLI, GitHub Copilot CLI, and Antigravity (agy). The interactive host-selection menu shows installed hosts in priority order (Claude → Codex → Copilot → Antigravity); the --host flag non-interactive default remains copilot for predictability in CI/automation. Each host launches with the same Specrew bootstrap context but uses host-native CLI flags via Specrew's per-host translation layer (see the "Multi-Host Launch" section below for the per-host flag matrix). Optional delegated agents such as Claude and Codex are also available as additive routing choices for review-heavy and problem-solving-heavy work when enabled — that's an orthogonal concern from --host (which picks the launching CLI), captured in .squad\decisions.md as the requested agent family, effective agent family, concrete model ID, and fallback reason when routing is not honored. Specrew applies a no-gap policy at review/closure time: known gaps across spec, implementation, tests, docs, or observability must be fixed in the current iteration or explicitly deferred with your approval and recorded evidence before the run is claimed complete. The selected host may still ask you to trust the project directory on first launch.
If you want a repeatable mission-completion smoke check of the real handoff boundary, run tests\manual\copilot-squad-smoke.ps1. It provisions a fresh repo, runs specrew init, runs specrew start, and can optionally launch the real Copilot+Squad session for operator-observed end-to-end validation. When launched, the smoke harness now defaults to same-window monitoring so the live session can be observed directly; use its -NewWindow switch only when you intentionally want a detached window.
Starting in v0.25.0, Specrew enforces lifecycle boundary discipline mechanically at the tool-call layer, not just by prose convention. Proposal 065 (Feature 039) ships skill-level authorization gates inside every boundary-advancing skill. The Crew cannot chain past a boundary without an explicit, recognized verdict from you.
When the Crew surfaces a boundary handoff and asks for your verdict, the parser accepts exact shapes only. Ambiguous prose (looks good, yep, continue, fine, okay) is rejected and re-prompted. The canonical forms:
approved for <boundary>-boundary entry— authorize advance INTO the named boundaryapproved for <boundary>— shorter equivalentapproved for review-boundary AND review-signoff— compound, for legitimate two-boundary progression where a substantive review covers both at oncerejected for <boundary>— explicit refusal; Crew returns to clarify or re-planparked— hold the current state; no advancement
The full nine boundaries are: specify, clarify, plan, tasks, before-implement, review-signoff, retro, iteration-closeout, feature-closeout.
For migration replays, debugging stuck enforcement, or batch lifecycle work where every-boundary authorization would create unsafe friction:
specrew start --bypass-boundary-enforcement --reason "schema migration replay"The --reason flag is mandatory. Session-scoped (not per-boundary) — one bypass disables enforcement for the whole session, which discourages casual use. Every bypassed boundary writes an audit-trail entry to .squad/decisions.md.
--autonomous (Proposal 066, shipped 2026-05-20) controls whether the host runtime advances between agent turns without user input. Boundary enforcement (F-039) controls whether the agent can chain across boundaries within a single turn. They are independent:
--autonomousalone: agent advances turn-by-turn but still hits skill-level gates at every boundary- Boundary enforcement alone (default): gates always fire; turns wait for input
- Both: gates still fire; turns advance without input but every boundary surfaces a directive
--bypass-boundary-enforcement: suspends gates;--autonomousstill controls turn advancement
Every time the Crew stops at a boundary, the console shows a three-section handoff in this exact shape:
## What I just did
[Substantive narration of what changed — features advanced, artifacts written, tests run, decisions
captured. Numeric references are paired with plain-language scope phrases (`FR-007, the sin/cos
extension`). The committed-evidence reference (commit SHA range) appears here too.]
## Why I stopped
I stopped at the <boundary> boundary because <reason the next step needs you>.
## What I need from you
[The single best immediate action. Review targets are linked via BARE `file:///` URIs (NOT
markdown-link form `[name](url)`) so you can Ctrl+Click through to the artifact. Names the
canonical verdict shape you should type.]
The three sections are not stylistic — they are a methodology guarantee from Feature 016 (Substantive Interaction Model, Pillar 1). The format lets you scan a handoff in seconds and decide whether to advance, even when you have been away from the session.
Bare file:/// URIs, not markdown link form. Modern PowerShell terminals (Windows Terminal, VS Code integrated terminal) auto-detect bare file:/// URIs and make them Ctrl+Clickable. They do NOT render markdown — so if the Crew emits [plan.md](file:///C:/foo/plan.md), the URL is hidden inside the parentheses and you cannot click through. If you see markdown-link form in a handoff, that is the regression: re-prompt the Crew with please emit bare file:/// URIs, not markdown-link form.
What to do:
- Read all three sections. The flow is intentional: what happened → why you matter now → what to type.
- Ctrl+Click any bare
file:///link the Crew shows you inWhat I need from you— those are the artifacts the verdict applies to. - Type one of the canonical verdict shapes from the "Recognized verdict shapes" section above. Ambiguous prose (
looks good,continue) is rejected and re-prompted.
If you see a handoff that doesn't follow this format — for example, a bare technical status line, a pile of tool output, or a question without context — that is a methodology regression. Re-prompt the Crew with please use the three-section boundary handoff format and the Crew should regenerate the handoff. If it persists across hosts (Copilot / Claude / Codex / Antigravity), open an issue — the canonical templates govern this UX promise.
Mid-task progress updates are NOT three-section handoffs. When the Crew is still actively working (writing a file, running a test, waiting on a background process), it uses single-line prose without the user-action section. The three-section format is reserved for boundary stops where you are the immediate blocker.
The lifecycle does not end at implement. Two more boundaries close the work: iteration-closeout and feature-closeout. They are not ceremonial — they are what produces the final artifacts, marks the work durably "done", and gates the next iteration / next feature from starting.
Fires after the Crew passes review-signoff and writes retro.md. Your verdict (approved for iteration-closeout) triggers Invoke-SpecrewBoundaryStateSync -BoundaryType iteration-closeout, which:
- Generates
specs/<feature>/iterations/<NNN>/dashboard.md— per-iteration snapshot with task verdicts, phase variance, drift summary, FR scoreboard, velocity. - Appends the iteration to
.specrew/closed-iteration-index.yml— the closed-iteration index is what the validator uses to skip already-finished iterations on later runs (Proposal 085, F-036). Without this entry the validator re-validates the iteration on every future run. - Updates the feature's iteration
Statustocompleteiniterations/<NNN>/plan.md. - Sets
session_state_boundary: iteration-closeoutin.specrew/start-context.jsonso the nextspecrew startknows the iteration is done.
The next iteration cannot start until this one closes. If you skip iteration-closeout and just start typing about iter-002 work, the Crew will resume the open iter-001 because that is what session-state says is in flight.
Fires after the LAST iteration of a feature is closed. Your verdict (approved for feature-closeout) triggers the same sync script with -BoundaryType feature-closeout, which:
- Generates
specs/<feature>/closeout-dashboard.md— cross-iteration FR scoreboard, pillars-delivered table, cross-feature bundle disclosure (if any), velocity snapshot. - Marks the feature complete in
.specrew/roadmap.yml(if the feature appears there). - Sets
session_state_boundary: feature-closeout— the nextspecrew startknows this feature is done and can start a new one.
The next feature cannot start until this one closes. Same mechanic as iteration-closeout: in-flight features stay in flight until you say "done".
The canonical forms (other parser-recognized shapes are listed in the "Boundary Enforcement" section above):
approved for iteration-closeoutapproved for feature-closeoutapproved for iteration-closeout AND feature-closeout— compound, when the closing iteration is also the feature's last iteration
Closeout is the explicit "this is done" gate, not the "I'm pausing" gate.
- If you only want to stop for the day, close the terminal. Session state in
.specrew/start-context.jsonresumes you at the same boundary on nextspecrew start. - If you discover unfinished work after starting closeout, type
rejected for iteration-closeout(orparked) — the Crew returns to plan, you can add another iteration, and re-attempt close later. - If a feature genuinely never finishes (long-running spike, abandoned exploration, deferred-to-rewrite), the methodology stance is still to close — with a feature-closeout artifact that explicitly records the abandonment reason. Never-closing is not a state Specrew supports; it pollutes the session-state machinery and the closed-iteration index. Use
rejected for feature-closeoutonly if you genuinely intend to continue the feature later.
| Boundary | Files written | State changes |
|---|---|---|
iteration-closeout |
iterations/<NNN>/dashboard.md |
closed-iteration-index.yml += this iter; plan.md Status = complete |
feature-closeout |
closeout-dashboard.md (one per feature, at feature root) |
roadmap.yml feature status = complete; start-context.json session_state_boundary = feature-closeout |
These artifacts are the canonical input for future estimation calibration (velocity reads them) and for any historical reconstruction of "what did this feature ship?". If you skip closeout, you keep the work but lose the index entry, the dashboard rendering, and the calibration data.
A narrative-only worked example showing how a real two-iteration feature flows end-to-end. The first iteration builds the calculator MVP. The second iteration adds scientific functions. Read this once before trying it — it is the shortest path to understanding what Specrew does at each boundary.
mkdir C:\Dev\calculator-walkthrough
cd C:\Dev\calculator-walkthrough
git init
specrew initspecrew init deploys the governance scaffold, slash-command catalog, and canonical Crew agents to .specrew/team/agents/. Same as the Quickstart in getting-started.md.
specrew start "Build a web-based calculator with only the + - * / MR MC M+ M- operations"Specrew refreshes the runtime handoff, picks the default host (Copilot CLI), and launches with bootstrap context auto-loaded. The Crew (Spec Steward, Planner, Implementer, Reviewer, Retro Facilitator) reads the canonical agents from .specrew/team/agents/.
The Spec Steward asks for any clarifications it cannot answer from the prompt + repo, then proposes specs/001-calculator/spec.md with:
- 6 functional requirements (FR-001 four arithmetic operations / FR-002 memory store/recall/add/subtract / FR-003 input validation / FR-004 division-by-zero handling / FR-005 keyboard support / FR-006 form-submit prevention)
- 4 acceptance criteria
- Stack pick: vanilla HTML/CSS/JS (no framework — the prompt is small)
You see a handoff in the console: "Spec ready. What I just did: drafted spec.md with 6 FRs. Why I stopped: spec needs your sign-off before clarify. What I need from you: approved for specify to advance."
Type: approved for specify.
The Crew surfaces 2 questions: should division-by-zero throw, display Error, or display Infinity? Should sin/cos/etc. be in scope?
You answer "display Error" + "no — out of scope for this iteration".
The Crew commits specs/001-calculator/clarifications.md and asks for approved for clarify. Type it.
The Planner writes specs/001-calculator/plan.md with:
- Phase plan: Discovery (0.5) / Implementation (4) / Review (1) / Rework (0.5) = 6 SP
- File map:
calculator.html/calculator.css/calculator.js/calculator.test.js - Routing policy: standard reasoning class for the implementer
Type: approved for plan.
The Planner writes specs/001-calculator/tasks.md and the iteration plan specs/001-calculator/iterations/001/plan.md with 4-6 tasks bounded by FRs.
Type: approved for tasks.
The Implementer surfaces a short pre-flight: scaffolds will write to these files, here is the testing strategy, here is the validation criterion.
Type: approved for before-implement.
The Implementer writes the four files + 11 unit tests. Tests run; all 11 pass. The Reviewer reads the implementation, runs the validator, writes iterations/001/review.md with task verdicts.
Type: approved for review-signoff.
The Retro Facilitator writes iterations/001/retro.md with Phase Variance, Drift Summary (0 drift events), What Went Well / What Didn't Go Well, Improvement Actions.
Type: approved for retro.
The Crew runs sync-iteration-closeout, which generates iterations/001/dashboard.md and appends iter-001 to .specrew/closed-iteration-index.yml. The Spec Steward summarizes: "iter-001 complete. 6 SP delivered. 11 tests green. 0 drift events. Velocity: 6 SP / 1 day."
Type: approved for iteration-closeout.
The Crew now asks: "More iterations on this feature, or feature-closeout?" — this is the explicit decision point where you either continue with iter-002 (which we will, below) or end the feature.
You have a working calculator. Now you want to add scientific operations. This is a NEW iteration of the SAME feature — the spec scope changes, but the feature identity does not.
specrew start "Add sin, cos, atan, and sqrt to the calculator"Specrew sees session_state_boundary: iteration-closeout (last state from iter-001) and the same feature 001-calculator still open. Instead of starting a new feature, it offers iter-002 on the existing feature. You accept.
The Spec Steward re-reads spec.md and proposes 4 additional FRs (FR-007 sin / FR-008 cos / FR-009 atan / FR-010 sqrt) and 2 new ACs. It also flags a small drift candidate: the original FR-005 said "keyboard support" — should s, c, t, r shortcuts now bind to the new functions? You decide: yes.
Type: approved for specify.
The Crew asks: angle mode for trig functions — radians, degrees, or user-toggle? sqrt of a negative number — Error, NaN, or display i (imaginary unit)?
You answer: "radians (no toggle in this iter)" + "display Error (match div-by-zero handling)".
Type: approved for clarify.
The Planner extends iterations/002/plan.md with 3-4 tasks for the 4 new operations + keyboard binding update + 8 new unit tests. Phase plan: Implementation (3) / Review (0.5) / Rework (0.5) = 4 SP.
The Crew notes in plan.md Phase Baseline: "Cross-iteration velocity calibration: iter-001 was 6 SP / 1 day. iter-002 estimated at 4 SP." This is what the iter-001 dashboard.md made possible.
Type each: approved for plan, approved for tasks.
The Implementer adds 4 button handlers + 8 unit tests + updates keyboard event listener. All 19 tests (11 old + 8 new) pass. Reviewer signs off. Retro records the variance: actual 4.5 SP vs estimated 4 SP, +0.5 SP from sqrt(-1) edge case requiring an extra unit test.
Type: approved for review-signoff, approved for retro.
iterations/002/dashboard.md written; iter-002 appended to closed-iteration-index. Velocity now reads as 4.5 SP / 1 day for iter-002, cross-iteration average 5.25 SP/day. Future iterations on this feature will use that figure for calibration.
Type: approved for iteration-closeout.
You decide iter-002 is the last iteration of this feature. The Crew runs sync-feature-closeout, which:
- Generates
specs/001-calculator/closeout-dashboard.mdwith the cross-iteration FR scoreboard (FR-001 through FR-010 all ✅ shipped), Pillars delivered, velocity table (iter-001 6 SP / iter-002 4.5 SP). - Marks the feature complete in
.specrew/roadmap.yml. - Sets
session_state_boundary: feature-closeoutin.specrew/start-context.json.
Type: approved for feature-closeout.
The next specrew start "<new feature description>" now starts a fresh feature, because session-state says calculator is done.
- The lifecycle has a defined end.
feature-closeoutis the canonical "this is done" gate. Until you authorize it, the feature is in flight. - Iterations are scoped, not chunked. Each iteration extends or refines the feature's spec. The spec is the durable artifact; iterations are how you grow it.
- Velocity calibration is a closeout side-effect.
dashboard.mdfrom iter-001 made iter-002's estimate land more accurately. This compounds — features with many iterations get better calibration over time. - Session-state preserves your place. Closing the terminal between iter-001 and iter-002 (or in the middle of an iteration) is safe. The next
specrew startresumes where you left off.
If you want to try the walkthrough yourself, run the commands above against your own machine. The exact wording of Crew handoffs will vary by host (Copilot / Claude / Codex / Antigravity) and by model, but the boundary sequence and the artifacts produced are identical.
The v0.24.3 process-optimization bundle and v0.25.0 boundary-enforcement release together shipped substantial discipline and performance improvements. Headline items:
- F-039 / Proposal 065 — Launch-Mode Boundary Enforcement (v0.25.0): the section above
- F-032 / Proposal 090 — Closeout Lifecycle Sync Commands:
/speckit.specrew-speckit.sync-review-signoff,sync-retro,sync-iteration-closeout,sync-feature-closeout— canonical sync slash commands that wrapInvoke-SpecrewBoundaryStateSyncand prevent the non-canonical boundary-string bug class (feature-closed,iteration-closed, etc.). Use these instead of inline PowerShell at every closeout boundary. - F-033 / Proposal 088 — Markdown Lint Pre-Boundary Auto-Fix: every
Invoke-SpecrewBoundaryStateSyncinvocation runsmarkdownlint-cli --fixon changed.mdfiles BEFORE any state-file writes. Auto-fixable violations get fixed and surface a directive to commit the fixes aschore(lint):. Unfixable violations halt boundary sync with file:line:rule diagnostics. - F-034 / Proposal 086 Pillar 1 — Validator Result Memoization: per-iteration validator results cached at
.specrew/.cache/validator-cache.json(gitignored). Edit-validate-edit loops drop from ~30s to <100ms on cache hits. Use-NoCacheReadto force fresh validation. - F-035 / Proposal 084 — Validator Iteration Parallelization:
validate-governance.ps1parallelizes iteration validation viaForEach-Object -Parallel. Cold-cache 44-iteration runs project ~5× speedup at default throttle 6.-NoParallelfalls back to serial;-ThrottleLimit <N>tunes concurrency. - F-036 / Proposal 085 — Closed-Iteration Index:
.specrew/closed-iterations.ymlrecords every closed iteration. Validator's full-repo path skips them unless-IncludeClosedis set. Use-RebuildClosedIndexto regenerate from state.md walk. - F-037 / Proposal 086 Pillar 5 — Repetition Detector: logs validator invocations to
.specrew/.cache/last-commands.log(FIFO at 20); emits[validator-repetition-warning]on the 3rd consecutive identical run against unchanged code. Diagnostic only — non-blocking. - F-038 / Proposal 089 minimal slice — PR Review Integration: validator soft-warning surfaces when host has automated review available (e.g., GitHub Copilot reviewer detected via
ghCLI + github.com remote) andpr-review-resolution.mdartifact is missing. Captures Copilot's PR findings into a structured per-iteration artifact. - F-031 / Proposal 082 Tier 1 — Boundary Commit + Upstream Push Discipline: methodology text additions across coordinator-governance.md + all 5 agent charters mandating semantic commit groups before boundary sync and immediate push after each commit. See the "Boundary Commit Discipline" section below.
- F-030 / Proposal 083 — Local Validator Auto-Scope: feature-branch
validate-governance.ps1runs auto-detect the base ref and default to changed-only scope. Use-FullRunto force a complete sweep.
- Planning
- Execution
- Review/Demo
- Retrospective
Use the dashboard whenever you need a one-screen delivery summary:
specrew where
specrew status --compact
specrew where --team --no-colorDirect-script equivalent (no module): replace
specrewwithpwsh -NoProfile -File C:\Dev\Specrew\scripts\specrew.ps1.
The dashboard reads:
.specify/feature.jsonfor the active featurespecs/<feature>/iterations/<NNN>/artifacts for closed and active iteration data.specrew/roadmap.ymlfor roadmap phases when present
Closeout workflows now preserve historical dashboard snapshots:
specs/<feature>/iterations/<NNN>/dashboard.mdspecs/<feature>/closeout-dashboard.md
These snapshots are generated automatically during iteration-closeout and feature-closeout scaffolding and are preserved as immutable historical records.
The validator may emit WARN [dashboard] lines when roadmap declarations drift
from canonical shipped work or when required dashboard artifacts are missing
after the rollout cutover (historical pre-rollout iterations are grandfathered).
Core iteration artifacts live under specs/<feature>/iterations/<NNN>/.
Goal: produce a requirement-traceable plan before execution starts.
Minimum artifact: plan.md
Helpful scaffold:
pwsh -File .\.specify\extensions\specrew-speckit\scripts\scaffold-iteration-plan.ps1 `
-SpecPath .\specs\001-your-feature\spec.md `
-IterationNumber 001Checklist:
- Every task maps to requirement IDs
- Effort and owner are filled
- Capacity is explicit
plan.mdincludes an## Effort Modelsnapshot that matches.specrew/iteration-config.yml- The plan reflects
.specrew/iteration-config.ymlvalues for effort unit, bounding mode, overcommit threshold, and defer strategy - If the plan exceeds the configured threshold,
validate-governance.ps1must fail the planning artifact and name explicit deferral candidates from the lowest-priority requirement slices first - Status is
planninguntil approved
Goal: complete tasks while keeping task state and drift evidence current.
Minimum artifacts: state.md, drift-log.md
Helpful scaffold:
pwsh -File .\.specify\extensions\specrew-speckit\scripts\scaffold-iteration-artifacts.ps1 `
-SpecDirectory .\specs\001-your-feature `
-IterationNumber 001Checklist:
- Update task status in
plan.md - Keep
state.mdcurrent (Last Completed Task,Tasks Remaining) - Log drift events with requirement citations in
drift-log.md
If execution is interrupted, use the resume helper to recover the next task from state.md and plan.md. The helper repairs stale or partial execution metadata when the task table provides enough information to continue safely:
pwsh -File .\.specify\extensions\specrew-speckit\scripts\resume-iteration.ps1 `
-IterationDirectory .\specs\001-your-feature\iterations\001 `
-ResumeMode continueGoal: record per-task verdicts against requirements.
Minimum artifact: review.md
Helpful scaffold:
pwsh -File .\.specify\extensions\specrew-speckit\scripts\scaffold-review-artifact.ps1 `
-IterationDirectory .\specs\001-your-feature\iterations\001Checklist:
- Verdict for each completed task:
pass,needs-work, orblocked - Overall verdict recorded
- Any unresolved drift explicitly called out
Specrew treats a concrete human-found defect in a slice that the Squad reviewer already approved or marked ready as a Reviewer Regression Event. The event stays a soft-warning governance signal, but it immediately changes the next review path for that feature:
- Route to the lowest stronger reviewer class that is actually available.
- If no stronger class exists, route to an independent reviewer owner at the same class.
- If the strongest class is already active and no independent reviewer remains, hold for explicit human direction before review continues.
This reviewer-side routing is additive to the existing implementer-side escalation flow; Specrew does not replace the original implementer FR-027 behavior just because a reviewer regression occurred.
Reviewer regressions do not allow unlimited implementer rotation. By default, Specrew caps the implementer chain at two rotations beyond the original implementer. Once the cap is active, the next revision must be:
- a human-owned revision, or
- an explicitly justified alternate owner recorded in
.squad\decisions.md
Specrew does not synthesize another implementer specialist after the cap is reached.
When reviewer closeout artifacts are scaffolded, the lockout-cap handoff is visible in both reviewer-index.md and specrew review. The following lines were verified against actual scaffold-reviewer-artifacts.ps1 and specrew review output on the lockout-cap fixture:
Lockout Cap: active | chain=3/2 | locked_out=Standard implementer rotation pool (original + 2 rotations exhausted)
Next Owner: Awaiting human-owned revision or explicitly approved alternate owner recorded in `.squad/decisions.md`
SPECREW_REVIEW schema=v1 iter=001 feature=008-sample verdict=blocked tasks=3/3 reqs=3 files=0 new_deps=0 vuln=unscanned cov=not_executed escalations=1 routing_fallbacks=0 cap=active cap_chain=3/2 drift=0/0 index=specs\008-sample\iterations\001\reviewer-index.md
If a reviewer-regression report is later withdrawn or classified as a misreport, Specrew preserves the ledger audit trail and reverses only the still-pending state created by that event, such as:
- an in-flight reviewer escalation
- an awaiting-human-owned-revision hold
- an alternate-owner path that has not yet completed
Completed ownership changes remain historical fact. Unapproved candidate trap entries derived from the withdrawn event are removed, but already approved corpus entries stay under the normal corpus-change workflow instead of being auto-removed.
Goal: capture estimation accuracy, drift summary, and improvement actions.
Minimum artifact: retro.md
Helpful scaffold:
pwsh -File .\.specify\extensions\specrew-speckit\scripts\scaffold-retro-artifact.ps1 `
-IterationDirectory .\specs\001-your-feature\iterations\001Checklist:
- Task and phase variance captured
- Drift totals and resolutions summarized
- Improvement actions listed
If validate-governance.ps1 reports a review-evidence-integrity failure, the
iteration artifacts declare completed work but the committed git diff since the
iteration baseline is empty. In practice, that usually means implementation was
not committed before review started.
Fix it in this order:
- Commit the implementation work.
- Re-run the validator.
- Rebuild reviewer artifacts if review evidence was already scaffolded.
When you re-run scaffold-reviewer-artifacts.ps1 with -Force, Specrew
overwrites the generated review artifacts after confirmation. Use
-Confirm:$false only for non-interactive automation.
Important: put human annotations and reviewer notes in review.md, not in
generated artifacts such as code-map.md, dependency-report.md,
coverage-evidence.md, or review-diagrams.md. Generated artifacts are
regenerated from git state and are expected to be disposable.
Specrew bootstrap always installs and protects the same five baseline governance roles:
- Spec Steward
- Planner
- Implementer
- Reviewer
- Retro Facilitator
Each baseline role's charter is the canonical source-of-truth at .specrew/team/agents/<role>.md (e.g., .specrew/team/agents/reviewer.md). Every specrew start --host <kind> translates these canonical charters to the selected host's native subagent format:
- Copilot →
.squad/agents/<role>/charter.md(raw markdown, consumed by Squad CLI) - Claude →
.claude/agents/<role>.md(YAML frontmatter + body) - Codex →
.codex/agents/<role>.toml(TOML manifest) - Antigravity →
.agents/agents/<role>.md(YAML frontmatter + body)
The generated host-native files carry a Specrew-managed marker comment. Edits to the canonical charters propagate to all hosts on the next specrew start. Edits to a generated host-native file are preserved only if you also delete the Specrew-managed marker (in which case Specrew leaves the file alone). The baseline 5 are intentionally deterministic; do not remove or rewrite the canonical charters as your customization mechanism.
To add domain-specific help after bootstrap, use Specrew's command-driven team management interface:
# Add a new domain-specific member
specrew team add security-analyst `
--role "Security Analyst" `
--charter "Review code for security vulnerabilities, ensure secure coding practices."
# List all current team members
specrew team list
# Update an existing member's charter
specrew team update security-analyst `
--charter "Updated security review charter..."
# Remove a domain-specific member (baseline roles cannot be removed)
specrew team remove security-analystReplace C:\Dev\Specrew with the actual path where you cloned the Specrew repository.
For convenience, you can add the Specrew scripts directory to your PATH to use short commands like specrew team list instead of typing the full path each time.
Current Session Only (temporary, lost when shell closes):
$env:PATH = "$env:PATH;C:\Dev\Specrew\scripts"Persistent (all future sessions):
$currentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
$pathEntries = $currentPath -split ";"
if ($pathEntries -notcontains "C:\Dev\Specrew\scripts") {
[Environment]::SetEnvironmentVariable("PATH", "$currentPath;C:\Dev\Specrew\scripts", "User")
Write-Host "Added Specrew scripts to user PATH. Restart your shell to apply." -ForegroundColor Green
}After adding to PATH persistently, restart your PowerShell session, then use the short form:
specrew start "Build a REST API for user management"
specrew team list
specrew team add my-specialist --role "Role" --charter "Charter text"The add command creates all required Squad artifacts atomically: (1) adds a row to .squad\team.md outside the baseline block, (2) creates .squad\agents\<member>\charter.md, and (3) initializes .squad\agents\<member>\history.md. The update and remove commands modify or delete these artifacts consistently. All commands validate that baseline roles remain protected.
Use this path for additive specialization only. Specrew still expects the baseline governance crew to remain present.
Use Update-Module Specrew for the normal installed-module update path, then reload the module and verify the version:
Update-Module Specrew
Import-Module Specrew -Force
specrew --versionIf the module needs a clean reinstall from the trusted Gallery source, use:
Install-Module Specrew -Scope CurrentUser -Force -SkipPublisherCheck
Import-Module Specrew -Force
specrew --version-Force in Install-Module/Update-Module is package-manager force: it refreshes or overwrites the installed module copy. It does not approve Specrew lifecycle boundaries, does not bypass brownfield conflicts, and does not make project-local edits safe by itself. -SkipPublisherCheck bypasses publisher validation; use it only for the official Specrew Gallery package or a package source you trust. If the source is unknown, stop and verify the package instead of bypassing the check.
After updating the module, rerun specrew init from each project that needs refreshed project-local assets:
cd C:\Dev\your-project
specrew initRun init again when any of these are true:
- The release notes mention runtime, extension, template, governance, or skill-catalog deployment changes.
.specify\extensions\specrew-speckit\is missing or stale compared with the installed module..claude\skills\,.github\skills\, or.agents\skills\is missing/specrew-*skills.specrew startreports a missing skill-catalog or runtime deployment gap.- You intentionally want to refresh managed Specrew project files after a module update.
specrew start repairs missing skill catalogs on the normal launch path. Use specrew init when you want the explicit redeploy pass for the whole project-local Specrew surface, especially after a module update. Use specrew init -Force only when you intentionally want a forced redeploy of managed surfaces; it still preserves conflict checks and brownfield safety rules.
When specrew init detects an existing .specify/ or .squad/ directory in the project, it operates in brownfield mode:
- Preserves existing configuration: Existing specs, governance artifacts, and user customizations are never overwritten.
- Merges baseline roles: Specrew's five baseline roles (Spec Steward, Planner, Implementer, Reviewer, Retro Facilitator) are merged into
.squad/team.mdonly if they don't already exist. - Reports conflicts: If existing roles or ceremonies conflict with Specrew's baseline, the script reports them and provides resolution guidance.
- Blocks deployment on conflicts: When conflicts are detected, bootstrap exits with code 5 and deployment is blocked until conflicts are manually resolved.
- Supports dry-run: Use
specrew init --dry-runto preview changes and generate a reviewable report artifact before applying them.
When running specrew init --dry-run in brownfield mode, Specrew creates a timestamped report artifact at .specrew\bootstrap-dry-run-{timestamp}.md containing:
- Brownfield analysis summary (preserved specs, roles, ceremonies)
- Detected conflicts with resolution guidance
- Warnings and recommendations
- Planned actions that would be performed during actual bootstrap
This artifact provides a reviewable record of the brownfield merge plan before committing to changes.
Run extensions\specrew-speckit\scripts\brownfield-merge.ps1 directly to analyze an existing project's compatibility with Specrew:
pwsh -File .\extensions\specrew-speckit\scripts\brownfield-merge.ps1 `
-ProjectPath .\path\to\existing\project `
-DryRunThe analysis reports:
- Preserved artifacts: Existing specs, roles, and ceremonies that will not be modified
- Mergeable content: Baseline roles and ceremonies that can be safely added
- Conflicts: Naming collisions that require manual resolution
- Canonical roles: Existing
.squad\agents\baseline roles preserved as project source when the project itself containsextensions\specrew-speckit\ - Warnings: Partial platform installations or other non-blocking issues
If Specrew detects role name conflicts (e.g., an existing "Implementer" role), it:
- Reports the conflict in the console output
- Exits with code 5 to prevent deployment
- Provides guidance to manually merge or rename conflicting roles before re-running bootstrap
The -Force flag does NOT bypass conflict checks. Conflicts must be manually resolved before bootstrap can proceed.
Self-hosting Specrew repositories are the exception to the baseline-role conflict rule. When a project contains extensions\specrew-speckit\ and existing .squad\agents\, those baseline agent directories are treated as canonical project source, not conflicts to overwrite. Non-self-hosting projects keep the normal protection behavior.
- Record event in
drift-log.mdwith exact requirement reference. - Decide one resolution path:
- Update spec (tracked change)
- Rework implementation
- Escalate for human decision
- Reflect the decision in
review.mdverdict notes and next tasks.
Specrew lifecycle work flows through several boundaries — specify, clarify, plan, tasks, implementation, review-signoff, retro, iteration-closeout, and feature-closeout. At each boundary, the Crew (the agent team executing the lifecycle) produces artifacts: spec.md, plan.md, code, tests, review.md, retro.md, closeout-dashboard.md, decisions ledger entries, and more.
Commit at every boundary. Push after every commit. This is the methodology's commit discipline:
- At every lifecycle boundary, the Crew commits the boundary-phase work in semantic commit groups BEFORE invoking
Invoke-SpecrewBoundaryStateSyncor signaling boundary readiness. Working-tree-only changes are not durable boundary evidence — a power loss, working-tree corruption, orgit clean -fdwould erase them. - After every commit, the Crew pushes the feature branch to
origin/<feature-branch>immediately. Local-only commits are not upstream-backed-up; a workstation failure loses them. - The Crew verifies
git rev-parse HEADequalsgit rev-parse origin/<feature-branch>BEFORE signaling boundary readiness. The committed evidence reference (commit SHA or hash range) appears in the boundary handoff'sWhat I just didsection. - If no
originremote is configured (e.g., a local-only project), push silently skips. Commit discipline still applies.
Without this discipline:
- Boundary-sync's validator passes because it reads working-tree content, but anyone cloning the branch from origin sees no work. The methodology claims discipline it doesn't deliver.
- Premium agent quota is wasted on rejection-redo cycles when boundary signals are issued before the work is committed.
- Audit trail (
.squad/decisions.md, scribe logs, retro evidence) drifts from actual git history, making methodology evolution decisions harder.
- Implementer is the primary committer for implementation work. Commits in semantic groups before invoking boundary-sync at implementation → review-signoff.
- Spec Steward oversees boundary-commit discipline at every advancement decision. Verifies push parity before signing off.
- Reviewer rejects PRs containing WIP at PR-open time as a hard reject. Commit + push first, then re-request review.
- Retro Facilitator evaluates commit-discipline at retro and records
boundary-commit-discipline-violationscount as a standard signal. - Planner anticipates commit cadence in plan.md output; each boundary's tasks map to a semantic commit group.
This discipline ships in three tiers:
- Tier 1 (text-only, this release): explicit instructions in the Coordinator governance prompt + all 5 baseline agent charters + this section. The discipline is conveyed; the Crew applies it.
- Tier 2 (future): a validator rule (
boundary-wip-uncommittedat warning severity) flags WIP-at-boundary invalidate-governance.ps1output. Surfaces violations without blocking. - Tier 3 (future):
Invoke-SpecrewBoundaryStateSyncrefuses to advance if WIP is present. Auto-push hook after every commit (configurable viaiteration-config.yml).
Each tier is its own slice; Tier 1 ships first as a methodology-text addition, Tier 2/Tier 3 follow as later releases when empirical data justifies the additional enforcement weight.
The next release queue focuses on intake quality, expert-developer ergonomics, and multi-host expansion. Active proposals worth tracking:
- F-040 / Proposal 069 — Multi-Host Launch Path (SHIPPED v0.26.0):
specrew start --host claude|codex|copilotlaunches the alternate CLI with Specrew's bootstrap context. Per-host flag translation (--remote,--allow-all,--autopilot) + universal Crew-coordinator prompt header + Squad-runtime-path directive strip for non-Copilot + Codex pwsh-form boundary-advance instructions. Tactical MVP slice of Proposal 024 (Multi-Host Runtime Abstraction). Composes with Proposals 068 (cost-aware model routing) and 070 (token economy MVP). See "Multi-Host Launch" section below for the per-host flag matrix. - Proposal 063 — Substantive Intake Questioning: persona-driven adaptive intake (PM / UX / Architect / Researcher), 12-category catalog, Mode A/B/C input-quality assessment. Fires at
/speckit.specify,/speckit.clarify, iteration kickoff, mid-feature pivot. The intake interview that stops the Crew from auto-resolving scope decisions silently. Source: Proposal 063. - Proposal 099 — Installed-File SDLC Instruction Audit: closes the dogfooding deficit between paste-prompt scaffolding and the discipline carried by installed instruction files (coordinator-governance.md, agent charters, sync command docs). Three small-fix closure slices identified: recognized verdict shapes catalog, reconciliation directive, smaller refinements bundle. Source: Proposal 099.
- Proposal 100 — Friction Dial: three canonical modes (strict / default / autonomous) controlling verdict-parser acceptance, reconciliation posture, drift-log granularity, and compound-verdict eligibility. Composes Proposals 015 + 047 + 066 into a coherent surface. Persistence in
.specrew/config.yml; session override viaspecrew start --friction <mode>. Source: Proposal 100. - Proposal 068 — Cost-Aware Model Routing + Proposal 070 — Token Economy MVP: agent-discovered model catalog routes Junior/Implementer tasks to cheap models, Senior/Reviewer tasks to strong.
cost.ymlper iteration tracks token consumption + cost estimate;specrew wheredashboard gains a COST section. Sequenced as F-041 + F-042 (next features after F-040). - Proposal 104 — Multi-Host Onboarding + Selection Flow: first-run host probe +
.specrew/host-history.ymlfor last-host default +specrew hostcommand. UX layer on top of F-040. Sequenced as F-043. Source: Proposal 104. - Proposal 105 — Host-Native Hook Deployment: elevate F-039 boundary enforcement from cooperative to runtime on hook-supporting hosts (Claude PreToolUse hooks; Antigravity later). Drafted alongside F-040 on 2026-05-23. Source: Proposal 105.
- Proposal 098 — Launch Posture Visibility (candidate): surfaces enforcement state (
[BYPASS ACTIVE]indicator, active friction mode) atspecrew startbanner. Companion to Proposal 100 and Proposal 065.
Full proposal catalog with status (Shipped / Draft / Candidate) lives at proposals/INDEX.md.
- Treat the spec as source of truth.
- Keep artifacts small and current; avoid end-of-iteration backfilling.
- Use
validate-governance.ps1before closing an iteration.
pwsh -File .\.specify\extensions\specrew-speckit\scripts\validate-governance.ps1 -ProjectPath .For process-quality scoring (FR-015 Iteration 2 slice), run:
pwsh -File .\evaluation\scorers\process-scorer.ps1 -ProjectPath . -AsJson
pwsh -File .\evaluation\scorers\process-scorer.ps1 -ProjectPath . -WriteReport-WriteReport produces evaluation\report.md with the current process-quality summary plus an explicit Outcome Quality placeholder until the Iteration 3 scorer lands.
If you see this warning after specrew init, it is an upstream Copilot CLI behavior, not a Specrew issue. Copilot CLI scans ~/.claude/skills and ~/.agents/skills in your home directory. If you also use Claude Code or OpenCode, those directories may contain skills with colon-delimited names such as ck:foo; Copilot CLI's parser rejects those names because it only accepts letters, numbers, hyphens, underscores, dots, and spaces.
Specrew's own slash-command surface (/specrew-where, /specrew-help, /specrew-version, /specrew-update, /specrew-team, /specrew-review, /specrew-status) uses hyphenated names and is unaffected. To confirm a Specrew skill loaded correctly, run /skills info specrew-help inside the Copilot CLI session and verify that Copilot reports the expected Specrew skill path and metadata.
Upstream tracking: github/copilot-cli#2689. Copilot CLI does not currently provide a config switch to exclude those directories from scanning. The warning is cosmetic and does not block Specrew's own skills from working.
specrew start --host <kind> launches the lifecycle on the named CLI runtime. Supported kinds: copilot (--host flag default), claude, codex, antigravity. The interactive menu (shown when --host is omitted in a TTY) lists installed hosts in priority order Claude → Codex → Copilot → Antigravity.
specrew start --host claude "Build a TODO list app"
specrew start --host codex "Fix the auth bug"
specrew start --host antigravity "Add precision-aware arithmetic to the calculator"
specrew start --host copilot # Equivalent to no --host flagSpecrew translates user-facing Specrew flags to host-appropriate CLI flags. The user-facing surface stays uniform across hosts.
| Specrew flag | Copilot | Claude Code | Codex CLI | Antigravity |
|---|---|---|---|---|
--remote |
--remote |
--remote-control |
(warn-and-continue, no remote wiring) | (warn-and-continue, no remote wiring) |
--allow-all |
--allow-all |
--dangerously-skip-permissions |
--full-auto |
--dangerously-skip-permissions |
--autopilot |
--autopilot |
(drop with notice — use --autonomous for unattended runs) |
--full-auto (folds into --allow-all) |
(drop with notice — use --autonomous for unattended runs) |
--autonomous |
(Specrew-side only — handled by lifecycle boundary enforcement per F-039; not translated per-host) |
The bootstrap-context handshake ("Read .specrew/last-start-prompt.md and .specrew/start-context.json") is identical across all hosts. Only the host-CLI invocation differs.
copilot: copilot --agent Squad --add-dir <project> -i <bootstrap-prompt> [--allow-all] [--autopilot] [--remote]
claude: claude -p <bootstrap-prompt> --add-dir <project> [--dangerously-skip-permissions] [--remote-control]
codex: codex exec --cd <project> [--full-auto] <bootstrap-prompt>
antigravity: agy -i <bootstrap-prompt> --add-dir <project> [--dangerously-skip-permissions]
The opening line of the coordinator prompt is universal across all hosts: "You are the Crew team coordinator running inside a Specrew-bootstrapped repository." This aligns with the project terminology: "the Crew" is the team role (Spec Steward, Planner, Implementer, Reviewer, Retro Facilitator); "Squad" is the npm runtime product (one of several possible Crew runtimes).
For non-Copilot hosts, Specrew additionally strips directives that reference Squad-specific runtime paths (.squad/decisions.md, .squad/config.json, agentModelOverrides, sync-squad-model-overrides.ps1) since those paths don't exist when running on Claude or Codex.
For Codex specifically, Specrew rewrites slash-command boundary-advance references (e.g., /speckit.specrew-speckit.sync-plan) to direct PowerShell invocations (pwsh -File .specify/extensions/specrew-speckit/scripts/sync-boundary-state.ps1 -BoundaryType plan) because Codex has no user-defined slash-command surface.
F-039 (Launch-Mode Boundary Enforcement) is cooperative, not runtime-enforced. The boundary-authorization gate fires only when the agent invokes Specrew's canonical sync path:
- Copilot, Claude: Slash command
/speckit.specrew-speckit.sync-<boundary>→ boundary-state-sync script → authorization helper. Discoverable, mechanical. - Codex: Direct
pwsh -File ...invocation (per FR-014 rewrite) → boundary-state-sync script → authorization helper. Less discoverable, but functionally equivalent.
In all cases, if an agent writes directly to .specrew/start-context.json boundary_enforcement section without going through the canonical path, no gate fires. Runtime enforcement (host-layer interception of any write to boundary state) is out of scope for F-040 and tracked as Proposal 105. When Proposal 105 ships, Claude Code's PreToolUse hook layer can elevate F-039 from cooperative to runtime enforcement.
Recommendation: strict-mode users should prefer Copilot or Claude over Codex until Proposal 105 ships, because Copilot/Claude's slash-command surface makes the canonical path easier for agents to discover and invoke. Codex still works correctly when the agent follows the FR-014 pwsh-form instructions in the coordinator prompt.
| Capability | Copilot | Claude | Codex | Antigravity |
|---|---|---|---|---|
| User-defined slash commands | ✅ .github/skills/<name>.md |
✅ .claude/skills/<name>/SKILL.md |
❌ Not supported | ✅ .agents/skills/<name>.md |
| Hooks (PreToolUse, etc.) | ❌ None | ✅ Rich, configured in .claude/settings.json |
||
| Subagents (multi-agent teams) | --agent <name> (Squad) |
✅ .claude/agents/*.md |
✅ .codex/agents/*.toml |
✅ .agents/agents/*.md |
| MCP server config | ✅ .mcp.json first-class |
✅ .codex/mcp.toml first-class |
||
| Project memory | ✅ CLAUDE.md |
✅ AGENTS.md |
F-040 manages skills + slash commands (uniformly via existing F-021 multi-host deploy). F-040 explicitly defers hooks, MCP, project memory, and subagents to future proposals (Proposal 105 for hooks; Proposal 024 Slice 3 for the rest).
If you invoke specrew start --host claude but Claude Code is not installed on PATH, Specrew exits with the install URL for that host and a non-zero exit code. No CLI is launched. Same behavior for --host codex when Codex CLI is missing.
--host antigravity is now supported as of v0.27.0 (F-044 iter-005). Launch shape: agy -i <prompt> --add-dir <path> [--dangerously-skip-permissions]. --host auto is still accepted by the parser but rejected with explicit "deferred to follow-up" guidance pointing to Proposal 104 (auto-selection logic). When --host is omitted entirely, Specrew shows an interactive numbered menu listing installed hosts first and "(not installed)" hosts with install URLs.