Skip to content

Commit 9dcac0c

Browse files
github-actions[bot]claude
authored andcommitted
docs: Claude Code 2.1.96 + User Profiles API
🔧 Claude Code 2.1.96: - Fixed Bedrock 403 auth issues (AWS_BEARER_TOKEN_BEDROCK regression) - Default effort level now high for API/platform users - Compact Slack headers + plugin skill improvements 🆕 User Profiles API (beta): - user-profiles-2026-03-24 beta feature - CRUD operations for user profiles with metadata - Trust grants and enrollment URL support 📚 Platform docs: - Sonnet 4.6 max effort support - Major updates to build-with-claude, agent-sdk, API docs - Enhanced Vertex AI documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 237fe84 commit 9dcac0c

532 files changed

Lines changed: 30923 additions & 4188 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

content/.metadata.json

Lines changed: 1362 additions & 935 deletions
Large diffs are not rendered by default.

content/CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## 2.1.96
4+
5+
- Fixed Bedrock requests failing with `403 "Authorization header is missing"` when using `AWS_BEARER_TOKEN_BEDROCK` or `CLAUDE_CODE_SKIP_BEDROCK_AUTH` (regression in 2.1.94)
6+
7+
## 2.1.94
8+
9+
- Added support for Amazon Bedrock powered by Mantle, set `CLAUDE_CODE_USE_MANTLE=1`
10+
- Changed default effort level from medium to high for API-key, Bedrock/Vertex/Foundry, Team, and Enterprise users (control this with `/effort`)
11+
- Added compact `Slacked #channel` header with a clickable channel link for Slack MCP send-message tool calls
12+
- Added `keep-coding-instructions` frontmatter field support for plugin output styles
13+
- Added `hookSpecificOutput.sessionTitle` to `UserPromptSubmit` hooks for setting the session title
14+
- 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
15+
- 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
16+
- 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
17+
- Fixed plugin skill hooks defined in YAML frontmatter being silently ignored
18+
- Fixed plugin hooks failing with "No such file or directory" when `CLAUDE_PLUGIN_ROOT` was not set
19+
- Fixed `${CLAUDE_PLUGIN_ROOT}` resolving to the marketplace source directory instead of the installed cache for local-marketplace plugins on startup
20+
- Fixed scrollback showing the same diff repeated and blank pages in long-running sessions
21+
- Fixed multiline user prompts in the transcript indenting wrapped lines under the `` caret instead of under the text
22+
- Fixed Shift+Space inserting the literal word "space" instead of a space character in search inputs
23+
- Fixed hyperlinks opening two browser tabs when clicked inside tmux running in an xterm.js-based terminal (VS Code, Hyper, Tabby)
24+
- Fixed an alt-screen rendering bug where content height changes mid-scroll could leave compounding ghost lines
25+
- Fixed `FORCE_HYPERLINK` environment variable being ignored when set via `settings.json` `env`
26+
- Fixed native terminal cursor not tracking the selected tab in dialogs, so screen readers and magnifiers can follow tab navigation
27+
- Fixed Bedrock invocation of Sonnet 3.5 v2 by using the `us.` inference profile ID
28+
- Fixed SDK/print mode not preserving the partial assistant response in conversation history when interrupted mid-stream
29+
- Improved `--resume` to resume sessions from other worktrees of the same repo directly instead of printing a `cd` command
30+
- Fixed CJK and other multibyte text being corrupted with U+FFFD in stream-json input/output when chunk boundaries split a UTF-8 sequence
31+
- [VSCode] Reduced cold-open subprocess work on starting a session
32+
- [VSCode] Fixed dropdown menus selecting the wrong item when the mouse was over the list while typing or using arrow keys
33+
- [VSCode] Added a warning banner when `settings.json` files fail to parse, so users know their permission rules are not being applied
34+
335
## 2.1.92
436

537
- Added `forceRemoteSettingsRefresh` policy setting: when set, the CLI blocks startup until remote managed settings are freshly fetched, and exits if the fetch fails (fail-closed)

content/blog/engineering/claude-code-best-practices.md

Lines changed: 516 additions & 118 deletions
Large diffs are not rendered by default.

content/blog/engineering/claude-code-sandboxing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Our new sandboxed bash tool and Claude Code on the web offer substantial improve
6868
To get started with these tools:
6969

7070
1. Run `/sandbox` in Claude and check out [our docs](https://docs.claude.com/en/docs/claude-code/sandboxing) on how to configure this sandbox.
71-
2. Go to [claude.com/code](http://claude.ai/redirect/website.v1.b0157fd3-99db-436f-a42e-5cef466be6b0/code) to try out Claude Code on the web.
71+
2. Go to [claude.com/code](http://claude.ai/redirect/website.v1.91b9b576-38af-40d7-8b65-118a3bfcad75/code) to try out Claude Code on the web.
7272

7373
Or, if you're building your own agents, check out our [open-sourced sandboxing code](https://github.com/anthropic-experimental/sandbox-runtime), and consider integrating it into your work. We look forward to seeing what you build.
7474

content/claude-code-manifest.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "@anthropic-ai/claude-code",
3-
"version": "2.1.92",
3+
"version": "2.1.96",
44
"author": {
55
"name": "Anthropic",
66
"email": "support@anthropic.com"
77
},
88
"license": "SEE LICENSE IN README.md",
9-
"_id": "@anthropic-ai/claude-code@2.1.92",
9+
"_id": "@anthropic-ai/claude-code@2.1.96",
1010
"maintainers": [
1111
{
1212
"name": "zak-anthropic",
@@ -73,20 +73,20 @@
7373
"claude": "cli.js"
7474
},
7575
"dist": {
76-
"shasum": "536b5c573ae5d3ba85ace514e2e72d37c3d5e464",
77-
"tarball": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.1.92.tgz",
76+
"shasum": "d528e9638292c7b275c896b283e4a8e6959ef0ef",
77+
"tarball": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-2.1.96.tgz",
7878
"fileCount": 20,
79-
"integrity": "sha512-mNGw/IK3+1yHsQBeKaNtdTPCrQDkUEuNTJtm3OBTXs4bBkUVdIgRme/34ZnbZkl2VMMYPoNaTvqX2qJZ9EdSxQ==",
79+
"integrity": "sha512-ETrc0+1qWHaqtKi+ixbsAecZyM+H52VIJj+zWIvw3jBU/JZ9v5vnE2kHShM1lcpr+Gji7GXk23l0CMGLA7hC0g==",
8080
"signatures": [
8181
{
82-
"sig": "MEUCIA9Pbrb5aRJaP0BIUvY7wPnYuXxf1bmtO2STf8s5CFUrAiEA5Ls/eijn2heuQIP7Mft2b0HcFrhaQgUt61c78t2tvYM=",
82+
"sig": "MEUCIDfVFVFY0qtDRV8JGrx0/QKyh70/hWuV+lO0LSTt2zz6AiEA20JmCcoQACXgZOSLdrLxZ8I2356j3KvBbianSlhxu0A=",
8383
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
8484
}
8585
],
86-
"unpackedSize": 44517413
86+
"unpackedSize": 48924836
8787
},
8888
"type": "module",
89-
"_from": "file:/home/runner/work/claude-cli-internal/claude-cli-internal/build-external/anthropic-ai-claude-code-2.1.92.tgz",
89+
"_from": "file:/home/runner/work/claude-cli-internal/claude-cli-internal/build-external/anthropic-ai-claude-code-2.1.96.tgz",
9090
"engines": {
9191
"node": ">=18.0.0"
9292
},
@@ -97,8 +97,8 @@
9797
"name": "wolffiex",
9898
"email": "wolffiex@anthropic.com"
9999
},
100-
"_resolved": "/home/runner/work/claude-cli-internal/claude-cli-internal/build-external/anthropic-ai-claude-code-2.1.92.tgz",
101-
"_integrity": "sha512-mNGw/IK3+1yHsQBeKaNtdTPCrQDkUEuNTJtm3OBTXs4bBkUVdIgRme/34ZnbZkl2VMMYPoNaTvqX2qJZ9EdSxQ==",
100+
"_resolved": "/home/runner/work/claude-cli-internal/claude-cli-internal/build-external/anthropic-ai-claude-code-2.1.96.tgz",
101+
"_integrity": "sha512-ETrc0+1qWHaqtKi+ixbsAecZyM+H52VIJj+zWIvw3jBU/JZ9v5vnE2kHShM1lcpr+Gji7GXk23l0CMGLA7hC0g==",
102102
"_npmVersion": "10.8.2",
103103
"description": "Use Claude, Anthropic's AI assistant, right from your terminal. Claude can understand your codebase, edit files, run terminal commands, and handle entire workflows for you.",
104104
"directories": {},
@@ -118,7 +118,7 @@
118118
"@img/sharp-linuxmusl-arm64": "^0.34.2"
119119
},
120120
"_npmOperationalInternal": {
121-
"tmp": "tmp/claude-code_2.1.92_1775261159015_0.18519671794064396",
121+
"tmp": "tmp/claude-code_2.1.96_1775622763975_0.7218051294969574",
122122
"host": "s3://npm-registry-packages-npm-production"
123123
}
124124
}

content/en/about-claude/models/overview.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Claude is a family of state-of-the-art large language models developed by Anthro
66

77
## Choosing a model
88

9-
If you're unsure which model to use, consider starting with **Claude Opus 4.6** for the most complex tasks. It is the latest generation model with exceptional performance in coding and reasoning.
9+
If you're unsure which model to use, consider starting with **Claude Opus 4.6** for the most complex tasks. It is the most intelligent broadly available model with exceptional performance in coding and reasoning.
1010

1111
All current Claude models support text and image input, text output, multilingual capabilities, and vision. Models are available via the Claude API, AWS Bedrock, and Google Vertex AI.
1212

@@ -16,7 +16,7 @@ Once you've picked a model, [learn how to make your first API call](/docs/en/get
1616

1717
| Feature | Claude Opus 4.6 | Claude Sonnet 4.6 | Claude Haiku 4.5 |
1818
|:--------|:----------------|:------------------|:-----------------|
19-
| **Description** | The most intelligent model for building agents and coding | The best combination of speed and intelligence | The fastest model with near-frontier intelligence |
19+
| **Description** | The most intelligent broadly available model for agents and coding | The best combination of speed and intelligence | The fastest model with near-frontier intelligence |
2020
| **Claude API ID** | claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5-20251001 |
2121
| **Claude API alias** | claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5 |
2222
| **AWS Bedrock ID** | anthropic.claude-opus-4-6-v1 | anthropic.claude-sonnet-4-6 | anthropic.claude-haiku-4-5-20251001-v1:0 |
@@ -35,9 +35,13 @@ _<sup>1 - See the [pricing page](/docs/en/about-claude/pricing) for complete pri
3535

3636
_<sup>2 - **Reliable knowledge cutoff** indicates the date through which a model's knowledge is most extensive and reliable. **Training data cutoff** is the broader date range of training data used. For more information, see [Anthropic's Transparency Hub](https://www.anthropic.com/transparency).</sup>_
3737

38+
<Info>
39+
[Claude Mythos Preview](https://anthropic.com/glasswing) is offered separately as a research preview model for defensive cybersecurity workflows as part of [Project Glasswing](https://anthropic.com/glasswing). Access is invitation-only and there is no self-serve sign-up.
40+
</Info>
41+
3842
<Note>Models with the same snapshot date (e.g., 20240620) are identical across all platforms and do not change. The snapshot date in the model name ensures consistency and allows developers to rely on stable performance across different environments.</Note>
3943

40-
<Note>Starting with **Claude Sonnet 4.5 and all subsequent models** (including Claude Sonnet 4.6), AWS Bedrock and Google Vertex AI offer two endpoint types: **global endpoints** (dynamic routing for maximum availability) and **regional endpoints** (guaranteed data routing through specific geographic regions). For more information, see the [third-party platform pricing section](/docs/en/about-claude/pricing#third-party-platform-pricing).</Note>
44+
<Note>Starting with **Claude Sonnet 4.5 and all subsequent models** (including Claude Sonnet 4.6), AWS Bedrock offers two endpoint types: **global endpoints** (dynamic routing for maximum availability) and **regional endpoints** (guaranteed data routing through specific geographic regions). Google Vertex AI offers three endpoint types: global endpoints, **multi-region endpoints** (dynamic routing within a geographic area), and regional endpoints. For more information, see the [third-party platform pricing section](/docs/en/about-claude/pricing#third-party-platform-pricing).</Note>
4145

4246
<Tip>
4347
You can query model capabilities and token limits programmatically with the [Models API](/docs/en/api/models/list). The response includes `max_input_tokens`, `max_tokens`, and a `capabilities` object for every available model.

content/en/about-claude/pricing.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,25 @@ MTok = Million tokens. The "Base Input Tokens" column shows standard input prici
3333

3434
## Third-party platform pricing
3535

36-
Claude models are available on [AWS Bedrock](/docs/en/build-with-claude/claude-on-amazon-bedrock), [Google Vertex AI](/docs/en/build-with-claude/claude-on-vertex-ai), and [Microsoft Foundry](/docs/en/build-with-claude/claude-in-microsoft-foundry). For official pricing, visit:
36+
Claude models are available on [AWS Bedrock](/docs/en/build-with-claude/claude-in-amazon-bedrock), [Google Vertex AI](/docs/en/build-with-claude/claude-on-vertex-ai), and [Microsoft Foundry](/docs/en/build-with-claude/claude-in-microsoft-foundry). For official pricing, visit:
3737
- [AWS Bedrock pricing](https://aws.amazon.com/bedrock/pricing/)
3838
- [Google Vertex AI pricing](https://cloud.google.com/vertex-ai/generative-ai/pricing)
3939
- [Microsoft Foundry pricing](https://azure.microsoft.com/en-us/pricing/details/ai-foundry/#pricing)
4040

4141
<Note>
42-
**Regional endpoint pricing for Claude 4.5 models and beyond**
42+
**Regional and multi-region endpoint pricing for Claude 4.5 models and beyond**
4343

44-
Starting with Claude Sonnet 4.5 and Haiku 4.5, AWS Bedrock and Google Vertex AI offer two endpoint types:
45-
- **Global endpoints:** Dynamic routing across regions for maximum availability
46-
- **Regional endpoints:** Data routing guaranteed within specific geographic regions
44+
Starting with Claude Sonnet 4.5 and Haiku 4.5:
45+
- **AWS Bedrock** offers two endpoint types: global endpoints (dynamic routing for maximum availability) and regional endpoints (guaranteed data routing through specific geographic regions).
46+
- **Google Vertex AI** offers three endpoint types: global endpoints, multi-region endpoints (dynamic routing within a geographic area), and regional endpoints.
4747

48-
Regional endpoints include a 10% premium over global endpoints. The Claude API (1P) is global by default; for 1P data residency options and pricing, see [Data residency pricing](#data-residency-pricing) below.
48+
Regional and multi-region endpoints include a 10% premium over global endpoints. The Claude API (1P) is global by default; for 1P data residency options and pricing, see [Data residency pricing](#data-residency-pricing) below.
4949

5050
**Scope:** This pricing structure applies to Claude Sonnet 4.5, Haiku 4.5, and all future models. Earlier models (Claude Sonnet 4, Opus 4, and prior releases) retain their existing pricing.
5151

5252
For implementation details and code examples:
5353
- [AWS Bedrock global vs regional endpoints](/docs/en/build-with-claude/claude-on-amazon-bedrock#global-vs-regional-endpoints)
54-
- [Google Vertex AI global vs regional endpoints](/docs/en/build-with-claude/claude-on-vertex-ai#global-vs-regional-endpoints)
54+
- [Google Vertex AI global, multi-region, and regional endpoints](/docs/en/build-with-claude/claude-on-vertex-ai#global-multi-region-and-regional-endpoints)
5555
</Note>
5656

5757
## Feature-specific pricing
@@ -126,7 +126,7 @@ For more information about batch processing, see the [batch processing documenta
126126

127127
### Long context pricing
128128

129-
Claude Opus 4.6 and Sonnet 4.6 include the full [1M token context window](/docs/en/build-with-claude/context-windows) at standard pricing. (A 900k-token request is billed at the same per-token rate as a 9k-token request.) Prompt caching and batch processing discounts apply at standard rates across the full context window.
129+
[Claude Mythos Preview](https://anthropic.com/glasswing), Opus 4.6 and Sonnet 4.6 include the full [1M token context window](/docs/en/build-with-claude/context-windows) at standard pricing. (A 900k-token request is billed at the same per-token rate as a 9k-token request.) Prompt caching and batch processing discounts apply at standard rates across the full context window.
130130

131131
### Tool use pricing
132132

content/en/agent-sdk/agent-loop.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ The `effort` option controls how much reasoning Claude applies. Lower effort lev
169169
| `"high"` | Thorough analysis | Refactors, debugging |
170170
| `"max"` | Maximum reasoning depth | Multi-step problems requiring deep analysis |
171171

172-
If you don't set `effort`, the Python SDK leaves the parameter unset and defers to the model's default behavior. The TypeScript SDK defaults to `"high"`.
172+
If you don't set `effort`, both SDKs leave the parameter unset and the underlying engine resolves a model-dependent default.
173173

174174
<Note>
175175
`effort` trades latency and token cost for reasoning depth within each response. [Extended thinking](/docs/en/build-with-claude/extended-thinking) is a separate feature that produces visible chain-of-thought blocks in the output. They are independent: you can set `effort: "low"` with extended thinking enabled, or `effort: "max"` without it.
@@ -185,7 +185,7 @@ The permission mode option (`permission_mode` in Python, `permissionMode` in Typ
185185
|:-----|:---------|
186186
| `"default"` | Tools not covered by allow rules trigger your approval callback; no callback means deny |
187187
| `"acceptEdits"` | Auto-approves file edits, other tools follow default rules |
188-
| `"plan"` | No tool execution; Claude produces a plan for review |
188+
| `"plan"` | Read-only tools run; tools that make changes are blocked while Claude produces a plan for review |
189189
| `"dontAsk"` | Never prompts. Tools pre-approved by [permission rules](https://code.claude.com/docs/en/settings#permission-settings) run, everything else is denied |
190190
| `"auto"` (TypeScript only) | Uses a model classifier to approve or deny each tool call. See [Auto mode](https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode) for availability and behavior |
191191
| `"bypassPermissions"` | Runs all allowed tools without asking. Cannot be used when running as root on Unix. Use only in isolated environments where the agent's actions cannot affect systems you care about |

content/en/agent-sdk/custom-tools.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ This guide covers how to define tools with input schemas and handlers, bundle th
1717
| Pre-approve a tool | Add to your allowed tools. See [Configure allowed tools](#configure-allowed-tools). |
1818
| Remove a built-in tool from Claude's context | Pass a `tools` array listing only the built-ins you want. See [Configure allowed tools](#configure-allowed-tools). |
1919
| Let Claude call tools in parallel | Set `readOnlyHint: true` on tools with no side effects. See [Add tool annotations](#add-tool-annotations). |
20-
| Handle errors without stopping the loop | Return `isError: true` instead of throwing. See [Handle errors](#handle-errors). |
20+
| Control the error message Claude sees | Return `isError: true` instead of throwing. See [Handle errors](#handle-errors). |
2121
| Return images or files | Use `image` or `resource` blocks in the content array. See [Return images and resources](#return-images-and-resources). |
2222
| Scale to many tools | Use [tool search](/docs/en/agent-sdk/tool-search) to load tools on demand. |
2323

@@ -339,12 +339,12 @@ To limit which built-ins Claude can use, prefer `tools` over disallowed tools. O
339339

340340
## Handle errors
341341

342-
How your handler reports errors determines whether the agent loop continues or stops:
342+
In both cases the agent loop continues. An uncaught exception is wrapped by the MCP server and surfaces to Claude as a tool error result, so the loop does not stop. Returning `isError: true` (TypeScript) or `"is_error": True` (Python) is preferred because it lets you control the error message Claude sees:
343343

344344
| What happens | Result |
345345
|:-------------|:-------|
346-
| Handler throws an uncaught exception | Agent loop stops. Claude never sees the error, and the `query` call fails. |
347-
| Handler catches the error and returns `isError: true` (TS) / `"is_error": True` (Python) | Agent loop continues. Claude sees the error as data and can retry, try a different tool, or explain the failure. |
346+
| Handler throws an uncaught exception | Agent loop continues. Claude sees the exception's stringified message as the tool result. |
347+
| Handler catches the error and returns `isError: true` (TS) / `"is_error": True` (Python) | Agent loop continues. Claude sees your formatted error message as data and can retry, try a different tool, or explain the failure. |
348348

349349
The example below catches two kinds of failures inside the handler instead of letting them throw. A non-200 HTTP status is caught from the response and returned as an error result. A network error or invalid JSON is caught by the surrounding `try/except` (Python) or `try/catch` (TypeScript) and also returned as an error result. In both cases the handler returns normally and the agent loop continues.
350350

@@ -381,8 +381,8 @@ async def fetch_data(args: dict[str, Any]) -> dict[str, Any]:
381381
data = response.json()
382382
return {"content": [{"type": "text", "text": json.dumps(data, indent=2)}]}
383383
except Exception as e:
384-
# Catching here keeps the agent loop alive. An uncaught exception
385-
# would end the whole query() call.
384+
# Catching here lets you control the error message Claude sees instead
385+
# of surfacing the raw exception string.
386386
return {
387387
"content": [{"type": "text", "text": f"Failed to fetch data: {str(e)}"}],
388388
"is_error": True,
@@ -424,8 +424,8 @@ tool(
424424
]
425425
};
426426
} catch (error) {
427-
// Catching here keeps the agent loop alive. An uncaught throw
428-
// would end the whole query() call.
427+
// Catching here lets you control the error message Claude sees instead
428+
// of surfacing the raw exception string.
429429
return {
430430
content: [
431431
{

0 commit comments

Comments
 (0)