A strict TDD enforcement tool that guides development through the Red-Green-Refactor cycle.

Install

mkdir -p .claude/skills/tdd-zereight && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18717" && unzip -o skill.zip -d .claude/skills/tdd-zereight && rm skill.zip

Installs to .claude/skills/tdd-zereight

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Test-Driven Development enforcement skill. Activates full TDD mode. Activate when: TDD, test-driven, test first, red-green-refactor, write tests first.
151 chars✓ has a “when” trigger
Beginner

Key capabilities

  • Write a failing test for new behavior
  • Write minimum code to make a test pass
  • Name tests as specifications
  • Identify and fix common TDD pitfalls

How it works

The skill guides through the Red-Green-Refactor cycle, starting with writing a failing test, then implementing minimal code to pass it, and finally refactoring.

Inputs & outputs

You give it
Description of a feature or function to implement
You get back
Implemented feature with passing tests and refactored code

When to use tdd

  • Implement features test-first
  • Enforce TDD discipline
  • Ensure reliable refactoring
  • Validate code behavior

About this skill

TDD — Test-Driven Development

THE IRON LAW: Write the failing test FIRST. Always.

The Red-Green-Refactor Cycle

RED   → Write a failing test for the NEXT behavior
GREEN → Write ONLY enough code to make it pass (no extras)
REFACTOR → Clean up code quality (tests must stay green after every change)
REPEAT

Step-by-Step Protocol

1. RED Phase

  1. Identify the smallest next behavior to implement
  2. Write a test that describes that behavior as a named it() / test() / def test_
  3. Run the test — it MUST FAIL. If it passes, the test is wrong.
  4. Confirm the failure message is the RIGHT failure (not a syntax error)
// Example: RED — test fails because function doesn't exist yet
it('returns an empty array for an empty input', () => {
  const result = parseItems([]);
  expect(result).toEqual([]);  // FAILS: parseItems is not defined
});

2. GREEN Phase

  1. Write the MINIMUM code to make the test pass
  2. Do not add extra logic, default parameters, or "nice-to-haves"
  3. Run ALL tests — the new test must pass; existing tests must not break
// Example: GREEN — just enough to pass
function parseItems(input: string[]): string[] {
  return [];  // only enough for the current test
}

3. REFACTOR Phase

  1. Look at the code — can it be cleaner without changing behavior?
  2. Apply simplification patterns (see /ai-slop-cleaner and /coding-standards)
  3. Run tests after EVERY change. If tests break, undo immediately.

TDD Gate — When to Stop

SituationAction
Code written before testSTOP. Delete production code. Write test first.
Test passes on first run (no prior code)The test is wrong — fix it to fail first.
Multiple behaviors in one testSTOP. One test, one behavior.
Skipping refactor to go fasterGo back. Clean up before next feature.

Naming Tests as Specifications

Tests are executable documentation. Name them as complete sentences:

// BAD
it('test1', ...)
it('works with empty', ...)

// GOOD
it('returns empty array when input is empty', ...)
it('throws ValidationError when email is missing @', ...)
it('sends exactly one email when user registers', ...)

Framework Quick Reference

FrameworkFailing assertionRun single test
Vitestexpect(x).toBe(y)npx vitest run -t "test name"
Jestexpect(x).toBe(y)npx jest -t "test name"
pytestassert x == ypytest -k "test_name"
cargo testassert_eq!(x, y)cargo test test_name
go testt.Errorf(...)go test -run TestName

Common TDD Pitfalls

PitfallFix
Testing implementation detailsTest behavior (outputs), not internals (private methods)
One test for 10 behaviorsSplit into atomic test cases
Mock everything (over-mocking)Mock at system boundaries only (DB, HTTP, filesystem)
No triangulationWrite 2-3 tests that force the correct implementation to emerge
Untriangulated constantsreturn 42 passes one test — add a second test to force real logic

See Also

  • @test-engineer — test strategy, framework detection, coverage gap analysis
  • /ultraqa — QA cycling: test, verify, fix, repeat
  • /verify — evidence-based completion verification

When not to use it

  • When code has already been written before a test
  • When a test passes on its first run without prior code
  • When multiple behaviors are tested in one test

Limitations

  • Requires tests to be written first
  • Requires one test per behavior
  • Requires refactoring after each green phase

How it compares

This skill enforces a strict TDD cycle, ensuring tests are written before implementation and code is refactored continuously, unlike a traditional code-first approach.

Compared to similar skills

tdd side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
tdd (this skill)03moNo flagsBeginner
python-testing-patterns772moReviewIntermediate
dependency-upgrade264moReviewIntermediate
test-cases576moNo flagsBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry