Created
June 9, 2026 17:29
-
-
Save AnExiledDev/8b9b504d995a59ebe825cfb1cb569b3c to your computer and use it in GitHub Desktop.
Claude Code Changlog v2.1.170
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Changelog for version 2.1.170 | |
| ## Summary | |
| This release introduces Claude Fable 5, a new highest-tier model for the hardest and longest-running tasks, replacing the previous Opus 4.8 launch announcement with a Fable 5 announcement banner. The release also hardens how tool calls are handled when a server-side model fallback retracts in-flight work, adds a new SDK protocol event for model refusal fallbacks, and tracks usage-credit overage state from the API. | |
| ## New Features | |
| ### Claude Fable 5 Model Support | |
| What: Claude Fable 5 is now a supported model in Claude Code, positioned as the most capable option for the hardest and longest-running tasks. | |
| Usage: | |
| ```bash | |
| claude --model fable | |
| claude --model claude-fable-5 | |
| ``` | |
| Details: | |
| - Alias `fable` (and `fable[1m]` for 1M context) resolve to Fable 5 | |
| - Full model IDs: `claude-fable-5` (firstParty, vertex, foundry, gateway), `anthropic.claude-fable-5` (Bedrock/Mantle) | |
| - Context window: 64k default output / 128k max — same as Opus 4.8 | |
| - Default effort level: `high` (same as Opus 4.8) | |
| - Fable 5 appears at the top of the `/model` picker for eligible accounts | |
| - A companion model, `claude-mythos-5`, is also registered internally for the safety-refusal fallback lane | |
| - The `/model` command's help text now reads: "Provide an alias for the latest model (e.g. 'fable', 'opus', or 'sonnet') or a model's full name (e.g. 'claude-fable-5')." | |
| Evidence: Model ID registration and picker entry (search for `"claude-fable-5"` and `"Fable 5 · Most capable for your hardest and longest-running tasks"`) | |
| ### Fable 5 Environment Variables for Custom Providers | |
| What: Four new environment variables let BYOC (Bring Your Own Claude) and API-gateway deployments point Claude Code at a custom Fable 5 endpoint. | |
| Usage: | |
| ```bash | |
| export ANTHROPIC_DEFAULT_FABLE_MODEL=my-fable-5-endpoint | |
| export ANTHROPIC_DEFAULT_FABLE_MODEL_NAME="My Fable 5" | |
| export ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION="Custom Fable 5 model" | |
| export ANTHROPIC_DEFAULT_FABLE_MODEL_SUPPORTED_CAPABILITIES=vision,tools | |
| ``` | |
| Details: | |
| - `ANTHROPIC_DEFAULT_FABLE_MODEL` — custom Fable 5 model ID (enables the alias and fallback logic even on non-firstParty providers) | |
| - `ANTHROPIC_DEFAULT_FABLE_MODEL_NAME` — display name shown in the model picker | |
| - `ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION` — description shown alongside the model | |
| - `ANTHROPIC_DEFAULT_FABLE_MODEL_SUPPORTED_CAPABILITIES` — capabilities string for the model | |
| - `VERTEX_REGION_CLAUDE_FABLE_5` — region override for Fable 5 on Vertex AI (same pattern as the existing `VERTEX_REGION_CLAUDE_*` vars) | |
| - When `ANTHROPIC_DEFAULT_FABLE_MODEL` is set, Claude Code shows a "Custom Fable model" entry in the picker in place of the default Fable 5 entry (on non-firstParty providers) | |
| - A new fallback hint is also surfaced for providers where these vars are absent: "To enable automatic fallback on this provider, set `ANTHROPIC_DEFAULT_FABLE_MODEL` to your Fable 5 model ID and `ANTHROPIC_DEFAULT_OPUS_MODEL` to your Opus 4.8 model ID." | |
| Evidence: Env var registration (search for `"ANTHROPIC_DEFAULT_FABLE_MODEL"`) and custom-model picker entry (search for `"Custom Fable model"`) | |
| ### Fable 5 Launch Announcement Banner | |
| What: First-party users who have Fable 5 available see a one-time "Fable 5 is here!" announcement at session start, replacing the old Opus 4.8 announcement. | |
| Details: | |
| - For users on Fable 5: "Fable 5 is here! Our newest model for complex, long-running work" | |
| - For users not yet on Fable 5 but with access to the picker: "Meet Fable 5, our newest model for complex, long-running work. Try anytime with /model." | |
| - If the account uses plan limits and the plan-limits end date is in the future: "Included in your plan limits until [date], then switch to usage credits to continue." | |
| - Controlled by the `tengu_saffron_lattice` feature flag (fields: `enabled`, `planLimitsEndDate`, `hideRateLimitsDescription`) | |
| - Shown once; suppressed after first view via `tengu_fable5_launch_shown` telemetry event | |
| Evidence: Announcement component and feature flag (search for `"Fable 5 is here!"` and `"tengu_saffron_lattice"`) | |
| ### `CLAUDE_CODE_DISABLE_MOUSE` Environment Variable | |
| What: A new environment variable to disable mouse support in the CLI. | |
| Usage: | |
| ```bash | |
| export CLAUDE_CODE_DISABLE_MOUSE=1 | |
| claude | |
| ``` | |
| Details: | |
| - When set to any truthy value, mouse interaction support is disabled in the terminal UI | |
| - Useful in environments where mouse events interfere with other terminal applications or multiplexers | |
| Evidence: New `rEH()` function (search for `"CLAUDE_CODE_DISABLE_MOUSE"`) | |
| ### Model Refusal Fallback SDK Protocol Event | |
| What: A new `model_refusal_fallback` system event is now emitted over the SDK protocol whenever the primary model returns a safety refusal and the session automatically retries on a fallback model. | |
| Details: | |
| - Event fields: `trigger: "refusal"`, `direction: "retry" | "revert" | "sticky"`, `original_model`, `fallback_model`, `request_id`, `api_refusal_category` (e.g. `"cyber"`, `"bio"`), `api_refusal_explanation`, `retracted_message_uuids` | |
| - `retracted_message_uuids` lists the wire UUIDs of messages that were rolled back by the fallback — SDK consumers should evict these from transcript state on receipt | |
| - The `supersedes` field on incoming messages was also updated: it can now include tombstoned `tool_result` frames from the refused leg, not only assistant frames | |
| - `refusalFallbackLaneEnabled` and `refusalFallbackSettingToggleVisible` are now communicated from the daemon to the main process at startup rather than read directly from a feature flag, making these states available to SDK consumers via init | |
| Evidence: New schema definition (search for `"model_refusal_fallback"` and `"retracted_message_uuids"`) | |
| ## Improvements | |
| ### xhigh Effort Warning | |
| When a model session is set to `xhigh` (max) effort, a new advisory message is now shown in the model selector: "May use excessive tokens resulting in long response times or overthinking. Use sparingly for the hardest tasks." | |
| Evidence: New constant (search for `"May use excessive tokens resulting in long response times or overthinking"`) | |
| ### Cleaner Safety Refusal Error Messages | |
| The error message displayed when a model refuses a request for safety reasons was reworded. Previously the wording varied based on category ("cybersecurity or biology topics" vs "sensitive topics"); it now consistently reads: "[Model] has safety measures that flag messages on most cybersecurity or biology topics (https://www.anthropic.com/legal/aup). They may flag safe, normal content as well. These measures let us bring you Mythos-level capability in other areas sooner, and we're working to refine them." | |
| Evidence: Updated refusal error renderer (search for `"has safety measures that flag messages on most cybersecurity or biology topics"`) | |
| ### Model Picker Deduplication | |
| The model option list now de-duplicates entries by value before rendering. Duplicate rows are silently dropped with a warning log entry: "model options: dropping duplicate row [label] (value [value])". Disabled entries are sorted to the bottom of the list, after all enabled options. | |
| Evidence: New deduplication pass (search for `"model options: dropping duplicate row"`) | |
| ### Subagent Model Picker Includes Fable | |
| The model picker used when configuring subagents (e.g. in the Workflow tool's agent options) now includes a Fable option alongside Sonnet, Opus, and Haiku. This allows subagents to be spawned on Fable 5 when available. | |
| Evidence: Subagent model list (search for `"Most capable for your hardest and longest-running tasks"` in the subagent picker function) | |
| ### Fable 5 Noted in System Prompt Model Guidance | |
| The system prompt context now mentions Fable 5 when describing available models: "The most recent Claude models are Fable 5 and the Claude 4.X family. Model IDs — Fable 5: '[id]', Opus 4.8: '[id]', Sonnet 4.6: '[id]', Haiku 4.5: '[id]'." | |
| Evidence: Updated system prompt string (search for `"The most recent Claude models are Fable 5"`) | |
| ### `overageInUse` Rate Limit Field | |
| A new `overageInUse` boolean is parsed from the `anthropic-ratelimit-unified-overage-in-use: true` response header. When this field is set on the rate limit state, registered overage listeners are notified. This enables the UI to react immediately when Fable 5 usage transitions into the credit-based overage regime. | |
| Evidence: Header parsing and listener notification (search for `"anthropic-ratelimit-unified-overage-in-use"`) | |
| ### Model Not Found Error Now Carries `notFound` Flag | |
| When model validation fails because the model ID was not found (HTTP 404 or message containing "model:"), the returned validation object now includes `notFound: true` in addition to the error string. This allows callers to distinguish "not found" from other validation failures. | |
| Evidence: Model validation error handling (search for `"notFound: !0"`) | |
| ### Settings Documentation Updated for Fable | |
| The internal settings schema reference (used by the `update-config` skill and related tooling) now shows `fable` as a valid model option: `"model": "sonnet", // or "fable", "opus", "haiku", full model ID`. | |
| Evidence: Settings schema doc (search for `"// or \"fable\", \"opus\", \"haiku\""`) | |
| ### Effort Flag Passthrough Now Requires All Three Models Launched | |
| The `--effort` flag is now passed to subprocesses (e.g. headless subagent spawns) only when all three model launch flags — Opus 4.7, Opus 4.8, and Fable 5 — have been acknowledged by the user (`unpinOpus47LaunchEffort`, `unpinOpus48LaunchEffort`, `unpinFable5LaunchEffort` all true). Previously only Opus 4.7 and Opus 4.8 were required. | |
| Evidence: Conditional effort passthrough (search for `"unpinFable5LaunchEffort"`) | |
| ## Bug Fixes | |
| - Server fallback tombstone cancels in-flight tool calls gracefully — when a server-side refusal fallback retracts a tool dispatch mid-flight, tool calls now return a clean cancellation result with message "Tool dispatch was retracted by a server fallback; the input may be truncated." instead of raising an uncaught exception. The abort signal reason `"server-fallback-tombstone"` is checked at each phase: validate input, permission, pre-call, and post-call. (search for `"Tool dispatch was retracted by a server fallback"`) | |
| - Fable 5 usage-credit 429 errors handled correctly — the retry-on-overload logic now correctly skips retrying 429 responses that contain "usage credits are required" or "extra usage is required" when the overage-disabled reason is `fetch_error` or `org_level_disabled_until`, preventing unnecessary retries in permanent overage states. (search for `"usage credits are required"`) | |
| - Session prompt history no longer skips when session persistence is forced — the `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` env var check was removed from the prompt-history skip condition, fixing a case where history could be skipped unexpectedly when session persistence was forced via env var. (search for `"CLAUDE_CODE_FORCE_SESSION_PERSISTENCE"`) | |
| - Mantle provider uses Opus 4.7 instead of 4.8 — `HT()` (the default Opus model resolver) now returns `opus47` when the provider is `"mantle"`, matching the correct model availability on that provider. (search for `"r6() === \"mantle\""`) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment