with one click
tdd
Follow strict Test Driven Development with small incremental steps
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Follow strict Test Driven Development with small incremental steps
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra, wenyan-lite, wenyan-full, wenyan-ultra. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.
Move a config file into the ~/dotfiles repo, symlink it back to its original location, and update SETUP_MACOS.md so a fresh machine reproduces the setup. Use when the user says "port this to dotfiles", "track X in dotfiles", "let's save these settings to the dotfiles repo", or after editing a config that isn't yet under `~/dotfiles/`.
Port a Neovim colorscheme to a matching Ghostty theme so that switching colorschemes in nvim live-updates Ghostty. Use when the user installs a new nvim colorscheme and wants Ghostty to follow, or asks "add X to ghostty themes", "port X to ghostty", or `:colorscheme X` produces a mismatch with the terminal.
Fetch GitHub PR comments for the current branch to refresh context
Fetch Linear ticket context from the current git branch
Refresh context after manual file updates
| name | tdd |
| description | Follow strict Test Driven Development with small incremental steps |
Follow Test Driven Development (TDD) strictly for all code changes. Work in the smallest possible increments.
For each task, follow this cycle exactly:
Red - Write a single failing test that defines the expected behavior
Green - Write the minimal code to make the test pass
Refactor - Clean up while keeping tests green
Do NOT mark a task complete until the quality gates for this project have passed.
nx test fan-out, ExUnit --repeat-until-failure).After a task is marked done, stop and wait for the user to review the output before starting the next task. This applies even in auto-accept or "accept edits" mode — never chain tasks without an explicit go-ahead from the user.
Once the user approves, they will commit the changes manually to create a checkpoint. Do not commit on their behalf.
Before starting the next task, explicitly assess refactoring opportunities against the just-committed checkpoint: duplication introduced, naming that no longer fits, abstractions that want to emerge, dead scaffolding. Surface what you'd refactor (or state that nothing warrants it) before moving on. With a clean checkpoint behind you, refactors are cheap to try and easy to roll back.
toThrow() / rejects.toThrow(). Always match against a specific error so the test fails when the wrong thing throws. Match the most legible specific signal available: a custom error class, a message regex, or — for DB errors — the pg DatabaseError fields (code, plus table / column / constraint when present). Prefer named/structured fields over a cryptic code alone, e.g. rejects.toMatchObject({ code: '23502', table: '...', column: '...' }) over rejects.toMatchObject({ code: '23502' }).pg code, plus constraint / table / column), so a test for one violation can't pass on a different one. A generic match is a false pass waiting to happen.find*) and assert on that too — a method can return the right shape without actually persisting it (or persist different values than it returns).find* / get*), set up the scenario with the factory / DB-helper insert utility — never with the repository's own create. Using create couples the read test to write behavior, so a bug in create fails the read test (and vice versa); seeding directly isolates the method under test.Prefer an outside-in approach: start from the user-facing behavior and drive inward with integration tests. Reach for unit tests only when an integration test can't reasonably cover the branch (complex pure logic, hard-to-reach edge cases).