skills/tdd-cycle/SKILL.md
Orchestrate RED-GREEN-REFACTOR TDD phases. Use when starting TDD, managing phase transitions, or maintaining TDD discipline across a development session. Do NOT use when TDD discipline is optional or exploratory; do NOT use when a failing test does not yet exist — create the test first.
npx skillsauth add michaelalber/ai-toolkit tdd-cycleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
"The goal is clean code that works. First we make it work, then we make it clean." — Ron Jeffries
This skill coordinates the canonical TDD cycle: RED → GREEN → REFACTOR. It maintains phase state, enforces transitions, and prevents the AI from "helping" by skipping phases.
The cycle is non-negotiable:
Use search_knowledge (grounded-code-mcp) to ground decisions in authoritative references.
| Query | When to Call |
|-------|--------------|
| search_knowledge("TDD red green refactor cycle phases") | At session start — confirms canonical phase definitions and transition rules |
| search_knowledge("Kent Beck test desiderata properties") | When evaluating test quality — authoritative source for the 12 properties |
| search_knowledge("test-first development discipline XP") | When enforcing TDD discipline — grounding in XP practices |
| search_knowledge("unit test naming conventions AAA arrange act assert") | When guiding test structure — naming and organization patterns |
Protocol: Search before advising on phase transitions or test quality criteria. Cite the source path in your response.
Use this framework to evaluate test quality at every phase:
| Property | Description | Priority | |----------|-------------|----------| | Isolated | Tests don't affect each other | Critical | | Composable | Can run any subset of tests | High | | Deterministic | Same result every time | Critical | | Specific | Failure points to cause | High | | Behavioral | Tests behavior, not implementation | High | | Structure-insensitive | Refactoring doesn't break tests | High | | Fast | Quick feedback loop | Medium | | Writable | Easy to create new tests | Medium | | Readable | Easy to understand intent | High | | Automated | No manual intervention | Critical | | Predictive | Passing tests = working code | High | | Inspiring | Confidence to make changes | Medium |
┌─────────────────────────────────────────────────────┐
│ │
│ ┌─────┐ ┌───────┐ ┌──────────┐ │
│ ──►│ RED │─────►│ GREEN │─────►│ REFACTOR │────┐ │
│ └─────┘ └───────┘ └──────────┘ │ │
│ ▲ │ │
│ └───────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
Maintain state across conversation turns using this block:
<tdd-state>
phase: RED | GREEN | REFACTOR
iteration: [number]
feature: [brief description]
current_test: [test name or "none"]
tests_passing: [true | false | unknown]
last_action: [what was just done]
next_action: [what should happen next]
blockers: [any issues preventing progress]
</tdd-state>
Preconditions:
Actions:
Exit Criteria:
Preconditions:
Actions:
Exit Criteria:
Preconditions:
Actions:
Exit Criteria:
At session start, determine the mode:
Autonomous Mode (tdd-agent):
Pair Mode (tdd-pair):
## TDD Session: [Feature Name]
**Mode**: [Autonomous | Pair]
**Stack**: [Language/Framework]
<tdd-state>
phase: RED
iteration: 1
feature: [description]
current_test: none
tests_passing: unknown
last_action: Session initialized
next_action: Write first failing test
blockers: none
</tdd-state>
### RED Phase - Iteration 1
I'll write a test for: [specific behavior]
### Phase Complete: [PHASE]
**What was accomplished:**
- [bullet points]
**Verification:**
- Tests run: [yes/no]
- Result: [pass/fail with count]
<tdd-state>
phase: [NEXT_PHASE]
...
</tdd-state>
### [NEXT_PHASE] Phase - Iteration [N]
Next step: [action]
Before writing ANY implementation code, verify:
If no failing test exists, STOP and write one first.
During GREEN phase:
During REFACTOR phase:
Before any phase transition:
The AI must NOT:
See reference files for stack-specific patterns:
tdd-implementer for implementationtdd-refactor for safe improvementstdd-agenttdd-pairtdd-verify for compliance check| Anti-Pattern | Why It's Wrong | Correct Approach | |--------------|----------------|------------------| | Test after code | Tests become verification, not specification | Always RED first | | Multiple features per cycle | Loses precision, harder to debug | One behavior at a time | | Skipping refactor | Technical debt accumulates | Always evaluate for cleanup | | Gold-plating in GREEN | Violates minimal implementation | Save improvements for REFACTOR | | Tests that test implementation | Brittle, break on refactor | Test behavior only |
The test is likely:
Action: Examine the test, strengthen assertions, or find the actual gap.
development
Interviews the user relentlessly about a plan, decision, or idea — one question at a time, each with a recommended answer. Shared engine behind "grill-me" and "grill-with-docs". Use on any "grill" trigger phrase or to stress-test thinking. Do NOT use to build the plan; it ends at shared understanding, not implementation.
testing
Runs a relentless interview to sharpen a plan or design, capturing the decisions as ADRs and a glossary along the way. Use when the user wants to be grilled AND wants the session to leave durable domain documentation behind. Do NOT use for a throwaway stress-test with no artifacts; use grill-me instead.
tools
OWASP-based security review of Vue/TypeScript front-ends. Detects framework (Vite/Vue CLI/Nuxt), entry points, and data flows; scans the OWASP Top 10 (2025) mapped to Vue client-side risks (raw-HTML XSS via v-html, URL/protocol injection, bundled secrets, insecure token storage, dependency CVEs, missing CSP, open redirects, router guard bypass); emits an exec summary plus graded findings. Use to audit Vue for vulnerabilities. Not for architecture grading (vue-architecture-checklist).
tools
Analyzes legacy Vue codebases and produces actionable modernization plans. Primary migration paths include Options API to Composition API, Vue 2 to Vue 3, Vue CLI to Vite, JavaScript to TypeScript, Vue Test Utils/Karma/Mocha to Vitest + Vue Testing Library, legacy Vuex to Pinia, and removed-in-Vue-3 pattern cleanup (filters, event bus, `$listeners`). Does NOT perform the migration — assesses, quantifies risk, and plans.