Changelog
All notable changes to this project are documented here. Format — Keep a Changelog, versioning — SemVer.
This file is maintained in English — see CONTRIBUTING.md.
[3.5.0] — 2026-08-27
Cross-artifact references become Markdown links, so a .task/ file is navigable in a viewer instead of dead-ending on a bare slug, and the per-invocation prompt cost of the capture skills and roadmap-to-workflow drops sharply. Non-breaking — every consumer still accepts the bare form, and existing artifacts keep validating.
Added
Roadmap:/Spec:headers,### Spec referencescitations and the## Executionpointer are written as Markdown links —Roadmap: [<slug>](../roadmap/<slug>.md). The label carries the identity: every consumer rebuilds$AI_DIR/<kind>/<slug>.mdfrom the label and never follows the href, which would resolve against the agent's cwd (the project root) rather than the artifact's own directory. The href exists for humans and plan-review tools. Producers emit the link form; consumers,validate.shincluded, still accept a bare slug, and the unwrap tolerates backticks and trailing text around the link.validate.shwarns when aSpec:header's target disagrees with its label — nothing else catches a stale href, since every agent follows the label and works regardless.validate.shflags a near-miss roadmap item heading ([X], a double space,####, a missing-). No consumer treats such a heading as an item, so the file used to validate clean while an item quietly dropped out of an autopilot run.**Dependencies:**is now checked against the same file too, so a hand-written1 2(whitespace-stripped to item 12) or a number with no matching item is caught at capture time instead of hard-stopping a run mid-flight — self-dependencies and CRLF included.
Changed
- A roadmap's
Spec:headers moved under# <Title>, so line 1 of every artifact is its own H1. Files in the old shape still validate. ## Executing a tasknow names## Tests—to-planwrote the section andvalidate.shenforced its shape, but no consumer had ever been told to act on it.- First-run setup moved out of the capture skills into
skills/_lib/setup.md, read only when.task/CLAUDE.mdis actually absent.to-taskhad carried roughly 5KB of setup sub-steps plus the template on every invocation, for a procedure that runs once per project;to-plan/to-roadmap/to-specnow point at the same file instead of at "exactly asto-taskStep 0 does", leaving all four gates near-identical. The template moved byte-identical — its headings are load-bearing for the reviewer's andto-plan's by-heading lookups. - The capture skills' Step 0 no longer runs
validate.sh all— the full scan was advisory by design (report, never block) while costing a bash run whose output grows with every artifact. The gate keeps only the.task/CLAUDE.mdexistence check; each capture still validates the artifact it just wrote and still reports the result in its digest.roadmap-to-workflowkeeps itsvalidate.sh allgate, whose held-roadmap-error logic depends on the sweep. roadmap-to-workflowships a static driver —skills/_lib/roadmap-driver.js, invoked viascriptPath+args, instead of re-authoring a ~150-line Workflow script every run;resumeFromRunIdnow caches completed stages cleanly. Per-item plan agents readskills/_lib/plan-driver.mdrather than the fullto-planSKILL.md, dropping roughly 25KB of interactive-only prose, and the planner scales with the item's**Model:**hint — ahaikuitem plans on sonnet at low effort instead of opus. The checkbox flip became the driver's own serial mark stage, since the Workflow sandbox cannot write files itself; the exactly-one-match rule still stops the wave.
Fixed
- Root resolution no longer claimed a neighbouring project's
.task/— the ancestor walk was unbounded, so a checkout with no.task/of its own climbed out of the working tree and wrote every artifact into another project's flat namespace, silently: the setup gate found aCLAUDE.mdthere and skipped setup. The walk is now ceilinged at the highest directory that still belongs to this project — its top level, the main worktree root, or a submodule's superproject, whichever is highest and still an ancestor of$PWD. Sibling worktrees still reach the shared root through step 3. - Three narrower resolution faults behind the same walk — the ceiling could not be the checkout's top level alone (that broke submodules, landing
AI_DIRinside.git/modules, and any linked worktree whose pipeline root sits above it); step 3 trusteddirname(git-common-dir)blindly, which under--separate-git-dirnames whatever directory holds the git dir, often a neighbouring project; and the walk is now logical with a$PWDfallback, so a project entered through a symlink finds its own.task/and a deleted cwd no longer degrades to a relative root plus agetcwderror on stderr. - A drifted heading donated its
DependenciesandModelto the item above it inroadmap-to-workflow's collector, inventing a phantom dependency or the wrong model with no signal. The collector now resets on any heading, excluding the### Spec referencescitation that legitimately sits inside an item, and terminates only on a drifted item-heading attempt — terminating on any#line ate an item's ownDependenciesandModelwhen it carried a sub-heading or a fenced code comment. - A slug collision could overwrite a Plan —
to-task's from-roadmap write is now guarded: the same item rewrites in place, the same item carrying a Plan goes through the Step 2.1 chip, and an unrelated task disambiguates instead of being silently overwritten.to-plan's no-Description promote fork uses that same sanctioned overwrite guard rather than a free-text exchange. validate.shanchors tightened —### Step N:/### Test N:require the colon the producers already emit; the---separator is accepted only in the header block, so a thematic break in the body no longer masks a deleted separator;Spec:headers are scanned only in the header block, so a Spec-shaped line quoted in a body no longer emits a spurious dangling-reference WARN; and a legacy bareSpec: <slug>carrying a copied template annotation is no longer mangled into a garbage slug — the trailing-text tolerance had lived only in the Markdown-link branch, contradicting what the contract promised.roadmap-to-workflow's positional-slug branch hard-stopped on a valid slug — each bash call is a fresh shell, and that branch skips the picker block, the only other place sourcingroadmap.sh, soresolve_artifact_pathwas undefined. It sources the helper itself now.to-plan's promote fallbacks cover a missing---, and the two roadmap-resolution stops carry the→ Next:footer — a promoted hand-written file otherwise failed the skill's own post-write validate call.to-plan's Step 2b also numbered two consecutive items3., which reads as two phrasings of one step rather than the ordered pair Step 7's write consumes.- A zero-match checkbox flip reported OK — the baked mark command's
|| rm -f tmpswallowedawk's non-zero exit, so a run that ticked nothing exited 0 and the agent reported success on an unticked box, the exact silent miss the exactly-one-match rule exists to stop. The cleanup branch exits 1 now, and the flip is anchored with0*so a hand-written### - [ ] 07.heading — whichvalidate.shsanctions as numerically equal to 7 — still matches, while the\.anchor keeps 7 from matching item 70. - Docs realigned with what ships — the reviewer's phase 0 not 1, the reviewer listed as a spec consumer, one term for the capture skills, no
hookscommit scope for a file that never ships, and the site's stale version and artifact paths.
[3.4.0] — 2026-08-21
Project settings move from a bespoke config file to a nested CLAUDE.md the platform loads on its own, and grill stops counting questions. Contains a breaking change — see Migration.
Changed
config.mdis replaced by a nested.task/CLAUDE.md— the platform auto-loads a nestedCLAUDE.mdinto any session that reads a file under.task/, so the executing session andtask:code-reviewerpick up Language, Testing Policy, Build and Tests and Commit Format without being told to open a config file. Two limits are load-bearing and shape the rest of the change: the auto-load fires only for file-read tools (never forcatorsed), and a nestedCLAUDE.mdis not re-injected after/compact.- The file is the user's, not the pipeline's — setup writes it once, without a confirmation chip, and never rewrites or section-repairs it. Only
task.rootand the git-exclude line are repaired on later runs, so hand edits survive every capture. To regenerate it, delete it and re-run any capture. - The stamped
## Executionblock collapsed to a one-line pointer at.task/CLAUDE.md→## Executing a task. The execution instructions now exist in exactly one copy, so editing them reaches tasks captured earlier. The pointer stays stamped in every artifact regardless — it is what survives/compactand acat-based read. grillscales depth to the decision — the "typical 3–7 questions" anchor is gone, replaced by a functional stopping rule. Forks are asked in descending blast-radius order so an early stop loses the least, a wrap-up-or-keep-going checkpoint hands the stop decision to the user rather than the model, and the pre-mortem is skippable when no answer to it would change the ledger (Step 2's no-manufactured-questions rule, applied to the finale).
Fixed
- The docs site build no longer fails on the changelog's own links —
changelog.mdinlinesCHANGELOG.mdverbatim, so every repo-relative link in it must be exempt from the dead-link check. The v3.3.0 entry added aREADME.mdlink the exemption list did not cover, and the Pages deploy had failed on it since.READMEnow sits alongside the CONTRIBUTING / CLAUDE / contract / agents patterns.
Migration
.task/config/config.md is no longer recognised. Before the next capture:
git mv .task/config/config.md .task/CLAUDE.md 2>/dev/null || mv .task/config/config.md .task/CLAUDE.md
rmdir .task/configUntil you do, the setup gate reports the project as unconfigured and writes a fresh .task/CLAUDE.md, orphaning any hand-edited settings; where .task/ sits in a subdirectory, root resolution falls through to the parent and creates a second .task/ beside the real one. Existing task files keep working — re-run /task:to-plan on one to re-stamp its ## Execution pointer.
[3.3.0] — 2026-08-11
The pipeline stops borrowing the platform's review commands and ships its own review agent. Non-breaking — no artifact-shape changes; existing task files keep working, though re-running /task:to-plan on one re-stamps its ## Execution block with the new sequence.
Added
task:code-reviewer— the pipeline's own review pass (agents/code-reviewer.md, the plugin's first and only agent). It runs in explicit phases with a mandatory output each: read the task file and itsTouches/Spec:anchors → gather the committed diff → collect candidate defects (fanning out where the diff warrants it) → prove or refute each one independently → fix only what it confirmed, insideTouchesplus regressions the same diff introduced outside them → runconfig.md→ Build and Tests →git commit --amendthe implementation's commit. An unproven candidate is dropped, never fixed;0 findingsis a declared state; and a report that doesn't enumerate what was checked perTouchesfile counts as a failed review, not a passed one. It never pushes, never touches a commit other thanHEAD, and writes nothing under.task/.
Changed
/verifyand/code-revieware no longer part of the pipeline — Claude Code 2.1.217 marked bothdisable-model-invocation, and that gate treats every subagent as "the user didn't type this". Worse, a command in that state isn't listed to the model at all, so nothing errored:roadmap-to-workflow's per-item agent and every plainimplement .task/task/<slug>.mdsession silently skipped the review step and still reportedOK. The pipeline's review gate had been quietly absent rather than loudly broken, and there is no settings escape hatch. Both execution paths now spawntask:code-reviewerinstead — a plain session per the## Executionblock, androadmap-to-workflow's driver as its own stage in the per-item serial loop.- The stamped
## Executionblock carries the new sequence — implement → commit perconfig.md→ Commit Format → spawntask:code-revieweron the diff → tick the roadmap checkbox once the review returns OK. Existing task files keep working; re-run/task:to-planon one to re-stamp it (they only ever named commands that weren't running anyway). Verification is relocated, not dropped: it rides inside the reviewer viaconfig.md→ Build and Tests, which fails the item on a red run and reports an explicit "skipped" when no command is declared. - Implement commits, the reviewer amends — the implement step commits as before and the reviewer folds its fixes into that same commit, so work is durable immediately and one item stays one commit. If the implementation was never committed, the reviewer leaves its fixes in the working tree rather than rewriting an unrelated commit.
roadmap-to-workflowis now three agents per item — opus-plans / sonnet-implements /task:code-reviewer-reviews. The review runs inside the existing per-item serial loop (not as apipeline()stage), so the shared working tree keeps exactly one writer; auto-mark still belongs to the driver, now after the review; a failed review stops the wave exactly as a failed implement does. The item's**Model:**hint no longer reaches the review — the reviewer pins its own model, so ahaikuitem can't get ahaikureview.- Requirements dropped a prerequisite — no platform slash command has to be available any more; the reviewer only needs the
taskplugin enabled in the session doing the work. Since the## Executionblock names the agent directly with no fallback, a disabled or missing plugin is now the failure mode to know about — documented on the site's troubleshooting page. - Two declared invariants were rewritten rather than silently violated: "orchestration, verification, review, and commits are delegated to the platform" (
CLAUDE.md) and "there is noagents/directory in v3" (CONTRIBUTING.md). The commit-scope list gainsagents. Skill count is unchanged at six — the reviewer is an agent, not a skill.
Fixed
Two full self-audit passes over the skills, the agent, and the bash layer. The findings below are the ones that could cost you work or lie to you about what happened.
- A stale
task.rootcould overwrite a liveconfig.md— the anchor is an absolute path in.git/config, so it survives a moved or copied repo and then names where the repo used to live.find_ai_dirtrusted it on the variable alone (step 4 already demanded evidence), resolved to anAI_DIRwith no config, reported the project unconfigured, and let intake setup regenerateconfig.mdover the real one — losing hand-tuned Build and Tests, Language and tool priority silently. Such an anchor is now ignored and the ancestor walk takes over; the next capture rewrites it. - Captures wrote to a cwd-relative
.task/—validate.shresolves$AI_DIRindependently, so a capture run from a subdirectory or a linked worktree wrote into a second.task/the validator never looked at. All four capture skills now anchor writes on the root they resolve in Step 0 (to-roadmapandto-specdid not sourceresolve-ws.shat all), using${CLAUDE_PLUGIN_ROOT}— a bareskills/_lib/resolve-ws.shpath does not exist relative to a user project's cwd. roadmap-to-workflowreported success where it had guessed — an unresolved positional slug reached the item scan as an empty path andawk 'prog' ""reads stdin, so a typo came back as a fully completed roadmap; the plan digest was consumed withsplit(" ")[2], so any drift in that LLM-authored line launched the next agent againsttask/undefined.mdafter the wave's planning was already paid for; and the auto-markawknever checked that it matched, so a drifted heading left the box unticked while the commit landed and the next run redid the work. Each now fails loudly. The wave sorter also read**Dependencies:** noneas a dependency on a missing item and hard-stopped.- The driver's own writes ran in the wrong shell — the auto-mark
awkreferenced"$ROADMAP"from inside the JS Workflow body, where no shell exists.ROADMAP,AI_DIRand the item paths are now baked literals. CollectedSpec:paths were dropped instead of being passed to the plan agent, and the paths were stamped intoSpec:headers the contract defines as bare slugs — a derivedSPEC_SLUGSnow feeds the header while the paths feed the read. to-plan's handoff footer broke the driver — Step 8 told every run to close with→ Next: …, but the driver lifts the item slug out of the plan agent's last line, so it fed the implement stage.task/task/<a-word-from-the-footer>.md. Driver mode is now carved out of Step 8 and restated in the driver's own prompt.- A proven build failure could not be fixed — phase 5 of
task:code-reviewersaid "go back to phase 4" on a red build while phase 3 banned fixing anything it had not CONFIRMED, and a failure surfaced by the test run was never a phase-3 candidate. A Build and Tests failure traced to this diff is now the one sanctioned entry point (the failing run is its own evidence), with the trace stated either way. Unattended, that ambiguity turned a one-line break into a FAIL that stopped a whole wave. to-task/to-planbranch and overwrite gaps — the overwrite chip offered a flat "Accept" without saying what the colliding file held, though the naturalto-task→to-plan→to-taskflow derives the same slug and.task/is git-excluded, so a Plan lost that way is gone; it now reads the file's headings first and recommends deepening.to-plan's case 1 matched any bare token vacuously and swallowed the roadmap branch; promote mode had no fallback without a## Executionanchor and could replace an unrelated same-slug task's Plan with no chip; and free-form$ARGUMENTShit "nothing to capture yet".- The pre-draft recap read as a confirmation gate —
to-roadmapandto-specopened Step 3 with "once the decision list is confirmed", directly against Step 2 and interaction convention (b).grill's four routing bullets were unordered and its first test was satisfied by every ledger; the tests are now ordered and the spec test narrowed to anchors more than one future task must honor. - Hard-stops and footers — the roadmap-validation, complete-roadmap, too-small-for-a-roadmap and nothing-to-pin stops now carry the
→ Next:footer convention (a) requires, and both "too small" stops say plainly that nothing was written. validate.sh's precondition error carries its own fix — a missingconfig.mdstated a raw absolute path and no remedy, though the README and reference page both send first-run operators tovalidate.sh allby hand. It now names the four capture skills that write the file, keeping the literalconfig.md not foundsubstring three skills branch on.- Commit Format's last resort — with no project doc and no usable
git logconvention,to-taskleftconfig.mdpointing nowhere; it now names the bundled_lib/templates/conventional-commits.mdthe contract had always declared the fallback.
Docs
- Version-diff framing removed everywhere —
docs/contract.md,README.md,CLAUDE.md,CONTRIBUTING.md, the website, the skill prompts and the bash headers described the pipeline as a diff against v2 ("Removed in v3", "no build/ship step to run", "the mechanism that used to be two separate skills"), naming entities a reader has never had. All restated in present tense; no step, template or hard-stop changed.CHANGELOG.mdis left alone — it is the record of that history. - Corrections in the docs of record — the producer/consumer table claimed
config.mdis consumed by "every skill" (grillreads nothing under.task/) and that everyto-*skill stamps## Execution(onlyto-task/to-plando), and omittedvalidate.shfrom every "Consumed by" cell;resolve-ws.sh's comments credited worktreesroadmap-to-workflownever spawns and documented step 4 without its evidence requirement;CONTRIBUTING.md's tree was missingskills/grill/; the site's "config.md not found" cause implied/task:grillcan hit the gate, and its spec-kit row listed three capture skills where the rest of the page lists four. The§ task.md formatlink pointed at a non-existent anchor. - Local meta-skills refreshed —
/self-auditand/self-improvestill described a repo with five skills and noagents/directory; the Docs-sync lens now compares againstls skills/rather than a hardcoded roster, and coversCONTRIBUTING.mdandwebsite/too. validate.sh's subcommand list has one owner — the file-header# Usage:block was byte-identical to the--helpheredoc, which alone carries the<slug>note and the exit-code line.
[3.2.1] — 2026-07-23
Patch release. Non-breaking — no artifact-shape changes.
Fixed
roadmap-to-workflowwave concurrency — the script template passed{ isolation: "worktree" }toparallel(), which the Workflow tool silently ignores, so every wave actually ran all agents concurrently in one shared tree, and true per-item worktrees have no reconciliation step anyway. Waves now plan all items in parallel (each plan agent writes only its own task file, never the tree) then implement them strictly one at a time, the sole mutator of the shared tree — a plan FAIL stops before any implement, an implement FAIL stops as before. Each implement now sees its wave-mates' already-landed commits and/verifyruns against the integrated state.
Docs
- VitePress documentation site — added a searchable guide/reference site under
website/, deployed to GitHub Pages: getting-started and core-concepts pages, per-skill workflow guides (grill, single task, roadmaps, autopilot, specs), a comparison against similar tools (superpowers, OpenSpec, spec-kit, Task Master, Matt Pocock's skills), and a full command reference.docs/usage.mdanddocs/troubleshooting.mdare now thin pointers to the site, which is the single owner of user-facing usage prose.
[3.2.0] — 2026-07-20
Replaces the confirm-before-write gate with write-then-digest. Non-breaking — no artifact-shape changes.
Changed
- Write-then-digest replaces confirm-before-write — convention (b)'s print-draft → Accept/Edit/Decline gate was the pipeline's most error-prone step (three prior patch releases only papered over it) and re-reviewed content the chat discussion had already settled. Every capture skill now writes its artifact immediately, runs
validate.shon the written file, then prints a structural digest (path, title, sections, captured decisions/pins, validate result) inviting edits against the file.grilldrops its ledger confirmation and prints the ledger as the digest after the pre-mortem. Chips survive only where the question isn't distilled content: config Step 0 setup and the slug-collision overwrite guard. Synced acrossCLAUDE.md,docs/contract.md, andself-invariants-auditor.
Fixed
to-roadmap/to-specno longer hard-stop on unrelated artifact errors — Step 0 treated any non-zerovalidate.shexit as "config malformed → stop", but exit 1 means one or more existing artifacts failed validation;validate.shnever inspectsconfig.mdcontent. A pre-existing broken, unrelated file could block a fresh capture. Both now hard-stop only on a missingconfig.md(exit 2), matchingto-taskandroadmap-to-workflow; exit-1 artifact errors surface but don't block.
[3.1.2] — 2026-07-19
Bugfix release. Non-breaking — no artifact-shape or layout changes.
Fixed
- Confirmation gate hardened further — v3.1.1's "print the draft as message text first" wording did not change model behavior: a post-release transcript showed the turn going straight from bash checks to
AskUserQuestionwith no text block, so the draft was never actually printed. Every confirmation site (grill,to-task,to-plan,to-roadmap,to-spec) now carries an explicit gate — never emitAskUserQuestionuntil the full draft sits printed above it in the same reply; prior chat discussion does not count. Mirrored in both docs of record (CLAUDE.md,docs/contract.md).
[3.1.1] — 2026-07-19
Bugfix release. Non-breaking — no artifact-shape or layout changes.
Fixed
- Confirmation prints the draft first — the model was routing all confirmation output through the
AskUserQuestioncall and skipping the draft, so users confirmed content they never saw. Convention (b) is hardened at both docs of record (CLAUDE.md,docs/contract.md) and at every capture-skill confirmation site (grill,to-task,to-plan,to-roadmap,to-spec) to mandate printing the full draft as visible message text first, then posing the question in the same reply; the question box and optionpreviewnever render the draft.
[3.1.0] — 2026-07-19
Adds a pre-capture interrogation skill and tightens the capture flow. Non-breaking — no artifact-shape or layout changes.
Added
grillskill — a pre-capture interrogation that sits at the "discuss freely" stage: it stress-tests a plan or decision one question at a time, keeps a running decision-plus-rationale ledger, ends with a pre-mortem, and routes to the right capture skill (to-task/to-plan/to-roadmap/to-spec). It writes no artifacts and touches nothing under.task/, so it can run before any capture exists and needs noconfig.md. Brings the pipeline to 6 skills.
Changed
- Skills and docs compacted — skill prompts and docs were trimmed to cut runtime token cost without changing behavior.
validateis now a bash-only utility (skills/validate/validate.sh); itsSKILL.mdis removed. roadmap.shslimmed — dropped theresolve_roadmap_pathwrapper and a dead guard.
Fixed
roadmap-to-workflowauto-mark — checkbox ticking is pinned to an anchoredawkmatch and its fallback path is corrected, so the driver marks the right roadmap item.- Capture flow hardened —
to-task/to-plan/to-roadmap/to-spechandle empty and edge-case inputs cleanly; decline and stop branches now end with the canonical→ Next:footer and aligned resume cues. validatediagnostics — a task-subcommand miss now reports the paths it searched.
Docs
- Contract — documents the 5-state roadmap checkbox class in
docs/contract.md.
[3.0.0] — 2026-07-18
Chat-first rewrite. The pipeline is no longer an orchestration engine with phases, locks, and a hook gate — it is a small set of capture skills. Discuss freely in chat, then fix the discussion into a fixed-format Markdown artifact under .task/ with one short skill; capture depth is the skill name, never a flag. There is no execution skill — every artifact carries a stamped ## Execution block that an ordinary session follows to implement, verify, review, and commit. This replaces the entire v1/v2 surface and is breaking with no automatic migration. See Migration.
Added
- Capture skills —
to-task(captures## Description),to-plan(adds## Plan: Goal / Touches / Logic steps),to-roadmap(a multi-task initiative), andto-spec(a standalone load-bearing technical decision under.task/spec/<slug>.md, referenced by tasks/roadmaps via aSpec:header). Depth of capture is the skill, not a flag. roadmap-to-workflowlauncher — authors and invokes a dynamic Workflow over a roadmap's unchecked items in dependency-ordered waves, opus-plans / sonnet-implements per item by default. The driver ticks each roadmap checkbox after its agent returns OK (never inside the per-item agent).- Stamped
## Executionblock — every artifact carries an English, parser-stable Execution block that a plain session toldimplement .task/task/<slug>.mdfollows: implement the plan, run/verify+/code-review, apply review fixes within Touches, commit perconfig.md→ Commit Format, and tick the roadmap item whenRoadmap:/Source item:are present. - Single artifact contract —
docs/contract.mddocuments the full artifact shapes, producer/consumer table, and bash-layer contract in one place.
Changed (breaking)
- Flat
.task/layout —.task/config/config.md,.task/task/<slug>.md,.task/roadmap/<slug>.md,.task/spec/<slug>.md. No<task-id>/subfolders, noworkspace/, nolog/, no archive — git history is the record. The slug (kebab-case, derived from the title) is the identity; task-ids and[TASK-ID]brackets are gone. - Bash layer shrunk —
resolve-ws.shis now a pure.task/-root finder (no workspace resolution, no pointer read/write/self-heal). Onlyvalidate.shandroadmap.shremain alongside it. - Orchestration delegated to the platform — verification, review, and per-item fan-out use
/verify,/code-review, and dynamic Workflows instead of hand-rolled skill logic.
Removed (breaking)
- Skills —
bootstrap,design,build,ship,roadmap, andauto-roadmapare removed, along with all phase companion files and the nine audit/runner subagents. - Bash machinery — the lock protocol (
auto-locks.sh), phase detection (phase-detect.sh), fail-log (fail-log.sh), touches-gate (touches-gate.sh),derive-task-id.sh,preamble.sh, and the auto-roadmap helpers are all gone. - Layout markers — the active-task pointer,
TASK_ID_OVERRIDE, per-worktree pointer files, and the roadmap.spec.mdsidecar are removed. Pipeline markers are exactlygit config task.rootplus the.taskexclude entry. docs/spec/*— replaced by the singledocs/contract.md.
Migration
- No automatic migration from a v1/v2
.task/workspace — this is a clean cut. Start fresh: discuss in chat, then runto-task/to-plan/to-roadmap/to-spec. - Replace
/task:design+/task:build+/task:shipwith: capture viato-task/to-plan, then tell a sessionimplement .task/task/<slug>.mdand let it follow the stamped## Executionblock. - Replace
/task:auto-roadmapwithroadmap-to-workflowover a.task/roadmap/<slug>.md. - Replace
/task:bootstrap— the four capture skills auto-run setup inline in a fresh project.
[2.0.0] — 2026-07-13
Interactive-first release. The pipeline now carries a task through each phase with structured questions, so a single bare command replaces most flag fiddling; the advanced flags stay fully functional but move off the everyday surface into a documented "Escape hatches" registry. This release also removes several redundant flags/modes and reworks the multi-worktree .task/ model — both are breaking. See Migration.
Added
- Interactive structured-choice layer — discrete path forks are now asked as
AskUserQuestionchips in interactive runs: design's fresh-start entry fork and--fromitem picker, build's implement→audit advance,/task:auto-roadmap's roadmap picker and item-scope question (all remaining / only next / pick range). Interactive-only — the autopilot runners still pass explicit flags. - Design phase-advance loop — after each design phase the skill re-detects state and asks once before chaining (Description-ready → build the plan; plan-ready → invoke
/task:build), so one/task:designinvocation walks the whole design half instead of needing repeated calls. - Bootstrap language + testing-policy detection —
/task:bootstrapnow detects the repo's language policy and testing-policy mode and presents both as a single accept/decline/edit proposal instead of asking cold. - Roadmap decision harvest —
/task:roadmapcan harvest decisions already settled in the prior conversation into a confirmed Decision Inventory before drafting, converging with the cold-start path on one pre-draft decision list. - Roadmap light self-check — after authoring,
/task:roadmapruns a report-only three-lens self-check (Coverage / Decomposition / Clarity) over the saved file and offers--refineinline only when findings warrant escalation.
Changed
- Question-driven cycle; advanced flags hidden —
--idea/--from/--auto/--next/--refine/--phaseare removed from README signatures, skilldescriptionfrontmatter, examples, and every user-facing next-step footer. The surviving flags remain functional and are documented once indocs/troubleshooting.md§ "Escape hatches", each paired with its interactive equivalent;/task:auto-roadmap's own flags stay a documented power surface. - Clean build proposes ship; ship commit composed from artifacts — a clean interactive build flows into ship's single accept/decline/edit confirmation, and the commit header+body are composed from
summary.md(fallbacktask.md) rather than free-text authoring. The audit tail is quieted to a one-line### Resultsummary (full detail stays inaudit.md; blocking findings are always shown in full). - Bootstrap auto-runs on first design/roadmap — the first
/task:designor/task:roadmapin an unconfigured project auto-runs/task:bootstrapinline, then continues the original request (stops only if you decline). - Roadmap
Sizecomputed,Classinferred —Sizeis derived from the### Outcomescount and**Class:**is a best-effort inferred, user-overridable hint; a codified archive path replaces ad-hoc naming. - Stale active-task pointer self-heals — a provably-stale pointer (empty / missing workspace subfolder) is cleared with a one-line notice instead of hard-stopping.
- Canonical next-step footer + one interaction grammar — every core command ends with a
→ Next:footer (or→ Done.), and content confirmations use one accept/decline/edit grammar. - Faster
/task:auto-roadmapper item — per-item token load and interactive validate round-trips trimmed; per-item time cut via the model split and lighter audit.
Changed (breaking)
- Multi-worktree
.task/model reworked — the.tasksymlink and/task:bootstrapjoin-mode are removed. All worktrees of a repo now share one.task/resolved viagit config --local task.root(written by bootstrap;dirname(git-common-dir)fallback), and the per-worktree active-task pointer moved from the worktree-root.task-currentinto git's per-worktree dir (git rev-parse --git-path task-current). Bootstrapped repos migrate automatically on the next command.
Removed (breaking)
/task:ship --fulland the hand-supplied commit slug —/task:shiphas one mode (full close); the slug is always auto-derived. Both removed forms now fail loud./task:ship --nextsubtask-transition mode — removed. This also fixed a bug where--nextwiped a subtask's Description without archivingtask.md; every close now archivestask.md./task:build --auto— removed; the interactive implement→audit advance question replaces it (the audit ≤2-iteration bound is unaffected)./task:design --ideaand the design idea phase — removed; brainstorm a task in chat, then run/task:design "<description>".--full chore-finalizerecovery convention — collapsed to a bare/task:ship.validate.sh todolegacy intake name — removed; usevalidate.sh roadmap <path|slug>.
Migration
- Run bare
/task:ship(default full close, slug auto-derived) instead of/task:ship --fullor/task:ship <slug>. - Clean up an aborted
/task:auto-roadmaprun with a bare/task:shipinstead of/task:ship --full chore-finalize. - Replace
/task:build --autowith a normal/task:buildand accept the implement→audit advance question when prompted. - Replace
/task:design --ideaby discussing the task in chat first, then/task:design "<description>"; work a multi-item roadmap by re-running/task:design --from <roadmap>per item. - Reach design's plan-refine via
/task:design --phase refine(repair-level, documented indocs/troubleshooting.md). - Use
validate.sh roadmap <path|slug>in place ofvalidate.sh todo. - Multi-worktree setups: standalone per-worktree
.task/is no longer supported — all worktrees share one.task/viagit config task.root, migrated automatically on the next command. To point the pipeline at an existing.task/yourself:git config --local task.root /abs/path/containing/dot-task.
[1.1.0] — 2026-07-11
Added
- Bootstrap onboarding primer — after writing
config.md,/task:bootstrapnow prints a fixed-template primer that teaches the mental model at first value: the four.task/artifacts and what each holds, phase auto-detect on re-run, the umbrella/subtask model, and the exact next command. Static template (localizable perconfig.md→ Language).
Changed
/task:auto-roadmapcollapses the per-item cycle into one item-runner subagent — now that nested subagents are supported, each item's design → implement → audit → ship runs inside a single disposableauto-roadmap-item-runner, returning only a compact report-card digest to the driver. Driver context stays flat, lifting the previous ~15/~25-item auto-compact ceiling on long runs. The per-stage model split, fail-stop, sentinel, and cross-worktree contracts are preserved;is_lastis now computed via checkbox look-ahead, fixing a latent dangling-umbrella case when a trailing item was already done.- Skill descriptions rewritten as trigger→result — the six user-invocable skill descriptions drop the internal
[N·phase]prefix codes (which collided across skills) in favor of a when-to-use then what-it-does form, so the/menu reads as guidance rather than pipeline taxonomy. - Design open names the plan-building next step — the quick-draft next-step hint now names the action and the artifact (review
task.md, then run/task:designagain to buildplan.md) instead of the opaque "auto-enters blueprint", removing the most common stall before a first ship. - README and troubleshooting reworked for new users — a copy-paste quickstart leads the README (the dense flag list is demoted to a "Command reference"), a new safety section states upfront what the pipeline touches in your code and git, and the troubleshooting page is rewritten around first-run symptoms keyed on the literal strings the tool prints.
[1.0.1] — 2026-07-10
Changed
- Tool-agnostic references — the authoring guidance and heuristic lists no longer privilege specific products or language stacks. The pipeline already resolved all tooling from
config.mdat runtime; now bootstrap's config-authoring guidance and the README use role-based phrasing, the roadmap per-task verification reminder and the commit fallback template defer toconfig.md, andtouches-gatepath extensions plusaudit-contextlockfile excludes broaden to a language-agnostic superset (a missing entry only skips a fast-path, never yields a wrong result).
Fixed
- Pipeline root discovery —
.taskis now located by a git-style upward walk (find_ai_dirin_lib/resolve-ws.sh) instead of being assumed at the current working directory. Skill bash helpers (validate.sh,phase-detect.sh, the context scripts,close.sh,auto-roadmap-context.sh) previously failed withconfig.md not foundwhenever the shell had drifted out of the project root; they now resolve.taskfrom any subdirectory. Linked-worktree.tasksymlinks are preserved (so the local.task-currentis still found), and a call from outside any project still fails cleanly with the same message. - Roadmap sidecar enumeration —
/task:auto-roadmapand/task:roadmap --refineno longer list<slug>.spec.md/<slug>.refine.mdsidecars as spurious "[malformed]" or empty roadmaps when enumerating.task/roadmap/. Both enumerators now skip the sidecars, matching whatvalidate.shalready carved out.
[1.0.0] — 2026-06-23
First public release. A linear task pipeline for Claude Code — design → build → ship — with explicit, file-backed checkpoints and an off-cycle roadmap track.
Added
- Pipeline skills —
/task:bootstrap(one-time per-project config),/task:design,/task:build,/task:ship, plus the off-cycle/task:roadmapand the/task:auto-roadmapautopilot. Phase-decomposed orchestrators (design→ open / idea / blueprint / refine;build→ implement / audit) dispatch to companion phase files. - Artifact contract — every stage reads and writes plain Markdown under
.task/(task.md,plan.md,audit.md,summary.md), reviewable without the agent and enforced by a PreToolUse validator hook. - Read-only audit lenses — six auditor-class subagents (Reuse / Simplicity / Clarity for the build audit phase; Coverage / Decomposition / Clarity for
/task:roadmap --refine) fan out in parallel; build audit runs a bounded, scope-gated auto-fix loop. - Roadmap autopilot —
/task:auto-roadmapdrives a whole roadmap item by item in the interactive session, with a per-item model split (cheaper model for the implement stage viaplan.md → Implement-Model:).
Full release history and downloads: GitHub releases.