Claude Code 2.1.94
**Amazon Bedrock-powered inference via Mantle + default effort bump** — agents can now explicitly opt into Bedrock inference (Amazon's managed model endpoint) and will see higher default reasoning effort on provisioned compute, unlocking cost-aware and regulated-environment multi-provider inference.
New primitives
CLAUDE_CODE_USE_MANTLE=1env-varEnable Amazon Bedrock powered by Mantle for inference
/effort default shiftcommand/settingDefault effort level now medium→high for API-key, Bedrock, Vertex, Foundry, Team, and Enterprise users
keep-coding-instructionsfrontmatter fieldPlugin output style control for preserving coding instructions in plugin-rendered output
hookSpecificOutput.sessionTitlehook parameterSet session title from UserPromptSubmit hook via `UserPromptSubmit` hook specification
Plugin skill frontmatter name precedencebehavior/settingPlugin skills declared via `"skills": ["./"]` now use frontmatter `name` instead of directory basename for stable invocation name
Slack MCP compact headeroutput featureCompact `Slacked #channel` header with clickable channel link in send-message tool calls
Workflow recipes
Agents running in regulated or cost-sensitive environments (healthcare, finance, on-premise) need to route inference to customer-owned Bedrock endpoints while maintaining audit trails. Dynamic session titling from hooks unlocks traced, multi-tenant reasoning pipelines where each invocation is named after its legal/operational context.
A subagent orchestrator sets CLAUDE_CODE_USE_MANTLE=1 in its environment, then uses a UserPromptSubmit hook to dynamically set hookSpecificOutput.sessionTitle based on the customer ID and task context (e.g., "acme-legal-discovery-2026-06-09-run-3"). Bedrock routes to the ACME VPC endpoint; the session title appears in audit logs, billing records, and transcripts. Parallel agents inherit the title; downstream queries can reconstruct decision chains by session name.
Plugin skills installed via "skills": ["./"] now have stable invocation names across package managers, and can opt into preserving coding context (instructions) in rendered output. Combined with dynamic session titling, agents can compose reusable skill stacks with deterministic names, audit-friendly output, and traced lineage.
A plugin skill defined with name: "audit-ledger-query" in its frontmatter is always invoked as audit-ledger-query, never basename. Setting keep-coding-instructions: true in frontmatter ensures the rendered output includes the reasoning path, not just results. A UserPromptSubmit hook names the session "audit-ledger-2026-q2-batch-${batchId}". Skill composition becomes reproducible: the same skill-chain run on different data produces comparable audit trails.
Long-running agent workflows (multi-day data pipelines, batch processing) previously silenced rate-limit errors, corrupted multibyte streams, and lost scroll context. 2.1.94 surfaces these issues immediately and makes session resumption from sibling worktrees seamless, eliminating invisible failure modes that trap agents.
A background task spawns Claude Code on a data pipeline. If a 429 hits, the error surfaces immediately instead of silently waiting. If UTF-8-split CJK characters corrupt, the error is caught in stream-json validation. If the session crashes mid-stream, --resume from a sibling worktree picks up the conversation directly, no cd gymnastics. Plugin hooks defined in YAML are now visible, so instrumentation hooks on task checkpoints fire reliably.
Agentic relevance
The Mantle/Bedrock env-var and session-title hook parameters give agents explicit multi-provider inference control and dynamic session naming. The plugin skill frontmatter-name precedence and hook-output control enable stable, repeatable skill composition across install methods. The hardening wave (429 errors, plugin hook visibility, UTF-8 stream-json, terminal accessibility) eliminates silent failures and long-session degradation that could trap agentic workflows in invisible failure modes.
Hardening & fixes (18)
- 429 rate-limit error surfacing — agents no longer appear stuck after Retry-After; error surfaces immediately
- macOS Console login keychain error visibility — locked/out-of-sync keychain errors now surface; `claude doctor` diagnoses fix
- Plugin skill hooks YAML frontmatter parsing — silently-ignored hooks in YAML are now recognized
- `CLAUDE_PLUGIN_ROOT` resolution fixes — hooks no longer fail with "No such file or directory" when env var unset; local-marketplace plugins resolve to installed cache on startup, not marketplace source
- Scrollback rendering — diff repetition and blank pages in long sessions eliminated
- Multiline prompt indenting — wrapped lines no longer incorrectly indent under caret
- Shift+Space keyboard input — no longer inserts literal word "space" in search
- Tmux/xterm.js hyperlink double-tab fix — hyperlinks in tmux terminal emulators no longer open two tabs
- Alt-screen rendering ghost lines — content height changes mid-scroll no longer leave compounding ghost artifacts
- `FORCE_HYPERLINK` env var propagation — now respects setting via `settings.json` `env` block
- Terminal cursor accessibility — native cursor now tracks selected tab in dialogs for screen readers and magnifiers
- Bedrock Sonnet 3.5 v2 invocation — uses correct `us.` inference profile ID
- SDK/print mode conversation history — partial assistant responses preserved when interrupted mid-stream
- `--resume` cross-worktree improvement — resume sessions from other worktrees of same repo directly, no `cd` command output
- CJK/multibyte UTF-8 stream-json corruption — U+FFFD replacement no longer appears when UTF-8 boundaries split mid-character
- VSCode cold-open subprocess reduction — faster session startup
- VSCode dropdown menu selection — mouse interaction no longer selects wrong item during typing/arrow-key navigation
- VSCode settings.json parse warning — users now see a warning banner when config files fail to parse, revealing permission rule failures
Raw changelog
## 2.1.94
- Added support for Amazon Bedrock powered by Mantle, set `CLAUDE_CODE_USE_MANTLE=1`
- Changed default effort level from medium to high for API-key, Bedrock/Vertex/Foundry, Team, and Enterprise users (control this with `/effort`)
- Added compact `Slacked #channel` header with a clickable channel link for Slack MCP send-message tool calls
- Added `keep-coding-instructions` frontmatter field support for plugin output styles
- Added `hookSpecificOutput.sessionTitle` to `UserPromptSubmit` hooks for setting the session title
- Plugin skills declared via `"skills": ["./"]` now use the skill's frontmatter `name` for the invocation name instead of the directory basename, giving a stable name across install methods
- Fixed agents appearing stuck after a 429 rate-limit response with a long Retry-After header — the error now surfaces immediately instead of silently waiting
- Fixed Console login on macOS silently failing with "Not logged in" when the login keychain is locked or its password is out of sync — the error is now surfaced and `claude doctor` diagnoses the fix
- Fixed plugin skill hooks defined in YAML frontmatter being silently ignored
- Fixed plugin hooks failing with "No such file or directory" when `CLAUDE_PLUGIN_ROOT` was not set
- Fixed `${CLAUDE_PLUGIN_ROOT}` resolving to the marketplace source directory instead of the installed cache for local-marketplace plugins on startup
- Fixed scrollback showing the same diff repeated and blank pages in long-running sessions
- Fixed multiline user prompts in the transcript indenting wrapped lines under the `❯` caret instead of under the text
- Fixed Shift+Space inserting the literal word "space" instead of a space character in search inputs
- Fixed hyperlinks opening two browser tabs when clicked inside tmux running in an xterm.js-based terminal (VS Code, Hyper, Tabby)
- Fixed an alt-screen rendering bug where content height changes mid-scroll could leave compounding ghost lines
- Fixed `FORCE_HYPERLINK` environment variable being ignored when set via `settings.json` `env`
- Fixed native terminal cursor not tracking the selected tab in dialogs, so screen readers and magnifiers can follow tab navigation
- Fixed Bedrock invocation of Sonnet 3.5 v2 by using the `us.` inference profile ID
- Fixed SDK/print mode not preserving the partial assistant response in conversation history when interrupted mid-stream
- Improved `--resume` to resume sessions from other worktrees of the same repo directly instead of printing a `cd` command
- Fixed CJK and other multibyte text being corrupted with U+FFFD in stream-json input/output when chunk boundaries split a UTF-8 sequence
- [VSCode] Reduced cold-open subprocess work on starting a session
- [VSCode] Fixed dropdown menus selecting the wrong item when the mouse was over the list while typing or using arrow keys
- [VSCode] Added a warning banner when `settings.json` files fail to parse, so users know their permission rules are not being applied