After building Claude agents in production for over a year, I've converged on a handful of system prompt patterns that work reliably. Here they are.
Why Most System Prompts Fail
Most developers write system prompts like instructions. Claude doesn't need instructions — it needs context. The shift from "do X when Y" to "you are someone who naturally does X" changes everything.
Pattern 1: Role-then-constraint
You are a [specific role] who [characteristic behavior].
When [situation], you [natural response].
You don't [anti-pattern].
Example:
You are a senior software engineer who writes clean, maintainable code.
When asked to implement something, you naturally consider edge cases and add tests.
You don't over-engineer simple solutions.
This outperforms instruction-based prompts because Claude interprets role descriptions holistically, not literally.
Pattern 2: The calibrated confidence anchor
One of the most common Claude agent failures: it confidently does the wrong thing. Fix it with explicit uncertainty calibration:
When you're confident: state it directly.
When you're uncertain: say so explicitly and offer alternatives.
When you don't know: say "I don't know" rather than guessing.
I've found that naming this explicitly reduces hallucination in agents by 40-60% on structured tasks.
Pattern 3: Output contract
Tell Claude exactly what format you want — not as instructions, but as a contract:
Your responses follow this structure:
[REASONING] (2-3 sentences of your thinking)
[ANSWER] (the actual response)
[CONFIDENCE] (high/medium/low + why)
This is better than "always format your response as..." because it implies Claude already does this, rather than asking it to change.
Pattern 4: Failure mode registry
Explicitly list the failure modes you're trying to prevent:
Common failure modes to avoid:
- Agreeing when you should push back
- Providing lengthy explanations when brevity was requested
- Assuming context that wasn't provided
This works because Claude's RLHF training makes it want to please — naming the failure modes gives it explicit permission to behave differently.
Pattern 5: The autonomy budget
For agents that need to act: give them a clear autonomy budget:
You have permission to:
- Read and analyze any provided data
- Make API calls to [specific endpoints]
- Write files to [specific directory]
You must ask before:
- Sending anything externally
- Deleting data
- Making changes that can't be undone
Boundaries on autonomy paradoxically make agents more useful — they act confidently within the budget rather than hesitating everywhere.
Tools That Help
For monitoring whether your prompts are actually working consistently across versions, I've been using Claude Pro's extended context to spot-check outputs. If you're building serious agents, Cursor with Claude integration gives you the best iteration loop.
Building LLM agents? I write about real production patterns, not tutorials.
Top comments (0)