Advisor (Fable 5) returns "unavailable" whenever the transcript contains any prior tool call — one Bash(ls) suffices; Opus advisor immune
Summary
The server-side advisor tool with advisorModel: "fable" (claude-fable-5) returns advisor_tool_result_error with error_code: "unavailable" whenever the session transcript contains at least one prior tool call — any tool, e.g. a single Bash(ls) or one Read. With zero prior tool calls the identical configuration succeeds. Switching only advisorModel to opus makes the same tool-call-then-advisor sequence succeed.
Since the advisor's documented purpose is to be consulted after orientation/work (i.e. after tool calls), this makes the Fable advisor effectively 100% broken in real sessions while appearing healthy in quick smoke tests — which is exactly what our field data shows (104/104 real-session failures vs 9/9 no-tool-call successes, details below).
Environment
- Claude Code 2.1.206, macOS (darwin 25.5.0, arm64); field failures observed on 2.1.201–2.1.205 as well
- First-party Anthropic API (no gateway/Bedrock), subscription auth
- settings.json:
"advisorModel": "fable", main modelclaude-opus-4-8[1m](also reproduced withclaude-sonnet-5andclaude-fable-5mains in field data) - Valid pairing per the advisor docs compatibility table
Deterministic repro (headless, same machine, same settings, minutes apart)
# succeeds
claude -p --settings '{"advisorModel":"fable"}' --model 'claude-opus-4-8[1m]' \
"Call the advisor tool exactly once, then report ADVISOR_OK or ADVISOR_ERROR: <verbatim>."
# fails: unavailable
claude -p --settings '{"advisorModel":"fable"}' --model 'claude-opus-4-8[1m]' \
"First run exactly one Bash command: ls. THEN call the advisor tool exactly once. Report ADVISOR_OK or ADVISOR_ERROR: <verbatim>."
Full matrix, all runs 2026-07-09 20:27–20:42Z on CC 2.1.206 (server correlation IDs verbatim from transcripts):
| advisorModel | Prior tool call | Result | Round trip | Correlation |
|---|---|---|---|---|
| fable | none | ✅ advisor_redacted_result | ~25s | srvtoolu_01Sq1F3T71xu3qgruQCb2EGb / req_011Ccs7cWoDDnaQguGtYTxgp, 20:28:30Z |
| fable | 1× Bash(ls) | ❌ unavailable | 3.9s | srvtoolu_01CnqkdFmRQp4LPvt7iTsSJu / req_011Ccs7YJqmGP9vxyzyn5XRX, 20:27:32Z |
| fable | 1× Read (20 lines) | ❌ unavailable | 3.4s | srvtoolu_01E4RMdGDw89Mt7zFiF85FYY / req_011Ccs7ai73mPCyMDLrmij72, 20:28:05Z |
| opus | 1× Bash(ls) | ✅ succeeds | ~29s | srvtoolu_018m657efRo6RStmFpCdC4du / req_011Ccs8e2CBPb12ngAUqs8sb, 20:41:56Z |
| opus | none | ✅ succeeds | — | (multiple runs earlier same day) |
Note the latency signature: failures return in ~3–4s (before any advisor-side inference), successes take 25–47s. usage.iterations never shows an advisor iteration for the failing calls.
Field data: why this looks like other symptoms but isn't
Scanning all local transcripts since the feature was enabled here (2026-07-05): 113 advisor calls → 104 × unavailable, 9 × success. Every failure had ≥3 prior tool calls in the transcript; every success had exactly zero. Discriminators we ruled out by A/B before finding the tool-call trigger:
- Transcript size (cf. #67609): failures at 36K tokens, success at 700K+ (single huge user message, no tool calls). Size does not predict outcome; prior tool use does.
- Background/daemon sessions: a fresh
claude --bgjob calling advisor immediately succeeds; interactive/headless sessions fail after one tool call. Session kind is a proxy for "did work before consulting", not a cause. [1m]context beta,--permission-mode bypassPermissions,--agent: each tested in isolation, no effect.- MCP / ToolSearch-loaded deferred tools (cf. #73923, #76049): the failing repro above has no MCP servers and never invokes ToolSearch — one native
Bash/Readcall suffices. Also, unlike #73923, the Opus advisor is not affected here (2×2 executor/advisor matrix above).
Related issues
- #75971 — same Fable-fails/Opus-succeeds observation; this report adds the precise trigger (any prior tool call) and a 1-command repro.
- #67609 — the ~100K-size theory is contradicted by the data above (36K failures without size, 700K success without tool calls).
- #76049 — reproduces without any MCP servers or deferred-tool load; a single native tool call is sufficient.
- #73923 (closed NOT_PLANNED) — closest mechanism report, but there both executors failed and the trigger was ToolSearch loads; here Opus advisor is immune and no ToolSearch is involved.
- #75903 / #74530 / #67411 — confirmed side effect: after the first
unavailable, the client latches the tool off for the whole session ("The advisor tool is unavailable. Do not try to use it again."), so long-lived sessions never recover even when a fresh call would work.
Expected
Fable 5 advisor succeeds after tool calls, like the Opus advisor does — or, failing that, a specific error code instead of the generic unavailable.
---
🤖 Investigation and repro matrix produced with Claude Code
Showing cached comments. Read the full discussion on GitHub ↗
8 Comments
Independent confirmation — reproduced against the Messages API directly (no Claude Code involved), so this is server-side.
Environment: Claude Max subscription (OAuth), Linux/WSL2, field failures observed on CC 2.1.198–2.1.206.
Minimal A/B,
anthropic-beta: advisor-tool-2026-03-01, non-streaming:advisor.model = claude-fable-5→advisor_tool_result_error,error_code: "unavailable", returned in ~6–10sadvisor.model = claude-opus-4-8, same payload →advisor_result(success, 40–240s)claude-fable-5(fable+fable, the only accepted pairing for a Fable main): same failureAlso captured a real CC session request via a local proxy and replayed it directly: same
unavailable. Bisecting that 735KB request ruled out: transcript size (400KB of plain text passes), thinking blocks (real signed ones pass),system-role messages insidemessages, 213 tools in the array,output_config/effort,context_management, and tool-call content (a Bash reading credentials and a barelsfail identically). The only necessary and sufficient trigger we found is ≥1tool_useblock in the transcript.Field data matching the OP's ratio: with
advisorModel: fable, 45+ real-session advisor calls since Jul 2 = 0 successes (allunavailable); withadvisorModel: opus, 67 successes through Jun 30. Failures in Opus-main sessions started exactly when the setting changed tofableon Jul 1.Independent confirmation on 2.1.206 (first-party API, subscription auth, macOS arm64), with
"model": "claude-fable-5"+"advisorModel": "claude-fable-5"— same deterministic trigger reported here and in #76199.Headless A/B on one machine, minutes apart,
--settings '{"advisorModel":"claude-fable-5"}':advisor_redacted_result)Bashcalls before the advisor call →advisor_tool_result_error/"unavailable"every timealwaysThinkingEnabled: true), so extended thinking is ruled out as the trigger tooField data from the same account: 10/10 advisor successes Jun 27–Jul 7 with
advisorModel: "claude-opus-4-8[1m]"(including one very large session), then 8/8 failures across 4 projects Jul 3–10, flipping at exactly the settings change to the fable advisor. One of those 8 failures had an opus main model with the fable advisor — consistent with #76199's executor-irrelevance finding.For backend correlation: failing
server_tool_useidsrvtoolu_01ARJKZTCJkcK4RuqR7TqDzoat 2026-07-10T15:23Z →{"type": "advisor_tool_result_error", "error_code": "unavailable"}.Also reproduced the session-latch behavior tracked in #75903: after the first failure the client reports "The advisor tool is unavailable. Do not try to use it again." and no advisor call is possible for the remainder of the session.
🤖 Generated with Claude Code
Independent confirmation, 2026-07-10, matching the matrix in the issue description.
Environment: Claude Code 2.1.206, macOS (darwin 25.5.0, arm64), first-party API, subscription auth (Claude Max).
Live A/B probe, same machine, same minute, headless:
Transcript forensics across all local projects (16 total advisor
server_tool_usecalls, 2026-07-08 through 2026-07-10, all with 10+ prior tool calls in-session): 16/16 failed withadvisor_tool_result_error/error_code: unavailable. The advisor never succeeded in any real (post-tool-call) session on this account, consistent with the "100% broken in real sessions" finding above.Workaround in place: switched
advisorModeltoclaude-opus-4-8, confirmed working via the probe above.Independent confirmation — first report on native Linux and on 2.1.207 (latest), including a
claude-fable-5[1m]main; fresh A/B correlation IDs below.Environment: Claude Code 2.1.207, native Linux x86_64 (kernel 6.17), first-party Anthropic API, subscription OAuth (Max).
settings.json:"model": "claude-fable-5[1m]","advisorModel": "fable".A/B probes, same machine, minutes apart (2026-07-11, headless
claude -p,--allowedTools "Bash(ls)", prompt = runlsonce, then call the advisor once):| advisorModel | Main model | Prior tool use | Result | Round trip | server_tool_use id | UTC |
|---|---|---|---|---|---|---|
|
fable|claude-fable-5[1m]| 1×Bash(ls)| ❌advisor_tool_result_error/unavailable| 7.9s |srvtoolu_0175ZrxCAp7RcsTgHEAuY6rv| 06:27:53.959Z ||
claude-opus-4-8|claude-opus-4-8| 1×Bash(ls)| ✅advisor_result| 16.0s |srvtoolu_018vFtN7dMbHn9qfHJjpbgTu| 06:28:23.889Z ||
claude-opus-4-8|claude-fable-5[1m]| 1×Bash(ls)| tool not declared at all (client-side pairing rank check) | — | — | — |Same failure minutes earlier in a real session (a Claude Code background job, transcript naturally full of tool calls):
srvtoolu_013amqze16CmSX3q9AuoPQoLat 2026-07-11T06:25:24.659Z →unavailablein 5.5s.The latency signature matches the OP exactly: failures return in ~4–8s (validation rejection, no advisor inference), successes in 16s+.
Two impact notes, possibly useful for prioritization:
opusadvisor is silently not declared under aclaude-fable-5[1m]main), users running Fable 5 as their main model currently have no working advisor at all in any session that contains tool calls — i.e. every real session.Consistent with the deterministic trigger in the OP and #76199:
fableadvisor + ≥1 priortool_useblock ⇒unavailable; executor-irrelevant;opusadvisor immune.Independent reproduction + full local-history scan supporting the client
tool_usetrigger, with a regression window.Environment: macOS 26, Claude Code 2.1.206/2.1.207, Max subscription (OAuth), models
claude-fable-5andclaude-sonnet-5. Reproduces identically in interactive and headless (claude -p), and both through a local proxy chain and direct.Minimal repro (fresh
mktemp -dproject, tiny context):advisor_redacted_result). 7/7 zero-tool runs succeeded same day.Bash: lsfirst, then call advisor → server returns{"type":"advisor_tool_result_error","error_code":"unavailable"}. Fails on both fable-5 and sonnet-5 mains. Context is a few KB, so this is not size-related.Full scan of 265 historical advisor calls (all local session transcripts, 2026-04-11 → 2026-07-12), cross-tabulated by result × "any client
tool_usebefore the advisor call":| period | OK w/ tools | OK w/o tools | ERR(unavailable) w/ tools | ERR w/o tools |
|---|---|---|---|---|
| 04-11 → 07-01 | 185 | 7 | 0 | 0 |
| 07-02 → 07-12 | 0 | 25 | 43 | 1* |
\* the single exception appears to be a resumed session carrying earlier tool history.
Last success with prior tool_use: 2026-07-01T21:30Z. First
unavailable: 2026-07-02T05:34Z. So this looks like a server-side regression deployed around 2026-07-02, presumably in how the executor transcript is serialized into the advisor's input. Server-sideserver_tool_useblocks (tool_search, advisor itself) do NOT trigger it — only clienttool_use/tool_result.Additional observations:
advisorModel: claude-opus-4-8is immune (Bash first, then advisor → OK) on sonnet/opus mains, confirming the A/B earlier in this thread. On a fable-5 main the API rejects it:tools.N.model: 'claude-opus-4-8' cannot be used as an advisor when the request model is 'claude-fable-5'(invalid_request_error, e.g. req_011CcwjyG7i8mEC2QHm3pojd), so fable-main sessions have no advisor workaround other than calling it before any tool use.error_code: overloadedis a separate, genuinely transient per-turn error (same 453KB prompt retried 15 minutes later succeeded 4/4) — not this bug.This is essentially a silent fallback failure — the Fable advisor drops out without escalating to the Opus alternative when the transcript has tool calls.
For production systems, a three-level fallback pattern handles this robustly:
The key insight: users should never see a bare "unavailable" error when there's a known working alternative (Opus). That's a routing/gating gap, not a model limitation.
I built a free diagnostic tool that can scan agent configs for these types of fallback chain gaps — shows exactly where each link is missing protection: ark-6ek.pages.dev/diagnose
A lot of token churn here. With Advisor on, the entire transcript is sent as input on every call!
CLI allows for Fable set as Advisor, but it fails 100% of the time. For now we just need to remember to turn it off when you're not using the Sonnet + Opus combination.
<img width="551" height="141" alt="Image" src="https://github.com/user-attachments/assets/f26bbe93-ccce-4a87-a3f4-cca3341df635" />
<img width="292" height="50" alt="Image" src="https://github.com/user-attachments/assets/c217ef18-513f-466d-8cdf-f9d255d907fc" />
For me Fable is now unavailable as a Advisor selection. Wondering if they deactivated for everybody.
<img width="801" height="343" alt="Image" src="https://github.com/user-attachments/assets/b935a662-d925-48d4-bf97-e4a4d9111054" />