Why Your AI Pair Programmer Is Too Passive — and How to Fix It
Problem
After applying Karpathy’s 4 CLAUDE.MD clauses, I expected Claude Code to become a disciplined pair programmer. Instead, it became a compliant code typist. It followed every instruction literally, never questioned my approach, and never suggested better alternatives.
My AI assistant had become passive. It was generating code on demand, not collaborating.
What happened?
I set up the 4 clauses exactly as prescribed:
1. **Ask, don't assume.**2. **Simplest solution first.**3. **Don't touch unrelated code.**4. **Flag uncertainty explicitly.**Claude Code asked clarifying questions (clause 1), wrote minimal code (clause 2), stayed focused (clause 3), and flagged uncertainty (clause 4). But it never pushed back. When I asked for a suboptimal implementation, it just said “ok” and wrote it.
Real pair programming involves productively disagreeing. A human pair programmer would say “that approach won’t scale” or “have you considered using a task queue instead?” My AI assistant stayed silent.
The root cause was clear: Karpathy’s rules were designed for unreliable models where compliance is the priority. For capable models, these rules are too restrictive — they silence the critical thinking that makes AI assistants valuable.
How to fix it
The fix is remarkably simple. Add a 5th clause that explicitly gives the AI permission to challenge your decisions:
5. **I'm always open to ideas on better ways to do things.** Please don't hesitate to suggest a better way, or one that has long lasting impact over a tactical change.One sentence. But the behavior change is dramatic.
Before and after
Without the 5th clause:
Me: “Add a new endpoint to fetch user data. Just dump the raw database rows.”
Claude: “Here’s the code…”
With the 5th clause:
Me: “Add a new endpoint to fetch user data. Just dump the raw database rows.”
Claude: “Here’s what you asked for, but have you considered paginating the results and using a DTO instead of raw rows? Dumping raw database rows creates coupling between your API and storage schema. If you want a quick solution I’ll do it your way, but I think a paginated endpoint with a response DTO is more maintainable.”
The difference is night and day. The AI still does what I ask, but it also provides the design feedback I was missing.
Community refinement
The r/ClaudeAI community took this idea further. User Osi32’s post sparked a 94-comment discussion that evolved all 5 clauses:
1. **Ask, don't assume.** When running unattended, pick the most reasonable interpretation, proceed, and record the assumption rather than blocking.
2. **Implement simplest for simple, better for harder problems.** Don't over-engineer, but don't force simplicity when complexity is warranted.
3. **Don't touch unrelated code but do surface code smells.** Point out bad patterns, even if you won't fix them right now.
4. **Flag uncertainty ... conduct small experiments when appropriate.** If unsure, run a quick test and bring hypothesis + results.
5. **Always open to better ideas.** Suggest alternatives, especially ones with long-lasting impact over tactical changes.Notice clause 3 changed from “don’t touch unrelated code” to “don’t touch unrelated code but do surface code smells.” This is crucial — you want the AI to notice design issues, even if it doesn’t fix them in the current task.
Summary
In this post, I showed why adding a 5th “permission to challenge” clause transforms Claude Code from a passive code generator into an active pair programmer. The key point is that capable AI models need both safety constraints and collaboration enablers. One sentence in your CLAUDE.MD can make the difference between an assistant that just writes code and one that helps you write better code.
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