🎯 Why saying "don't do X" works
🧠 Imagine it this way: you give a talented intern an assignment and only say what to do, never what not to do. Without explicit limits, they fill in the gaps their own way—and "their own way" might include refactoring, adding tests, or creating validations no one asked for. Negative prompting is the list of guardrails you put in place before you start.
An LLM works by predicting, a token at a time, what the most likely continuation of the text so far is. This means it doesn’t stop exactly where the task “ends” — it continues until it thinks the response is complete at your own discretion. In effort the higher this is, the more generous the “complete” criterion becomes: the model gathers more context and deliberates longer before responding.
This isn't a failure; it's a side effect of being capable and careful. Fable 5, especially on routine tasks with high effort, may decide that the "complete answer" for fixing a bug includes cleaning up the surrounding code, adding a refactor or create a validation layer for a case that will never happen. None of that was requested—but none of it was prohibited either.
Negative prompting addresses this at the root: instead of letting the model guess where to stop, you explicitly say “don’t do X.” This removes the ambiguity it would normally resolve in favor of “more comprehensive”—and gives you control over the scope again.
📊 Technical data (official effort documentation)
"Effort is a behavioral signal, not a strict token budget. At lower effort levels, Claude will still think on sufficiently difficult problems, but it will think less than it would at higher effort levels for the same problem." — the more effort, the more room the model has to "go further"; that’s exactly the room negative prompting needs to contain.
Diagram reading: with high effort, the same request can produce three unrequested extras (left) or stay within the requested scope when explicit negative prompting is used (right).
In one sentence: the model predicts the next token until it thinks it's "done"; negative prompting defines from the outside where that "done" should be.
🚫 The official anti-tidying prompt
🧠 Imagine it this way: this isn’t video theory; it’s a paragraph taken from Anthropic’s official documentation for Fable 5. Paste it directly into your CLAUDE.md or system prompt.
The official docs "Prompting Claude Fable 5" describes exactly the mechanism from the previous topic, in Anthropic’s own words:
"On routine work at higher effort, Claude Fable 5 can gather context and deliberate beyond what the task needs… To prevent unrequested tidying or refactoring at higher effort:"
And next, the block the docs recommend pasting into the system prompt or in CLAUDE.md. And the official negative prompting against “tidying” and unrequested refactoring:
Don't add features, refactor, or introduce abstractions beyond what the task requires. A bug fix doesn't need surrounding cleanup and a one-shot operation usually doesn't need a helper. Don't design for hypothetical future requirements: do the simplest thing that works well. Avoid premature abstraction and half-finished implementations. Don't add error handling, fallbacks, or validation for scenarios that cannot happen. Trust internal code and framework guarantees. Only validate at system boundaries (user input, external APIs). Don't use feature flags or backwards-compatibility shims when you can just change the code.
Don’t add features, refactor, or introduce abstractions beyond what the task requires. A bug fix doesn’t need cleanup around it, and a one-off operation usually doesn’t need a helper function. Don’t design for hypothetical future requirements: do the simplest thing that works well. Avoid premature abstraction and half-finished implementations. Don’t add error handling, fallbacks, or validation for scenarios that can’t happen. Trust the guarantees provided by the code and framework. Validate only at system boundaries (user input, external APIs). Don’t use feature flags or backward-compatibility shims when you can simply change the code.
✗ Without the prompt
- ✗Bug fix comes with surrounding “cleanup”
- ✗Helpers appear for a one-time use
- ✗Validation for cases that never occur
- ✗Feature flag for something that could only change
✓ With the prompt
- ✓Minimal diff, only what’s needed for the bug
- ✓No abstraction for a “future requirement”
- ✓Validation only at real system boundaries
- ✓Change the code directly, without a compatibility shim
In one sentence: Anthropic’s official anti-tidying prompt prevents unrequested refactoring, abstraction, and validation at the source.
🌀 When Fable 5 "goes further" on its own
🧠 Imagine it this way: it's not just a code refactor. The same instinct to "be more helpful than asked" shows up in actions outside of code too — like drafting an email nobody asked for, or creating a safety net on its own.
Two concrete examples illustrate the pattern well. Neither is malicious — both come from a good intention (being careful, being helpful) that simply went beyond the scope of what was requested:
Draft an unsolicited email
You asked to investigate a problem with a vendor
After finishing the investigation, the model decides that the “logical” next step is to contact the vendor—and even drafts an email, though no one asked for it. Is it useful? Maybe. Was it requested? No.
Create a backup branch defensive
You asked to refactor a module directly on the main branch
Before starting, the model creates an extra branch “just to be safe,” without saying so or being instructed to do it. Again: good intentions (not losing work), but an action that changes the repository’s state without explicit authorization.
The common pattern: in both cases, the model decided on its own that an adjacent action “was part of” the task. That’s exactly what the two official prompts in this lesson address — the anti-tidying prompt (topic 2) cuts excess inside the code, and the boundaries prompt (topic 4) cuts excess outside the requested scope, including actions that change state.
In one sentence: good intent + undefined scope = an unrequested adjacent action; the solution is to state the scope in writing.
🧱 The official boundaries prompt
🧠 Imagine it this way: there’s a huge difference between you "thinking out loud" with a colleague and you "asking them to execute something." The boundaries prompt teaches the model to recognize that difference—and not confuse the two.
This is an extra technique that wasn’t in the video but appears in Anthropic’s official documentation: explicit boundaries. It solves the same problem as topic 3, but for the more serious case—actions that change the system's state (deleting, restarting, editing configuration) without confirmation.
When the user is describing a problem, asking a question, or thinking out loud rather than requesting a change, the deliverable is your assessment. Report your findings and stop. Don't apply a fix until they ask for one. Before running a command that changes system state (restarts, deletes, config edits), check that the evidence actually supports it.
Quando o usuario esta descrevendo um problema, fazendo uma pergunta ou pensando em voz alta em vez de pedir uma mudanca, o entregavel e a sua avaliacao. Reporte os achados e pare. Nao aplique uma correcao ate que peçam uma. Antes de rodar um comando que muda o estado do sistema (reiniciar, deletar, editar configuracao), confira se a evidencia realmente sustenta essa acao.
⚠️ Without this limit
Without the boundaries prompt, “I think this configuration is wrong” can be read as “fix this configuration”—and the model makes the change before you confirm that’s what you wanted. With commands that restart a service, delete data, or edit a config, that confusion is costly.
In one sentence: describing a problem isn’t asking for a fix; the boundaries prompt makes the model respect that distinction.
⚖️ When it SHOULD act without asking
🧠 Imagine it this way: boundaries don’t mean paralysis. A good colleague knows the difference between “I can handle this myself” and “I need to confirm this first.” Fable 5 needs the same judgment, stated explicitly.
The topic 4 boundary prompt handles the “describing vs. asking” case. But the other side of the coin is missing: once it already has enough information to act, when it should still stop to ask, and when it should just move ahead? Anthropic’s official documentation (in its anti-overplanning technique, covered in depth in module 1.4) gives the criteria:
"Pause for the user only when the work genuinely requires them: a destructive or irreversible action, a real scope change, or input that only they can provide. If you hit one of these, ask and end the turn, rather than ending on a promise."
Put into practical terms: destructive or irreversible (delete, overwrite, force push), real change in scope (the original request was X, and the obvious next step would be Y — something bigger or different) or information only you have (a business decision, a personal preference) are the three genuine triggers for pausing. Otherwise, it's routine work — and routine work gets done, not questioned.
Diagram reading: pause only when the action is destructive, irreversible, or changes the actual scope; for the rest of the process, the model checks the evidence and acts.
✗ Pause and ask
- ✗Delete a table, force-push, overwrite a file
- ✗"Turn "fix the bug" into "rewrite the module"
- ✗A decision only the user can make (price, deadline)
✓ Acts directly
- ✓Run the tests, format, fix the reported bug
- ✓Investigate and report findings without applying changes
- ✓Follow an established convention in the project
In one sentence: only pause for destructive or irreversible actions, or a real change in scope—everything else is routine and should be done directly.
🎓 The video analogy: treat it like an intern
🧠 Imagine it this way: this is the analogy used in the video (it's not an official Anthropic quote, but a way to organize the reasoning): write the prompt as if you were explaining it to an intern on their first day.
An intern on their first day doesn't have the judgment that a senior colleague has already built. It doesn't instinctively know that "fix this bug" doesn't mean "rewrite the entire module," or that "investigate this issue" doesn't mean "send the client an email right away." That's why, with a new intern, you explicitly say what no do it — not because it's bad, but because it doesn't have enough context yet to guess correctly.
This is exactly the role of negative prompting and explicit boundaries in this lesson: they replace the judgment the model hasn’t yet demonstrated in your specific context. It’s not that Fable 5 is “stupid”—it’s that without you saying so, it doesn’t know where the guardrails for your project are.
The interesting part is how this evolves. With an intern you've watched work for months, you can relax the explicit instructions—they've already internalized the standard. The same applies here: as you accumulate sessions with Fable 5 on the same project (and record what worked, the subject of bonus module 1.7 on memory), you need to repeat less explicit negative prompting each time. Trust is built through history; it isn't assumed from the start.
🆕 New intern
- •Explicit, detailed negative prompting
- •Boundaries written out clearly, without assumptions
- •Review each diff before trusting it
🤝 Trusted colleague
- •Shorter instructions, only what changed
- •Boundaries already recorded in CLAUDE.md/memory
- •More autonomy for routine work
In one sentence: write to the model as you would to today's intern, but relax the instructions as the history of trust grows.
🧾 Module Summary
Next module:
1.4 — Let it act + prove it’s done: anti-overplanning and evidence checks before reporting progress.