Using Agent Skills
Purpose
Stage: cross-cutting (meta-dispatcher). achilles-skills is a suite of engineering-workflow skills
organized by lifecycle phase. Each skill encodes a process a senior engineer follows; each emits the
artifact the next stage consumes. This meta-skill exists because the wrong skill — or skipping a stage —
silently breaks the artifact chain that makes the autonomous run resumable. It helps you discover and
apply the right skill, in the right order, for the current task.
When to use / when to skip
Use at the start of every session, and any time you are unsure which skill applies or which stage you
are in. Read STATE.md, docs/session-state.md, docs/session-log.md, and docs/progress.md first, then route.
Skip only once you are already executing a named skill mid-stage — you do not re-dispatch on every turn.
You still re-consult this index when the stage changes (e.g. plan signed → moving to Implement) or when a
task spans phases (a feature flows Ideate → … → Ship; a bug fix may need only debug → test-driven-development → code-review).
Inputs
STATE.md (repo root) — the two-level board. Read the feature state, slice state, and gate
columns to locate the current stage and who owns the next action. If STATE.md is absent, route to
project-setup before dispatching anything else.
docs/session-state.md (when the repo has one) — the snapshot. Its five fields say where the
work stands. docs/session-log.md is the separate append-only record saying why, and which
questions are already settled. Read both before
you route, so a question the log already answers is not re-opened. Reversing a logged decision is a new
entry with a reason, not a debate restarted from zero. No file → nothing to read; route on.
docs/progress.md (when the repo has one) — the run record: what each slice actually executed, one
entry per slice, with the commands as they were run and their real output. Read it with the two above
before you route, and read it whenever you are resuming work you were not present for. The board says
where things stand, the log says why, and this says what was actually done — the question a summary of a
finished run is least reliable about. A heading with nothing under it is a slice that started and did not
finish. It carries no stage and no owner, so never route off it; and nothing here writes it. No file →
nothing to read; route on.
docs/lessons.md (when the repo has one) — the lessons record: what a root-caused defect turned out
to be, and the guard that would stop it coming back. Read by a later stage, not by this one. No
routing decision turns on it, so opening it here spends context and settles nothing.
incremental-implementation reads it before it writes a skeleton, because its entries are decisions
about how to build rather than about which skill applies. It is named here so a cold agent learns the
record exists and who owes it a read — a file this list never mentions is a file nobody goes looking for.
- The full skill roster (this file's Process tree + Quick reference) — the set of skills you may route to.
- The task in the prompt — classify it to a stage.
This skill is the entry point, so it does not refuse-to-run; its one hard rule is: no STATE.md ⇒ project-setup first.
Process
This skill runs first. Read docs/session-state.md, docs/session-log.md, and docs/progress.md before you
route, so the questions this project has already settled are in hand, along with what the last run
actually executed. Then identify the stage from STATE.md's gate column
(or, if no STATE.md exists yet, run project-setup) and route the task to the stage skill below. The
Core Operating Behaviors (further down) apply at all times, regardless of which skill is active.
Task arrives
│
├── No STATE.md yet? ──────────────────────→ project-setup (one-time repo ecosystem)
├── Thrown away when it is done? ──────────→ OFFER gauntlet-loop AND the full loop — never pick one
│ (Standalone · asked BEFORE the stage branches · see below)
│
├── Don't know what you want yet? ─────────→ interview-me (Ideate · optional front door → intent.md)
├── Have a rough idea, need variants? ─────→ idea-refine (Ideate → intent.md)
├── New feature, need the design? ─────────→ codebase-research, then spec-grilling (Spec · in that order)
│ ├── Survey the code as it is today? ───→ codebase-research (Spec · head → research.md · goal-blind
│ │ · runs again at the head of Plan)
│ ├── Survey done, decide the design? ───→ spec-grilling (Spec → ADRs + CONTEXT.md · refuses without research.md)
│ ├── Deep-module interfaces? ───────────→ codebase-design (Spec · Plan · referenced discipline)
│ ├── Contract-first API? ───────────────→ api-design (Spec · Plan · referenced discipline)
│ ├── Need the product PRD? ─────────────→ to-prd (Spec → prd.md)
│ ├── Decides how something looks? ──────→ frontend-design (Spec, after to-prd and before
│ │ (the skill's own When-to-use acceptance-criteria and environment-manifest run)
│ │ states the test)
│ ├── Need the behavioral contract? ─────→ acceptance-criteria (Spec → acceptance.md, behavioral-only)
│ ├── Capture env needs? ────────────────→ environment-manifest (Spec/Plan → environment.md)
│ ├── Structure nobody wrote down? ──────→ architecture-design (Spec · once acceptance.md exists
│ │ in draft, before spec-review → architecture.md)
│ └── Spec done, fix before review? ─────→ spec-review (Spec → fixed spec + spec-review.md)
├── Signed spec, need a plan? ─────────────→ plan-breakdown (Plan · THE planner → plan.md + slices + DAG)
│ └── Need codebase facts? ──────────────→ codebase-research (Plan · head → second pass, scoped to the
│ aspect the signed decisions now point at; Spec's
│ research.md still stands for ground it already maps)
├── Implementing a slice? ─────────────────→ incremental-implementation (Implement · THE implementer → diff)
│ ├── Writing the test first? ───────────→ test-driven-development (RED-GREEN-REFACTOR · hook-enforced)
│ ├── Framework/library decision? ───────→ source-driven-development (verify against fetched official docs)
│ └── Need slice isolation? ─────────────→ worktree (orchestrator-owned mechanism)
├── Proving it works? ─────────────────────→ quality-verification (Verify · acceptance tests + design gate → qa.md)
│ ├── Browser/runtime checks? ───────────→ browser-testing-with-devtools (engine quality-verification drives)
│ └── Something broke? ──────────────────→ debugging-and-error-recovery (five-step triage)
├── Reviewing a slice? ────────────────────→ code-review (Review · five-axis incl. test quality)
│ ├── Too complex? ──────────────────────→ code-simplification
│ ├── Security concerns? ────────────────→ security-and-hardening
│ ├── Performance concerns? ─────────────→ performance-optimization
│ └── In-flight decision doubt? ─────────→ doubt-driven-development (during plan/implement · NOT a merge gate)
├── Ending a slice? ───────────────────────→ pull-request (Ship · per-slice design-anchored DRAFT PR)
│ ├── Committing/branching? ─────────────→ git-workflow
│ ├── CI/CD pipeline work? ──────────────→ ci-cd
│ ├── Logs/metrics/traces? ──────────────→ observability-and-instrumentation (instrument as you build)
│ ├── Release/launch? ───────────────────→ shipping-and-launch (release-level · AFTER the human merges)
│ ├── Deprecating/migrating? ────────────→ deprecation-and-migration
│ └── Writing docs/ADRs? ────────────────→ documentation-and-adrs
│
├── Is the env ready? ─────────────────────→ preflight-readiness (Cross-cut · env-readiness gate)
├── Compact/handoff this session? ─────────→ handoff (Cross-cut · per-session compaction)
├── Explain code you didn't write? ────────→ literate-explainer (Standalone · teaching artifact for code you didn't write · no gate)
├── Quiz your understanding? ──────────────→ comprehension-quiz (Standalone · retrieval practice, graded before reveal · no gate)
└── Coordinating the whole loop? ──────────→ orchestrator (wave-parallel DAG · preflight-readiness gate · handoff)
Review is a fan-out: the orchestrator runs code-review / code-simplification / security-and-hardening / performance-optimization as fresh, code-cold
subagents in parallel on independent axes (maker≠checker) — never as role-played personas.
Offering the fast path, never routing to it
gauntlet-loop is the one destination in this tree you never select. Ask its question before you walk
the stage branches, because a throwaway ask matches them too — "prototype the dashboard" reads like a new
feature — and once you have routed to a stage the offer never gets made. When an ask reads like a throwaway
proof of concept (a spike, a demo, a bake-off, anything the human says they will delete), name both paths
in one message, one line each, and stop until the human picks:
/gauntlet-loop — fast, throwaway, no gates; the work lands in the .gauntlet/ scratch the repository
ignores, and is not shippable.
- the full loop — Ideate → Spec → Plan → Implement → Verify → Review → Ship, which is what anything that
will ship goes through.
Deciding this yourself is the failure the offer exists to stop: "quick" is a tone, not a scope. "Quick,
add auth to the login page" is production work said in a hurry, and sent to the fast path it gets no
acceptance.md, no security audit, and no maker≠checker pass. So the permissive path is opt-in: an offer
nobody answered, a non-answer, and anything short of the human choosing it all mean the full loop. The one
case that skips the offer is the human naming the gauntlet themselves — typing /gauntlet-loop, or using any
of the trigger phrases the skill's description lists. That is the pick already made.
Skill Rules
Check for an applicable skill before starting work. Skills encode processes that prevent common mistakes.
Skills are workflows, not suggestions. Follow the steps in order. Don't skip verification steps.
Multiple skills can apply. A feature implementation might involve idea-refine → codebase-research → spec-grilling → plan-breakdown → incremental-implementation → test-driven-development → code-review → code-simplification → pull-request in sequence. The sequence ends at the open draft PR, because that is where the agent's span ends — shipping-and-launch picks up on the far side of the human's merge and is not part of the chain a slice walks.
When in doubt, start with a spec — and a spec starts with the survey. If the task is non-trivial and there's no spec, begin with codebase-research, then spec-grilling. Going straight to spec-grilling gets you refused: it will not decide a design against recollection, so it requires the research.md the survey writes.
Core Operating Behaviors
These behaviors apply at all times, across all skills. They are non-negotiable.
1. Surface Assumptions
Before implementing anything non-trivial, explicitly state your assumptions:
ASSUMPTIONS I'M MAKING:
1. [assumption about requirements]
2. [assumption about architecture]
3. [assumption about scope]
→ Correct me now or I'll proceed with these.
Don't silently fill in ambiguous requirements. The most common failure mode is making wrong assumptions and running with them unchecked. Surface uncertainty early — it's cheaper than rework.
2. Manage Confusion Actively
When you encounter inconsistencies, conflicting requirements, or unclear specifications:
- STOP. Do not proceed with a guess.
- Name the specific confusion. Where two documents disagree, name both files and the claim.
- Check whether it is already settled. Two documents disagreeing is often not a real conflict:
Source-of-truth order below ranks them, and if it names which one governs, you have your answer
and you continue. A confusion that order does not cover, or does not settle, reaches step 4.
- Hand it to whoever can settle it — and who that is depends on whether anybody is there to ask.
Which situation you are in. The question is not which stage you are in, it is whether a person is
present to answer:
- Somebody is there — a human-owned stage (Ideate, Spec, Plan), or a single-slice path a person
invoked and is watching. Asking is the whole point: present the tradeoff or the clarifying question
and wait for the answer. Guessing here throws away the cheapest correction you will ever get.
- Nobody is there — you were dispatched inside a run, the autonomous Implement → Verify → Review →
Ship pass. A question has no one to answer it, so asking one is a deadlock: the slice sits open
forever and the rest of the graph stops draining behind it. End the slice instead. Report what
ended it, naming both sides of the inconsistency, and flip its
gate column agent → you. The slice
is over, the run keeps going, and the human settles it when they next look.
Ending a slice is not a quieter way of waiting — it is what keeps the rest of the graph moving, and it
is one of the named stop conditions rather than an exception to autonomy. orchestrator's What stops a
run carries the full list; read it there rather than counting from memory.
Bad: Silently picking one interpretation and hoping it's right.
Bad: Asking a clarifying question inside a run, then waiting. Nobody is at the keyboard, so the
answer never comes and the run never finishes.
Good, with a person present: "I see X in the spec but Y in the existing code. Which takes precedence?"
Good, inside a run: end the slice reporting "ADR-004 expires sessions at 24h, ADR-011 at 1h; both
are rank 2, so the source-of-truth order does not settle it" — the gate flips agent → you, and the
next ready slice starts.
3. Push Back When Warranted
You are not a yes-machine. When an approach has clear problems:
- Point out the issue directly
- Explain the concrete downside (quantify when possible — "this adds ~200ms latency" not "this might be slower")
- Propose an alternative
- Accept the human's decision if they override with full information
Sycophancy is a failure mode. "Of course!" followed by implementing a bad idea helps no one. Honest technical disagreement is more valuable than false agreement.
4. Enforce Simplicity
Your natural tendency is to overcomplicate. Actively resist it.
Before finishing any implementation, ask:
- Can this be done in fewer lines?
- Are these abstractions earning their complexity?
- Would a staff engineer look at this and say "why didn't you just..."?
If you build 1000 lines and 100 would suffice, you have failed. Prefer the boring, obvious solution. Cleverness is expensive.
5. Maintain Scope Discipline
Touch only what you're asked to touch.
Do NOT:
- Remove comments you don't understand
- "Clean up" code orthogonal to the task
- Refactor adjacent systems as a side effect
- Delete code that seems unused without explicit approval
- Add features not in the spec because they "seem useful"
Your job is surgical precision, not unsolicited renovation.
6. Verify, Don't Assume
Every skill includes a verification step. A task is not complete until verification passes. "Seems right" is never sufficient — there must be evidence (passing tests, build output, runtime data).
Per-skill verification is the local check. The project-wide bar that applies to every change, regardless of which skill is active, is the Definition of Done: tests pass, no regressions, behavior verified at runtime, docs updated. See references/definition-of-done.md. It complements each task's acceptance criteria rather than replacing them.
Lifecycle & ownership
The loop is Ideate → Spec → Plan → Implement → Verify → Review → Ship. Ownership splits hard:
- Human owns Ideate + Spec + Plan (all the thinking). One upstream gate: the Spec sign-off, one
act covering
acceptance.md, environment.md, prd.md, the decision records and the glossary at once
— plus a design contract where the feature has UI, and architecture.md where it adds a module, adds a
dependency between parts that already exist, or introduces a seam.
- Agent runs Implement → Verify → Review → Ship autonomously — it never blocks waiting for input. No
"should I continue?" checkpoint sits between slices; nobody has to watch it. It terminates at
risk-banded OPEN draft PRs on the cluster branch; the async human merge is the surviving final gate
(never auto-merge to main; auto-deploy is out of v1).
- A run can still stop. Two different claims are easy to collapse into one, so keep them apart: a run
never waits, but named conditions do end it early — a missing precondition, an absent or unsigned
acceptance.md, an attempted edit to a frozen artifact, a security CRITICAL/HIGH or a secret in the
diff, two sources of truth the source-of-truth order does not settle, exhausted retries. High-risk
work is not one of them: nothing pauses mid-run for a sign-off
nobody is there to give, so auth, payments, migrations, deletions, deploys, and secrets surface at the
end instead — as the PR's risk band, which the human reads at the merge gate. A stopped slice flips
its gate column agent → you, and the run reports what stopped it and where rather than sitting idle.
orchestrator's What stops a run carries the full list — read it there rather than counting from
memory.
Artifact chain (each stage emits what the next consumes cold):
intent.md → research.md → prd.md (+ ADRs/CONTEXT.md) → acceptance.md + environment.md
→ architecture.md + architecture.html → plan.md + slices + DAG
→ [implement → qa.md → review → pr → draft PR]
STATE.md (root) is the two-level board (feature state · slice state · gate) indexing every feature under
docs/features/<slug>/. Read it first to find where you are. Not every task needs every skill — a bug fix
might only need debugging-and-error-recovery → test-driven-development → code-review.
What an edit un-signs
A signature is against a version, not against a filename. Editing something upstream of a signed artifact
returns it to draft — it does not stay signed over a foundation that moved.
| Editing this |
Returns to draft |
Because |
prd.md |
acceptance.md, environment.md (its Spec pass), the design contract |
each is derived from the product spec; the behaviour, the external needs, and the look all answer to it |
acceptance.md |
architecture.md |
it traces every scenario, and the trace is checked by set equality against the scenario ids |
| a decision record it cites |
architecture.md |
its edges and decisions cite those records; a citation to a decision that changed is not a citation |
docs/design.md |
every design contract carrying an inherited axis it touched |
an inherited axis is graded against whatever that file says at Verify time, so moving the decided look re-grades surfaces nobody re-read. Name those contracts in the handoff and flip each one |
intent.md |
prd.md, and everything above through it |
the whole chain hangs off the intent |
research.md |
nothing |
the survey records the code as it stands and decides nothing |
Nothing an agent does flips a draft back to signed — that is the person's act, at the gate. An agent
that finds a signed artifact resting on a moved upstream says so and stops; it does not re-sign, and it
does not edit the signed file to make the mismatch go away.
This table is the one statement of the rule. A skill that needs it points here rather than restating it,
because four copies of one rule are four things that drift.
Source-of-truth order
Two documents can state the same thing differently. This order says which one governs, most authoritative
first. A repository that does not have one of these simply skips its rank.
CLAUDE.md / AGENTS.md — the rules for this repository
docs/adr/ — the decisions taken, and what each one ruled out, including any decided layer order
prd.md — one feature's product spec
acceptance.md — that feature's signed behavioral contract
plan.md — that feature's slices
docs/lessons.md — what a past defect taught, and the guard that would catch it again
docs/progress.md — what each slice actually executed
Not every document has a rank. STATE.md, CONTEXT.md and the CONTEXT-MAP.md index a multi-context
repository keeps beside it, and the per-feature intent.md, research.md, environment.md, and qa.md
have none. Three more settle themselves instead of needing one: docs/session-log.md says in its own
text that it is the weakest source here and never overrides a decision record or a signed acceptance.md;
a feature's design contract and docs/design.md divide one subject rather than compete for it — the
contract decides that surface, and docs/design.md decides every axis the contract marks inherited; and a
feature's architecture.md decides that feature's structure while the layer order it rests on, where one
was decided, is an ADR it cites. Where two documents with no rank between them disagree, nothing here settles it, and the stop condition in
orchestrator is what happens: the slice ends, both files and the claim are named, and the next move is
yours.
Quick reference
| Stage |
Skill |
One-line summary |
| Cross-cut |
using-agent-skills |
this meta-dispatcher: task → skill + lifecycle map |
| Cross-cut |
project-setup |
one-time repo ecosystem (STATE.md, CONTEXT.md, docs/adr/, docs/features/, docs/session-state.md, docs/session-log.md, docs/progress.md, docs/lessons.md, the ## Agent skills block in one of CLAUDE.md / AGENTS.md + a short pointer to it in the other) |
| Cross-cut |
orchestrator |
wave-parallel DAG executor; platform-adaptive; runs to open draft PRs, never waits |
| Cross-cut |
preflight-readiness |
env-readiness gate; refuses the wave until provisioned |
| Cross-cut |
handoff |
per-session compaction to a fresh-agent doc |
| Ideate |
interview-me |
optional front door: surface what the user actually wants → intent.md |
| Ideate |
idea-refine |
divergent/convergent refinement + "Not Doing"; shares intent.md |
| Spec · Plan |
codebase-research |
goal-blind map of the codebase/DB as-is → one research/<axis>.md per sub-agent plus the research.md that compresses them; runs at the head of Spec, and again at the head of Plan against the aspect the signed decisions now point at |
| Spec |
spec-grilling |
how to design the product; ADRs + CONTEXT.md (no prd.md) · fans out codebase-design / api-design variants on a load-bearing structural question; batches the rest as one-line defaults |
| Spec |
to-prd |
light dual-audience PRD; references ADRs by id → prd.md |
| Spec |
frontend-design |
UI only — the skill's own When to use / when to skip states the test: throwaway variants → committed prototype + design contract; the repo's first UI surface also writes docs/design.md |
| Spec |
acceptance-criteria |
behavioral-only Given/When/Then contract → acceptance.md |
| Spec |
environment-manifest |
typed-kind manifest (no values, no commands) → environment.md |
| Spec |
architecture-design |
reconciles, grades, and renders — traces every scenario, recaps the requirements and the scale and reliability posture, has the result graded code-cold, cites the decisions taken in spec-grilling; takes none itself · Anthropic's five-part system-design format plus a sixth section of open questions · runs against a draft acceptance.md; the two are signed together at the Spec gate · emits architecture.md + the committed architecture.html |
| Spec |
spec-review |
fresh code-cold agent fixes the spec before the human reviews |
| Plan |
plan-breakdown |
THE planner: concrete plan → vertical slices + dependency DAG; reads the Plan-stage research.md that the second codebase-research pass writes |
| Spec · Plan |
codebase-design |
Referenced discipline, Spec and Plan — proposes a structural variant in Spec, pins the interface into plan.md in Plan; owns no artifact of its own. Deep modules, deletion test |
| Spec · Plan |
api-design |
Referenced discipline, Spec and Plan — proposes a structural variant in Spec, pins the interface into plan.md in Plan; owns no artifact of its own. Contract-first interface |
| Implement |
incremental-implementation |
THE implementer: one thin vertical slice, skeleton-first |
| Implement |
test-driven-development |
rigid RED-GREEN-REFACTOR; realizes acceptance scenarios as tests |
| Implement |
source-driven-development |
ground framework decisions in fetched official docs |
| Implement |
worktree |
per-slice isolation mechanism (orchestrator-owned) |
| Verify |
quality-verification |
fresh code-cold: behavioral acceptance tests + design gate → qa.md |
| Verify |
browser-testing-with-devtools |
live-runtime engine quality-verification drives (any configured browser MCP) |
| Verify |
debugging-and-error-recovery |
five-step triage: reproduce · localize · reduce · fix · guard |
| Review |
code-review |
five-axis review incl. test quality; severity labels |
| Review |
code-simplification |
behavior-preserving reduction; Chesterton's Fence |
| Review |
security-and-hardening |
OWASP Top 10; auth; secrets; dependency audit |
| Review |
performance-optimization |
measure-first; Core Web Vitals; profiling |
| Plan · Implement |
doubt-driven-development |
in-flight adversarial review; not part of the Review gate |
| Ship |
pull-request |
the spine of Ship: per-slice design-anchored draft PR; read-the-code checklist; the stage ends here |
| Ship |
shipping-and-launch |
release workhorse, release-level and post-merge: checklist · flags · rollout · rollback. A slice still at an open draft PR belongs to pull-request. |
| Ship |
git-workflow |
trunk-based; atomic commits; secret hygiene |
| Ship |
ci-cd |
Shift Left; quality-gate pipeline |
| Ship |
observability-and-instrumentation |
structured logs; RED metrics; tracing; symptom alerts |
| Ship |
deprecation-and-migration |
code-as-liability; migration patterns; zombie-code removal |
| Ship |
documentation-and-adrs |
the ADR + doc standard: document the why |
| Comprehension |
literate-explainer |
standalone: turn a diff or whole repo into a self-contained teaching artifact; never a gate |
| Comprehension |
comprehension-quiz |
standalone: ~5-question retrieval practice, graded before reveal → learning ledger; never a gate |
| Standalone |
gauntlet-loop |
fast path for a throwaway POC: beat a named outside bar, blind builder/critic loop, work stays in the .gauntlet/ scratch the repository ignores; offered, never auto-selected |
Rationalizations
Excuses that talk you out of dispatching correctly — each is a failure mode:
- "This is obvious, I'll just start coding." → No spec ⇒ no acceptance.md ⇒ nothing for Verify to gate on.
Non-trivial work with no spec starts at
codebase-research, then spec-grilling.
- "spec-grilling refused for want of research.md, so I'm stuck." → You are one skill upstream of unstuck.
The survey is the head of Spec, not a Plan chore: run
codebase-research against the signed intent.md,
then re-enter spec-grilling. A refusal names its missing artifact precisely so you can route to whoever
emits it — that is the dispatch move, not a dead end.
- "I already know which skill, I won't check STATE.md." → You skip the gate column and may run an agent-owned
skill on a slice the human still owns. Read STATE.md.
- "I'll fold Verify into Implement to save a step." → quality-verification is a fresh code-cold maker≠checker gate; collapsing
it is exactly the silent-false-green the suite is built to prevent.
- "The plan is close enough, I'll skip plan-breakdown." → Without slices + the DAG, the orchestrator has no
waves and the run can't parallelize or resume.
- "They said quick, so I'll send it to
gauntlet-loop." → You do not select that path; you offer it and the
human picks. See Offering the fast path, never routing to it.
- "The spec contradicts itself, so I'll ask and wait — Manage Confusion Actively says not to guess." →
It says not to guess, and inside a run it says to end the slice. Waiting is not the cautious reading of
that rule, it is the one failure the rule cannot survive: nobody is at the keyboard mid-run, so the
slice never resumes and every slice behind it stalls too. Name both sides, end the slice, flip the
gate to you, and let the next ready slice start.
Red flags
These are the subtle errors that look like productivity but create problems:
- Making wrong assumptions without checking
- Not managing your own confusion — plowing ahead when lost
- Not surfacing inconsistencies you notice
- Not presenting tradeoffs on non-obvious decisions
- Being sycophantic ("Of course!") to approaches with clear problems
- Overcomplicating code and APIs
- Modifying code or comments orthogonal to the task
- Removing things you don't fully understand
- Building without a spec because "it's obvious"
- Skipping verification because "it looks right"
- Waiting mid-run for an answer nobody is there to give, instead of ending the slice and flipping its gate
Verification (ending criteria)
Dispatch is complete when ALL hold:
docs/session-state.md and docs/session-log.md were read before you routed, where the repo
has them, and no question the log already answers was re-opened.
docs/progress.md was read before you routed, where the repo has one, so what the last run actually
executed is in hand rather than reconstructed from a summary of it. Nothing was routed off it: it says
what ran, never who acts next.
- You named the applicable skill(s) AND its stage (Ideate/Spec/Plan/Implement/Verify/Review/Ship/cross-cut).
- You confirmed the skill's consuming artifact exists (per its
Inputs); if it is missing, you routed
upstream to the skill that emits it rather than running the downstream skill against a gap.
- You respected the ownership boundary: an agent-owned stage skill is not run on a slice whose
gate
column is you, and vice-versa.
- A throwaway-shaped ask got both paths named and no pick made for the human;
gauntlet-loop was reached
only because the human named it.
- The project-wide Definition of Done still governs every change the dispatched skill will make
(
references/definition-of-done.md).
Outputs & handoff contract
- Emits: a routing decision (in-conversation, not a durable artifact) —
task → {skill, stage, consuming-artifact present?}. This is the "task→skill+lifecycle map."
- Stable hand-off: names exactly one next skill and the artifact it will read/write, so the dispatched
skill starts cold without re-deriving context.
- STATE.md: this skill does not write STATE.md — the dispatched stage skill (or the orchestrator)
records the transition. The dispatcher only reads STATE.md to decide. The same holds for
docs/session-state.md, docs/session-log.md and docs/progress.md: it reads them all and writes none.
- Re-entry: on any stage change or a
gate flip in STATE.md, re-consult this skill.
1---2name: using-agent-skills3description: The meta-dispatcher for the achilles-skills suite. Maps any task to the right stage skill and the artifact-chain lifecycle (Ideate → Spec → Plan → Implement → Verify → Review → Ship). Use this FIRST — at the start of every session and whenever you are unsure which skill applies — before writing any plan, spec, or code. Acting without consulting this index is how the wrong skill gets run and the artifact chain gets skipped.4---56# Using Agent Skills78## Purpose910**Stage: cross-cutting (meta-dispatcher).** achilles-skills is a suite of engineering-workflow skills11organized by lifecycle phase. Each skill encodes a process a senior engineer follows; each emits the12artifact the next stage consumes. This meta-skill exists because the wrong skill — or skipping a stage —13silently breaks the artifact chain that makes the autonomous run resumable. It helps you discover and14apply the right skill, in the right order, for the current task.1516## When to use / when to skip1718**Use** at the start of every session, and any time you are unsure which skill applies or which stage you19are in. Read `STATE.md`, `docs/session-state.md`, `docs/session-log.md`, and `docs/progress.md` first, then route.2021**Skip** only once you are already executing a named skill mid-stage — you do not re-dispatch on every turn.22You still re-consult this index when the stage changes (e.g. plan signed → moving to Implement) or when a23task spans phases (a feature flows Ideate → … → Ship; a bug fix may need only debug → test-driven-development → code-review).2425## Inputs2627- **`STATE.md`** (repo root) — the two-level board. Read the `feature state`, `slice state`, and `gate`28 columns to locate the current stage and who owns the next action. **If `STATE.md` is absent, route to29 `project-setup` before dispatching anything else.**30- **`docs/session-state.md`** (when the repo has one) — the snapshot. Its five fields say where the31 work stands. **`docs/session-log.md`** is the separate append-only record saying why, and which32 questions are already settled. Read both before33 you route, so a question the log already answers is not re-opened. Reversing a logged decision is a new34 entry with a reason, not a debate restarted from zero. No file → nothing to read; route on.35- **`docs/progress.md`** (when the repo has one) — the run record: what each slice actually executed, one36 entry per slice, with the commands as they were run and their real output. Read it with the two above37 before you route, and read it whenever you are resuming work you were not present for. The board says38 where things stand, the log says why, and this says what was actually done — the question a summary of a39 finished run is least reliable about. A heading with nothing under it is a slice that started and did not40 finish. It carries no stage and no owner, so never route off it; and nothing here writes it. No file →41 nothing to read; route on.42- **`docs/lessons.md`** (when the repo has one) — the lessons record: what a root-caused defect turned out43 to be, and the guard that would stop it coming back. **Read by a later stage, not by this one.** No44 routing decision turns on it, so opening it here spends context and settles nothing.45 `incremental-implementation` reads it before it writes a skeleton, because its entries are decisions46 about how to build rather than about which skill applies. It is named here so a cold agent learns the47 record exists and who owes it a read — a file this list never mentions is a file nobody goes looking for.48- **The full skill roster** (this file's Process tree + Quick reference) — the set of skills you may route to.49- **The task in the prompt** — classify it to a stage.5051This skill is the entry point, so it does not refuse-to-run; its one hard rule is: no STATE.md ⇒ `project-setup` first.5253## Process5455This skill runs first. Read `docs/session-state.md`, `docs/session-log.md`, and `docs/progress.md` before you56route, so the questions this project has already settled are in hand, along with what the last run57actually executed. Then identify the stage from `STATE.md`'s `gate` column58(or, if no STATE.md exists yet, run `project-setup`) and route the task to the stage skill below. The59Core Operating Behaviors (further down) apply at all times, regardless of which skill is active.6061```62Task arrives63 │64 ├── No STATE.md yet? ──────────────────────→ project-setup (one-time repo ecosystem)65 ├── Thrown away when it is done? ──────────→ OFFER gauntlet-loop AND the full loop — never pick one66 │ (Standalone · asked BEFORE the stage branches · see below)67 │68 ├── Don't know what you want yet? ─────────→ interview-me (Ideate · optional front door → intent.md)69 ├── Have a rough idea, need variants? ─────→ idea-refine (Ideate → intent.md)70 ├── New feature, need the design? ─────────→ codebase-research, then spec-grilling (Spec · in that order)71 │ ├── Survey the code as it is today? ───→ codebase-research (Spec · head → research.md · goal-blind72 │ │ · runs again at the head of Plan)73 │ ├── Survey done, decide the design? ───→ spec-grilling (Spec → ADRs + CONTEXT.md · refuses without research.md)74 │ ├── Deep-module interfaces? ───────────→ codebase-design (Spec · Plan · referenced discipline)75 │ ├── Contract-first API? ───────────────→ api-design (Spec · Plan · referenced discipline)76 │ ├── Need the product PRD? ─────────────→ to-prd (Spec → prd.md)77 │ ├── Decides how something looks? ──────→ frontend-design (Spec, after to-prd and before78 │ │ (the skill's own When-to-use acceptance-criteria and environment-manifest run)79 │ │ states the test)80 │ ├── Need the behavioral contract? ─────→ acceptance-criteria (Spec → acceptance.md, behavioral-only)81 │ ├── Capture env needs? ────────────────→ environment-manifest (Spec/Plan → environment.md)82 │ ├── Structure nobody wrote down? ──────→ architecture-design (Spec · once acceptance.md exists83 │ │ in draft, before spec-review → architecture.md)84 │ └── Spec done, fix before review? ─────→ spec-review (Spec → fixed spec + spec-review.md)85 ├── Signed spec, need a plan? ─────────────→ plan-breakdown (Plan · THE planner → plan.md + slices + DAG)86 │ └── Need codebase facts? ──────────────→ codebase-research (Plan · head → second pass, scoped to the87 │ aspect the signed decisions now point at; Spec's88 │ research.md still stands for ground it already maps)89 ├── Implementing a slice? ─────────────────→ incremental-implementation (Implement · THE implementer → diff)90 │ ├── Writing the test first? ───────────→ test-driven-development (RED-GREEN-REFACTOR · hook-enforced)91 │ ├── Framework/library decision? ───────→ source-driven-development (verify against fetched official docs)92 │ └── Need slice isolation? ─────────────→ worktree (orchestrator-owned mechanism)93 ├── Proving it works? ─────────────────────→ quality-verification (Verify · acceptance tests + design gate → qa.md)94 │ ├── Browser/runtime checks? ───────────→ browser-testing-with-devtools (engine quality-verification drives)95 │ └── Something broke? ──────────────────→ debugging-and-error-recovery (five-step triage)96 ├── Reviewing a slice? ────────────────────→ code-review (Review · five-axis incl. test quality)97 │ ├── Too complex? ──────────────────────→ code-simplification98 │ ├── Security concerns? ────────────────→ security-and-hardening99 │ ├── Performance concerns? ─────────────→ performance-optimization100 │ └── In-flight decision doubt? ─────────→ doubt-driven-development (during plan/implement · NOT a merge gate)101 ├── Ending a slice? ───────────────────────→ pull-request (Ship · per-slice design-anchored DRAFT PR)102 │ ├── Committing/branching? ─────────────→ git-workflow103 │ ├── CI/CD pipeline work? ──────────────→ ci-cd104 │ ├── Logs/metrics/traces? ──────────────→ observability-and-instrumentation (instrument as you build)105 │ ├── Release/launch? ───────────────────→ shipping-and-launch (release-level · AFTER the human merges)106 │ ├── Deprecating/migrating? ────────────→ deprecation-and-migration107 │ └── Writing docs/ADRs? ────────────────→ documentation-and-adrs108 │109 ├── Is the env ready? ─────────────────────→ preflight-readiness (Cross-cut · env-readiness gate)110 ├── Compact/handoff this session? ─────────→ handoff (Cross-cut · per-session compaction)111 ├── Explain code you didn't write? ────────→ literate-explainer (Standalone · teaching artifact for code you didn't write · no gate)112 ├── Quiz your understanding? ──────────────→ comprehension-quiz (Standalone · retrieval practice, graded before reveal · no gate)113 └── Coordinating the whole loop? ──────────→ orchestrator (wave-parallel DAG · preflight-readiness gate · handoff)114115Review is a fan-out: the orchestrator runs code-review / code-simplification / security-and-hardening / performance-optimization as fresh, code-cold116subagents in parallel on independent axes (maker≠checker) — never as role-played personas.117```118119### Offering the fast path, never routing to it120121`gauntlet-loop` is the one destination in this tree you never select. Ask its question **before** you walk122the stage branches, because a throwaway ask matches them too — "prototype the dashboard" reads like a new123feature — and once you have routed to a stage the offer never gets made. When an ask reads like a throwaway124proof of concept (a spike, a demo, a bake-off, anything the human says they will delete), name **both** paths125in one message, one line each, and stop until the human picks:126127- **`/gauntlet-loop`** — fast, throwaway, no gates; the work lands in the `.gauntlet/` scratch the repository128 ignores, and is not shippable.129- **the full loop** — Ideate → Spec → Plan → Implement → Verify → Review → Ship, which is what anything that130 will ship goes through.131132Deciding this yourself is the failure the offer exists to stop: **"quick" is a tone, not a scope.** "Quick,133add auth to the login page" is production work said in a hurry, and sent to the fast path it gets no134`acceptance.md`, no security audit, and no maker≠checker pass. So the permissive path is opt-in: an offer135nobody answered, a non-answer, and anything short of the human choosing it all mean the full loop. The one136case that skips the offer is the human naming the gauntlet themselves — typing `/gauntlet-loop`, or using any137of the trigger phrases the skill's `description` lists. That is the pick already made.138139## Skill Rules1401411. **Check for an applicable skill before starting work.** Skills encode processes that prevent common mistakes.1421432. **Skills are workflows, not suggestions.** Follow the steps in order. Don't skip verification steps.1441453. **Multiple skills can apply.** A feature implementation might involve `idea-refine` → `codebase-research` → `spec-grilling` → `plan-breakdown` → `incremental-implementation` → `test-driven-development` → `code-review` → `code-simplification` → `pull-request` in sequence. The sequence ends at the open draft PR, because that is where the agent's span ends — `shipping-and-launch` picks up on the far side of the human's merge and is not part of the chain a slice walks.1461474. **When in doubt, start with a spec — and a spec starts with the survey.** If the task is non-trivial and there's no spec, begin with `codebase-research`, then `spec-grilling`. Going straight to `spec-grilling` gets you refused: it will not decide a design against recollection, so it requires the `research.md` the survey writes.148149## Core Operating Behaviors150151These behaviors apply at all times, across all skills. They are non-negotiable.152153### 1. Surface Assumptions154155Before implementing anything non-trivial, explicitly state your assumptions:156157```158ASSUMPTIONS I'M MAKING:1591. [assumption about requirements]1602. [assumption about architecture]1613. [assumption about scope]162→ Correct me now or I'll proceed with these.163```164165Don't silently fill in ambiguous requirements. The most common failure mode is making wrong assumptions and running with them unchecked. Surface uncertainty early — it's cheaper than rework.166167### 2. Manage Confusion Actively168169When you encounter inconsistencies, conflicting requirements, or unclear specifications:1701711. **STOP.** Do not proceed with a guess.1722. Name the specific confusion. Where two documents disagree, name both files and the claim.1733. Check whether it is already settled. Two documents disagreeing is often not a real conflict:174 **Source-of-truth order** below ranks them, and if it names which one governs, you have your answer175 and you continue. A confusion that order does not cover, or does not settle, reaches step 4.1764. Hand it to whoever can settle it — and **who that is depends on whether anybody is there to ask.**177178**Which situation you are in.** The question is not which stage you are in, it is whether a person is179present to answer:180181- **Somebody is there** — a human-owned stage (Ideate, Spec, Plan), or a single-slice path a person182 invoked and is watching. Asking is the whole point: present the tradeoff or the clarifying question183 and **wait for the answer.** Guessing here throws away the cheapest correction you will ever get.184- **Nobody is there** — you were dispatched inside a run, the autonomous Implement → Verify → Review →185 Ship pass. A question has no one to answer it, so asking one is a deadlock: the slice sits open186 forever and the rest of the graph stops draining behind it. **End the slice instead.** Report what187 ended it, naming both sides of the inconsistency, and flip its `gate` column `agent → you`. The slice188 is over, the run keeps going, and the human settles it when they next look.189190Ending a slice is not a quieter way of waiting — it is what keeps the rest of the graph moving, and it191is one of the named stop conditions rather than an exception to autonomy. `orchestrator`'s *What stops a192run* carries the full list; read it there rather than counting from memory.193194**Bad:** Silently picking one interpretation and hoping it's right.195**Bad:** Asking a clarifying question inside a run, then waiting. Nobody is at the keyboard, so the196answer never comes and the run never finishes.197**Good, with a person present:** "I see X in the spec but Y in the existing code. Which takes precedence?"198**Good, inside a run:** end the slice reporting "ADR-004 expires sessions at 24h, ADR-011 at 1h; both199are rank 2, so the source-of-truth order does not settle it" — the `gate` flips `agent → you`, and the200next ready slice starts.201202### 3. Push Back When Warranted203204You are not a yes-machine. When an approach has clear problems:205206- Point out the issue directly207- Explain the concrete downside (quantify when possible — "this adds ~200ms latency" not "this might be slower")208- Propose an alternative209- Accept the human's decision if they override with full information210211Sycophancy is a failure mode. "Of course!" followed by implementing a bad idea helps no one. Honest technical disagreement is more valuable than false agreement.212213### 4. Enforce Simplicity214215Your natural tendency is to overcomplicate. Actively resist it.216217Before finishing any implementation, ask:218- Can this be done in fewer lines?219- Are these abstractions earning their complexity?220- Would a staff engineer look at this and say "why didn't you just..."?221222If you build 1000 lines and 100 would suffice, you have failed. Prefer the boring, obvious solution. Cleverness is expensive.223224### 5. Maintain Scope Discipline225226Touch only what you're asked to touch.227228Do NOT:229- Remove comments you don't understand230- "Clean up" code orthogonal to the task231- Refactor adjacent systems as a side effect232- Delete code that seems unused without explicit approval233- Add features not in the spec because they "seem useful"234235Your job is surgical precision, not unsolicited renovation.236237### 6. Verify, Don't Assume238239Every skill includes a verification step. A task is not complete until verification passes. "Seems right" is never sufficient — there must be evidence (passing tests, build output, runtime data).240241Per-skill verification is the local check. The project-wide bar that applies to *every* change, regardless of which skill is active, is the Definition of Done: tests pass, no regressions, behavior verified at runtime, docs updated. See `references/definition-of-done.md`. It complements each task's acceptance criteria rather than replacing them.242243## Lifecycle & ownership244245The loop is **Ideate → Spec → Plan → Implement → Verify → Review → Ship**. Ownership splits hard:246247- **Human owns Ideate + Spec + Plan** (all the thinking). One upstream gate: the **Spec sign-off**, one248 act covering `acceptance.md`, `environment.md`, `prd.md`, the decision records and the glossary at once249 — plus a design contract where the feature has UI, and `architecture.md` where it adds a module, adds a250 dependency between parts that already exist, or introduces a seam.251- **Agent runs Implement → Verify → Review → Ship autonomously — it never blocks waiting for input.** No252 "should I continue?" checkpoint sits between slices; nobody has to watch it. It terminates at253 **risk-banded OPEN draft PRs** on the cluster branch; the **async human merge is the surviving final gate**254 (never auto-merge to main; auto-deploy is out of v1).255- **A run can still stop.** Two different claims are easy to collapse into one, so keep them apart: a run256 never *waits*, but named conditions do *end* it early — a missing precondition, an absent or unsigned257 `acceptance.md`, an attempted edit to a frozen artifact, a security CRITICAL/HIGH or a secret in the258 diff, two sources of truth the source-of-truth order does not settle, exhausted retries. High-risk259 work is **not** one of them: nothing pauses mid-run for a sign-off260 nobody is there to give, so auth, payments, migrations, deletions, deploys, and secrets surface at the261 end instead — as the PR's **risk band**, which the human reads at the merge gate. A stopped slice flips262 its `gate` column `agent → you`, and the run reports what stopped it and where rather than sitting idle.263 `orchestrator`'s *What stops a run* carries the full list — read it there rather than counting from264 memory.265266Artifact chain (each stage emits what the next consumes cold):267```268intent.md → research.md → prd.md (+ ADRs/CONTEXT.md) → acceptance.md + environment.md269 → architecture.md + architecture.html → plan.md + slices + DAG270 → [implement → qa.md → review → pr → draft PR]271```272`STATE.md` (root) is the two-level board (feature state · slice state · gate) indexing every feature under273`docs/features/<slug>/`. Read it first to find where you are. Not every task needs every skill — a bug fix274might only need `debugging-and-error-recovery` → `test-driven-development` → `code-review`.275276### What an edit un-signs277278A signature is against a version, not against a filename. Editing something upstream of a signed artifact279returns it to `draft` — it does not stay signed over a foundation that moved.280281| Editing this | Returns to `draft` | Because |282|---|---|---|283| `prd.md` | `acceptance.md`, `environment.md` (its Spec pass), the design contract | each is derived from the product spec; the behaviour, the external needs, and the look all answer to it |284| `acceptance.md` | `architecture.md` | it traces every scenario, and the trace is checked by set equality against the scenario ids |285| a decision record it cites | `architecture.md` | its edges and decisions cite those records; a citation to a decision that changed is not a citation |286| `docs/design.md` | every design contract carrying an inherited axis it touched | an inherited axis is graded against whatever that file says at Verify time, so moving the decided look re-grades surfaces nobody re-read. Name those contracts in the handoff and flip each one |287| `intent.md` | `prd.md`, and everything above through it | the whole chain hangs off the intent |288| `research.md` | nothing | the survey records the code as it stands and decides nothing |289290Nothing an agent does flips a `draft` back to `signed` — that is the person's act, at the gate. An agent291that finds a signed artifact resting on a moved upstream says so and stops; it does not re-sign, and it292does not edit the signed file to make the mismatch go away.293294This table is the one statement of the rule. A skill that needs it points here rather than restating it,295because four copies of one rule are four things that drift.296297### Source-of-truth order298299Two documents can state the same thing differently. This order says which one governs, most authoritative300first. A repository that does not have one of these simply skips its rank.3013021. `CLAUDE.md` / `AGENTS.md` — the rules for this repository3032. `docs/adr/` — the decisions taken, and what each one ruled out, including any decided layer order3043. `prd.md` — one feature's product spec3054. `acceptance.md` — that feature's signed behavioral contract3065. `plan.md` — that feature's slices3076. `docs/lessons.md` — what a past defect taught, and the guard that would catch it again3087. `docs/progress.md` — what each slice actually executed309310Not every document has a rank. `STATE.md`, `CONTEXT.md` and the `CONTEXT-MAP.md` index a multi-context311repository keeps beside it, and the per-feature `intent.md`, `research.md`, `environment.md`, and `qa.md`312have none. Three more settle themselves instead of needing one: `docs/session-log.md` says in its own313text that it is the weakest source here and never overrides a decision record or a signed `acceptance.md`;314a feature's design contract and `docs/design.md` divide one subject rather than compete for it — the315contract decides that surface, and `docs/design.md` decides every axis the contract marks inherited; and a316feature's `architecture.md` decides that feature's structure while the layer order it rests on, where one317was decided, is an ADR it cites. Where two documents with no rank between them disagree, nothing here settles it, and the stop condition in318`orchestrator` is what happens: the slice ends, both files and the claim are named, and the next move is319yours.320321## Quick reference322323| Stage | Skill | One-line summary |324|-------|-------|------------------|325| Cross-cut | using-agent-skills | this meta-dispatcher: task → skill + lifecycle map |326| Cross-cut | project-setup | one-time repo ecosystem (STATE.md, CONTEXT.md, docs/adr/, docs/features/, docs/session-state.md, docs/session-log.md, docs/progress.md, docs/lessons.md, the `## Agent skills` block in one of CLAUDE.md / AGENTS.md + a short pointer to it in the other) |327| Cross-cut | orchestrator | wave-parallel DAG executor; platform-adaptive; runs to open draft PRs, never waits |328| Cross-cut | preflight-readiness | env-readiness gate; refuses the wave until provisioned |329| Cross-cut | handoff | per-session compaction to a fresh-agent doc |330| Ideate | interview-me | optional front door: surface what the user actually wants → intent.md |331| Ideate | idea-refine | divergent/convergent refinement + "Not Doing"; shares intent.md |332| Spec · Plan | codebase-research | goal-blind map of the codebase/DB as-is → one `research/<axis>.md` per sub-agent plus the research.md that compresses them; runs at the head of Spec, and again at the head of Plan against the aspect the signed decisions now point at |333| Spec | spec-grilling | how to design the product; ADRs + CONTEXT.md (no prd.md) · fans out `codebase-design` / `api-design` variants on a load-bearing structural question; batches the rest as one-line defaults |334| Spec | to-prd | light dual-audience PRD; references ADRs by id → prd.md |335| Spec | frontend-design | **UI only** — the skill's own *When to use / when to skip* states the test: throwaway variants → committed prototype + design contract; the repo's first UI surface also writes `docs/design.md` |336| Spec | acceptance-criteria | behavioral-only Given/When/Then contract → acceptance.md |337| Spec | environment-manifest | typed-kind manifest (no values, no commands) → environment.md |338| Spec | architecture-design | reconciles, grades, and renders — traces every scenario, recaps the requirements and the scale and reliability posture, has the result graded code-cold, cites the decisions taken in `spec-grilling`; takes none itself · Anthropic's five-part system-design format plus a sixth section of open questions · runs against a draft `acceptance.md`; the two are signed together at the Spec gate · emits architecture.md + the committed architecture.html |339| Spec | spec-review | fresh code-cold agent fixes the spec before the human reviews |340| Plan | plan-breakdown | THE planner: concrete plan → vertical slices + dependency DAG; reads the Plan-stage research.md that the second codebase-research pass writes |341| Spec · Plan | codebase-design | Referenced discipline, Spec and Plan — proposes a structural variant in Spec, pins the interface into `plan.md` in Plan; owns no artifact of its own. Deep modules, deletion test |342| Spec · Plan | api-design | Referenced discipline, Spec and Plan — proposes a structural variant in Spec, pins the interface into `plan.md` in Plan; owns no artifact of its own. Contract-first interface |343| Implement | incremental-implementation | THE implementer: one thin vertical slice, skeleton-first |344| Implement | test-driven-development | rigid RED-GREEN-REFACTOR; realizes acceptance scenarios as tests |345| Implement | source-driven-development | ground framework decisions in fetched official docs |346| Implement | worktree | per-slice isolation mechanism (orchestrator-owned) |347| Verify | quality-verification | fresh code-cold: behavioral acceptance tests + design gate → qa.md |348| Verify | browser-testing-with-devtools | live-runtime engine quality-verification drives (any configured browser MCP) |349| Verify | debugging-and-error-recovery | five-step triage: reproduce · localize · reduce · fix · guard |350| Review | code-review | five-axis review incl. test quality; severity labels |351| Review | code-simplification | behavior-preserving reduction; Chesterton's Fence |352| Review | security-and-hardening | OWASP Top 10; auth; secrets; dependency audit |353| Review | performance-optimization | measure-first; Core Web Vitals; profiling |354| Plan · Implement | doubt-driven-development | in-flight adversarial review; **not** part of the Review gate |355| Ship | pull-request | the spine of Ship: per-slice design-anchored draft PR; read-the-code checklist; the stage ends here |356| Ship | shipping-and-launch | release workhorse, release-level and post-merge: checklist · flags · rollout · rollback. A slice still at an open draft PR belongs to `pull-request`. |357| Ship | git-workflow | trunk-based; atomic commits; secret hygiene |358| Ship | ci-cd | Shift Left; quality-gate pipeline |359| Ship | observability-and-instrumentation | structured logs; RED metrics; tracing; symptom alerts |360| Ship | deprecation-and-migration | code-as-liability; migration patterns; zombie-code removal |361| Ship | documentation-and-adrs | the ADR + doc standard: document the why |362| Comprehension | literate-explainer | standalone: turn a diff or whole repo into a self-contained teaching artifact; never a gate |363| Comprehension | comprehension-quiz | standalone: ~5-question retrieval practice, graded before reveal → learning ledger; never a gate |364| Standalone | gauntlet-loop | fast path for a throwaway POC: beat a named outside bar, blind builder/critic loop, work stays in the `.gauntlet/` scratch the repository ignores; **offered, never auto-selected** |365366## Rationalizations367368Excuses that talk you out of dispatching correctly — each is a failure mode:369370- "This is obvious, I'll just start coding." → No spec ⇒ no acceptance.md ⇒ nothing for Verify to gate on.371 Non-trivial work with no spec starts at `codebase-research`, then `spec-grilling`.372- "spec-grilling refused for want of research.md, so I'm stuck." → You are one skill upstream of unstuck.373 The survey is the head of Spec, not a Plan chore: run `codebase-research` against the signed `intent.md`,374 then re-enter `spec-grilling`. A refusal names its missing artifact precisely so you can route to whoever375 emits it — that is the dispatch move, not a dead end.376- "I already know which skill, I won't check STATE.md." → You skip the gate column and may run an agent-owned377 skill on a slice the human still owns. Read STATE.md.378- "I'll fold Verify into Implement to save a step." → quality-verification is a fresh code-cold maker≠checker gate; collapsing379 it is exactly the silent-false-green the suite is built to prevent.380- "The plan is close enough, I'll skip plan-breakdown." → Without slices + the DAG, the orchestrator has no381 waves and the run can't parallelize or resume.382- "They said quick, so I'll send it to `gauntlet-loop`." → You do not select that path; you offer it and the383 human picks. See *Offering the fast path, never routing to it*.384- "The spec contradicts itself, so I'll ask and wait — *Manage Confusion Actively* says not to guess." →385 It says not to guess, and inside a run it says to end the slice. Waiting is not the cautious reading of386 that rule, it is the one failure the rule cannot survive: nobody is at the keyboard mid-run, so the387 slice never resumes and every slice behind it stalls too. Name both sides, end the slice, flip the388 `gate` to `you`, and let the next ready slice start.389390## Red flags391392These are the subtle errors that look like productivity but create problems:3933941. Making wrong assumptions without checking3952. Not managing your own confusion — plowing ahead when lost3963. Not surfacing inconsistencies you notice3974. Not presenting tradeoffs on non-obvious decisions3985. Being sycophantic ("Of course!") to approaches with clear problems3996. Overcomplicating code and APIs4007. Modifying code or comments orthogonal to the task4018. Removing things you don't fully understand4029. Building without a spec because "it's obvious"40310. Skipping verification because "it looks right"40411. Waiting mid-run for an answer nobody is there to give, instead of ending the slice and flipping its gate405406## Verification (ending criteria)407408Dispatch is complete when ALL hold:409- `docs/session-state.md` and `docs/session-log.md` were read before you routed, where the repo410 has them, and no question the log already answers was re-opened.411- `docs/progress.md` was read before you routed, where the repo has one, so what the last run actually412 executed is in hand rather than reconstructed from a summary of it. Nothing was routed off it: it says413 what ran, never who acts next.414- You named the applicable skill(s) AND its stage (Ideate/Spec/Plan/Implement/Verify/Review/Ship/cross-cut).415- You confirmed the skill's consuming artifact exists (per its `Inputs`); if it is missing, you routed416 upstream to the skill that emits it rather than running the downstream skill against a gap.417- You respected the ownership boundary: an agent-owned stage skill is not run on a slice whose `gate`418 column is `you`, and vice-versa.419- A throwaway-shaped ask got both paths named and no pick made for the human; `gauntlet-loop` was reached420 only because the human named it.421- The project-wide Definition of Done still governs every change the dispatched skill will make422 (`references/definition-of-done.md`).423424## Outputs & handoff contract425426- **Emits:** a routing decision (in-conversation, not a durable artifact) — `task → {skill, stage,427 consuming-artifact present?}`. This is the "task→skill+lifecycle map."428- **Stable hand-off:** names exactly one next skill and the artifact it will read/write, so the dispatched429 skill starts cold without re-deriving context.430- **STATE.md:** this skill **does not write** STATE.md — the dispatched stage skill (or the orchestrator)431 records the transition. The dispatcher only reads STATE.md to decide. The same holds for432 `docs/session-state.md`, `docs/session-log.md` and `docs/progress.md`: it reads them all and writes none.433- **Re-entry:** on any stage change or a `gate` flip in STATE.md, re-consult this skill.