Prompting Claude Fable 5.1 Anthropic's documentation for Claude Fable 5.1 and Claude Mythos 5.1 details behavioral differences and prompting patterns, advising users to test all effort levels (low, medium, high, xhigh, max) because effort level names do not correspond to the same amount of thinking across models. The guide covers topics such as batching tool calls, append-only conversation history, writing density, formatting, quoting sources, task completion, compaction summaries, scope control, search triggering, safeguard false positives, targeted edits, long outputs, subagents, and vision tools. It notes that existing Claude Fable 5 prompts should perform well without changes, but highlights specific issues like refusals on benign coding requests and the need to leave room for long outputs at xhigh and max effort. Best practices /docs/en/about-claude/use-case-guides/overview Prompt engineering Prompting Claude Fable 5.1 Behavioral differences and prompting patterns for Claude Fable 5.1 and Claude Mythos 5.1, covering effort, progress updates, tool-call batching, conversation history, writing style, formatting, task completion, compaction summaries, scope and test coverage, search triggering, safeguard false positives, file edits, long outputs, subagents, and vision. For the model's capabilities, API changes, pricing, and availability, see What's new in Claude Fable 5.1 /docs/en/models/fable-5-1/whats-new-fable-5-1 . For techniques that apply across Claude models, see Prompting best practices /docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices . Your existing Claude Fable 5 prompts should perform well on Claude Fable 5.1 without changes, but a handful of behavioral differences are worth knowing about. Start with the section that matches what you observe: - Unsure which effort level to run, or latency and cost are higher than the task warrants: Consider all effort levels consider-all-effort-levels - Little or no text between tool calls: Ask for user-facing progress updates ask-for-user-facing-progress-updates - One tool call per turn in agent loops: Batch independent tool calls in agent loops batch-independent-tool-calls-in-agent-loops - Requests fail with bound to a different conversation , or your harness edits earlier turns between requests: Keep the conversation history append-only keep-the-conversation-history-append-only - Prose runs long and dense: Writing density writing-density - Chat replies carry less structure than the content needs: Formatting in chat formatting-in-chat - Summaries reproduce source wording without marking it as a quotation: Quoting retrieved sources quoting-retrieved-sources - Turn ends before the work is done, or the model asks permission for work you already requested: Finish the whole task finish-the-whole-task - Client-side compaction summaries drop constraints, decisions, or exact details: Tell the model what to preserve in compaction summaries tell-the-model-what-to-preserve-in-compaction-summaries - Unrequested fixes or extensions, or more committed test files than the task called for: Keep changes and tests to what the task asks for keep-changes-and-tests-to-what-the-task-asks-for - Answers from memory instead of searching at low effort: Search triggering at low effort search-triggering-at-low-effort - Benign coding requests return stop reason: "refusal" : Reduce safeguard false positives reduce-safeguard-false-positives - Whole files rewritten for small changes: Prefer targeted edits over whole-file rewrites prefer-targeted-edits-over-whole-file-rewrites - Long deliverables at xhigh or max effort take a long time or hit max tokens : Leave room for long outputs at xhigh and max effort leave-room-for-long-outputs-at-xhigh-and-max-effort - Lead agent idles while subagents run: Let the lead agent keep working while subagents run let-the-lead-agent-keep-working-while-subagents-run - Answers about charts and dense images miss detail: Give vision work tools to crop and zoom give-vision-work-tools-to-crop-and-zoom Consider all effort levels Start at the default effort /docs/en/build-with-claude/effort level, high , then test the other levels low , medium , xhigh , and max against your own evals. Effort is the primary control for trading off intelligence, latency, and cost on Claude Fable 5.1. Re-run the sweep even if you already ran one on Claude Fable 5: effort level names don't correspond to the same amount of thinking across models. Claude Fable 5.1's capability gains over Claude Fable 5 show up across effort levels and are largest at the higher settings. At medium , results roughly match Claude Fable 5 at lower cost, so step down to medium or low where your evals show quality holds. At low , Claude Fable 5.1 is often competitive with Claude Opus and Claude Sonnet models on cost per task while scoring higher, so include it in the comparison wherever you'd otherwise run a smaller model at a higher effort level. Two effort-specific behaviors have their own sections: at low , Claude Fable 5.1 calls search and retrieval tools less often see Search triggering at low effort search-triggering-at-low-effort , and at xhigh and max it can think for longer before writing a long deliverable see Leave room for long outputs at xhigh and max effort leave-room-for-long-outputs-at-xhigh-and-max-effort . Ask for user-facing progress updates Claude Fable 5.1's default behavior is to write fewer user-facing updates during long tool-calling turns than Claude Fable 5 does. This becomes more pronounced at higher effort and in longer tool chains. Users see the agent go quiet for minutes at a time, or a final message that covers only the last step rather than the whole task. First, check that your client receives progress updates at all. The model's short notes between tool calls, what it just found and what it's doing next, come back as progress-update thinking blocks /docs/en/build-with-claude/thinking progress-updates , and those blocks are empty under the default thinking.display of "omitted" . Set display: "updates" beta, thinking-display-updates-2026-08-18 header and render each non-empty thinking block as a status line, or set "summarized" to receive them along with summarized reasoning. If you aren't requesting them, the model's updates may simply not be reaching your users.Second, audit your prompt for instructions that suppress narration. Some earlier models were eager to give updates while working, which led to system prompt lines such as "hold all findings for the final response." Remove lines like that before adding anything. If you still want more updates, for example when pair programming or in other human-in-the-loop work, add a short system prompt line that says when you want user-facing text from the model and what each update should contain: Before you start, say in a line what you're about to do; brief updates while you work help the user follow along. Close with a short recap that stands on its own — what you found, what you did, and what's next — so a reader who only sees the last message has the full picture. If your product collapses or hides tool output, tell the model. Otherwise it may run commands to "show" the user output that your UI never displays. Deliver the note in a turn-scoped system message /docs/en/build-with-claude/mid-conversation-system-messages turn-scoped-system-messages clear at: "next user message" , beta : Only you see that command's output — the user's terminal shows at most a few lines of it. If the user needs to read any of it, put it in your reply. Batch independent tool calls in agent loops Claude Fable 5.1 usually issues parallel tool calls as expected: when a request names several things to fetch, it issues those calls in parallel. The exception is coding and computer-use loops where the next independent calls are implied by the task rather than explicitly requested custom coding agents, bash-and-editor harnesses, computer use : there it may issue them one per turn instead. This doesn't affect answer quality, but each extra turn costs tokens, a round trip, and wall-clock time. A one-sentence nudge at the end of the current request addresses it: First privately list what you need next; then request every item that doesn't depend on another's result in this one response. Each time you send tool results back, append it after that user message as a turn-scoped system message /docs/en/build-with-claude/mid-conversation-system-messages turn-scoped-system-messages : a role: "system" entry in messages with clear at: "next user message" . Once a later user message exists, the API clears the earlier copies, so the model reads only the newest one. Turn-scoped system messages are in beta and require the beta header /docs/en/api/beta-headers mid-conversation-system-clear-at-2026-08-21 . Without the beta, place the sentence in a text block after the tool result blocks in the same user message instead. Append a fresh copy each turn and leave the earlier copies where they are, byte-for-byte. They stay in the array, but once cleared the model doesn't see them and they cost no input tokens. Deleting or rewriting them is an edit to earlier turns: it restarts the prompt cache /docs/en/build-with-claude/prompt-caching from that point and invalidates the thinking blocks that came after them see Keep the conversation history append-only keep-the-conversation-history-append-only . The following loop shows this placement. Each assistant turn goes back exactly as returned, each user turn carries only the tool results, and a fresh turn-scoped copy of the nudge follows it. python import anthropic from anthropic.types.beta import BetaMessageParam, BetaToolParam, BetaToolResultBlockParam, client = anthropic.Anthropic BATCH NUDGE = "First privately list what you need next; then request every item " "that doesn't depend on another's result in this one response." In-memory files stand in for a working directory so the sample runs anywhere. FILES = { "pyproject.toml": """\ project name = "demo" version = "0.1.0" description = "Demo project for the batching example" """, "README.md": """\ demo A small demo project. Run demo --help for usage. """, } tools: list BetaToolParam = { "name": "read file", "description": "Read a UTF-8 text file from the working directory.", "input schema": { "type": "object", "properties": {"path": {"type": "string"}}, "required": "path" , }, } messages: list BetaMessageParam = {"role": "user", "content": "Summarize pyproject.toml and README.md."} while True: response = client.beta.messages.create model="claude-fable-5-1", max tokens=16000, betas= "mid-conversation-system-clear-at-2026-08-21" , tools=tools, messages=messages, Append the assistant turn exactly as returned, thinking blocks included. messages.append {"role": "assistant", "content": response.content} if response.stop reason = "tool use": break tool results: list BetaToolResultBlockParam = for block in response.content: if block.type == "tool use": raw path = block.input.get "path" path = raw path if isinstance raw path, str else "" if path in FILES: tool results.append { "type": "tool result", "tool use id": block.id, "content": FILES path , } else: tool results.append { "type": "tool result", "tool use id": block.id, "content": f"File not found: {path}", "is error": True, } Send the tool results as the user turn, then a fresh copy of the nudge as a turn-scoped system message. Leave earlier copies in place: the API clears them, so the model sees only the newest one. messages.append {"role": "user", "content": tool results} messages.append {"role": "system", "content": BATCH NUDGE, "clear at": "next user message"} print next block.text for block in response.content if block.type == "text" , "" Keep the conversation history append-only Append each assistant turn to the history exactly as the API returned it, thinking blocks included, and don't edit earlier turns between requests. For new accounts created on or after August 31, 2026, Claude Fable 5.1's thinking blocks are valid only in the exact conversation that produced them /docs/en/build-with-claude/thinking preserved-in-conversation : a request that replays a thinking block after its prefix the system prompt, the tool list, or any earlier message has changed returns a 400, or drops the affected blocks if you set thinking.block binding.prefix mismatch behavior: "drop block" beta, thinking-binding-controls-2026-08-01 header . Future models are expected to enforce this check for all accounts, so adopt the pattern now even if yours isn't enforced today. The history edits that trip the check are the same ones that restart the prompt cache /docs/en/build-with-claude/prompt-caching : injecting and removing per-turn reminders, summarizing older turns in place, or changing the system prompt mid-session. Send per-turn reminders as turn-scoped system messages /docs/en/build-with-claude/mid-conversation-system-messages turn-scoped-system-messages , change instructions or tools with a mid-conversation system message /docs/en/build-with-claude/mid-conversation-system-messages instead of rewriting system or tools , and let server-side compaction /docs/en/build-with-claude/compaction or context editing /docs/en/build-with-claude/context-editing do any trimming. If you compact on the client, the simplest shape is to replace the whole history with one summary message plus the new user turn and replay nothing else: no thinking blocks carry over, so nothing fails, and the model thinks afresh on the compacted conversation see Custom compaction on the client /docs/en/build-with-claude/preserved-thinking custom-compaction-on-the-client . Because cache reads are now cheaper see Pricing /docs/en/models/fable-5-1/whats-new-fable-5-1 pricing , compacting early to save cost may no longer be the right cost-intelligence tradeoff on Claude Fable 5.1, so experiment with later compaction points. To find edits your harness already makes, run a session with prefix mismatch behavior: "drop block" and log input transformations , as described in How to tell whether your integration is impacted /docs/en/build-with-claude/preserved-thinking how-to-tell-whether-your-integration-is-impacted , or capture the exact requests it sends over a few normal turns and confirm that consecutive requests are byte-identical up to the appended turns. Writing density Claude Fable 5.1's writing is generally a step up from earlier Claude models, with fewer stock phrases and less unexplained jargon. In some cases, though, its prose is denser than Claude Fable 5's: sentences run longer and there are fewer paragraph breaks. An instruction that defines the anti-pattern, mannered prose, helps. Add it to a user message preferred or the system prompt: Mannered prose substitutes metaphor and flourish for direct statement. Instead of "a parameter worth varying," the mannered writer produces "a dial worth turning." Instead of "this point still matters," they write "this point earns its keep." The phrases exist to display the writer, not to convey the idea, and readers can tell. That is why mannered prose irritates: it makes the reader work harder so the writer can perform. It is also imprecise. Metaphors drag in connotations the writer did not choose and cannot control. The fix is to say what you mean. When a literal phrase is available, use it. The short version also tends to work: Please remove all mannered prose. Formatting in chat Earlier models overused bullets and bold in chat, and many prompts carry anti-formatting rules written to hold that down. Claude Fable 5.1 leans the other way: it uses bold less and is less likely to reach for headers, lists, or quotation marks. If your prompt contains anti-formatting language, remove it or replace it with a rule that says when specific formatting is appropriate, such as the following: Use lists and bullet points when asked to, or when the content is multifaceted enough that they help with clarity. If the person explicitly requests minimal formatting, always format your responses without bullet points, headers, lists, or bold emphasis, as requested. In conversational, personal, or emotional exchanges, keep to plain prose. Quoting retrieved sources When summarizing documents, Claude Fable 5.1 is more likely than Claude Fable 5 to reproduce passages of the source text without marking them as quotations. To address this, add one complete example of a correct response to the system prompt: the user's request, the response, and a sentence explaining why the response is correct.