A system prompt that states a goal ("flag inappropriate messages", "summarise professionally", "be conservative") without the criteria behind it leaves Claude to infer a threshold on every single call, and an inferred threshold drifts between similar cases — not because the model is unreliable, but because you never actually told it where the line is. Two requests that a human would judge identically can get different verdicts because the prompt left the actual decision rule unstated.
The fix isn't a longer, more earnest-sounding prompt. It's explicit, categorical criteria: what specifically counts, what specifically doesn't, and what to do with the cases in between. Compare:
Wrong: "Review this code. Be conservative. Only report high-confidence findings."
Right: "Report: bugs, security vulnerabilities, logic errors.
Skip: style preferences, formatting choices, local naming patterns.
Flag a comment only when the claimed behaviour contradicts the actual code behaviour."The first sentence gives the model nothing to apply consistently — "conservative" and "high-confidence" are both undefined thresholds that the model has to invent for itself, and it will invent a slightly different one each time depending on the surrounding context. The second gives concrete report/skip categories and a specific, checkable trigger condition. It's also considerably shorter. Length was never the lever — specificity is.
Precision vs. recall: pick a side on purpose
Almost every classification-shaped system prompt (flagging, extraction, routing, moderation) is making a precision/recall trade-off whether you name it or not. Naming it is what makes it a design decision instead of an accident. "When in doubt, don't flag" biases toward precision (fewer false positives, more missed cases); "when in doubt, flag for review" biases toward recall (fewer missed cases, more false alarms that a human has to clear). Neither is universally correct — a spam filter and a fraud-detection trigger want opposite defaults — but leaving the choice implicit means the model picks inconsistently on a case-by-case basis, which is worse than picking either side deliberately.
Say the trade-off out loud in the prompt: name at least one borderline case explicitly and state which way to err on it. "Sarcastic complaints framed as jokes: treat as a genuine complaint, not as banter" resolves an entire category of inconsistency that no amount of general wording about being "careful" or "thoughtful" would touch.
The false-positive trust problem
When a system prompt defines multiple output categories (e.g. a code-review tool that flags "security", "correctness", and "documentation" issues, or a support triage prompt that tags "billing", "technical", and "account" tickets), a high false-positive rate in one category poisons trust in all of them for the humans reading the output. If your documentation-mismatch findings are wrong 40% of the time, reviewers stop reading your security findings too, even if those run at 98% precision — trust isn't scoped per-category, it's scoped per-source.
The counterintuitive fix: when a category's false-positive rate is out of line, temporarily disable that category in the system prompt (stop asking Claude to report on it at all) while you rework its criteria with concrete examples, rather than leaving it half-broken alongside categories that already work. Trust in the working categories recovers immediately; you re-enable the reworked category once its precision improves. This is a system-prompt maintenance pattern the exam expects you to recognise, not just a one-off fix.
Calibrate with examples, not adjectives
When criteria involve severity or a graded scale, a prose description of each level ("critical: could cause data loss"; "minor: a style nit") still forces the model to interpret where a given real case lands. A concrete example per level is more decidable: showing an actual unsanitised-SQL-query snippet labelled "critical" and an inconsistent-variable-naming snippet labelled "minor" removes the interpretation step entirely — the model pattern-matches against a known instance instead of reasoning about the definition of "could cause data loss" from scratch each time. This is the same principle as few-shot prompting (4.3), applied specifically to calibrating a threshold rather than a format.
Common exam distractor
"Only report high-confidence findings" reads like sound engineering — filter by confidence, keep the strong signals — but a model's self-reported confidence is poorly calibrated: it can be confidently wrong and hesitantly right. Confidence-based routing (sending low-confidence findings to a human) is a legitimate secondary technique once explicit criteria already exist; it is never a substitute for defining what counts as a valid finding in the first place. The exam tests this ordering directly.
Key concept
If you can't write down the criteria a human reviewer would actually use to judge a borderline case, the model can't reliably infer it either — the ambiguity in the prompt becomes inconsistency in the output. Explicit criteria beat prompt length every time; a short prompt with a decidable rule outperforms a long prompt that's still vague about the actual threshold.