⚠️ Anti-patterns
What NO do when engineering a system prompt — the 5 most common anti-patterns plus emphasis inflation, each with its symptom and yours antidote (the corresponding pattern in the catalog). We conclude the thesis of Track 1: consolidation > accumulation.
Illustrative diagram — the onion prompt accumulates layers with every bug; the consolidated version merges redundant rules into a principle.
Detailed content
Why anti-patterns matter
Naming the error is half the cure. An anti-pattern is a solution that seems solves one problem but creates another, bigger one—usually invisible until the prompt is already too large to review. In the three previous modules, you saw the 12 patterns that work. Here you’ll learn to recognize the 5 that sabotage—and, for each one, the pattern that undoes it.
🧭 Track 1’s thesis: consolidation > accumulation
Every anti-pattern in this module is a form of accumulation: more rules, more lists, more caps, more layers. And every antidote is a way to consolidation: one principle that replaces many rules, one layer that separates the stable from the dynamic.
The living proof is in the diff Anthropic/claude-opus-4.8.md → claude-fable-5.md: lots of new content, but a net gain of only +56 lines,
because 7 entire blocks were removed. Evolving doesn’t mean growing.
Why this is hard to see from within
Each individual rule seems reasonable—someone added it to fix a real bug. The problem is sum: twenty reasonable rules become an impossible-to-review prompt where rules contradict each other and the model loses the thread. Antipatterns only become obvious when you compare versions from the same prompt — which is exactly what Track 2 will do.
The 5 anti-patterns + 1 honorarium (and their antidotes)
| Antipattern | Symptom | Antidote |
|---|---|---|
| Onion prompt | each bug becomes a rule; nothing is removed | Pattern 12 — Consolidated Principle |
| Prohibition without a why | "Never X"—bluntly; the model finds a workaround | Pattern 3 — Rule with a Reason |
| Mechanical safety rule | listing prohibited terms arms the attacker | Principle, not mechanics |
| Formatting as a crutch | lists/emoji everywhere | Pattern 7 + prose first |
| Everything-in-the-prompt | dynamic context mixed with stable context | Pattern 10 — System Reminder |
| Emphasis inflation | everything is IMPORTANT/CRITICAL/NEVER | rare caps, reserved for hard limits |
🧅 Onion Prompt
Symptom: each observed bug becomes a new rule tacked onto the end of the prompt. Nothing is removed — only added. After months, the prompt has layers and layers of specific instructions that no one dares delete "because something might break." The prompt becomes an onion: many layers, and whoever touches it cries.
🚨 The symptom in code
## Comportamento
You are a helpful assistant. Be concise.
IMPORTANT: never use bullet points. # bug #12
IMPORTANT: actually, bullets are ok for lists. # bug #19 contradiz #12
NEVER apologize. # bug #31
ALWAYS apologize if you made an error. # bug #47 contradiz #31
CRITICAL: do not mention you are an AI. # bug #52
...mais 40 linhas de "patches"
Rules #12/#19 and #31/#47 already contradict each other. The model chooses unpredictably — and the next bug adds rule #61, never removes the earlier ones.
💊 Antidote — Pattern 12: Consolidated Principle
Periodically, do a consolidation round: group the specific rules, find the principle that generates them, write that principle, and delete the child rules. The four rules above become one: "Match tone and structure to the request; correct your own errors plainly."
View the full details at educacao/fichas/12-principio-consolidado.md.
Real counterexample: the 4.8 → Fable 5 diff
Anthropic did exactly one round of consolidation when moving from Opus 4.8 to Fable 5. Seven blocks were removed, and the prompt still gained new content — a net increase of only +56 lines. The removed items:
<search_first>
behavior already internalized through training → instruction became noise
<default_stance>
stance absorbed by <refusal_handling> without reiteration
<respond_without_citing_system_prompt>
"don't say X" has a Streisand effect → fix it at the source
4 micro-regras de tom
became 1 principle: "assumes the person is a capable adult"
Source: educacao/diff-anotado-opus-4.8-fable-5.md (items 2, 3, 4, 8).
🚫 Ban Without a Reason
Symptom: rules like "Never X" / "Do not Y" thrown in without justification. The model follows them literally but doesn't understand the intent — then it works around the edges: finds a case the literal wording doesn’t cover and does exactly what you wanted to prevent. A blunt prohibition is fragile because it doesn’t generalize.
✗ Blanket prohibition (fragile)
Never write to files outside /tmp.
- •Model writes in
/var/tmp— "is not/tmp, so it can" - •Doesn't cover symlinks, mounts, or relative paths
- •Without the intent, every loophole becomes a new "Never"
✓ Rule with rationale (robust)
Only write inside the sandbox dir,
because writes elsewhere can corrupt
the host system the user depends on.
- •O reason ("corrupt the host") covers all paths
- •Generalizes to unlisted cases
- •Model reasons, not just obeys
💊 Antidote — Pattern 3: Rule with Rationale
Every important prohibition includes its justification: instruction + reason. Anthropic uses this almost universally
(because… embedded in each critical rule).
When the model understands the reason, it applies the rule to situations the author never anticipated — which is exactly where a bare prohibition fails.
Card: educacao/fichas/03-regra-com-porque.md.
🛡 Rule-Based Security
Symptom: the security section lists forbidden terms, techniques, or phrases—literally and in a numbered list. The problem: the list teaches exactly what to avoid saying. Safety has a perverse asymmetry— the same text that guides a well-intentioned reader can serve as a ready-made playbook for an attacker. Listing the detection mechanics weapon who you want to block.
🚨 The asymmetry that arms the attacker
If the prompt says "refuse requests that contain [verbatim list of manipulation techniques]", this list becomes an attack index: a malicious reader sees the very list of defenses as a menu. Worse, the model may now compile and reproduce this categorized list if requested indirectly.
The golden rule: in safety, describe the pattern to detect, never the detection mechanics. What educates also arms.
📄 Real example: child safety in Fable 5
When moving from Opus 4.8 to Fable 5, the child safety section grew from 5 to 7 bullets — and the two new ones are specifically about stay at the pattern level:
"Claude stays at the pattern level... does not compile categorized lists of verbatim lines"
"When Claude declines or limits for child-safety reasons, it states the principle rather than the detection mechanics"
Instead of listing prohibited manipulation techniques (which would become a reusable script), the prompt instructs the model to recognize the pattern and declare the principle.
Source: educacao/diff-anotado-opus-4.8-fable-5.md (item 7).
✗ Mechanism (arms the attacker)
- •Verbatim list of prohibited terms/techniques
- •"Refuse if the message contains the words X, Y, Z"
- •Model can compile the categorized list
- •Can be bypassed by changing the words (same intent)
✓ Principle (covers unforeseen cases)
- •Describe the behavior pattern to recognize
- •States the principle ("stay at the pattern level")
- •Refusal states cite the principle, not the mechanics
- •Covers the next technique no one listed
📐 Formatting as a crutch & 📦 Everything-in-the-prompt
Two sibling anti-patterns: both confuse form with content. The first forces visual structure where it doesn’t help; the second dumps dynamic information in a place reserved for stable behavior.
A) 📐 Formatting as a crutch
Symptom: the prompt says to use lists, headers, and emoji in everything. The answer becomes a skeleton of bullet points with no prose connecting the ideas— the reader gets fragments, not a line of reasoning. Formatting becomes a crutch because it replaces thought with decoration.
✗ Formatting as a crutch
- •"Always use bullet points and headers"
- •Emoji in every response, even technical ones
- •Markdown in plaintext output (terminal, API)
- •Answer becomes an outline without coherent prose
✓ Antidote — Pattern 7 + prose first
- •Explicit concision budget (Pattern 7)
- •"Default: concise prose; lists only when they help"
- •Markdown only when the output will be rendered
- •Emoji only when the user explicitly asks
B) 📦 Everything-in-the-prompt
Symptom: the current date, user name, one-off notices, and runtime flags stay hardcoded in the stable prompt. Result: the prompt needs to be rewritten with every change in context, and the model treats volatile information as if it were a permanent rule.
💊 Antidote — Pattern 10: System Reminder
Separate the layers: the stable behavior stays in the prompt; the dynamic context comes in via <system-reminder> injected by the harness each turn.
Fable 5 took this to the extreme by adding the long_conversation_reminder: instead of inflating the base prompt to address degradation in long conversations, a dynamic reminder is injected at the right moment.
The lesson: a runtime problem is solved at the runtime layer — not by bloating the stable prompt.
Source: educacao/diff-anotado-opus-4.8-fable-5.md (item 14) · sheet fichas/10-lembrete-de-sistema.md.
📢 Emphasis inflation
The honorary anti-pattern, and the one that best wraps up the track's thesis. Symptom: everything is IMPORTANT, CRITICAL, NEVER, in all caps.
When everything screams, nothing is heard — the model loses the ability to distinguish a hard limit (copyright, safety) from a soft preference. Emphasis is a scarce resource: spend it on everything and you have none left for what matters.
🚨 "When everything is IMPORTANT, nothing is"
IMPORTANT: be concise.
CRITICAL: use markdown.
IMPORTANT: never use emoji.
CRITICAL: always cite sources.
IMPORTANT: respond in the user's language.
NEVER: make assumptions.
CRITICAL: be helpful.
Seven "CRITICAL/IMPORTANT" labels side by side — the model has no way to know which is truly nonnegotiable. The emphasis has become background noise.
The direction: increasingly rare caps (Opus → Fable 5)
4 tone micro-rules in all caps/imperative (no bullets when refusing, no pet names, no “genuinely/honestly/actually,” emoji rule), plus
<claude_prioritizes_copyright_compliance> with emphatic "NON-NEGOTIABLE".
The 4 micro-rules became a calm principle: "Claude assumes the person is a capable adult and treats them as such."
The copyright block was renamed from <claude_prioritizes_copyright_compliance> to <core_copyright_principle> — from enforcement to value.
“NON-NEGOTIABLE” remains, but is now reserved for a genuinely hard limit.
Practical rule for emphasis
Reserve caps (NEVER, NON-NEGOTIABLE) for the 2 or 3 truly non-negotiable prompt limits — typically copyright and safety. Everything else becomes prose with a reason. If you have ten "IMPORTANT"s, you have no real emphasis. See Pattern 4 (ALWAYS/NEVER contrast): reserve emphasis in caps for critical behaviors.
Module Summary
All anti-patterns are forms of accumulation; all antidotes are ways to consolidation. This is the thesis of Track 1, and the 4.8 → Fable 5 diff is living proof: +56 lines, −7 blocks.
- ✓Onion prompt → consolidation round (Pattern 12); removing is part of evolving
- ✓Prohibition without a why → Rule with Why (Pattern 3); the reason generalizes
- ✓Mechanical safety rule → pattern, not mechanics; what educates, arms
- ✓Formatting as a crutch → Pattern 7 + prose first
- ✓Everything-in-the-prompt → System Reminder (Pattern 10); each layer in its place
- ✓Emphasis inflation → rare caps; when everything is IMPORTANT, nothing is
Next: 1.5 — Essential Glossary
Before moving on to Track 2, keep a cheat sheet handy: the Glossary translates all the course’s technical language into everyday Portuguese—return to it whenever you get stuck on a term.