Test-Driven Development
TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop.
What a good test is
Tests verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't. A good test reads like a specification.
Seams: where tests go
A seam is the public boundary you test at: the interface where you observe behavior without reaching inside. Tests live at seams, never against internals.
Test only at pre-agreed seams. Before writing any test, write down the seams under test and confirm them with the user.
Anti-patterns
- Implementation-coupled: mocks internal collaborators, tests private methods, or verifies through a side channel.
- Tautological: the assertion recomputes the expected value the way the code does.
- Horizontal slicing: writing all tests first, then all implementation. Work in vertical slices instead.
Rules of the loop
- Red before green. Write the failing test first, then only enough code to pass it.
- One slice at a time. One seam, one test, one minimal implementation per cycle.
- Refactoring is not part of the loop. It belongs to the review stage.
Credit
This skill is based on the work of Matt Pocock (@mattpocock). Original source: mattpocock/skills. Licensed under MIT.
How to use?
1. Download
Go to the AGENT KD SKILL gallery and find this skill card. Click Download to save the SKILL.md file to your computer.
2. Install
Copy the downloaded SKILL.md into your agent's skills directory:
| Agent | Path |
|---|---|
| opencode | ~/.config/opencode/skills//SKILL.md |
| Claude Code | ~/.claude/skills//SKILL.md |
| Codex CLI | ~/.codex/skills//SKILL.md |
| Cursor | ~/.cursor/skills//SKILL.md |
| Gemini CLI | ~/.gemini/skills//SKILL.md |
Example for opencode:
ash mkdir -p ~/.config/opencode/skills/<skill-name> cp SKILL.md ~/.config/opencode/skills/<skill-name>/SKILL.md
3. Use
Restart your agent session. The skill will auto-load based on its description. You can also invoke it explicitly by typing @ in your agent.
4. Verify
Ask your agent something related to the skill's purpose. If it responds using the skill's instructions, you're all set.