Agent Skill
develop-feature
Implement a feature end to end behind a human approval gate: inspect, specify, plan, approve, implement, test, review, summarize.
~/.claude/skillsPart of the SDLC Agent Toolkit suite
Each skill works standalone, but the set is designed to run together via the toolkit's CLI, with approval gates and traceability between phases. Install the full suite to get the complete workflow.
Install
unzip develop-feature.zip -d ~/.claude/skills/Claude Code picks the skill up automatically on the next session. Works the same for project-level skills — unzip into .claude/skills/ inside a repo instead.
When it triggers
Implement a feature end to end behind a human approval gate: inspect, specify, plan, approve, implement, test, review, summarize. Use when a change needs traceable requirements and a recorded approval.
SKILL.md
Purpose
Take one feature request from words to a reviewed, tested, traceable change, with a human decision recorded in the middle. The workflow owns the order of work, the gate, and the artifact contract; the eight composed skills own the work itself. Nothing here restates a skill's procedure — each step is a reference to a skill ID.
When to use
- A feature or behavioural change needs requirements, a plan, and a recorded approval before anything is edited.
- The change must be defensible later: which requirement, which task, which file, which test, which verdict.
- Do not use when the change is a one-line fix with no requirement worth recording — the run bundle would cost more than the change.
- Do not use when the work is diagnosing a defect. Use the
debugfamily; this workflow assumes the desired behaviour is known, not discovered.
Inputs
Values are substituted from the invocation; ask the user for any that are missing.
- feature_request (required) —
$1. The change being asked for, in the requester's own words. - scope_path (optional) —
$2. Subtree to inspect and change when the repository is a monorepo.
Procedure
Each numbered item names the step alias, the skill it invokes, and what it must leave behind. The procedure is in the skill; the sequence is here.
- inspect_repository →
discover.repository.inspect. Reads the working tree, honouringscope_pathwhen supplied. Leavescontext.
- analyze_feature →
requirements.feature.analyze. Readsfeature_requestandcontext. Leaves therequirementsandacceptance_criteriasections oftraceability, plusdecisionsentries of kindambiguityandassumption.
-
plan_implementation →
plan.feature.implement. Leavesimpact_analysis,implementation_plan, and thetaskssection oftraceability.GATE —
approve-implementation. Present the four evidence items, ask the question inapprover_behavior.prompt, and stop. Only a human may answer, and only the exact wordAPPROVEis an approval: silence is not, a restatement of the plan is not, and the agent's own judgement that the plan is sound is not. On rejection, return to step 3. Nothing outside.sdlc/runs/${run_id}/may be written until the decision is inapprovals.
STOP — gate
approve-implementation(human-approval, risk: medium). Authorize implementation of the reviewed plan before any file outside the run bundle is edited. Do not proceed toexecute_implementation. Do not create, modify or delete any file outside.sdlc/runs/<run-id>/until a human has recorded the decision withsdlc approve approve-implementation --run <run-id>. If you cannot confirm that an approved entry forapprove-implementationexists in.sdlc/runs/<run-id>/approvals.yaml, stop and ask the user. This gate is Tier 1 — Enforced (declared, not measured) on claude-code: aPreToolUsehook entry in.claude/settings.jsonrunssdlc gate-checkand returns a deny decision for the matched tool call before it executes. This tier is declared from vendor documentation and has not been measured on a running tool. The open prototype task behind that claim is named in the install report and in the spine's "Declared verification gaps" section. Detection is after the fact:sdlc verify-runreports a violation when artifacts from a step after this gate exist while.sdlc/runs/<run-id>/approvals.yamlhas no approved entry forapprove-implementation.
- execute_implementation →
develop.feature.execute. Runs only after the recorded approval. Leaves source changes and thechanged_filessection oftraceability.
- validate_change →
test.change.validate. Leaves tests, thetestsandvalidationssections oftraceability, andvalidation_results. Where the target cannot execute commands, each verdict is writtennot_runwith a reason and a declared degradation — never omitted, and never reported as a pass.
- review_code →
review.code.perform. Appendsreview: codeentries tofindings.
- review_security →
security.change.review. Appendsreview: securityentries to the samefindingsfile.
- summarize_change →
document.change.summarize. Leaveschange_summaryand the final status inrun_header.
Numbering note: docs/16 §3.2 numbers the same
run as twelve execution steps, because three of these skills own more than one step there. The
eight aliases above are the schema-level skills[] entries; the gate is docs/16's step 7.
Validation
sdlc validate examples/workflows/develop.feature.md— the frontmatter validates againstschemas/workflow.schema.json, and the linter resolves every skill ID, step reference, gateafter/before, evidenceref, andcompletion.required_artifactsentry.sdlc run verify ${run_id}— required artifacts present, written by their declared owner, and pre-approval hashes unchanged since approval (RI-13, RI-15).sdlc trace check --run ${run_id}— the chain resolves end to end, no orphans (RI-1…RI-12).- A structural lint asserts that no procedure text in this file appears in any composed skill.
Artifacts
| Artifact | Approval side | Owner | Validation |
|---|---|---|---|
run_header | pre-approval | cli | schema |
context | pre-approval | agent | schema, ≤64 KiB |
traceability | both | agent | schema |
decisions | both | agent | schema, append-only |
impact_analysis | pre-approval | agent | prose + machine frontmatter |
implementation_plan | pre-approval | agent | prose |
approvals | pre-approval (written at the gate) | human | schema, append-only |
validation_results | post-approval | agent | schema, append-only |
findings | post-approval | agent | schema, append-only |
change_summary | post-approval | agent | prose |
requirements_view | pre-approval | cli | generated view, optional |
code_review_narrative | post-approval | agent | prose, optional |
security_review_narrative | post-approval | agent | prose, optional |
run_index | repo-level, derived | cli | schema |
Failure modes
| Symptom | Response |
|---|---|
A step fails and has no transitions entry | failure_policy.default: halt. The run stops, the failure is recorded in run_header, and partial artifacts are kept and marked incomplete. |
validate_change fails | Route to execute_implementation once (max_reentries: 1). A second failure halts — a retry loop hides the failure the run exists to surface. |
| The gate is rejected | Return to plan_implementation (on_gate_denied: return-to-preceding-step). Re-entering that step re-arms the gate; the earlier decision never carries forward. |
| The approver replies ambiguously | Treat it as a rejection. reject_ambiguous is not authorable as false. |
| Post-approval artifacts exist with no approval entry | A detected violation (RI-13), not a supported mode — bypass_policy.allowed: false. Report E_GATE_BYPASSED; never repair it by writing an approval. |
| The target cannot run commands | validate_change writes not_run verdicts with degradation_ref, run_header status becomes completed-degraded, and change_summary carries the UNVERIFIED banner. |
| An adapter cannot enforce the gate | Compile it at its declared tier and state that tier at install time. Never describe Tier 3 as enforced. |
Safety
Prohibited at the workflow level, in addition to every composed skill's own ## Safety block:
- proceeding past a denied or unrecorded gate decision;
- writing, editing or backdating
approvals.yaml— that file is the human's, and the agent recording its own approval is not authorable (self_approvalis const false); - editing a pre-approval artifact after its hash is recorded, or rewriting history in an append-only artifact;
- writing anything outside
.sdlc/runs/${run_id}/before the approval is recorded; - deleting or pruning a run bundle — it is gate evidence.
Example
/develop-feature Stop attackers from brute-forcing the login endpoint. scope_path=services/api1 writes
context.yaml: Node 22 / TypeScript (services/api/package.json:14), testvitest run(package.json:31). 2 writesREQ-001,AC-001,AC-002intotraceability.yamland one ambiguity intodecisions.yaml(window length not stated). 3 writesimpact-analysis.md(predicted_paths: 3,risk: medium),implementation-plan.md, andTASK-001/TASK-002.GATE — approve-implementation. Presents the plan, the impact analysis, the three traceability sections and the one open ambiguity, then asks "Approve this implementation plan? Reply with the exact word APPROVE…" — and stops. The working tree is untouched. On Claude Code the first
Editattempted before that record exists is blocked by the hook, not merely discouraged; on Codex and Copilot nothing blocks it and the violation is found later.The reviewer replies
APPROVE.sdlc gate approveappends the entry with the approver, the timestamp, and the sha256 of all four pre-approval artifacts.4–5 two source files and one test file change;
TEST-001/TEST-002cover both criteria;VAL-001test_execution passed,VAL-002build passed. 6–7 two findings, bothseverity: low. 8change-summary.mdwritten,run.yamlstatuscompleted.Recommends
release.readiness.assessnext.