From io
Use when bootstrapping a new feature under `docs/<feature>/`, locking units, deferring questions, distilling spec, archiving build sections, surgically reopening locked phases, or checking project-done. Operates a three-phase exploration → spec → build process for medium-to-large backend features. Invoke with arg `review` to act as the Review Agent during build.
How this skill is triggered — by the user, by Claude, or both
Slash command
/io:develop-featureThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Drive the multi-phase development of a feature. The user contributes substance; the skill handles ceremony — dirs, files, callout formats, archives, sequence numbers, lifecycle transitions.
procedures/assist.mdprocedures/bootstrap.mdprocedures/checkpoint.mdprocedures/code-review.mdprocedures/cross-feature-lift.mdprocedures/custom.mdprocedures/defer.mdprocedures/delegate-code.mdprocedures/distill.mdprocedures/migration-checklist.mdprocedures/open-questions.mdprocedures/project-done-check.mdprocedures/references.mdprocedures/section-archive.mdprocedures/surgical-reopen.mdprocedures/tech-debt.mdprocedures/topic-lock.mdprocedures/unit-lock.mdreference/custom-shape.mdreference/doc-ownership.mdDrive the multi-phase development of a feature. The user contributes substance; the skill handles ceremony — dirs, files, callout formats, archives, sequence numbers, lifecycle transitions.
This skill is suggest-only. Wait for explicit invocation; the agent may recommend it when the conversation enters lifecycle territory.
Do not engage for bugfixes, small refactors, single-file edits, or tasks expected to wrap in under a few hours.
For features that fit in about a day and touch 1–2 areas, use io:develop-mini-feature instead — same docs/<feature>/ root, lighter scaffolding, graduates to this skill if scope grows (a 3rd exploration topic, an oversized build, a cross-feature decision). Wrong-skill guard: if PLAN.md exists at docs/<feature>/ and no build/ subdir, the feature is tracked by mini — route there.
reference/doc-ownership.md); never writes resolution tags. May delegate code-writing to an Assistant in build phase (see "Coding Agent delegates to Assistant" below).build/code-review/<section>.md: appends findings, verifies Coding Agent responses against the code, writes resolution tags (fixed / wont-fix: / decision: / spec-changed:). Entered by review arg. Procedure: procedures/code-review.md.docs/<feature>/. Entered by assist arg. Procedures: procedures/assist.md (Assistant side), procedures/delegate-code.md (Coding Agent side).The skill operates as one role per session — binding for the whole session. Role is selected by the skill argument:
review → Review Agent (prose declaration "You are the Code Review Agent" / "You are the Review Agent" is accepted as a synonym)assist → Coding Agent AssistantInvocation: Skill(skill="io:develop-feature", args="review") or args="assist". Start fresh sessions for the Review Agent (independent code read) and Assistant (context isolation, parallelism).
Run state detection (below). Then route by role: Review Agent with build phase active → procedures/code-review.md. Coding Agent Assistant → procedures/assist.md. Coding Agent → route by the action (see "Action routing"). No role edits another's lines in build/code-review/<section>.md (reference/doc-ownership.md); the Assistant has zero write access to anything under docs/<feature>/.
In the build phase, the cycle is TDD: write tests → write code → review → respond → independently verify and tag → repeat. Each section in build/ carries triple test+code+review status (see templates/progress-build.md).
Build phase only — exploration and spec have no Review Agent. The "suggest-only" rule (top of this file) governs the top-level Coding Agent invocation; once the Coding Agent is running, internal Review Agent spawns are mechanical and do not need a fresh user invocation.
The Coding Agent spawns the Review Agent itself — fresh subagent via the Agent tool (subagent_type: general-purpose) — at three moments, so review keeps pace with code:
build/testing/<section>.md is green against new section code, with no further code changes planned for the section this turn. Fires once per section lifecycle: at first-ever pass, and again on the first all-green pass after a surgical reopen of the section (procedures/surgical-reopen.md). Any later green-after-red transition within the same section (rewrites, refactors that temporarily broke tests) is Recheck, not Initial.> **Coding Agent response** blocks during the turn. One launch per section per turn, regardless of how many responses. Refusal responses (no code change) still trigger verify — the Review Agent judges whether the refusal holds, see procedures/code-review.md step 4.procedures/delegate-code.md) where the change isn't addressing an open finding (research-driven update, refactor, tangent fix, green-after-red rewrite). The in-the-loop test is intent, not file identity — a refactor in a helper that resolves finding #N is in-the-loop even if the helper's file wasn't cited in the finding; an unrelated tangent in a cited file is Recheck. Applies only while the section row in build/PROGRESS.md is 🚧 — once the section is archived, code changes to cited files no longer trigger review. One launch per section per turn.Batching is mandatory, not advisory. Each auto-launch is a fresh subagent that re-reads SKILL.md, procedures/code-review.md, reference/doc-ownership.md, the testing doc, the code-review doc, and the code itself. Coalescing five responses into one Verify launch saves four full re-reads.
Spawn the subagent via the Agent tool (subagent_type: general-purpose). Its first action is to call Skill(skill="io:develop-feature", args="review"); the Agent prompt body itself just identifies the section:
Section: <section-name>
[Feature: <feature-name>]
[Recheck: <one-line — what changed and why>]
Feature: is required when more than one feature dir under docs/ has an active build phase; with a single active feature, the skill picks it. Recheck: is required only for the recheck trigger — procedures/code-review.md uses it to branch when there are pending responses and/or fresh recheck code. For initial and verify, the skill derives the branch from build/code-review/<section>.md state. (The label is Recheck: not Drift: — "drift" is reserved for state-inconsistency surfacing, see procedures/code-review.md Errors.)
Announce the launch in one line, shape: Spawning Review Agent for <section> (trigger: initial | verify | recheck). Do not gate on user approval — review is part of the TDD cycle, not a phase transition. Surface the subagent's summary verbatim; it replaces the Coding Agent's end-of-turn summary (Operating posture point 8) for the auto-launched cycle. If new untagged findings come back, respond inline and the verify trigger fires again at end of turn. The loop terminates when verify returns no new untagged findings — and procedures/code-review.md step 4 caps it at two response rounds per finding before surfacing to the user. If the subagent fails or returns without writing findings, surface and ask — do not retry silently.
After the subagent returns, the Coding Agent updates the section's Review column in build/PROGRESS.md — this is the only path the column flips on. Both the parent row and every sub-row §N.M are recomputed on the same return; sub-row state is derived from each finding's Targets: field per templates/progress-build.md Review column rules. The Review Agent never edits build/PROGRESS.md (see procedures/code-review.md postconditions). Three cases for the parent row, based on the state of build/code-review/<section>.md after the subagent's run:
Review: ⏳ → flip parent to Review: 🚧. Normally fires on the Initial trigger's return; the rule is keyed on the current cell value, so any later path that resets the column to ⏳ and then gets findings is handled by the same edge.build/code-review/<section>.md now carries a Resolution tag, with no untagged follow-ups outstanding → flip parent Review: 🚧 → ✅. This is the Coding Agent's affirmation that the review → fix → verify loop is complete for this section. Do this before invoking procedures/section-archive.md; archive's preconditions expect Review: ✅ already set. May fire on the same return as the case above for a clean review — the Initial trigger returns with a sentinel finding (Targets: §N) already tagged fixed: no findings, so the parent walks ⏳ → 🚧 → ✅ in one step.Sub-row recompute (same return, after the parent flip). Walk each sub-row §N.M and reset its Review cell per templates/progress-build.md Review (sub-row) rules — derived from each finding's Targets: field. The Initial-trigger return is the moment most sub-rows resolve: those with zero citing findings flip ⏳ → ✅ alongside the parent's ⏳ → 🚧 flip. Subsequent Verify/Recheck returns flip sub-rows 🚧 → ✅ as their citing findings get tagged, or ✅ → 🚧 if a new untagged finding lands on a previously-clean sub-row.
The Review: 🚧 → ✅ flip and the subsequent section-archive invocation are two distinct actions: flip first, archive second. If the user redirects or pauses between them, the column accurately reflects "review done, archive pending."
Build phase only. The Coding Agent may spawn a Coding Agent Assistant in a fresh subagent to write code inside a declared file Scope:. Discretionary (Coding Agent's call) — unlike the Review Agent's auto-launch, the Assistant never spawns mechanically. The Review Agent's value is structural independence; the Assistant's is context conservation and parallelism. The Assistant never touches docs/<feature>/; the Coding Agent retains all column flips and routing.
procedures/delegate-code.md.Skill(skill="io:develop-feature", args="assist")): templates/delegation-prompt.md.Scope:, and never under docs/<feature>/ regardless of what Scope: declares (reference/doc-ownership.md).Scope: is disjoint from every other's. The Coding Agent enforces no-overlap before dispatching; the Assistant has no view of its siblings. Send parallel spawns as multiple Agent tool calls in a single message. Overlap is a Coding Agent error — tighten scopes or serialise.Announce each spawn: Spawning Assistant for <section> (scope: <Scope:>, tasks: <count>). Surface the Assistant's return summary verbatim before the column-flip step.
Delegation does not interact with the Review Agent's auto-launch protocol — Initial / Verify / Recheck fire on their normal signals exactly as for in-house code.
ls docs/. Read the active feature's top-level PROGRESS.md, any active topic PROGRESS.md, OPEN-QUESTIONS.md index. State files are the cursor; never maintain a sidecar.reference/smells.md.docs/DECISIONS.md is missing when the user starts work, offer to plant a stub before creating the feature dir. Bootstrap touches only docs/; anything at repo root is out of scope.ls docs/ — locate feature dirs (dirs containing OBJECTIVE.md). 0 → bootstrap mode. 1 → auto-pick. 2+ → ask which one; remember in conversation context.docs/<feature>/PROGRESS.md. Identify which of the three phase rows (exploration, spec, build) is 🚧. references/ is a sidecar — no phase row.🚧, read the pointer it carries (e.g., → exploration/schema/PROGRESS.md) for the active topic / section.OPEN-QUESTIONS.md index to know what's blocked.review arg) with build phase active, route to procedures/code-review.md.If PROGRESS.md is malformed or unreadable, surface and ask. Do not guess.
procedures/bootstrap.mdprocedures/unit-lock.mdprocedures/defer.mdprocedures/custom.md✅ in topic → procedures/topic-lock.mdprocedures/distill.mdprocedures/code-review.mdprocedures/assist.mdprocedures/delegate-code.mdreference/doc-ownership.md (Coding Agent appends the > **Coding Agent response** block; does not tag). End-of-turn: see auto-launch line below.build/testing/<section>.md → auto-launch Review Agent (see "Coding Agent auto-launches Review Agent")Review: 🚧 → ✅ (SKILL.md "Auto-launch protocol"), then procedures/section-archive.mdprocedures/open-questions.md Add (also pauses the 🚧 row in build/PROGRESS.md and adds the — BLOCKED by Q<N> marker — see step 5)spec/* → procedures/surgical-reopen.mdQ<N> → procedures/open-questions.mdreferences/ → procedures/references.md## Current focus (also auto-invoked by procedures/section-archive.md step 5c) → procedures/checkpoint.md<id> → procedures/migration-checklist.mdTD<N> → procedures/tech-debt.mdprocedures/cross-feature-lift.mdprocedures/project-done-check.mdreference/issue-routing.mdEach procedure file is self-contained: preconditions, steps, errors, postconditions. Read the procedure when routing to it.
Read on-demand when the topic comes up:
reference/sequence-rules.md — archive sequences (<seq> resolution), numbered artifacts (#N, Q<N>, Review comment #N, Finding #N, migration IDs).reference/smells.md — state-shape problems to surface.reference/section-split.md — when a build/ or exploration file needs splitting; also the positive definition of a section.reference/doc-ownership.md — edit rules per path.reference/lift-criteria.md — the three lift criteria, sweep cadences, immediate-lift mechanics.reference/issue-routing.md — the "Where does this go?" decision rule for mid-work issues.reference/lock-semantics.md — the three lock scopes (unit / topic / phase) and the phase-termination gates.reference/migration-checklist-shape.md — file-level structure, item ID, tags, and item shape for MIGRATION-CHECKLIST.md.reference/tech-debt-shape.md — file-level structure, item ID, and item shape for TECH-DEBT.md (non-blocking own-codebase follow-ups).reference/custom-shape.md — file-level structure and distillation fold rules for the optional exploration/custom/ topic (sub-explorations that don't fit the standard four).Read the template before writing a new artifact:
templates/objective.md — feature OBJECTIVE.md.templates/progress-top-level.md — feature top-level PROGRESS.md.templates/progress-topic.md — exploration topic PROGRESS.md and references/PROGRESS.md (with ## Current focus).templates/progress-build.md — build/PROGRESS.md. Two tables: Active (sections that are 🚧 or ⏸, with §N.M sub-rows under each parent) and Pending / Done (sections that are ⏳ or ✅, flat — ordered by §). Each row carries Tests / Code / Review columns; sub-rows track all three (sub-row Review is derived from each finding's Targets:) and leave Pointer as —.templates/open-questions.md — feature OPEN-QUESTIONS.md.templates/decisions.md — feature DECISIONS.md.templates/review-comment.md — inline Review comment callout.templates/code-review-finding.md — build/code-review/<section>.md finding item (Review Agent), with the response-block and resolution-tag shapes.templates/delegation-prompt.md — Coding Agent → Assistant invocation prompt body (Section: / Scope: / Tasks: / Spec refs:).Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub mayankdharwa/helios --plugin io