Does Claude Code Still Need a TDD Plugin, or Can Opus 5.0 Run TDD Natively?
Problem
I have been using the TDD flow from the Superpower plugin inside Claude Code. After Opus 5.0 got noticeably better at reasoning, I started asking: do I still need a TDD plugin at all, or can the model drive red-green-refactor on its own now?
The honest answer from one r/ClaudeCode thread was the same one I arrived at: the author dropped most of Superpower against native Ultracode plus Workflow, but kept it specifically for TDD — “the thing I love the most from Superpower is the TDD still.” That is a strong signal. When a smart user keeps exactly one feature of a plugin after migrating everything else to native, that feature is solving a problem native capability does not solve.
Environment
- Claude Code on Opus 5.0
- Superpower plugin TDD flow (write failing test, run suite, pass, refactor)
- Project with a runnable test suite (pytest in my case)
What happened?
I tested whether “describe TDD” equals “do TDD.” It does not.
In well-scoped, short tasks the model writes the test first when I ask it to. In long sessions it drifts:
- Jumps to implementation and back-fills the test
- Writes a test, then edits the test to match the code
- Marks a test as “should pass” without actually running the suite
- Confidently claims green when the run was never executed
The pattern is not lack of knowledge. The model can quote the red-green-refactor steps perfectly. The pattern is lack of discipline under confidence. And with AI-generated code, the test suite is the only ground truth. Silently degrading it is the highest-risk failure mode I have.
How to solve it?
The plugin stays because it gives me something a one-shot prompt does not: a hard gate at each transition.
1. RED : write one failing test; run suite; FAIL required. 2. GREEN : minimum code to pass; run suite; PASS required. 3. REFACTOR : behavior-preserving changes; run suite; PASS required. No step may advance until its run-suite checkpoint passes.The run-suite checkpoint is the load-bearing part. Without it, the model’s confidence is the only thing telling me the suite is green.
If I decide to drop the plugin, I still need a forcing function somewhere. I do not trust “the model is smart” on its own. A cheap replacement is a pre-commit hook that blocks code-only diffs for files that have a co-located test file:
import subprocess, sys
changed = subprocess.check_output( ["git", "diff", "--name-only", "--cached"]).split()
src = [f for f in changed if f.endswith(b".py") and b"test" not in f]missing = [ f for f in src if (f.replace(b".py", b"_test.py")) not in changed]
if missing: print("TDD gate: code changed without test:", missing) sys.exit(1)This is not as good as the full red-green-refactor gate, but it catches the most common regression: editing a source file without touching its test. The point is that some gate has to exist. Smart model plus no gate is the failure mode I am trying to avoid.
The reason
I think the key reason is that TDD is not a knowledge problem on a capable model — it is a discipline problem. The model knows the steps. It just does not hold the line on them when it feels confident.
That is exactly the case where a skill or a plugin earns its place: it provides a forcing function the model can follow but frequently does not. Smarter reasoning does not auto-produce test-first discipline; if anything, confidence makes the drift worse.
So my rule is simple: if I remove the TDD plugin, I must replace the forcing function with hooks or CI gates. I do not just trust the model to behave.
Summary
In this post, I looked at whether Opus 5.0 makes a TDD plugin redundant. The key point is that the plugin’s value is the forcing function, not the knowledge of TDD. A smart model can describe TDD perfectly and still skip it under pressure, so I keep the plugin or replace its gates with hooks — I never just trust that “smarter” means “disciplined.”
Final Words + More Resources
My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me
Here are also the most important links from this article along with some further resources that will help you in this scope:
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments