agent-sdlc¶
A software development lifecycle shipped as agent config for Claude Code and Codex: rules, skills, slash commands, hooks, and a diff-scoped mutation gate.
Why it exists¶
A coding agent writes the code and the tests for it. Tests written next to the code tend to agree with it, bugs included, so a green suite can tell you nothing.
- On a mature, well-shaped suite, 57% of real bug-class mutants survived (measured 2026-09-10, see Rules → Testing).
- Agents drift from the ask: extra files, extra abstractions, 400-line diffs for a 40-line change.
- Intent gets lost. Design notes land in the tree, the ticket says one thing, the code another.
- Destructive git slips through:
reset --hard,add -Aacross branches, force-push over someone's work.
agent-sdlc makes a hook or the gate check each of these, so the agent doesn't have to remember them.
What it solves, and how¶
| Problem | Mechanism | Where |
|---|---|---|
| Tests that pass but assert nothing | Mutation testing on the diff; a surviving mutant blocks the commit | Gate |
| Tests shaped to the code, not the ask | Adversary review that sees intent and tests, never the code | Techniques |
| Scope creep | 40-line limit without a ticket reference; one ticket, one branch, one PR | SDLC |
| Lost intent | Intent lives in the tracker; new .md files in the tree are blocked |
Rules → Tickets |
| Model code drifting from its spec | Model V&V: spec issue, MS-n citations, golden hashes, a blind pass |
Techniques |
| Vague or inconsistent names | Vocabulary dictionary, naming molds, WordNet synonym check | Techniques |
| Destructive git | A PreToolUse hook that blocks reset --hard, add -A, force-push, and checkout or switch off the default branch in the primary worktree |
Hooks and tools |
| AI tells in commits and PRs | Commit-message check for banned words and attribution trailers | CLI |
| Leaked identity or internal names | no-leaks scan on the staged diff and message |
CLI |
How the pieces fit¶
ticket (model:* label)
|
v
/kata -> branch -> red slice test -> implement <--------------+
| |
v |
git commit |
| | |
pre-commit | | commit-msg |
v v |
+---------------+ +------------------+ |
| mutation-gate | | commit-msg | |
+---------------+ | diff-discipline | |
| | | no-leaks | |
pass | | +------------------+ |
v +---- survivor -------------+
adversary report
|
v
PR, Closes #N -> LGTM -> squash merge
- Rules (
rules/) say how to work. They sync into a repo as.claude/rules/*.mdand anAGENTS.mdblock. - Commands (
commands/) are slash commands that run a workflow:/kata,/done,/grill. - Skills (
skills/) are playbooks the agent loads on demand:/diagnose,/sol-budget,/verify-generated-diff. - Hooks run without asking: a preflight check at session start, the git guardrail and host-exec before every Bash call, the gate at Stop.
- The gate (
mutation_gate/, themutation-gateCLI) is the only part that can say no.
One example¶
A function and two tests that look fine:
def is_adult(age):
return age >= 18
def test_adult():
assert is_adult(30)
def test_child():
assert not is_adult(5)
The gate mutates the changed lines and reruns the tests. Real output:
mutation-gate: 1 changed source file(s)
[1/2] age.py:2:11 age >= 18 => age > 18
[2/2] age.py:2:18 18 => 19
BLOCKED: 2 mutant(s) survived with no waiver.
age.py:2:11:operator:age >= 18 => age > 18
age.py:2:18:literal:18 => 19
- Both tests pass whether the boundary is 18 or 19. Nothing pins it.
- The fix is a test from the requirement, not from the code:
Install¶
claude plugin marketplace add PavelGuzenfeld/agent-sdlc
claude plugin install agent-sdlc@agent-sdlc
git clone https://github.com/PavelGuzenfeld/agent-sdlc
cd agent-sdlc
./install.sh --deps
- The plugin is the Claude Code install.
install.shcovers Codex (--target codex) and dependencies, never~/.claude. --depsinstallsgit gh jq docker python3 ast-grep pytest pre-commitand the gate;--deps=sayadds the Kokoro voice stack.- A second run changes nothing.
- Only the gate:
pip install agent-sdlc(modulemutation_gate, console scriptmutation-gate). Addagent-sdlc[vocabulary]for the WordNet check.
Details: Getting started and Hooks and tools.
Where to go next¶
| You want to | Read |
|---|---|
| Install and see it work | Getting started |
| Go from install to a merged PR, step by step | Usage |
| Understand the ideas | Techniques |
| Follow the ticket-to-merge flow | SDLC |
| Get unblocked by the gate | Gate |
| Look up a flag or subcommand | CLI |
| Configure a repo | Config |
| Pick a slash command | Commands |
| See what runs on its own | Hooks and tools |
| Look up a term | Glossary |