Skills
The catalog of all 37 skills: 32 under skills/ and 5 repository-local ones under .agents/skills/. For each, the frontmatter, the engine step that invokes it, what it reads, what it writes, and whether it blocks.
A skill is a SKILL.md directory. The engine dispatches most of them by name at a step; the rest are invoked by an operator, by another skill, or not wired at all. The two plugins in this repository (json-stdout-subscriber, recorder-provider) define zero skills — they are a UI renderer and an LLM provider respectively.
Skills are grouped by their declared phase and, within a group, listed in flow order. The text under each skill name is its verbatim description frontmatter value — that string is what a host agent matches on when deciding to invoke the skill.
Frontmatter fields
| Field | Required | Meaning |
|---|---|---|
name | yes | Skill identifier; must match the directory name |
description | yes | Model-facing trigger text — when to invoke this skill |
enforcement | yes for skills/* | Declared strictness: advisory, gating, or structural. Advisory only. The engine’s step definition decides real skippability — see Known limitations |
phase | yes for skills/* | understand, decide, build, ship, or all |
standalone | no | Whether an operator can run the skill on its own. Absent means non-standalone |
operator_only | no | true marks a skill an operator invokes from outside a run. bin/install still symlinks it into both user-space catalogs (~/.claude/skills, ~/.agents/skills), so the operator has it on either provider; the engine suppresses it per dispatch instead. Enforced — integrity check 5d fails on drift between this flag and OPERATOR_ONLY_SKILLS in worktree-prepare.ts. See operator-only suppression coverage for what each provider actually enforces |
phase_active_policy | no | Operator-skill policy for .pipeline/phase-active. daemon-triage declares advisory: marker and daemon-status evidence may warn but never block read-only diagnosis |
disable-model-invocation | invocation-dependent | Claude control. true keeps the skill operator/engine-invocable but removes it from model-initiated selection |
implicit_invocation | invocation-dependent | Harness audit marker. required is allowed only for a verified same-session dependency that must remain model-invocable; it is not a host setting |
requires | no | Prerequisite skills or artifact paths |
model | no | Hand-authored model pin. Seven skills carry one; the rest inherit. See models |
Invocation policy
Discovery is not activation. Every catalog entry is classified exhaustively by integrity check 2a:
- Explicit-only: Claude declares
disable-model-invocation: true; Codex declarespolicy.allow_implicit_invocation: falseinagents/openai.yaml. An operator or engine-rendered/skill-nameor$skill-nameprompt still works. - Implicit-required: the shared frontmatter carries
implicit_invocation: required, and neither host disable is present. This exception is reserved for a verified model-initiated caller inside an already active skill.
The 13 implicit-required shipped skills are:
| Skill group | Skills | Why they cannot be explicit-only in the distributed catalog |
|---|---|---|
/composer DECIDE composition | explore, prd, architecture-diagram, architecture-review, stories, conflict-check, plan, coherence-check | /composer must run the real workflows directly in its current chat; it does not launch a second CLI session for them |
| Other same-session handoffs | intake, debugging, simplify, verify-claims, code-removal | Called from an active skill: issue authoring, fresh debugging, batch simplification, load-bearing claim verification, or removal-shaped build work — /pipeline dispatches /code-removal in place of a RED cycle |
Because these skills remain visible for same-session composition, each description carries a closed activation boundary: the active lifecycle/caller state that qualifies, plus nearby requests that do not. A generic feature, change, plan, review, bug, or question is not sufficient by itself. Explicit operator invocation remains available regardless of these implicit-selection boundaries.
The 19 explicit-only shipped skills are assess, bootstrap, build-review-security, build-review-test-quality, code-review, composer, conduct, daemon-triage, engineer, finish, manual-test, memory, pipeline, prd-audit, rebase, remediate, pr, tdd, and writing-system-tests. The five repository-local skills are also explicit-only: event-spine, maintain-documentation, release-disposition, scope-check, and write-tests.
code-review is intentionally explicit-only: pipeline embeds its three-stage evaluator contract and states that no separate code-review dispatch is needed. pr is likewise explicit-only because FINISH inlines its authoring contract and explicitly forbids delegating to /pr. Engine registry invocations are explicit prompts, including conditional remediate and rebase steps, so those skills do not need model discovery. A user may locally force any implicit-required skill to explicit-only, but composed callers that depend on it will no longer complete automatically.
Operator-only suppression coverage
operator_only: true is enforced per dispatch, not at install time — the operator keeps the skill on both providers. Catalog invocation policy now provides the same baseline on both hosts:
| Claude | Codex | |
|---|---|---|
| Self-host build | Catalog disable-model-invocation, plus skillOverrides defense in depth | Catalog allow_implicit_invocation: false, plus pruning from the throwaway CODEX_HOME defense in depth |
| Any other repo | Catalog disable-model-invocation | Catalog allow_implicit_invocation: false |
daemon-triage therefore remains available when an operator explicitly asks for it without being a model-selected response to an unrelated failure. Its phase-marker/liveness warning and per-mutation approval contract remain necessary for explicitly initiated triage.
The repository integrity suite checks that every skills/*/SKILL.md has name, description, enforcement, and phase. The five .agents/skills/ entries are outside that required-field check; they declare name, description, and the Claude invocation control. Check 2a covers invocation policy across both catalogs and both host metadata formats.
Index
| Skill | enforcement | phase | model | Engine step | Gate role |
|---|---|---|---|---|---|
bootstrap | advisory | understand | — | bootstrap (out-of-band) | Advisory |
memory | gating | understand | — | memory (1) | Advisory |
assess | gating | understand | sonnet | assess (out-of-band) | Advisory |
conduct | gating | all | — | worktree (0), complexity (3) | Blocking via worktree (structural) |
verify-claims | gating | all | — | none | Blocking, inside the calling skill |
code-removal | advisory | all | — | none | Advisory |
daemon-triage | advisory | all | — | none (operator-only) | None — read-only diagnosis; recovery only on per-action operator approval |
architecture-diagram | gating | all | sonnet | architecture_diagram (5) | Advisory as a step; blocking at land time |
explore | advisory | decide | — | explore (2) | Advisory |
prd | gating | decide | — | prd (4) | Blocking |
architecture-review | gating | decide | — | architecture_review (6), architecture_review_as_built (18) | Advisory at 6, blocking at 18 |
stories | gating | decide | — | stories (7) | Blocking |
conflict-check | gating | decide | — | conflict_check (8) | Blocking |
plan | gating | decide | — | plan (9) | Blocking |
coherence-check | gating | decide | — | coherence_check (10) | Blocking |
intake | gating | decide | — | none — operator-invoked | Neither |
composer | advisory | decide | opus | none — operator-invoked | Neither as a step; the land gate blocks |
engineer | advisory | decide | opus | none — operator-invoked | Neither as a step; the land gate blocks |
writing-system-tests | gating | build | — | acceptance_specs (11) | Blocking |
pipeline | structural | build | — | build (12) | Blocking; cannot be disabled |
tdd | structural | build | — | none — runs inside build | Neither |
code-review | gating | build | opus | none — pipeline batch boundary | Blocking in place |
simplify | gating | build | sonnet | none — pipeline batch boundary | Blocking in place |
debugging | gating | build | opus | none — on demand | Neither |
manual-test | gating | ship | — | manual_test (16) | Blocking |
prd-audit | gating | ship | opus | prd_audit (17) | Blocking |
remediate | gating | ship | — | remediate (out-of-band) | Advisory — it is the unblocker |
rebase | advisory | ship | — | rebase (19) — on conflict only | Blocking via the structural step |
finish | gating | ship | — | finish (20) | Blocking |
pr | advisory | ship | — | none — operator-invoked; /finish inlines it rather than calling it | Neither |
maintain-documentation | (none) | (none) | — | custom step after rebase | Blocking, this repository only |
release-disposition | (none) | (none) | — | custom step after maintain-documentation | Blocking, this repository only |
write-tests | (none) | (none) | — | none — unwired | Neither |
Gate roles: Blocking means a non-passing result stops progression. Advisory means it runs and records but never blocks. Neither means it has no gate role in the flow.
Cross-cutting skills
conduct
Use to guide a feature through the full SDLC. Checks artifact state, determines current phase, tells you what to run next, and blocks progression when gates aren’t met.
- Frontmatter —
enforcement: gating,phase: all,standalone: true,requires: [], no model pin. - Engine step — not a step itself. The engine dispatches it with an argument for two steps:
/conduct worktree(index 0, structural) and/conduct complexity(index 3, advisory). - Inputs — artifact-existence checks across
CLAUDE.md,.memory/index.md, and the.docs/subdirectories;.pipeline/conduct-state.jsonand the SHIP-tail evidence files; a grep of.docs/decisions/adr-*.mdforStatus: DRAFT. - Outputs —
.pipeline/conduct-state.json(complexity_tier, per-step status,feature_status); a clean-pass marker under.docs/conflicts/. Neither of its two steps has a completion glob. - Gate role — the gate host. It directs; it does not run other skills.
verify-claims
Use only when an active workflow is about to rely on a nontrivial factual claim or assumption for a spec, plan, ADR, finding, or code decision. Do not invoke for casual questions, status reports, restatements, or trivially verifiable mechanics.
- Frontmatter —
enforcement: gating,phase: all,standalone: true,requires: [], no model pin. - Engine step — none. It is a discipline applied inside the calling skill’s context and model, not a separately dispatched agent. Fifteen skills declare it in
requires. - Inputs — whatever the calling skill’s load-bearing output is. One cheap read or grep is preferred over an estimate whenever it would settle the question.
- Outputs —
.pipeline/verify-claims-<step>.mdwhen invoked inside an engine step, otherwise inline in the artifact or response. On an autonomous block it writes.pipeline/HALTwith the assumption ledger as its body. - Gate role — blocking. Verdict
CLEARproceeds;ASSUMPTIONS_PENDINGblocks. Interactive runs wait for operator approval; autonomous runs HALT and never guess a likely value.
daemon-triage
Use when a feature is stuck in daemon execution — halted, spinning, stalled, or silently not progressing — and an operator needs to know why. Diagnoses the failure and routes it to the right runbook. Operator-invoked only; never auto-dispatched, and never mutates anything without explicit per-action approval.
- Frontmatter —
enforcement: advisory,phase: all,standalone: true,operator_only: true,phase_active_policy: advisory,requires: [verify-claims], no model pin. - Engine step — none, by design. It is never dispatched.
operator_only: truesuppresses it for step sessions where the provider supports suppression (see Frontmatter fields). The skill treats.pipeline/phase-activeand daemon status as advisory context: an apparently live step produces a warning, while read-only triage always continues. Recovery mutations remain individually operator-approved. - Inputs — read-only evidence only:
ai-conductor daemon status,.daemon/daemon.log, and the feature’s.pipeline/state (HALT+HALT.class,events.jsonl,task-status.json,step-heartbeat,phase-active,gates/<step>.json), plus the branch’s commit log. - Outputs — a triage report at
.daemon/triage/<slug>-<timestamp>.md. Deliberately not under.pipeline/— triage output is not feature evidence and must never be read as such by a gate. - Gate role — none. Diagnosis is unconditionally read-only; gathering evidence never changes the state being measured. It may then carry out recovery, but every mutation — clearing a halt, park/unpark, editing
.pipeline/, any writing git command — is presented with its blast radius and individually approved by the operator first. Approval is per-action and never standing consent, and it never relaxes the safety rails (an approved delete is still enumerated explicitly). Deliberately conservative while classification accuracy is being established. - Runbooks — reached via
skills/daemon-triage/runbooks, a symlink todocs/runbooks/. The symlink is what makes the reference resolve correctly in a consumer repo, where the harness’sdocs/tree is not present but the skill directory itself is symlinked in bybin/install.
architecture-diagram
Use only within an active harness lifecycle when its architecture-diagram step is current. Generates and maintains C4 Mermaid diagrams; do not invoke for ordinary code changes or general architecture questions.
- Frontmatter —
enforcement: gating,phase: all,standalone: true,requires: [],model: sonnet. - Engine step —
architecture_diagram(index 5, DECIDE, skipped at tier S). Engine enforcement isadvisory. - Inputs — codebase structure (Procfile,
docker-compose.yml,database.yml, routes, model definitions); the plan and stories on the update path; themermaid_rendererconfig key. - Outputs —
.docs/architecture/system-context.md,containers.md,components.md,erd.md, andsequences/<flow-name>.md. - Gate role — advisory as a step. Real enforcement is at land time: the spec-PR gate re-renders every authored Mermaid block and rejects the spec fail-closed if any block fails to render, or if diagrams exist but the renderer is unavailable.
UNDERSTAND-phase skills
bootstrap
Use when starting a new project, onboarding to an existing project, or setting up the harness for the first time. Detects project type, tech stack, and generates project-specific configuration.
- Frontmatter —
enforcement: advisory,phase: understand,standalone: true,requires: [], no model pin. - Engine step —
bootstrap(out-of-band, UNDERSTAND). Runs in the prelude before the loop. - Inputs — root indicator files (
Gemfile,package.json,pyproject.toml,Cargo.toml,go.mod,database.yml,.rspec,Procfile);tech-context/<stack>/; existingCLAUDE.md,AGENTS.md,.claudeignore, and.claude/settings.json, which it preserves rather than overwrites;ghandgithistory. - Outputs —
bootstrap_modein.pipeline/conduct-state.json; env boundary files;.claudeignore; a PR template;.claude/settings.json; the.pipeline/,.worktrees/, and.docs/directory tree; DRAFT as-built stories; observed ADRs; a.memory/seed; initial architecture diagrams and a styleguide; a registry entry. No completion glob. - Gate role — advisory, but downstream skills depend on the directory structure it creates. Failures are surfaced and not silently swallowed: a rejected first push must never be forced.
memory
Use when the operator requests project recall, when the harness dispatches its memory step, or when an active harness workflow requires a memory checkpoint. Recall-before-act protocol with categorized persistence and staleness detection.
- Frontmatter —
enforcement: gating,phase: understand,standalone: true,requires: [], no model pin. - Engine step —
memory(index 1, UNDERSTAND). Engine enforcement isadvisory. - Inputs —
.memory/index.md; entries under.memory/decisions/,patterns/,gotchas/, andcontext/, read in full; referenced file paths, checked for drift. - Outputs — kebab-case Markdown entries under
.memory/, each withcreated,category, andrelatedfrontmatter; an updated.memory/index.md. No.docs/or.pipeline/artifact. - Gate role — advisory. Its two in-skill rules (recall at invocation start, persist decisions at declared checkpoints) produce no verdict, no marker file, and block nothing downstream.
assess
Use for codebase health assessment. Dispatches 9 specialist agents + CTO orchestrator to evaluate security, data integrity, dependencies, architecture, duplication, testing, infrastructure, observability, and developer experience.
- Frontmatter —
enforcement: gating,phase: understand,standalone: true,requires: [verify-claims],model: sonnet. - Engine step —
assess(out-of-band, UNDERSTAND prelude). Auto-skipped with amode_skipevent whenbootstrap_modeisnew. - Inputs — a full file listing; session-loaded tech-context; existing ADRs under
.docs/decisions/for cross-reference and stale-ADR checks. - Outputs — nine specialist reports under
.pipeline/assessment/; the committed.docs/decisions/technical-assessment-<date>.md; theassess,assess_date, andassess_verdictstate keys. - Gate role — advisory. A
CRITICALverdict implies addressing findings before feature work but blocks nothing; findings become backlog.
DECIDE-phase skills
explore
Use only within an active engineer/conduct DECIDE workflow when approach selection and product-versus-technical track classification are still unresolved. Do not invoke for ordinary implementation, review, explanation, or an already-decided change or hotfix.
- Frontmatter —
enforcement: advisory,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step —
explore(index 2, DECIDE). Always runs — it sets the track that gatesprdandprd_audit. - Inputs —
.memory/; existing.docs/stories/; prior bootstrap exploration. At most two directory-partitioned exploration agents. - Outputs — exactly one committed artifact,
.docs/track/<slug>.md, carryingTrack: product|technicalandScope boundary: <operator-confirmed breadth and exclusions>; ephemeral notes under.pipeline/; the selected approach and rejected alternatives promoted to.memory/decisions/. No completion glob, by design. - Gate role — advisory, with four internal hard blocks: any unconfirmed assumption that would change the approach or track HALTs an autonomous run; the track must be operator-confirmed; the skill must ask the operator how comprehensive the fix should be and stop before approach confirmation if unanswered — it never defaults silently to minimal, balanced, or comprehensive scope; and the skill must never call
ExitPlanMode, which would mark the step failed.
prd
Use only within active engineer/conduct DECIDE after explore confirmed the product track, when a committed product requirements document is required. Do not invoke for technical-track work, ordinary specifications, or general product discussion.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step —
prd(index 4, DECIDE, prerequisiteexplore). Skipped on the technical track; a kickback target. - Inputs — the
exploretrack output, the design-doc and API-contract templates, and the original request. - Outputs —
.docs/specs/<date>-<topic>.md; a superseded prior doc renamed with aSUPERSEDED-prefix; an API response contract for API projects. It writes no files outside.docs/specs/. - Gate role — blocking. A product-only audit runs before the PRD is presented: a PRD that names a new internal mechanism has failed and must be rewritten. Requires explicit operator approval.
architecture-review
Use only within an active harness lifecycle when pre-stories feasibility review, a pipeline batch drift check, or the SHIP as-built review is current. Do not invoke for ordinary implementation, code review, or general architecture questions.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step — two:
architecture_review(index 6, DECIDE, engine enforcementadvisory) andarchitecture_review_as_built(index 18, SHIP, engine enforcementgating), the latter invoked as/architecture-review --as-built. The DECIDE-time step skips at tier S; the as-built step runs at every tier. - Inputs —
.docs/decisions/,.docs/architecture/,CLAUDE.md,.memory/decisions/, existing code, and the PRD’s FRs or the explore output. As-built mode reads onlyStatus: APPROVEDADRs, the feature diff, and the sealed.docs/stories/criteria that anchor its plan-gap outcome judgement. - Outputs —
.docs/decisions/architecture-review-<date>-<feature>.md; ADRs under.docs/decisions/;.pipeline/architecture-review-as-built.md, which must be rewritten on every invocation or the engine reads it as stale and halts the SHIP tail. - Gate role — the as-built half is blocking and fail-closed:
APPROVED,APPROVED WITH DRIFT NOTES, andPLAN_GAPwithOutcome delivered: yessatisfy it. ABLOCKEDartifact contains exactly one## Blocking Findingstable withFinding,Class,Governing clause, andSummarycolumns.ClassisREMEDIABLEorDESIGN; everyREMEDIABLErow cites an approved ADR decision or an active plan task. An all-REMEDIABLEreport can use the enabled, bounded remediation route;DESIGN, invalid, disabled, or exhausted reports halt needs-human. The DECIDE half is advisory at the step level; its DRAFT-ADR hard gate is enforced by theconductstate machine and by the land-time spec gate instead. The as-built half’s production reachability sweep derives root-to-caller-to-export chains from current shipped source, never from plan-declared callers.
stories
Use only within active engineer/conduct DECIDE after architecture approval, when a committed
.docs/storiesacceptance artifact is required. Do not invoke for general user-story examples, requirements discussion, or direct implementation requests.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step —
stories(index 7, DECIDE, prerequisitearchitecture_review). A kickback target; no tier skip. - Inputs — approved PRD FRs, or technical intent plus approved ADRs; existing
.docs/stories/for deduplication and DRAFT completion; tech-context;.memory/. - Outputs —
.docs/stories/<feature-name>.md, one file per feature area, appended if it exists. - Gate role — blocking. No story is accepted without at least one concrete negative path per acceptance criterion. The verdict layer additionally requires
### Happy Pathand### Negative Path(s)sections with Given/When/Then bullets and noStatus: DRAFT. The status marker is also a downstream hard gate: the land gate rejects stories lackingStatus: Accepted.
conflict-check
Use only within active engineer/conduct DECIDE after accepted stories and before plan, or when that workflow explicitly rechecks remediated stories. Detects story interactions; do not invoke for Git conflicts, merge conflicts, or general requirements discussion.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step —
conflict_check(index 8, DECIDE, prerequisitestories, skipped at tier S). - Inputs — all
.docs/stories/*.md; active.docs/specs/; prior.docs/conflicts/reports; and approved ADRs.conflict_check.adr_corpusdefaults tochange_set;repo_widenarrows all approved ADRs to the stories’ subject and records the ADRs examined and narrowed out. - Outputs —
.docs/conflicts/<date>-<description>.md, overwritten on re-run; in-place edits to affected story files; superseding ADRs. An ADR-versus-story conflict quotes both opposing sentences verbatim; multi-sentence excerpts use[…]for every omitted span. - Gate role — blocking. It loops until zero blocking conflicts remain. Kickback routing is by root cause: contradictory FRs go to
prd, incompatible design goes toarchitecture_review, pure phrasing is resolved instories. In an unattended run a blocking conflict HALTs for a human — never a silent pass.
plan
Use only within active engineer/conduct DECIDE after accepted stories and a clean conflict-check, when a committed
.docs/plansimplementation artifact is required. Do not invoke for conversational planning, implementation checklists, or direct coding requests.
- Frontmatter —
enforcement: gating,phase: decide,standalone: false,requires: [".docs/stories/ with both paths", ".docs/conflicts/ clean pass or no blocking conflicts", verify-claims], no model pin. - Engine step —
plan(index 9, DECIDE, prerequisiteconflict_check). A kickback target; no tier skip. - Inputs — all
.docs/stories/; the clean conflict-check pass; the architecture review’s## Wiring Surfacesection at tiers M and L. - Outputs —
.docs/plans/<date>-<feature>.md. - Gate role — blocking. It refuses to produce a plan without stories, dependency lines, both paths, and a clean conflict-check; every acceptance criterion must map to at least one task, and every citable decision in a non-deleted land-accepted ADR (
APPROVEDorSUPERSEDED) in the current change set must have one Architecture Obligation Coverage disposition (task,existing, orno-change). Forty-one or more tasks is a hard stop; 21–40 warns. Every task carries aDone when:block with two to five nonblank, falsifiable completion checks, each on one physical line and naming a mechanism plus its observable assertion rather than merely restating the mapped criterion. Each changed cross-boundary behavior has exactly one integration-owning task whose checks state observable behavior through an appropriate project entry point; internal tasks do not each acquire an integration-test obligation. At land time, a missing, empty, underspecified, or oversized block rejects the whole spec; Markdown fenced-code examples do not count as task structure or checks. An unbounded quality word (“fail-closed”, “robust”, “comprehensive”) must be closed by an enumeration or a named mechanism in the same block, and completion review is bound by these checks (deeper concerns are filed as intake, not raised as blocking findings). EachStory:line takes one id — a comma-separated list silently registers only the first. Plans must not append a terminal catch-all task that re-proves the completed feature; scoped tests stay with their behavior-owning implementation task, while writing-system-tests and later BUILD/SHIP gates own whole-feature validation. - Declared pattern replication — a plan may add
**Pattern-source:**and**Rename-map:**header lines to declare that it replicates an existing source file under a rename map, so BUILD copies and verifies that source mechanically instead of deriving it from scratch. Both lines are required together; either line alone, an unresolvable source path, or a malformed rename-map pair ismalformedand fails closed, distinct from the no-declarationabsentcase. See gates for howbuild_reviewverifies the declared copy.
coherence-check
Use only within active engineer/conduct DECIDE after plan for a Medium or Large spec. Authors the committed outcomes-to-requirements-to-stories-to-tasks mapping; do not invoke for Small work or ordinary traceability questions.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step —
coherence_check(index 10, DECIDE, prerequisiteplan, skipped at tier S). - Inputs —
.docs/complexity/for the tier; staged outcomes or.docs/intake/<plan-stem>.md;.docs/specs/<plan-stem>.mdfor FRs;.docs/stories/<plan-stem>.md;.docs/plans/<plan-stem>.md; and accepted ADRs that constrain the stories. - Outputs —
.docs/coherence/<plan-stem>.md. The stem must match the plan filename stem exactly or the land validator rejects it as a missing coherence artifact. Applicableadrrows trace each accepted ADR to the stories that implement or must honor it, and independently judge every decision’s plan-level Architecture Obligation Coverage disposition. The sixth row class,criterion, maps each exact extracted happy- or negative-path criterion to cited plan tasks in a six-cell row: criterion text, task ids, verdict, a verbatimDone whenquote, anddiff-localoroutside-diff. - Criterion achievability — independently judges whether satisfying the cited task checks would produce the Then-clause within approved architecture (§4g). Checks must establish a mechanism; restating the outcome does not establish delivery. The pass sweeps approved ADRs in the change set for binding constraints. An established inability to deliver is
fail, explained withCANNOT-DELIVER:prose below the table identifying the criterion, task, quoted check, and any binding ADR decision. Criterion rows retain six cells; no Notes cell or new gap-id vocabulary is added. The review also checks preserved/default-mode observables against new side effects across tasks, and verifies that closed state/result/reason sets can truthfully represent required negative paths. Checks over normalized inputs or exported subsets must establish the source boundary as well as the helper behavior; agreement within an incomplete subset does not establish complete coverage. - PRD ↔ stories tie-out — the
frandstoryrow classes are checked in both directions (SKILL.md §4e). Forward: no PRDFR-Nwithout a citing story that a task covers. Reverse: no story citing anFR-Nthe PRD never declares, and no story citing no FR at all. Both directions are re-derived mechanically by the land-time gate from the real PRD and stories files, so the skill spends its judgement on whether a cited FR is actually delivered by that story’s scenarios — a correct citation the acceptance criteria contradict isfail, notcovered. Story-versus-story contradictions stay withconflict-check; this skill compares each story against the PRD. - Gate role — blocking. It authors the artifact the land-time coherence gate validates. Verdicts are exactly
covered,gap, orfail—failmarks a row whose counterpart exists but contradicts it or whose cited task checks cannot deliver the criterion under approved architecture, which coverage alone cannot express. Criterion rows enforce that vocabulary mechanically; unknown values are malformed. The five legacy row classes retain affirmative-by-default parsing for backward compatibility. In an autonomous run an ambiguous row is markedgapand left for the fail-closed land gate — never silently passed. At tier S it does not run and must not author a stub.
intake
Use only when the requested deliverable is a GitHub intake issue, or when an active harness workflow hands an observation off for later DECIDE. Do not invoke merely because a bug, idea, or observation is being discussed.
- Frontmatter —
enforcement: gating,phase: decide,standalone: true,requires: [verify-claims], no model pin. - Engine step — none. Operator- or agent-invoked, in whatever session observed the problem.
- Inputs — verbatim commands and output, log excerpts with source path and timestamp,
file:lineand SHA references, repro steps, frequency, and environment facts. - Outputs — a GitHub issue. No repository file artifact.
- Gate role — neither. Its gate is a pre-file checklist at authoring time; nothing downstream blocks on it. See intake for the filing procedure.
composer
Interactive, phone-drivable idea→spec loop: hands a raw idea to the right repo, runs the full DECIDE phase there, and opens a spec PR. Use when capturing and routing new work, NOT when building inside one repo (that is plain conduct).
- Frontmatter —
enforcement: advisory,phase: decide,standalone: true,requires: [],model: opus. - Engine step — none. It is a separate control plane with its own
ai-conductor composesubcommands. - Inputs — a claimed GitHub intake issue, or a launch argument or chat idea; the project registry.
- Outputs — in a per-idea worktree on a
spec/<slug>branch: the track marker, the complexity marker whose stem must match the plan stem, and the full.docs/DECIDE artifact set; an intake marker committed at land; the spec PR. - Gate role — neither as an engine step, but the land gate is hard: no idea reaches a build without a merged spec PR, only the operator merges, no spec lands with a DRAFT ADR, and the tier must be recorded. See composer loop. The deprecated
engineerskill is a thin compatibility delegate to this canonical composer skill.
engineer
Deprecated compatibility delegate to composer. It preserves existing explicit
/engineerinvocations while the canonical skill is/composer.
- Frontmatter —
enforcement: advisory,phase: decide,standalone: true,requires: [],model: opus. - Engine step — none. Use
composerfor new work.
BUILD-phase skills
writing-system-tests
Use BEFORE implementing any feature that has stories in .docs/stories/ — generates failing acceptance specs from acceptance criteria as the RED phase of TDD. Generates HTTP/request-level acceptance tests for headless/API projects, end-to-end UI tests for projects with a frontend, using the project’s own test framework and directory conventions.
- Frontmatter —
enforcement: gating,phase: build,requires: [verify-claims], no model pin. It is the onlyskills/*entry with nostandalonekey, so it defaults to non-standalone. - Engine step —
acceptance_specs(index 11, BUILD, prerequisiteplan, skipped at tier S). - Inputs — happy and negative acceptance criteria from
.docs/stories/*.md; the existing test suite and tech-context for framework and layout detection; the approved PRD FR list on the product track. - Outputs — committed acceptance spec files in the project’s test directories, plus gitignored run evidence:
.pipeline/acceptance-specs-red.json,.pipeline/fr-coverage.md, and.pipeline/acceptance-specs-run.json. - Gate role — blocking. The gate rejects unless the RED evidence shows at least one failure, zero skips, zero errors, and at least one executed spec. Any unresolved FR-coverage row is a hard stop under the daemon.
- Declared pattern replication — when the plan header resolves a
**Pattern-source:**/**Rename-map:**declaration, the skill copies and renames the source feature’s acceptance specs instead of deriving them. RED is still earned honestly: the copied specs fail because their target does not yet exist. An empty source spec set, a rename-map target-path collision, or an all-passing copied set all fail closed rather than falling back to derivation.
pipeline
Use when executing an implementation plan with multiple tasks. Factory orchestration with three autonomy levels, quality gates, rework budgets, and audit trails.
- Frontmatter —
enforcement: structural,phase: build,standalone: false,requires: [".docs/plans/ with implementation plan"], no model pin. - Engine step —
build(index 12, BUILD, prerequisiteplan). Checkpoint, loop gate, structural, never tier-skipped, never disableable. - Inputs — the plan’s task dependency graph, file sets, and dependency lines;
.pipeline/task-status.json; story acceptance criteria; prior batch reviews; ADRs and the approved PRD for the design-conformance check. - Outputs —
.pipeline/audit-trail/batch-N/review.jsonand the batch simplification records;.pipeline/progress.log;.pipeline/summary.json;.pipeline/halt-user-input-requiredand.pipeline/HALTon a stall; at least one.memory/entry per batch; apipeline_closeoutrecord in.pipeline/pipeline-events.jsonlper completed evaluator gate, written viaai-conductor closeout-event..pipeline/current-taskand.pipeline/task-status.jsonare written by engine hooks and must not be hand-edited. - Read-only SHIP verdicts — BUILD sessions, including remediation retries and every implementer dispatch, may read but never write, delete, rename, or recreate the SHIP validator verdict artifacts (
prd-audit.md,architecture-review-as-built.md/.json) or their code-stamp sidecars. Only the validator’s next dispatch produces a new verdict; a fixed finding is proven throughai-conductor task done <id> --done-when <n>=<evidence>. - Gate role — blocking. Evaluator dispatch at each batch boundary is mandatory; a missing or empty
review.jsonhalts and re-dispatches. A missing, malformed, or non-matchingevaluatorpipeline_closeoutrecord is an independent second hard gate (waived for a batch already in flight before the closeout-event emitter shipped) — seeai-conductor closeout-event.BLOCKhalts and escalates;REQUEST_CHANGEStriggers rework against a three-cycle budget. Two consecutive zero-completion attempts trip a circuit breaker. - Declared replication copy task — on a plan with a resolved
**Pattern-source:**/**Rename-map:**declaration, exactly one task is the mechanical, zero-LLM copy: it writes only the targets its**Files:**declaration lists, fails closed naming an undeclared target or an unreadable source, and leaves no partial copy on failure. A later task the copy commit fully satisfies — every acceptance criterion and its scoped verification — may close through the existingEvidence: satisfied-by <sha>form; a task only partly satisfied always runs the full, unmodified RED → DOMAIN → GREEN → DOMAIN → COMMIT cycle instead of being split. - Fan-out — Standard and Full derive a ready frontier from completed dependencies and non-overlapping file sets, then launch up to three tasks in one provider-native concurrent dispatch and join before verification. Claude Code uses multiple Agent tool calls in one response; Codex uses multiple
collaboration.spawn_agentcalls in one response. Conservative, dependent tasks, and overlapping-file tasks stay sequential. A selected host without native fan-out stops with an actionable capability diagnostic instead of silently serializing Standard or Full. - Dispatches —
agents/evaluator.md,agents/generator.md,agents/worktree-manager.md.
tdd
Use when implementing any feature or bugfix. Five-step cycle: RED → DOMAIN → GREEN → DOMAIN → COMMIT. Enforces test-first development with domain integrity review at every phase boundary.
- Frontmatter —
enforcement: structural,phase: build,standalone: true,requires: [], no model pin. - Engine step — none. It is the per-task cycle every
pipelineimplementer runs. - Inputs — one acceptance criterion from the plan; test and source directory paths; tech-context lint and typecheck commands;
.memory/decisions/. - Outputs — git commits carrying
Task: <id>trailers, including empty evidence commits; conditional.memory/gotchas/and.memory/patterns/entries. No.docs/artifact. - Gate role — neither in flow terms, but COMMIT is a hard in-cycle gate: scoped tests green, linter and type-check clean, clean tree, any cross-boundary integration check owned by the task proven through the appropriate project entry point (helper-level proof alone does not close that task), and an exact bare plan task id in the trailer. The domain reviewer holds veto authority back to RED or GREEN.
Task:trailers are telemetry only — build completion is derived bybuild_review, not from trailer self-reports. - Declared replication does not shorten the cycle — a declared replication’s copy task only establishes a baseline. A later task closes via
Evidence: satisfied-by <copy-sha>only when the copy satisfies that task’s whole scope; any task introducing behavior the source lacks, or only partly covered by the copy, runs the identical unmodified cycle. A first test that passes immediately on a delta task does not permit skipping to implementation. - Dispatches —
agents/generator.md(RED and GREEN),agents/domain-reviewer.md(both DOMAIN phases).
code-removal
Use only when deletion is the requested deliverable inside an active change: removing a file, seam, flag, symbol, or code path. Do not invoke for additive work, renames, or refactors that merely edit or deprecate code.
- Frontmatter —
enforcement: advisory,phase: all, no model pin. It is implicit-required:/pipelineactivates it inside an already-running build session. - Engine step — none.
planandstoriesroute removal-shaped authoring to it,tdddefers its removal doctrine to it, and/pipeline’s DISPATCH step sends a removal-shaped task to it in place of opening a RED cycle. - Inputs — the obsolete file, seam, flag, symbol, or code path; the behavior that must survive; and the source, test, configuration, and documentation references that mention it.
- Outputs — the deletion diff, any pre-deletion characterization tests needed to cover a non-obvious survivor, and passing scoped survivor tests. The
test_suitestep owns full surviving-suite proof. - Gate role — advisory. It forbids absence tests: deletion task evidence is the diff plus passing scoped survivor tests. It requires a survivor inventory for non-obvious survivors, triages touching tests as DIRECT or INCIDENTAL, and finishes with a literal reference sweep.
code-review
Use after implementing a task, before merging, or when requesting quality verification. Dispatches an evaluator agent with fresh context for calibrated, skeptical review.
- Frontmatter —
enforcement: gating,phase: build,standalone: true,requires: [verify-claims],model: opus. - Engine step — none. The pipeline evaluator satisfies this gate at batch boundaries. The engine’s
build_reviewstep is a separate, engine-native grader, not this skill. - Inputs —
git diff <batch-start-commit>..HEAD, scoped to the batch rather than the full branch; the story and acceptance criterion; the plan task; affected-test results; the tech-context review checklist. - Outputs — no committed artifact. The evaluator emits an in-band structured verdict, persisted to
.memory/patterns/and.memory/gotchas/at the memory checkpoint. - Gate role — blocking in place, with no kickback file: a
BLOCKverdict prevents merge andREQUEST_CHANGESmust be addressed before re-review. - Dispatches —
agents/evaluator.mdin a fresh context, andagents/domain-reviewer.md.
simplify
Use only at an active pipeline batch boundary after code has changed. Reviews current-batch duplication, complexity, and over-engineering; do not invoke for ordinary refactors, code review, or requests that merely ask for simpler prose or code.
- Frontmatter —
enforcement: gating,phase: build,standalone: false,requires: [],model: sonnet. - Engine step — none. It runs inside
pipeline’s post-batch checks and fromtdd’s batch-boundary refactor rule. - Inputs — the batch diff by name; the batch-start commit; existing tests at the same production seam; ADRs that justify an abstraction; linter output.
- Outputs —
.pipeline/audit-trail/batch-N-simplification.md. - Gate role — blocking within the batch.
CLEANproceeds;SIMPLIFY_REQUIREDmust be fixed before the next batch and counts against pipeline’s three-cycle rework budget. - Declared replication is informed, not silenced — a declared replication’s mapped source/target pair alone is not flagged as an extract-with-parameters finding. Undeclared duplication, and similarity outside the declared target set, is still flagged, and the skill retains authority to propose extraction on a declared pair when rationale beyond the replication itself merits it.
debugging
Use only when the requested task is diagnosis of an observed bug, test failure, or unexpected behavior, or when active BUILD encounters one. Do not invoke for feature implementation, proactive review, or speculative troubleshooting without a concrete failure.
- Frontmatter —
enforcement: gating,phase: build,standalone: true,requires: [verify-claims],model: opus. - Engine step — none. Invoked on demand, and by
manual-testin a fresh sub-session when a failure’s cause is not self-evident. - Inputs — the full error and stack trace and logs;
.memory/gotchas/and.memory/patterns/; recent git history; the governingStatus: APPROVEDADR or the relevant FR. - Outputs — a failing reproduction test and the fix; entries in
.memory/gotchas/and.memory/patterns/. No.docs/or.pipeline/artifact. - Gate role — neither in flow terms, with two hard in-skill rules: no fix proposals before the investigation completes, and a design-conformance stop — if the buggy path violates or is superseded by an approved decision, the output is a conformance finding, not a patch. Three failed fixes escalate to the operator.
test-suite has no SKILL.md: test_suite is an engine-native BUILD verifier that obtains a current result from the repository-configured aggregate verifier. build_review dispatches the engine-managed test-quality rubric skills; their raw verdicts are joined before effective dispositions are applied. test_suite runs after build and before build_review.
BUILD implementation and repair activities (including implementation agents, code-removal, tdd, and debugging) run scoped affected tests. If scope is uncertain, they record the trigger and defer aggregate proof to test_suite, rather than running an intermediate aggregate verifier.
Bootstrap inventories tests without executing them. Acceptance-spec RED runs select only the feature’s generated or copied specs. Progression checks, batch boundaries, and worktree merges consume existing evidence; only concrete changed behavior or interaction risk justifies targeted checks. Full-suite or aggregate runs, as configured, belong to test_suite. Batch evaluators and code-review inspect supplied results without routine reruns; targeted runs are reserved for reproducing a specific suspected defect. Known scoped failures still block BUILD. On an auto-mode suite-failure kickback, the engine supplies failure diagnostics and the .pipeline/test-suite-evidence.json path to BUILD; repair sessions use that evidence, verify affected tests, and commit before the engine reruns the aggregate gate. Scoped success alone never satisfies that gate.
SHIP-phase skills
manual-test
Use after /finish to validate stories via curl (API) or browser (full-stack). Bugs found loop back through /tdd.
- Frontmatter —
enforcement: gating,phase: ship,standalone: false,requires: [finish, verify-claims], no model pin. - Engine step —
manual_test(index 16, SHIP, prerequisitetest_suite, skipped at tier S). Checkpoint and loop gate, and the only step that opts intoconfigDisableAllowed. - Inputs — story acceptance criteria; the running application; the absolute worktree
.pipelinepath supplied in the step’s system prompt. - Outputs —
.pipeline/manual-test-results.md, written solely byai-conductor manual-test-record, append-only as numbered attempt sections with per-criterionPASS,WARN, orFAILresults;.pipeline/manual-test-fail-evidence.json. - Gate role — blocking. Only the latest attempt is evaluated. The skill must never hand-write or fabricate the results file — an absent marker is the correct refusal signal. A whitewash guard requires new commits after a recorded FAIL before a later FAIL-free attempt is accepted. Missing or unlaunchable browser automation dependencies are recorded as non-blocking
WARNwithout installing them during SHIP; available API criteria continue throughcurl. An application mismatch observed after the browser launches remains a blockingFAIL. - This repository —
manual_testis disabled in.ai-conductor/config.yml. See self-hosting.
prd-audit
Use at SHIP, after manual-test and before rebase/finish. Audits the shipped implementation against the feature stories’ acceptance criteria, using PRD functional requirements as intent context when a PRD exists; produces graded, criterion-level findings and never implements or routes work itself.
- Frontmatter —
enforcement: gating,phase: ship,standalone: true,requires: [verify-claims],model: opus. - Engine step —
prd_audit(index 17, SHIP, prerequisitemanual_test). Loop gate; runs on every feature, at every tier and on both tracks — the skill does not infer a skip from tier, track, or the absence of a PRD. - Inputs — the feature’s committed stories (the audit key) via the active plan’s
**Stories:**reference; the active plan and any coherence mapping; the matching non-SUPERSEDED-PRD when present (context, not the key); the implementation, changed tests, and BUILDScope:trailers; operator reseal andScope:trailer rationales as immutableOVER_SCOPEintent evidence;.pipeline/accepted-widenings.jsonwhen present — durable operator authority, including immutable original evidence and case/offer references. The engine may apply that authority to later wording only after it records a fresh relation; the auditor does not preserve it by copying a summary. - Outputs —
.pipeline/prd-audit.md, overwritten each run; a code-stamp sidecar on the pass path. - Gate role — blocking. Each finding carries exactly one grade —
PASS,FIXABLE,PLAN_GAP, orOVER_SCOPE— and the report needs exactly one graded verdict row per acceptance criterion. AFIXABLErow must name its owning plan task.FIXABLEfindings appends a bounded remediation lap (capped tasks, see configuration); exceeding the cap, needing a second lap, a happy-pathPLAN_GAP, or a user-visible out-of-intentOVER_SCOPEhalts for the operator. A negative-path or edge-scenarioPLAN_GAP, and anOVER_SCOPEwidening within intent or with no user-visible effect, are recorded in the verdict and the shipped record and the feature ships. - Dispatches —
agents/prd-auditor.md, one dispatch for the whole audit.
remediate
Use when a SHIP gate blocks — a prd-audit FIXABLE finding, an all-
REMEDIABLEas-built architecture-review BLOCKED verdict, or finish verification — or on a build stall. Emits a per-gap disposition and concrete tasks routed to the owning step, and HALTs only for gaps that need a human.
- Frontmatter —
enforcement: gating,phase: ship,standalone: true,requires: [verify-claims], no model pin. - Engine step —
remediate(out-of-band, SHIP, prerequisiteprd_audit). Engine enforcement isadvisory. Deliberately outside the sequential list so the loop never dispatches it unconditionally. - Inputs —
.pipeline/prd-audit.md,.pipeline/architecture-review-as-built.md,.pipeline/test-failures.md, and.pipeline/build-stall-question.md. Abuild_reviewFAIL no longer dispatches/remediate: it routes straight back tobuildwith its own best-effortplan contract:andprior attempts:pointer lines (see gates). - Outputs —
.pipeline/remediation.json, overwritten each run and the only write in gap-plan mode. The SHIP verdict inputs are read-only: a finding judged resolved is recorded inremediation.json, never by editing, deleting, or recreating a verdict artifact. The engine then appends each task into the feature’s plan. For aprd_auditfinding without a PRD, its disposition ID is the report criterionS<story>.<ordinal>(for example,S5.1); the engine admits criterion IDs case-insensitively. Anexisting-taskdisposition binds the gap to task id(s) already in the active plan instead: the engine re-stages those rows and kicks back tobuildwithout appending or spending plan-growth allowance (see gates). No completion glob — the engine reads the JSON directly to route. - Gate role — advisory; it is the unblocker rather than a blocker. HALT is reserved for exactly three categories: architectural clarity, product scope, and unanswerable. Every other gap must route to
build,acceptance_specs,architecture_review, orplan. On absent, stale, or malformed input the engine falls back to deterministic gap classification. The engine also HALTs, independent of category, when abuildgap carries no concrete task outside a build-stall question — a tasklessbuilddisposition is not dispatchable work. - Dispatches —
agents/remediation-planner.md.
rebase
Resolve an in-progress paused rebase conflict, stage fixes, and drive git rebase –continue to completion; invoked by the conductor’s finish-time rebase step or by an operator running /rebase.
- Frontmatter —
enforcement: advisory,phase: ship,standalone: true,requires: [], no model pin. - Engine step —
rebase(index 19, SHIP, prerequisitearchitecture_review_as_built). Engine enforcement isstructural. The engine rebases natively and dispatches this skill only on conflict. - Inputs — live git state only: status, the rebase-merge or rebase-apply path, the unmerged file list, and the conflicted files.
- Outputs — no file artifact. Its output is the contract: the last stdout JSON line, either
{"resolved": true}or{"resolved": false, "reason": "..."}, parsed by the step runner. When an engine-dispatched mergeable sweep explicitly enables Sweep Test-Only Judgement, a successful result instead includes a verdict withchoice,rationale, andsupersededreplay SHAs. That exception is unavailable to finish-time and re-kick rebase resolution. - Gate role — blocking through the structural step. An unresolved result or an unsafe hunk retries up to a cap and then HALTs. Non-negotiable prohibitions: never
--abort, neverpush --force, never invoke mid-build.--skipremains prohibited except for a declared-superseded replayed test-only commit while that sweep-only judgement mode is enabled. - Replay verification — before editing, the skill captures the replay source commit’s and upstream’s intent as an evidence ledger, and HALTs at the first semantic ambiguity rather than guessing. Before
git rebase --continue, it reviews the complete staged diff (not just the conflicted hunks) and requires every staged change to be attributable to the source or a necessary upstream adaptation. Aftergit rebase --continue, it inspects the resulting replay commit against the retained pre-continue identity and validated intent, and only emits{"resolved": true}once every replay commit — including the final one — has reconciled.
finish
Author and then judge reader-facing PR prose at the engine-owned FINISH boundary after deterministic publication prerequisites pass.
- Frontmatter —
enforcement: gating,phase: ship,standalone: true,requires: [], no model pin. - Engine step —
finish(index 21, SHIP, prerequisiterebase). Loop gate, gating, no tier skip. The production coordinator dispatches this skill for exactly two bounded retained-PR title/body passes, and picks between them deterministically from its own observation of the PR body:author_pr_prosewhen the body is still the engine-seeded placeholder,judge_pr_prosefor the quality verdict on prose that exists. The judgment pass is therefore never handed an unauthored body. - Inputs — the retained PR identity plus its observed title and body. The authoring pass additionally reads the feature branch’s full diff against its base and the feature’s spec, plan, and story artifacts. Deterministic BUILD, SHIP, release-readiness, push, shipped-record, and outcome evidence stays engine-owned.
- Outputs — a rewritten reader-facing PR title/body (authoring), or an accepted verdict or bounded repair (judgment). Neither is trusted on self-report: the coordinator re-reads the PR and a body that still classifies as a placeholder is a failed pass. The coordinator separately persists
state.pr_url, commits.docs/shipped/<slug>.md, and writes.pipeline/finish-choicethroughai-conductor finish-recordafter verification. - Gate role — blocking. Missing or invalid deterministic evidence stops before this skill is dispatched. A placeholder body routes back to authoring; halt boilerplate and a refused judgment require a human. No prose defect commits the shipped record, so the halt stays re-dispatchable.
- Interaction — attended default and interactive foreground conduct asks the operator for PR, keep, or defer before any publication observation or mutation. Explicit foreground-auto and daemon modes use engine policy. No FINISH transition has PR merge or auto-merge authority.
pr
Use when creating or updating a pull request. Analyzes the full diff against the base branch, writes a concise title and structured body, and creates or updates the PR via gh.
- Frontmatter —
enforcement: advisory,phase: ship,standalone: true,requires: [], no model pin. - Engine step — none. Operator-invoked.
finishdoes not call it: the Push & PR path inlines the same title/body contract and pre-push checks so the finish turn survives to write its completion record. - Inputs — the branch log and diff against the base;
.docs/specs/and.docs/stories/;.pipeline/conduct-state.json; the project’s PR-title conventions. - Outputs — the GitHub PR title and body, a pushed branch, and the PR URL. No repository file artifact.
- Gate role — neither, with one internal rule:
finishowns completion verification. If no current pass exists, this skill stops and routes back rather than running the aggregate command itself.
Repository-local skills
These live under .agents/skills/ rather than skills/, declare only name and description, and apply to this repository. See self-hosting.
event-spine
Use BEFORE designing any new way to observe, report, or coordinate something in the ai-conductor repository — a watcher, a poller, a sidecar file, an ad-hoc log, a second telemetry path, or a timestamp stamped into an artifact to be read back later. Also use when adding a member to the
ConductorEventunion, introducing a new.pipeline/*.jsonlledger, deciding whether something ‘should be an event’, or reaching for a channel outside the bus because the bus looks inconvenient. Decides whether the existing spine (ConductorEventEmitter→ConductorEvent→EventPersister→.pipeline/events.jsonl) already carries the concern, applies the schema-not-file test, and names the only three exceptions that justify a separate write. Invoke it even when the new mechanism looks small, obviously correct, or too minor to count as telemetry — a parallel channel is cheap to prevent at design time and near-impossible to remove once consumers depend on it.
- Frontmatter —
nameanddescriptiononly. Noenforcement,phase,standalone,requires, ormodel. - Engine step — none. Invoked at design time, before an approach is written down. Symlinked from
.claude/skills/event-spineso both supported hosts discover the same file. - Inputs — the design under consideration, plus the spine itself: the
ConductorEventunion insrc/conductor/src/types/events.ts,EventPersister, and.pipeline/events.jsonl. - Outputs — a four-line verdict (channel?, occurrence versus durable state, extend/sibling/new channel, and which exception applies). No repository file artifact.
- Gate role — neither. Advisory, with no marker file and no HALT. Its rule is stated as a Design Principle in
AGENT_INSTRUCTIONS.md, which points here and makes reading it mandatory before any such design; a genuinely new channel is escalated to an ADR rather than blocked by this skill.
maintain-documentation
Review and maintain this repository’s human-facing documentation. Use when this repository invokes its maintain-documentation custom step or explicitly requests documentation maintenance.
- Frontmatter —
nameanddescriptiononly. Noenforcement,phase,standalone,requires, ormodel. - Engine step — a custom step wired in
.ai-conductor/config.ymlwithafter: rebase,enforcement: gating, andcompletion_artifact: .pipeline/maintain-documentation-pass. It inheritsrebase’s loop-gate flag, landing betweenrebaseandfinish. - Inputs — the current implementation change plus repository evidence. Its authority rule: code, tests, generated help, schemas, and observed behavior outrank
.docs/, which is context only. - Outputs —
.pipeline/maintain-documentation-review.md, overwritten at the start of every invocation;.pipeline/maintain-documentation-pass, written only after a PASS verdict; documentation and changelog commits..docs/is read-only to it. - Gate role — blocking. On
BLOCKEDthe pass marker stays absent. Blocking conditions include unverifiable claims, unresolved contradictions in authoritative evidence, dangling-link removals, and changelog validation failures.
release-disposition
Judge this repository’s implementation diff and write its authoritative structured release disposition to the retained SHIP draft PR before finish.
- Frontmatter —
nameanddescriptiononly. Noenforcement,phase,standalone,requires, ormodel. - Engine step — a custom step wired in
.ai-conductor/config.ymlwithafter: maintain-documentation,enforcement: gating, andcompletion_artifact: .pipeline/release-disposition-pass. It lands beforefinishand inherits the SHIP loop-gate behavior. It pinsllm_provider: codexandmodel: gpt-5.6-terra: the step judges a diff and writes a short structured disposition, so the standard Codex tier is sufficient; its structured output is validated by the required CI check. - Inputs — the implementation diff, the retained SHIP draft PR, and the migration-surface classifier. The diff decides the disposition; the PR body is the authority once written.
- Outputs — structured metadata written directly to the PR body plus
.pipeline/release-disposition-review.mdand the PASS-only.pipeline/release-disposition-passevidence marker.finishpreserves the metadata while writing reader-facing PR content. - Gate role — blocking. It fails closed when the draft cannot be read or updated, metadata is invalid, or a required migration is not runnable.
scope-check
Use before authoring any change to the ai-conductor harness repository, and before creating any new skill, to decide three things deterministically: whether the change is harness-repo-only or consumer-facing, whether a new skill belongs in the shipped
skills/catalog or this repository’s local.agents/skills/catalog, and whether the change is provider-agnostic. Produces a placement verdict and the registration steps that verdict requires.
- Frontmatter —
nameanddescriptiononly. Noenforcement,phase,standalone,requires, ormodel. - Engine step — none. Operator-invoked, before authoring. Symlinked from
.claude/skills/scope-checkso both supported hosts discover the same file. - Inputs — the change under consideration, plus this repository’s own boundaries:
HARNESS.mdversusAGENT_INSTRUCTIONS.md, the two skill catalogs, and the registration gates intest/test_harness_integrity.shandtest/test_provider_skill_contracts.sh. - Outputs — three verdicts (audience, catalog, provider) plus the registration list the verdicts require. No repository file artifact. The verdicts are an input to the author’s decision, not the decision itself:
AGENT_INSTRUCTIONS.md→ Scope Decisions requires a conflict between a verdict and the operator’s plain request to be surfaced before landing. - Gate role — neither. Advisory, with no marker file and no HALT. Its value is that the registration cost of the two catalogs differs sharply: a
skills/addition must satisfy integrity checks 2, 4, 5, 5a, and 5b plus the provider contract audit and installs globally, while an.agents/skills/addition is outside all of them.
write-tests
Use whenever adding, changing, reviewing, or debugging tests in the ai-conductor repository. Defines repository-specific test scope, isolation, mocking, fixture, performance, and CI-parity rules that prevent cyclic Conductor runs, leaked workers, real third-party calls, and slow aggregate suites. Complements the provider-neutral tdd skill, which controls implementation order rather than test design.
- Frontmatter —
nameanddescriptiononly. It is the only skill in the repository with noenforcementfield. - Engine step — none. It is unwired: no step definition, no custom config step, no engine reference.
- Inputs — the test under authorship plus repository conventions.
- Outputs — none. It produces test files and prescribes commands.
- Gate role — neither. No verdict, no marker file, no downstream HALT. Its rules are stated as MUST and never, and the repository’s contributor instructions make it mandatory reading. See testing.
Agent personas
16 persona files live under agents/. A persona is a prompt template defining who does the work; a skill decides when to dispatch one and with what scoped context. Dispatch is by the host agent’s subagent facility, not by the engine — the engine dispatches skills, and skills dispatch personas.
| Persona | Role | Dispatched by |
|---|---|---|
generator.md | Writes tests (RED) and code (GREEN) under strict TDD in an isolated, focused context | tdd, pipeline |
evaluator.md | Fresh-context quality evaluator over a scoped batch diff, with no shared state with the generator | pipeline at batch boundaries, code-review |
domain-reviewer.md | Domain integrity reviewer with veto authority over tests and implementations | tdd at both DOMAIN phases, code-review |
prd-auditor.md | Audits one FR-N against shipped code; finding authority, never fixes | prd-audit |
remediation-planner.md | Emits per-gap dispositions and concrete tasks; planning authority, never edits code | remediate |
worktree-manager.md | Git worktree lifecycle: creation, environment setup, merge-back, conflict resolution, proof-gated cleanup | pipeline |
cto-security.md | Authn/authz, input validation, OWASP top 10, vulnerability surface | assess |
cto-data-integrity.md | Transactions, event sourcing, race conditions, migrations | assess |
cto-dependencies.md | Outdated packages, CVEs, license compliance, blocked upgrades | assess |
cto-architecture.md | Decisions versus implementation, module consistency, coupling | assess |
cto-duplication.md | Boilerplate and copy-paste clusters with blast-radius measurement | assess |
cto-testing.md | Coverage gaps, layer balance, assertion quality, missing negatives | assess |
cto-infrastructure.md | Connection pooling, caching, background jobs, production parity, secrets | assess |
cto-observability.md | Error handling, logging quality, monitoring, debug context | assess |
cto-devex.md | Onboarding, CI/CD, local development, documentation accuracy | assess |
cto-orchestrator.md | Reads all nine specialist reports and produces one prioritized assessment | assess |
assess therefore dispatches ten personas: the nine specialists plus the orchestrator.
Known limitations
The frontmatter is not always the truth. Where a skill’s declared enforcement disagrees with its engine step definition, the engine wins — isGatingStep and canSkipStep read the step definition, never the SKILL.md.
Known limitation. Six skills’
enforcement:frontmatter disagrees with the engine’s step definition. A reader who trusts the frontmatter will predict the wrong skippability.
Skill SKILL.md enforcementEngine step enforcement memorygatingadvisoryassessgatingadvisoryarchitecture-diagramgatingadvisoryarchitecture-reviewgatingadvisory(the DECIDE step)remediategatingadvisoryrebaseadvisorystructuralThe sharpest case is
architecture-review: the SKILL.md declares a HARD GATE — no feature proceeds past it with DRAFT ADRs — but the DECIDE-phase step isadvisory, socanSkipStep('architecture_review')returnstrue. The real enforcement for that half lives in the land-time spec gate and inconduct’s DRAFT-ADR block, not in the step’s enforcement level. The as-built half at index 18 is genuinelygatingand fail-closed. Tracked in #1018.
Known limitation.
manual-test/SKILL.mddeclaresrequires: [finish, verify-claims]and its description says “Use after /finish”. The engine runsmanual_testat index 16 with prerequisitetest_suite, andfinishat index 21 with prerequisiterebase.finishis not a prerequisite ofmanual_testin any code path — the declared dependency is inverted relative to execution order. Follow the engine order. Tracked in #1018.
Known limitation.
conduct/SKILL.md’s tier table claims that tier S skipspipeline(“use direct /tdd”) andcode-review(“domain review in TDD suffices”). Neither is implemented.builddeclaresskippableForTiers: []and isstructural, so it can be neither tier-skipped nor config-disabled;code-reviewis not an engine step at all, and the engine’s separatebuild_reviewstep is likewise never tier-skipped. The same file’s “Small flow” summary also omitscomplexity,worktree,build_review,test_suite, andrebase, all of which run at tier S. The authoritative tier-S skip set is the 8 steps listed in steps. Tracked in #1018.