Why Claude Sonnet Is More Proactive Than DeepSeek V4 (And How to Fix It)
Problem
When I switched from Claude Sonnet to DeepSeek V4 for coding, I noticed something frustrating: DeepSeek just answers the question. No alternatives. No “have you considered…” No next steps. Sonnet felt like a senior dev who anticipates problems; DeepSeek felt like a junior who only does what you ask.
I’m not alone. On the r/opencodeCLI subreddit, many developers reported the same experience:
“Sonnet 4.6 is a LOT more conversational and proactive. Sonnet will more often than not suggest alternatives and/or next steps… while DSV4-Pro will just tell you the problem exists.”
So I dug into why this happens. The answer surprised me.
What’s Really Going On
Here’s the key insight: Sonnet’s proactivity is not a model feature — it’s a harness feature.
What do I mean by “harness”? Every AI coding assistant has three layers:
┌─────────────────────────────────────────────┐│ User Experience ││ "The AI suggested alternatives!" ││ "The AI just answered the question." │└──────────────────┬──────────────────────────┘ │┌──────────────────▼──────────────────────────┐│ Harness / System Prompt Layer ││ - Tool orchestration rules ││ - "Always suggest alternatives" ││ - "Propose next steps after each task" ││ - Conversation formatting rules │└──────────────────┬──────────────────────────┘ │┌──────────────────▼──────────────────────────┐│ Base Model (LLM) ││ - Sonnet 4.6 / DeepSeek V4 Pro / etc. ││ - Generates tokens based on instructions │└─────────────────────────────────────────────┘When you use Claude Code, the harness layer includes system prompts that instruct the model to be proactive — suggest alternatives, flag issues, propose next steps. When you call the Sonnet API directly, without that harness, it behaves much like DeepSeek V4.
One Reddit user confirmed this:
“You are correct about Claude’s harness, not the Sonnet model. Both models behave almost exactly the same if you use Sonnet directly from LLM API calls.”
So the proactivity gap is mostly a prompt engineering gap, not a model intelligence gap.

How to Make DeepSeek V4 More Proactive
The fix is straightforward: write explicit system prompts that tell DeepSeek to behave proactively.
Solution #1: Add a Proactive System Prompt
You are a coding assistant. After completing each task:1. Suggest 2-3 alternative approaches with pros/cons2. Identify potential issues or edge cases3. Propose logical next steps4. If the user's request is ambiguous, ask clarifying questions before proceeding
Format your suggestions as:- **Alternative**: [description] — [why consider this]- **Next step**: [what to do next] — [reason]I tried this with DeepSeek V4 Pro. Before adding the system prompt, a typical interaction looked like:
Me: Refactor the database connection pool
DeepSeek: Here's the refactored code:[outputs code]
(End of response. No suggestions, no warnings.)After adding the proactive system prompt:
Me: Refactor the database pool
DeepSeek: Here's the refactored code:[outputs code]
- **Alternative**: Use HikariCP instead of the built-in pool — better performance under high concurrency- **Alternative**: Switch to a connection-per-request pattern — simpler but may not scale as well- **Next step**: Add pool size monitoring — you'll want to tune the pool size based on actual usageThe difference is night and day.

Solution #2: Configure Your Tool’s Skills
If you use a tool like Pi (opencodeCLI), you can configure skills that trigger proactive behavior automatically:
skills: proactive-suggestions: model: deepseek-v4-pro system_prompt: | After answering, always suggest: 1. Alternative approaches 2. Potential issues 3. Next steps trigger: after_each_responseThis way, you don’t need to repeat the instruction in every message. The skill applies it automatically.
Important: Use Pro, Not Flash
One thing I learned the hard way: DeepSeek V4 Pro follows complex system prompt instructions well, even in its reasoning tokens. Flash is less consistent with multi-step behavioral instructions.
If you need the model to reliably follow a proactive system prompt, use Pro. Flash works fine for simple tasks, but it often “forgets” to apply the proactive format when the main task gets complicated.

The Remaining Gap: Intent Guessing
There’s one area where Sonnet genuinely outperforms DeepSeek V4: guessing what you mean when your prompt is vague.
One Reddit user ranked models by intent-guessing ability:
Opus 4.6 >> Sonnet 4.6 ≳ DSV4 Pro ≳ GPT 5.5 > Gemini 3.1 Pro ~ DSV4 Flash > Gemini 3.5 FlashThis is subjective, but it matches my experience. When I give Sonnet a messy brain dump like “make the auth thing work with the redirect from the login page that sometimes fails”, Sonnet turns it into a clear action plan. DeepSeek asks me to clarify.
This isn’t a flaw — it’s a different design philosophy. DeepSeek is more conservative and literal. The fix here is simple: write clearer prompts. If you’re switching from Sonnet to DeepSeek, invest a few extra seconds in your prompts. It pays off.
Common Mistakes
When I first evaluated DeepSeek V4, I made these mistakes:
- Attributing harness behavior to the model — I assumed Sonnet was “smarter” because it suggested alternatives. In reality, Claude Code’s system prompt was doing the heavy lifting.
- Not writing system prompts for DeepSeek — I used the default and then complained it was less helpful. That’s like driving a car without power steering and blaming the car.
- Using vague prompts — DeepSeek needs more explicit instructions than Sonnet. A brain dump works with Sonnet; DeepSeek wants specifics.
- Expecting Flash to follow behavioral instructions — Flash is fast but doesn’t consistently apply complex system prompt rules. Use Pro for this.
Summary
In this post, I explained why Claude Sonnet feels more proactive than DeepSeek V4 and how to fix it. The key point is that Sonnet’s proactivity comes from the Claude Code harness (system prompt + tool orchestration), not from the model itself. You can replicate this behavior in DeepSeek V4 Pro by writing explicit system prompts that instruct it to suggest alternatives, flag issues, and propose next steps. The one remaining gap is intent guessing — Sonnet is better at understanding vague prompts, so write clearer instructions for DeepSeek.
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:
- 👨💻 Reddit Discussion: OpencodeCLI Sonnet vs DeepSeek
- 👨💻 DeepSeek V4 Official
- 👨💻 Claude Code Documentation
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments