Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save AnExiledDev/8b9b504d995a59ebe825cfb1cb569b3c to your computer and use it in GitHub Desktop.

Select an option

Save AnExiledDev/8b9b504d995a59ebe825cfb1cb569b3c to your computer and use it in GitHub Desktop.
Claude Code Changlog v2.1.170
# 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