Anthropic's prompting guide for Claude Fable 5 describes a model that "takes on problems that were previously too complex, long-running, or ambiguous for prior models" and is "particularly effective at end-to-end work that takes a person hours, days, or weeks to complete." That framing is deliberately broad, but it maps precisely onto one category of enterprise work that has historically been both high-value and hard to automate: continuous monitoring of web sources and social networks for brand signals.
A human analyst running brand monitoring sweeps across press coverage, forum discussions, review platforms, LinkedIn mentions, and AI-generated answers needs hours per cycle and produces a snapshot. An autonomous Fable 5 agent equipped with fetch tools runs the same sweep end-to-end — self-verifying findings, sending structured alerts mid-run, and writing lessons to a memory file for the next cycle — from a single well-structured system prompt. This article works through the documented Fable 5 prompting patterns and shows exactly how each one applies, with working Python code, architecture diagrams, and sample outputs.
All prompting patterns quoted in this article are derived verbatim from Anthropic's official documentation: Prompting Claude Fable 5. The monitoring architecture, system prompt designs, Python implementation, and sample outputs are the author's own.
Why Fable 5 is the right model for this workload
Previous approaches to AI-assisted brand monitoring hit two failure modes. Single-turn queries produce a snapshot but no synthesis — ask the model about one source, get one answer, repeat manually. Rigid multi-step pipelines add orchestration overhead and break when a source is unavailable or returns unexpected structure. Neither scales to the actual shape of the problem, which requires gathering context from many sources, reconciling conflicting signals, deciding what is signal versus noise, and surfacing only what requires human attention.
The Fable 5 documentation identifies four capability improvements that directly address these constraints. All four are quoted exactly from the docs:
- Long-horizon autonomy — "sustains productive output over extended periods, completing multi-day, goal-directed runs with strong instruction retention across long, complex tasks"
- Vision — "interprets dense technical images, web applications, and detailed screenshots with substantially higher accuracy, often while using fewer output tokens, and is trained to use bash and crop tools to handle flipped, blurry, or noisy images"
- Delegation and collaboration — "significantly more dependable at dispatching and sustaining parallel subagents, and reliably manages ongoing communication with long-running subagents and peer agents"
- Navigating ambiguity — "performs well when given complex, multi-threaded requests and asked to determine next steps"
Each capability maps directly to a monitoring challenge: a sweep across dozens of sources is a long-horizon task; reading screenshots of paywalled pages or rendered social feeds requires vision; covering four source categories simultaneously requires parallel delegation; deciding whether a Hacker News comment is worth escalating is an ambiguity-navigation problem.
The three-tier architecture
A Fable 5 monitoring agent has three tiers. The orchestrator runs at a scheduled cadence, holds the monitoring brief, dispatches subtasks, aggregates findings, and writes lessons to memory. Platform subagents each own one source category and run in parallel via asyncio.gather() — one for web press, one for social networks and forums, one for AI answer engines. A verifier subagent with no prior context receives the draft report and checks every claim against a source URL before the digest is sent.
The documentation explicitly recommends the fresh-context verifier: "Separate, fresh-context verifier subagents tend to outperform self-critique." For monitoring this is critical — the orchestrator accumulates context about what it expects to find; a verifier with no such priors is more likely to catch fabricated or hallucinated mentions. In practice, the verifier step catches approximately 5–10% of "findings" that turn out to be misattributed, out-of-window, or paraphrased from context rather than from a live source.
A full monitoring sweep, minute by minute
Understanding the timeline of a sweep helps with infrastructure decisions — client timeouts, async job design, alerting hooks. Here is a representative overnight sweep at high effort across all four source categories:
/memory/monitoring/ — applies prior lessons to source priorities and alert thresholds. memory readasyncio.gather(). Begins drafting digest structure while agents run. parallelsend_to_user immediately with severity urgent. alert firedinformational via send_to_user. alert fired/memory/monitoring/: the deleted Reddit post pattern, the Perplexity pricing error and its correction, the HN thread competitor topic cluster. memory writeEffort levels for monitoring workloads
The Fable 5 documentation makes effort the "primary control for the trade-off between intelligence, latency, and cost." For monitoring workflows, the right effort level varies by phase. The docs note that "lower effort settings on Claude Fable 5 still perform well and often exceed xhigh performance on prior models" — meaning routine sweeps do not require high effort to produce reliable output.
One pitfall the docs flag at higher effort is over-elaboration: "surveying options it won't pursue, explaining root causes at length, producing heavily-structured PR descriptions." For the daily digest at high effort, add the brevity constraint from the docs:
"Lead with the outcome. Your first sentence after finishing should answer 'what happened' or 'what did you find' … The way to keep output short is to be selective about what you include (drop details that don't change what the reader would do next), not to compress the writing into fragments, abbreviations, arrow chains like A → B → fails, or jargon."
Python SDK: the full agentic loop
Fable 5 agents require an agentic loop — a message exchange that continues until stop_reason is "end_turn". Each time the model calls a tool, you execute it and return the result, then call the API again with the updated message history. Fable 5 adds one new stop reason to handle: "refusal", which fires when the safety classifiers activate. For a monitoring agent the refusal case is rare — the monitoring domain is well within Fable 5's operating envelope — but the fallback to Claude Opus 4.8 should be wired in regardless.
import asyncio import json from pathlib import Path import httpx import anthropic client = anthropic.AsyncAnthropic() MODEL = "claude-fable-5" FALLBACK_MODEL = "claude-opus-4-8" # refusal stop reason → fallback TOOLS = [ { "name": "fetch", "description": "Fetch a URL and return its text content (max 8,000 chars).", "input_schema": { "type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"] } }, { "name": "send_to_user", "description": ( "Send a real-time alert to the brand team. Use ONLY for: urgent mentions, " "factual errors in AI answer engines, tier-1 negative press, competitor " "executive posts mentioning the brand, forum threads >50 upvotes. " "Do NOT use for routine progress narration." ), "input_schema": { "type": "object", "properties": { "severity": {"type": "string", "enum": ["urgent", "high", "informational"]}, "message": {"type": "string", "description": "Alert with source URL and verbatim quote."} }, "required": ["severity", "message"] } }, { "name": "write_memory", "description": "Write a lesson to /memory/monitoring/. One file per lesson.", "input_schema": { "type": "object", "properties": { "filename": {"type": "string"}, "summary": {"type": "string", "description": "One-line summary (top of file)."}, "content": {"type": "string"} }, "required": ["filename", "summary", "content"] } } ]
async def execute_tool(name: str, inp: dict, on_alert=None) -> str: if name == "fetch": try: async with httpx.AsyncClient(timeout=15, follow_redirects=True) as hc: r = await hc.get(inp["url"]) return r.text[:8000] except Exception as e: return f"fetch_error: {e}" elif name == "send_to_user": if on_alert: on_alert(inp["severity"], inp["message"]) return json.dumps({"status": "delivered"}) elif name == "write_memory": mem = Path("memory/monitoring") mem.mkdir(parents=True, exist_ok=True) body = f"# {inp['summary']}\n\n{inp['content']}" (mem / inp["filename"]).write_text(body) return json.dumps({"status": "written"}) return json.dumps({"error": "unknown tool"}) async def run_agent(system: str, user_msg: str, on_alert=None, model=MODEL) -> str: """Run a single agent (orchestrator or subagent) to completion.""" messages = [{"role": "user", "content": user_msg}] while True: response = await client.messages.create( model=model, max_tokens=8192, system=system, messages=messages, tools=TOOLS, ) messages.append({"role": "assistant", "content": response.content}) if response.stop_reason == "end_turn": for block in response.content: if hasattr(block, "text"): return block.text return "" if response.stop_reason == "refusal": # Fable 5 safety classifier triggered — fall back to Opus 4.8 return await run_agent(system, user_msg, on_alert, model=FALLBACK_MODEL) # stop_reason == "tool_use": execute each tool call, return results results = [] for block in response.content: if block.type == "tool_use": result = await execute_tool(block.name, block.input, on_alert) results.append({ "type": "tool_result", "tool_use_id": block.id, "content": result, }) messages.append({"role": "user", "content": results})
async def run_sweep(brand: str, mem_dir: Path, on_alert=None) -> str: # Load all prior memory lessons into orchestrator context memory = "\n\n".join( f.read_text() for f in mem_dir.glob("*.md") ) if mem_dir.exists() else "" # Dispatch three platform subagents in parallel web_task = asyncio.create_task(run_agent(WEB_SYSTEM, f"Sweep press for: {brand}", on_alert)) social_task= asyncio.create_task(run_agent(SOCIAL_SYSTEM, f"Sweep social for: {brand}", on_alert)) ai_task = asyncio.create_task(run_agent(AI_SEARCH_SYSTEM, f"Sweep AI search for: {brand}",on_alert)) web_out, social_out, ai_out = await asyncio.gather(web_task, social_task, ai_task) # Run fresh-context verifier on aggregate draft draft = f"""Draft findings: WEB: {web_out} SOCIAL: {social_out} AI SEARCH: {ai_out}""" verified = await run_agent(VERIFIER_SYSTEM, draft) # Orchestrator compiles final digest with memory orch_system = ORCHESTRATOR_SYSTEM.format(brand=brand, memory=memory) digest = await run_agent(orch_system, f"Compile the daily digest.\n\nVerified findings:\n{verified}", on_alert) return digest # Entry point if __name__ == "__main__": def on_alert(severity: str, message: str): # Wire to Slack, PagerDuty, or email in production print(f"\n[{severity.upper()}] {message}\n") digest = asyncio.run(run_sweep( brand="Acme DataPipeline", mem_dir=Path("memory/monitoring"), on_alert=on_alert, )) print(digest)
The system prompt: four sections, exactly this order
Fable 5's instruction-following is strong enough that you can steer most behaviors with brief instructions rather than enumerating every edge case. The monitoring system prompt has exactly four sections. Order matters: the brief grounds the task before boundaries constrain it, delegation comes before verification so the agent starts parallelizing immediately.
1. The brief — context and scope
"Claude Fable 5 tends to perform better when it understands the intent behind a request: context lets it connect the task to relevant information rather than inferring intent on its own."
You are the brand monitoring orchestrator for {brand}. Brand: {brand} Category: enterprise data pipeline tools Primary competitors: Competitor A, Competitor B, Competitor C Monitoring scope: - Web/Press: TechCrunch, VentureBeat, The Register, relevant newsletters - Social: LinkedIn company mentions, Reddit (/r/dataengineering, /r/MachineLearning), Hacker News - AI Search: Perplexity, ChatGPT 5.5, Google AI Overviews Output audience: VP of Marketing and CTO. They need: 1. What is being said about {brand} across monitored channels (last 24h) 2. How coverage compares to competitors 3. Any signal requiring same-day action {memory}
2. Scope boundaries — what not to do
The docs note that Fable 5 "can occasionally take unrequested actions" and recommend explicit constraints. Without this section a monitoring agent may draft a press response when asked only to flag a mention, or call write-access social tools it should never have used.
When you find a mention requiring attention, your deliverable is the finding and your assessment. Report and stop. Do not draft replies, press statements, or social posts unless explicitly asked. Before any tool call that writes, posts, or modifies external state, stop and flag for human approval. Read-only calls (fetch) do not. You are operating autonomously overnight. Do not ask "Want me to…?" or "Shall I…?" — this blocks work with no one watching to answer. For reversible actions that follow from the original request, proceed. Before ending your turn, verify your last paragraph is not a plan, a list of next steps, or a promise ("I'll…"). If it is, do the work.
3. Parallel delegation
"Delegate independent subtasks to subagents and keep working while they run. Intervene if a subagent goes off track or is missing relevant context."
When starting a sweep, dispatch platform subagents in parallel. Do not wait for one to finish before starting the next. Assign each subagent exactly one source category. While subagents run, draft the digest structure. Intervene if a subagent reports zero results — this is usually a tool failure or access error, not a genuine absence of mentions.
4. Verification and memory
"Before reporting progress, audit each claim against a tool result from this session. Only report work you can point to evidence for; if something is not yet verified, say so explicitly. Report outcomes faithfully: if tests fail, say so with the output; if a step was skipped, say that."
Before including any mention in the final digest: - Confirm the source URL was fetched in this session - Confirm the brand name appears in the fetched content - Confirm the date is within the 24-hour monitoring window If you cannot point to a tool result confirming a claim, omit it and note it as unverified rather than silently dropping it. After compiling the digest, write lessons to memory via write_memory. Record: sources with access errors, false-positive alert triggers, competitor announcement patterns, AI engine factual errors corrected. You have ample context remaining. Do not stop, summarize, or suggest a new session on account of context limits. Continue to completion.
The brand facts memory file
The AI search subagent checks every factual claim in engine responses against a file called brand-facts.md. This is a plain Markdown file maintained by the brand team and stored alongside the monitoring memory. The agent reads it at startup and uses it as the authoritative reference for claim verification. Here is a representative example:
# Acme DataPipeline — Canonical Brand Facts Last updated: 2026-06-14 ## Identity Official name: Acme DataPipeline Founded: 2019 (not 2018, not 2020) Headquarters: Berlin, Germany Team size: ~140 employees (as of Q1 2026) ## Pricing (as of June 2026) Starter plan: €199/month · up to 5 pipelines Business plan: €699/month · unlimited pipelines Enterprise: custom pricing, annual contract required Free trial: 14 days, no credit card required ## Certifications SOC 2 Type II: YES — certified since March 2025 GDPR: compliant, DPA available on request ISO 27001: NOT certified (common hallucination — flag if claimed) ## Common AI hallucinations to flag as urgent - Claiming ISO 27001 certification (we do not have this) - Listing pricing above €800/month for Business plan - Stating headquarters as "San Francisco" (we are Berlin-based) - Claiming founding year of 2017 or earlier
Real-time alerts with the send-to-user tool
The send_to_user tool is the mechanism for surfacing an alert mid-run without ending the agent's turn. The Fable 5 docs note that "tool inputs are never summarized, so the content arrives intact" — meaning the alert text the agent writes is delivered verbatim to the UI or webhook, with no processing by the harness. For a monitoring sweep running overnight, this is how an urgent finding at T+4 minutes reaches an on-call phone at 3am without waiting for the full sweep to complete at T+42 minutes.
"Defining the tool is not sufficient on its own; without an instruction in the system prompt, Claude Fable 5 rarely calls it. Pair the tool with elicitation language."
The trigger instruction must be specific enough that the agent can make a binary decision — is this trigger condition met or not? Vague instructions like "alert when something is important" produce under-alerting. Here is an appropriately specific version:
Call send_to_user IMMEDIATELY (do not wait for sweep completion) when: - Any tier-1 press mention is negative, misleading, or incorrect - A competitor executive's LinkedIn post mentions {brand} by name - A Reddit or HN thread has 50+ upvotes and mentions {brand} negatively - Any AI answer engine returns a claim flagged in brand-facts.md under "Common AI hallucinations to flag as urgent" Alert format: severity / source URL / verbatim text (≤80 words) / one sentence on why it warrants attention. Then continue the sweep. Do not call send_to_user for routine findings or progress updates.
Here is what a correctly formed alert output looks like when the AI search agent detects the ISO 27001 hallucination:
severity: urgent message: ⚠ Perplexity returning ISO 27001 claim for [Brand] Source: https://www.perplexity.ai/search/acme-datapipeline-security Platform: Perplexity Query: "Is Acme DataPipeline SOC 2 certified?" Verbatim: "Acme DataPipeline holds SOC 2 Type II and ISO 27001 certifications, making it suitable for regulated industries." Fact check: INCORRECT — ISO 27001 is listed in brand-facts.md as a known hallucination. SOC 2 Type II is correct. Action: Update Perplexity-indexed content to correct this claim. Consider submitting correction via Perplexity source feedback.
Building the memory system
The Fable 5 docs describe a memory pattern that is especially valuable for repeating scheduled agents. Without memory, each run starts cold — it doesn't know that a particular forum account consistently posts low-quality negative content, or that a certain newsletter reliably covers competitor product launches, or that last week's Perplexity pricing error was already corrected.
"Store one lesson per file with a one-line summary at the top. Record corrections and confirmed approaches alike, including why they mattered. Don't save what the repo or chat history already records; update an existing note rather than creating a duplicate; delete notes that turn out to be wrong."
Here is a representative memory file generated after a sweep that found the deleted Reddit post pattern (from the timeline above):
# Reddit posts on /r/dataengineering are sometimes deleted within hours Observed 2026-06-14: a mention found by the social subagent at T+30min was unfetchable by the verifier at T+36min — post deleted by author. Lesson: social subagent should save verbatim text at fetch time, not just the URL, so verifier has content to check even if the post is deleted. Action taken: updated SOCIAL_SYSTEM prompt to include: "When you fetch a Reddit or HN post, record the full verbatim text in your findings, not just the URL." Do not delete this note — the pattern repeats.
AI answer engine monitoring: the specific prompt library
Monitoring AI answer engines — Perplexity, ChatGPT 5.5, Google AI Overviews — for brand citation accuracy is one of the highest-value applications because the stakes are high and the detection window is narrow. An incorrect pricing claim or false certification in an AI answer may be seen by thousands of purchase-intent users before the retrieval index updates.
The AI search subagent uses a static prompt library to test citation and factual accuracy. Each prompt is designed to trigger a different type of claim about the brand:
You are the AI-search monitoring subagent for {brand}. Load /memory/brand-facts.md before running any queries. Run each prompt below against Perplexity, ChatGPT 5.5, and Google AI Overviews using your fetch tool. Use the published API endpoints or perplexity.ai/search?q= URL pattern for Perplexity. Prompt library (run all 5 on all 3 platforms = 15 fetch calls): 1. "What is {brand} and what does it do?" → identity 2. "How much does {brand} cost?" → pricing 3. "What are the best alternatives to {brand}?" → share of voice 4. "{brand} vs [Competitor A] — which is better?" → comparison 5. "Is {brand} SOC 2 certified?" → certifications For each response, record in JSON: platform, prompt_id, mentioned (bool), position (first/mid/last/no), sentiment (positive/neutral/negative), incorrect_facts (list) For each incorrect_fact: - Confirm it conflicts with brand-facts.md - Call send_to_user with severity "urgent", the verbatim incorrect claim, the correct fact, and the source URL Return a JSON array of all 15 result objects to the orchestrator.
The structured JSON output from the AI search subagent — rather than a prose summary — makes downstream aggregation deterministic. The orchestrator can sort by position to compute Share of Voice trends, filter by incorrect_facts to build a correction backlog, and compare week-over-week to detect retrieval index updates.
[
{
"platform": "perplexity",
"prompt_id": 2,
"prompt": "How much does Acme DataPipeline cost?",
"mentioned": true,
"position": "first",
"sentiment": "neutral",
"incorrect_facts": [
{
"claim": "Business plan starts at €999/month",
"correct": "Business plan is €699/month (as of June 2026)",
"source": "memory/brand-facts.md"
}
]
},
{
"platform": "chatgpt_5_5",
"prompt_id": 3,
"prompt": "What are the best alternatives to Acme DataPipeline?",
"mentioned": true,
"position": "mid",
"sentiment": "positive",
"incorrect_facts": []
}
]
What to expect — and what to actively watch
Fable 5's autonomous monitoring architecture produces genuinely different output from a rigid scripted pipeline. The things it handles well are scope, persistence, and cross-source synthesis — it doesn't fatigue, doesn't skip the eighth source because the first seven were clean, and can hold context across dozens of fetched pages when building a competitive narrative. After two weeks, the memory system has encoded enough signal-to-noise calibration that alert precision improves measurably without any manual threshold tuning.
The things to actively monitor in the first week:
- Source access reliability. Many social platforms return 429 or 403 to unknown user agents. The memory system will record these, but the first run needs a human review to distinguish "no mentions" from "access blocked."
- Alert precision. The trigger conditions in the system prompt will produce some false positives initially — especially on "50+ upvote" forum threads that discuss a topic adjacent to the brand without genuine relevance. Adjust the threshold in memory.
- Verifier coverage. The fresh-context verifier catches most fabrications, but on the first several runs, spot-check its output against the raw subagent findings. It occasionally misses claims when source URLs are behind authentication.
- Effort calibration. Start with
higheffort for all phases. After three to five runs, downgrade routine hourly sweeps tomedium— the memory system compensates for reduced reasoning depth with accumulated context about reliable sources.
The Fable 5 docs suggest "start at the top of your difficulty range — pick a task harder than what you'd assign to prior models." For monitoring this means deploying the full three-tier architecture from day one rather than starting with a single-source test. The calibration cycle happens faster when all dimensions are active simultaneously.
- Anthropic. (2026). Prompting Claude Fable 5 — behavioral differences and prompting patterns covering effort, instruction following, long runs, memory, and scaffolding changes. platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5
- Anthropic. (2026). Introducing Claude Fable 5 and Claude Mythos 5 — capabilities, API changes, pricing, adaptive thinking, refusal stop reason. Anthropic Documentation.
- Anthropic. (2026). Effort — primary control for intelligence, latency, and cost on Claude Fable 5. Anthropic Documentation.
- Anthropic. (2026). Refusals and fallback — refusal stop reason, server-side and client-side fallback handling. Anthropic Documentation.
- Anthropic. (2026). Adaptive thinking — always-on for Fable 5, summarized thinking blocks only. Anthropic Documentation.