TDD Workflow
hellangleZ/burn-in-cceverywhere-ralph
A skill your agent uses when writing new features, fixing bugs, or refactoring code.
Comprehensive TDD patterns and practices for all programming languages, eliminating redundant testing guidance per agent.
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bobmatnyc/claude-mpm test-driven-development --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .claude/skills/test-driven-development && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .claude/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-developmentType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bobmatnyc/claude-mpm test-driven-development --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .agents/skills/test-driven-development && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .agents/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bobmatnyc/claude-mpm test-driven-development --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .cursor/skills/test-driven-development && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .cursor/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/bobmatnyc/claude-mpm.git --path plugin/skills/universal-testing-test-driven-development--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bobmatnyc/claude-mpm test-driven-development --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .gemini/skills/test-driven-development && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .gemini/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install bobmatnyc/claude-mpm test-driven-developmentInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .github/skills/test-driven-development && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .github/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bobmatnyc/claude-mpm test-driven-development --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bobmatnyc/claude-mpm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugin/skills/universal-testing-test-driven-development .opencode/skills/test-driven-development && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-driven-development" agent skill from https://github.com/bobmatnyc/claude-mpm/tree/main/plugin/skills/universal-testing-test-driven-development into .opencode/skills/test-driven-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-driven-development", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-driven-developmentComprehensive TDD patterns and practices for all programming languages, eliminating redundant testing guidance per agent.
Test Driven Development is an agent skill from bobmatnyc/claude-mpm. Comprehensive TDD patterns and practices for all programming languages, eliminating redundant testing guidance per agent.
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files (for example `.etag_cache.json`, `metadata.json` and `references/.etag_cache.json`). Compatibility notes: claude-code
It sits in Testing & QA, covering Test-driven development and Unit testing. The repository describes itself as: Claude Multi-Agent Project Manager — multi-channel orchestration, GitHub-first SDK mode, and plugin system for Claude. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 25203d3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python, javascript and go).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
claude-code
From compatibility in the SKILL.md frontmatter.
Test Driven Development loads about 2.5k tokens when it runs, and up to ~20k if it reads all its reference files. Until then it costs about 36 tokens; SKILL.md has 383 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from bobmatnyc/claude-mpm at commit 25203d3, republished under its Apache-2.0 licence (© bobmatnyc). 383 words, ~2,471 tokens.
.claude/skills/test-driven-development/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Comprehensive TDD patterns and practices for all programming languages. This skill eliminates ~500-800 lines of redundant testing guidance per agent.
Apply TDD for:
Write a test that:
- Describes the desired behavior
- Fails for the right reason (not due to syntax errors)
- Is focused on a single behaviorWrite the minimum code to:
- Pass the test
- Not introduce regressions
- Follow existing patternsWhile keeping tests green:
- Remove duplication
- Improve naming
- Simplify logic
- Extract functions/classes// Arrange: Set up test data and conditions
const user = createTestUser({ role: 'admin' });
// Act: Perform the action being tested
const result = await authenticateUser(user);
// Assert: Verify the outcome
expect(result.isAuthenticated).toBe(true);
expect(result.permissions).toContain('admin');Given: A user with admin privileges
When: They attempt to access protected resource
Then: Access is granted with appropriate permissionstest_should_<expected_behavior>_when_<condition>Examples:
test_should_return_user_when_id_exists()test_should_raise_error_when_user_not_found()test_should_validate_email_format_when_creating_account()Python (pytest):
def test_should_calculate_total_when_items_added():
# Arrange
cart = ShoppingCart()
cart.add_item(Item("Book", 10.00))
cart.add_item(Item("Pen", 1.50))
# Act
total = cart.calculate_total()
# Assert
assert total == 11.50JavaScript (Jest):
describe('ShoppingCart', () => {
test('should calculate total when items added', () => {
const cart = new ShoppingCart();
cart.addItem({ name: 'Book', price: 10.00 });
cart.addItem({ name: 'Pen', price: 1.50 });
const total = cart.calculateTotal();
expect(total).toBe(11.50);
});
});Go:
func TestShouldCalculateTotalWhenItemsAdded(t *testing.T) {
// Arrange
cart := NewShoppingCart()
cart.AddItem(Item{Name: "Book", Price: 10.00})
cart.AddItem(Item{Name: "Pen", Price: 1.50})
// Act
total := cart.CalculateTotal()
// Assert
if total != 11.50 {
t.Errorf("Expected 11.50, got %f", total)
}
}Stub: Returns predefined data
def get_user_stub(user_id):
return User(id=user_id, name="Test User")Mock: Verifies interactions
mock_service = Mock()
service.process_payment(payment_data)
mock_service.process_payment.assert_called_once_with(payment_data)Fake: Working implementation (simplified)
class FakeDatabase:
def __init__(self):
self.data = {}
def save(self, key, value):
self.data[key] = value
def get(self, key):
return self.data.get(key)# Good: Focused test
def test_should_validate_email_format():
assert is_valid_email("user@example.com") is True
# Avoid: Multiple unrelated assertions
def test_validation():
assert is_valid_email("user@example.com") is True
assert is_valid_phone("123-456-7890") is True # Different concept# Good: Each test is self-contained
def test_user_creation():
user = create_user("test@example.com")
assert user.email == "test@example.com"
# Avoid: Tests depending on execution order
shared_user = None
def test_create_user():
global shared_user
shared_user = create_user("test@example.com")
def test_update_user(): # Depends on previous test
shared_user.name = "Updated"# Good: Clear failure message
assert result.status == 200, f"Expected 200, got {result.status}: {result.body}"
# Avoid: Unclear failure
assert result.status == 200# Good: Reusable test data creation
def create_test_user(**overrides):
defaults = {
'email': 'test@example.com',
'name': 'Test User',
'role': 'user'
}
return User(**{**defaults, **overrides})
# Usage
admin = create_test_user(role='admin')
guest = create_test_user(email='guest@example.com')# Bad: Tests internal structure
def test_user_storage():
user = User("test@example.com")
assert user._internal_cache is not None # Implementation detail# Bad: Breaks with harmless changes
assert user.to_json() == '{"name":"John","email":"john@example.com"}'
# Good: Tests behavior, not format
data = json.loads(user.to_json())
assert data['name'] == "John"
assert data['email'] == "john@example.com"# Bad: Real HTTP calls in unit tests
def test_api_integration():
response = requests.get("https://api.example.com/users") # Slow!
assert response.status_code == 200# Bad: Testing business logic through UI
def test_calculation():
browser.click("#input1")
browser.type("5")
browser.click("#input2")
browser.type("3")
browser.click("#calculate")
assert browser.find("#result").text == "8"
# Good: Test logic directly
def test_calculation():
assert calculate(5, 3) == 8# Setup/Teardown
@pytest.fixture
def database():
db = create_test_database()
yield db
db.cleanup()
# Parametrized tests
@pytest.mark.parametrize("input,expected", [
("user@example.com", True),
("invalid-email", False),
])
def test_email_validation(input, expected):
assert is_valid_email(input) == expected// Setup/Teardown
beforeEach(() => {
database = createTestDatabase();
});
afterEach(() => {
database.cleanup();
});
// Async tests
test('should fetch user data', async () => {
const user = await fetchUser(1);
expect(user.name).toBe('John');
});// Table-driven tests
func TestEmailValidation(t *testing.T) {
tests := []struct {
input string
expected bool
}{
{"user@example.com", true},
{"invalid-email", false},
}
for _, tt := range tests {
result := IsValidEmail(tt.input)
if result != tt.expected {
t.Errorf("IsValidEmail(%s) = %v, want %v",
tt.input, result, tt.expected)
}
}
}When using Test Driven Development, these skills enhance your workflow:
[Full documentation available in these skills if deployed in your bundle]
© bobmatnyc, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (references) in plugin/skills/universal-testing-test-driven-development of bobmatnyc/claude-mpm.
Open the folder on GitHubat commit 25203d3
Test Driven Development next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Driven Development this skillbobmatnyc/claude-mpm | 155 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph | 112 | 11 repos | ~2.4k | Automated safety check: Pass | None | |
| TDD Workflowaffaan-m/ECC | 275k | 3 repos | ~2k | Automated safety check: Pass | MIT | |
| TDD Workflowaffaan-m/ECC | 275k | 2 repos | ~2k | Automated safety check: Pass | MIT | |
| TDD Workflowaffaan-m/ECC | 275k | 2 repos | ~2.1k | Automated safety check: Pass | MIT | |
| TDD Workflowaffaan-m/ECC | 275k | 1 repos | ~2.6k | Automated safety check: Pass | MIT |
hellangleZ/burn-in-cceverywhere-ralph
A skill your agent uses when writing new features, fixing bugs, or refactoring code.
affaan-m/ECC
在编写新功能、修复错误或重构代码时使用此技能。强制执行测试驱动开发,确保单元测试、集成测试和端到端测试的覆盖率超过80%。
affaan-m/ECC
新機能の作成、バグ修正、コードのリファクタリング時にこのスキルを使用します。ユニット、統合、E2Eテストを含む80%以上のカバレッジでテスト駆動開発を強制します。
affaan-m/ECC
새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. An agent skill from affaan-m/ECC.
affaan-m/ECC
Yeni özellikler yazarken, hata düzeltirken veya kod refactor ederken bu skill'i kullanın.
hamzafarooq/claude-code-starter
Write unit tests for any function — happy path, edge cases, and error cases.
bobmatnyc/claude-mpm
Create high-quality MCP servers that enable LLMs to effectively interact with external services.
bobmatnyc/claude-mpm
Environment variable validation, synchronization, and management across local development, CI/CD, and deployment platforms
bobmatnyc/claude-mpm
Debug and teach agentic coding: a deterministic-first session timeline + cost report, with optional narrative polish and a standalone JSX visualiser.
bobmatnyc/claude-mpm
Decision framework for architectural patterns including DI, SOA, Repository, Domain Events, Circuit Breaker, and Anti-Corruption Layer.
bobmatnyc/claude-mpm
Run verification commands and confirm output before claiming success
bobmatnyc/claude-mpm
Dependency audit and cleanup workflow for maintaining healthy project dependencies.
Categories
Comprehensive TDD patterns and practices for all programming languages, eliminating redundant testing guidance per agent. Test Driven Development is an agent skill from bobmatnyc/claude-mpm. Comprehensive TDD patterns and practices for all programming languages, eliminating redundant testing guidance per agent.
Test Driven Development fits situations like: tasks that involve Test-driven development; tasks that involve Unit testing.
Run `npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a claude-code`. Or copy the skill folder (plugin/skills/universal-testing-test-driven-development in bobmatnyc/claude-mpm) into .claude/skills/test-driven-development in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a codex`. Or copy the skill folder (plugin/skills/universal-testing-test-driven-development in bobmatnyc/claude-mpm) into .agents/skills/test-driven-development in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add bobmatnyc/claude-mpm --skill test-driven-development -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-driven-development, .gemini/skills/test-driven-development, .github/skills/test-driven-development and .opencode/skills/test-driven-development in your project.
SKILL.md names no scripts, command-line tools or credentials: Test Driven Development is instructions for the agent only. Our summary lists: Python 3. Compatibility (from SKILL.md): claude-code.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Test Driven Development is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 17k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Test Driven Development: TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), TDD Workflow (affaan-m/ECC, 275k stars), TDD Workflow (affaan-m/ECC, 275k stars) and TDD Workflow (affaan-m/ECC, 275k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bobmatnyc (a GitHub user) maintains it in bobmatnyc/claude-mpm, which has 155 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on August 31, 2026.
Source: bobmatnyc/claude-mpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.