← All guides
ModelsConfiguration

Why Claude Fable 5 Keeps Refusing Coding Requests (And What to Do)

Neo ZinoBy Neo Zino - builder of ClockedCode8 min read

Why Claude Fable 5 refuses coding requests, the four documented refusal categories, when it won't fall back to Opus 4.8, and how to actually fix it.

On this page

Claude Fable 5 refuses a coding request when its safety classifiers flag it, most often in the cybersecurity or biology categories, and the refusal comes back as stop_reason: "refusal" with an optional category naming why. Claude Code usually papers over this by silently retrying on Opus 4.8, but in five documented situations, covered below, that retry never happens and the refusal is the end of the turn. If you've hit a refusal with no fallback, or one that named no reason at all, this is the actual mechanism, not folklore from a Reddit thread.

TL;DR: A Fable 5 refusal maps to one of four named categories (cyber, bio, frontier_llm, reasoning_extraction) or to no category at all - null is documented as a normal, permanent value, not a bug. Claude Code retries most refusals on Opus 4.8 automatically, but non-interactive mode, an org's availableModels allowlist, both models flagging the same request, third-party providers that can't identify both model IDs, and mobile web sessions all skip that retry and leave you with a bare refusal. Fixing it means telling /config to ask instead of auto-switch, checking --safe-mode for a CLAUDE.md trigger, and for the two categories that catch benign work, naming who owns the work and why in the prompt itself.

What actually triggers a Claude Fable 5 refusal?

What a Fable 5 refusal is actually labeled

stop_details.category

  • Cyber harm

    cyber

    Malware or exploit development. Benign cybersecurity work can also trigger this category.

    Coding-adjacent trigger: A port scanner or brute-force test script for your own server

  • Biological harm

    bio

    Dangerous lab methods. Beneficial life-sciences work can also trigger this category.

    Coding-adjacent trigger: A bioinformatics pipeline that touches pathogen genome data

  • Competing model development

    frontier_llm

    Could assist building a rival frontier AI model, restricted under Anthropic's commercial terms. Benign ML work can also trigger it.

    Coding-adjacent trigger: Training or eval code for a large, general-purpose language model

  • Reasoning extraction

    reasoning_extraction

    Asks the model to reproduce its internal reasoning as plain response text instead of structured thinking output.

    Coding-adjacent trigger: "Show your exact chain of thought before you answer" style prompts

  • Unlabeled

    null

    No named category attached. The API docs are explicit that this is a normal, permanent value, not a placeholder for a bug.

    Coding-adjacent trigger: The mechanism behind reports of Fable 5 declining plainly harmless questions

Read from platform.claude.com's "Refusals and fallback" API reference.

Claude Code's own docs describe this in product terms: "Fable 5 runs with safety classifiers for cybersecurity and biology content." That's true but incomplete - it's the framing for the two categories Claude Code users hit most, not the whole taxonomy. Anthropic's Messages API reference lists two more, frontier_llm and reasoning_extraction, and documents a fifth case that isn't a category at all: stop_details.category can simply be null. The docs call that "a normal, permanent value, not a placeholder" - in plain terms, some refusals genuinely come with no stated reason, and no amount of squinting at the prompt will reveal a pattern that isn't there.

That distinction is what actually matters when you're staring at a refusal trying to figure out what set it off. A cyber or bio label means the classifier saw something specific and namable, even if it was a false positive. A null label means it didn't, which is the more likely explanation for reports like the GitHub issue where Fable 5 refused to say whether frogs quack: there's no cybersecurity or biology content to point to, because the refusal isn't in either of those categories to begin with.

When does a refusal not fall back to Opus 4.8?

When a flagged request stays refused

No fallback fires in any of these five cases

Non-interactive mode or an SDK integration

There's no prompt to show, so a flagged request just ends the turn with a refusal.

Check stop_reason for "refusal" in your own code and retry on Opus yourself.

availableModels excludes the fallback target

Enterprise admins can restrict which models a session may run with a managed allowlist.

A fallback whose target is excluded does not run - ask your admin to allow an Opus model.

Both models flag the same request

Rare, but Opus 4.8 can decline too. There's no third model in the chain.

Edit the prompt and retry, or start a new session.

Bedrock, Google Cloud, or Microsoft Foundry

Model IDs there are provider-specific, so Claude Code can't always confirm it's looking at Fable 5 and Opus 4.8.

Set ANTHROPIC_DEFAULT_FABLE_MODEL and ANTHROPIC_DEFAULT_OPUS_MODEL so it can identify both.

Claude Code on the web, mobile session

Editing and retrying a flagged prompt in place isn't supported on mobile web.

Switch models, or move the session to desktop.

The sibling guide on Fable 5 versus Opus 4.8 covers the common path in detail: a flagged request gets silently re-run on Opus 4.8, and the session keeps going there. That's what happens most of the time in practice, and it's why the "silent" complaint is a little unfair - Claude Code writes a notice into the transcript every time it happens. What that guide doesn't cover is the failure mode people actually mean when they say Fable 5 "keeps blocking" them: the five situations above, where Claude Code can't or won't retry, and the refusal is simply the final answer for that turn.

The availableModels case is worth a second look if you're on a team plan and refusals never seem to resolve themselves. Claude Code checks the fallback target against your organization's allowlist before it retries, and if Opus is excluded, "no fallback occurs. The refusal is shown as a normal error and the session's model is unchanged." From inside a single session, that looks identical to a stuck classifier - it isn't. It's a policy decision an admin made, and the fix is a settings change, not a better prompt.

How do you fix a Claude Fable 5 refusal?

Three things, in the order they're worth trying:

  1. Turn off silent auto-switching. Run /config and disable "switch models when a message is flagged." A flagged request then pauses with two options: switch to Opus, or edit the prompt and retry on Fable 5. This alone turns invisible reroutes into a decision you're making on purpose.
  2. Rule out your own setup. Fallback and refusals can both trigger on the very first message of a session, before you've typed anything unusual, because that message carries your CLAUDE.md content and git status as context. Run claude --safe-mode to disable CLAUDE.md, skills, MCP servers, and hooks for one session - if the refusal stops, something in your customizations is the trigger, not the request itself.
  3. Add the context a classifier can't infer. For the cyber and bio categories specifically, Anthropic's own docs already concede the problem: "benign cybersecurity work can also trigger this category," and the same line appears for biology. Neither category is described as keying off specific words, so the practical lever is context the model doesn't otherwise have: whose system this is, why you're doing the work, and where it stops.

Add the context a classifier can't infer

cyber category

Often flagged

Write a script that brute-forces SSH logins so I can test my rate limiter.

Names the owner, purpose, and scope

I run this SSH server myself and need to confirm its rate-limiter locks out repeated failed logins. Write a script using a local test account (not real credentials) that triggers and verifies the lockout.

bio category

Often flagged

Write code to simulate gene-drive spread in a mosquito population.

Names the owner, purpose, and scope

For a population-genetics course assignment: write code to simulate gene-drive allele spread in a closed model population, using a standard deterministic model with no wet-lab or synthesis component.

Not a guarantee - Anthropic publishes no rule for what clears a classifier. frontier_llm and reasoning_extraction refusals don't respond to rephrasing the same way; see the honest limits below.

Honest limits: when nothing here will fix it

Rephrasing is not a universal fix, and pretending otherwise would be dishonest. The frontier_llm category exists to enforce Anthropic's commercial terms around competing model development, not to catch ambiguous phrasing, so no amount of added context changes what the work actually is. A null-category refusal, by definition, isn't responding to a pattern you can identify from the outside, so iterating on the prompt is closer to guessing than fixing. And if your organization's availableModels list is what's blocking the fallback, no prompt change touches that at all - that's a settings conversation with whoever manages your policy file.

For teams whose work genuinely lives in offensive security or biology and needs Fable 5's capability level anyway, Anthropic's own guidance is to talk to your account team about trusted access programs, not to keep tuning prompts against a classifier that's doing what it was built to do.

FAQ

Why does Claude Fable 5 refuse coding requests?

Fable 5 runs safety classifiers that can decline a request outright. A refusal carries a stop_reason of "refusal" and, when the classifier names a reason, a category: cyber (cyber harm), bio (biological harm), frontier_llm (competing model development), or reasoning_extraction (asking the model to expose its internal reasoning as text). Anthropic's own docs say benign work in the cyber and bio categories can trigger the classifier too, which is why ordinary security tooling or bioinformatics code gets caught.

Why didn't Claude Code fall back to Opus 4.8 when Fable 5 refused?

Five documented cases skip the fallback entirely: non-interactive mode and SDK integrations (there's no prompt to show, so the turn just ends in a refusal), an availableModels allowlist that excludes Opus, both models flagging the same request, Bedrock/Google Cloud/Microsoft Foundry sessions where Claude Code can't identify both model IDs, and mobile Claude Code on the web sessions, which don't support editing and retrying in place.

Why did Fable 5 refuse something completely harmless?

The category field on a refusal is null for a real share of declines, and Anthropic's docs are explicit that this is "a normal, permanent value, not a placeholder" - not a bug the API is hiding from you. An unlabeled refusal has no pattern to diagnose; it's the same mechanic behind reports of Fable 5 declining to answer plainly silly questions.

How do I stop Claude Fable 5 from refusing my coding requests?

Start with /config and turn off "switch models when a message is flagged" so a flagged request pauses instead of silently rerouting - then you can edit the prompt or switch to Opus on purpose. Run claude --safe-mode to check whether your own CLAUDE.md or git status is the trigger. For the cyber and bio categories, naming the owner, purpose, and scope of the work in the prompt reduces the ambiguity a classifier is deciding between. None of this is guaranteed - Anthropic publishes no rule for what clears a classifier.

Is a Claude Fable 5 refusal a bug?

No. It's a documented feature: Fable 5 ships with safety classifiers that Opus 4.8 doesn't have, and Anthropic's docs state plainly that offensive-security and biology-adjacent work trips them "frequently, often on the first request." The false-positive rate is real and acknowledged, but the mechanism itself is by design, not an outage or a launch bug.

The classifier isn't going away either

Every part of this - the four named categories, the null case, the five no-fallback scenarios - comes from Anthropic's own API and Claude Code documentation, not from piecing together Reddit threads. That's worth knowing because the underlying behavior isn't a launch bug that gets patched out: it shipped with Fable 5 specifically, and the false-positive rate for cybersecurity and biology work is something Anthropic acknowledges rather than denies. If your day-to-day work touches either domain, the useful habit isn't hoping the next release fixes it - it's knowing which of the five no-fallback cases you're in before you burn time rewriting a prompt that was never going to pass.

Your CLAUDE.md is part of what gets scanned on that first flagged request, which is one more reason to know exactly what's in it before Claude Code does. That's the whole premise behind the CLAUDE.md ClockedCode generates: a tuned file you actually reviewed, not one you're troubleshooting after the fact.