` and fetch before creating the ref. If the remote is empty, push your branch first with `git push -u origin HEAD` and name that branch in the set-head command; `origin/HEAD` then points at the branch you just pushed, so `/security-review` sees an empty diff until the branch diverges from it.
+
diff --git a/content/en/docs/claude-code/feature-availability.md b/content/en/docs/claude-code/feature-availability.md
index 9e9c6bf41..a36220b3a 100644
--- a/content/en/docs/claude-code/feature-availability.md
+++ b/content/en/docs/claude-code/feature-availability.md
@@ -19,7 +19,7 @@ How you authenticate determines which features Claude Code can reach. For a sing
* **Amazon Bedrock**: you use Claude models from the Amazon Bedrock model catalog and set `CLAUDE_CODE_USE_BEDROCK`. The [Mantle endpoint](/docs/en/amazon-bedrock#use-the-mantle-endpoint) (`CLAUDE_CODE_USE_MANTLE`) is covered by this column
* **Claude Platform on AWS**: you bought Claude through AWS Marketplace but call the Anthropic API, and set `CLAUDE_CODE_USE_ANTHROPIC_AWS`
* **Google Cloud's Agent Platform**: Google-operated; you set `CLAUDE_CODE_USE_VERTEX`
-* **Microsoft Foundry**: Anthropic-operated on Azure; you set `CLAUDE_CODE_USE_FOUNDRY`
+* **Microsoft Foundry**: Anthropic-operated; you set `CLAUDE_CODE_USE_FOUNDRY`
### Features available on every provider
@@ -34,7 +34,7 @@ These work on every provider:
Three of these have provider-specific differences:
-* **MCP servers**: [connectors from claude.ai](/docs/en/mcp#use-mcp-servers-from-claude-ai) load only when your claude.ai subscription is the active authentication method, and [tool search](/docs/en/mcp#configure-tool-search) is off by default on Google Cloud's Agent Platform and when `ANTHROPIC_BASE_URL` points to a non-first-party host
+* **MCP servers**: [connectors from claude.ai](/docs/en/mcp#use-mcp-servers-from-claude-ai) load only when your claude.ai subscription is the active authentication method. [Tool search](/docs/en/mcp#configure-tool-search) is off by default on Google Cloud's Agent Platform and when `ANTHROPIC_BASE_URL` points to a non-first-party host, and isn't supported on Microsoft Foundry [deployments hosted on Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)
* **Subagents**: the built-in [Explore subagent](/docs/en/sub-agents#built-in-subagents) caps its inherited model at Opus on the Claude API, and inherits the main conversation's model directly on any other provider, including Claude Platform on AWS
* **[Commands](/docs/en/commands#all-commands)**: `/design-sync` and `/radio` are unavailable on Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, and Claude Platform on AWS, and `/voice` requires a claude.ai account
@@ -80,7 +80,7 @@ These features work in the local CLI but depend on a server-side capability that
| ✗ |
✓ |
See note 1 |
- ✓ |
+ ✓ ([deployments hosted on Anthropic](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)) |
@@ -255,6 +255,7 @@ Each tab lists what is unavailable or partially supported on that provider, with
**Partial support:**
* [Desktop](/docs/en/desktop): only via [Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/overview)
+ * [Web search](/docs/en/tools-reference#websearch-tool-behavior): [deployments hosted on Anthropic](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options) only
* [Auto mode](/docs/en/auto-mode-config): Sonnet 5, Opus 4.7 or later, and Fable 5 only
* [`/loop`](/docs/en/scheduled-tasks): explicit intervals only
* [Zero Data Retention](/docs/en/zero-data-retention): subject to your Azure agreement
diff --git a/content/en/docs/claude-code/github-enterprise-server.md b/content/en/docs/claude-code/github-enterprise-server.md
index eceea20aa..fa74575b9 100644
--- a/content/en/docs/claude-code/github-enterprise-server.md
+++ b/content/en/docs/claude-code/github-enterprise-server.md
@@ -164,7 +164,7 @@ Claude Code installs these marketplaces locally: it registers each entry and clo
### Allowlist GHES marketplaces in managed settings
-If your organization uses [managed settings](/docs/en/settings) to restrict which marketplaces developers can add, use the `hostPattern` source type to allow all marketplaces from your GHES instance without enumerating each repository:
+If your organization uses [managed settings](/docs/en/settings) to restrict which marketplaces developers can add, use the `hostPattern` source type to allow all marketplaces from your GHES instance without enumerating each repository. See [settings files](/docs/en/settings#settings-files) for file locations on each platform. Add the JSON to your `managed-settings.json` file or equivalent MDM policy:
```json theme={null}
{
diff --git a/content/en/docs/claude-code/goal.md b/content/en/docs/claude-code/goal.md
index 055a6be50..f7b14fa04 100644
--- a/content/en/docs/claude-code/goal.md
+++ b/content/en/docs/claude-code/goal.md
@@ -123,7 +123,16 @@ Interrupt the process with Ctrl+C to stop a non-interactive goal before the cond
## How evaluation works
-`/goal` is a wrapper around a session-scoped [prompt-based Stop hook](/docs/en/hooks#prompt-based-hooks). Each time Claude finishes a turn, the condition and the conversation so far are sent to your configured [small fast model](/docs/en/model-config), which defaults to Haiku. The model returns a yes-or-no decision and a short reason. A "no" tells Claude to keep working and includes the reason as guidance for the next turn. A "yes" clears the goal and records an achieved entry in the transcript.
+`/goal` is a wrapper around a session-scoped [prompt-based Stop hook](/docs/en/hooks#prompt-based-hooks). Each time Claude finishes a turn, the condition and the conversation so far are sent to your configured [small fast model](/docs/en/model-config), which defaults to Haiku on the Claude API; on a third-party provider, check your [provider page](/docs/en/third-party-integrations) for the platform's default. The model answers yes or no and gives a short reason.
+
+* **No**: Claude keeps working and takes the reason as guidance for the next turn.
+* **Yes**: Claude Code clears the goal and records an achieved entry in the transcript.
+
+To evaluate on a different model, set [`ANTHROPIC_DEFAULT_HAIKU_MODEL`](/docs/en/model-config#environment-variables).
+
+
+ Claude Code reads `ANTHROPIC_DEFAULT_HAIKU_MODEL` everywhere it uses the small fast model, not only for `/goal` evaluation. When you set it, Claude Code also resolves the [`haiku` alias](/docs/en/model-config#model-aliases) to that model and runs [background functionality](/docs/en/costs#background-token-usage), such as conversation summarization, on it.
+
The evaluator runs on whichever provider your session is configured for. It does not call tools, so it can only judge what Claude has already surfaced in the conversation.
diff --git a/content/en/docs/claude-code/hooks-guide.md b/content/en/docs/claude-code/hooks-guide.md
index eb11919f1..3c162155d 100644
--- a/content/en/docs/claude-code/hooks-guide.md
+++ b/content/en/docs/claude-code/hooks-guide.md
@@ -206,6 +206,8 @@ This hook uses the `PostToolUse` event with an `Edit|Write` matcher, so it runs
}
```
+To test the hook, ask Claude to add a line with single-quoted strings to a JavaScript file, then open the file: with Prettier's default settings, the hook rewrites them to double quotes.
+
On Claude Code v2.1.191 or later you can also write the matcher as `Edit,Write`, since `|` and `,` are interchangeable list separators for tool-name matchers on those versions.
@@ -271,6 +273,10 @@ This example uses a separate script file that the hook calls. The script checks
}
```
+
+
+ Ask Claude to add a comment to your `.env` file. Claude Code blocks the edit before it runs and passes the script's `Blocked:` message to Claude as feedback.
+
### Re-inject context after compaction
@@ -325,6 +331,8 @@ This example appends each change to an audit log. Add this to `~/.claude/setting
The matcher filters by configuration type: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, or `skills`. To block a change from taking effect, exit with code 2 or return `{"decision": "block"}`. See the [ConfigChange reference](/docs/en/hooks#configchange) for the full input schema.
+To confirm the hook records changes, edit a settings file in another editor while a session is running, then open `~/claude-config-audit.log`: the hook appends one JSON line per change with the timestamp, source, and file path.
+
### Reload environment when directory or files change
Some projects set different environment variables depending on which directory you are in. Tools like [direnv](https://direnv.net/) do this automatically in your shell, but Claude's Bash tool doesn't pick up those changes on its own.
@@ -386,7 +394,7 @@ See the [CwdChanged](/docs/en/hooks#cwdchanged) and [FileChanged](/docs/en/hooks
Skip the approval dialog for tool calls you always allow. This example auto-approves `ExitPlanMode`, the tool Claude calls when it finishes presenting a plan and asks to proceed, so you aren't prompted every time a plan is ready.
-Unlike the exit-code examples above, auto-approval requires your hook to write a JSON decision to stdout. A `PermissionRequest` hook fires when Claude Code is about to show a permission dialog, and returning `"behavior": "allow"` answers it on your behalf.
+Unlike the exit-code examples above, auto-approval requires your hook to write a JSON decision to stdout. A `PermissionRequest` hook fires when Claude Code is about to ask you for permission, and returning `"behavior": "allow"` answers the request on your behalf.
The matcher scopes the hook to `ExitPlanMode` only, so no other prompts are affected. Add this to `~/.claude/settings.json`:
@@ -445,7 +453,7 @@ Hook events fire at specific lifecycle points in Claude Code. When an event fire
| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |
| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |
| `PreToolUse` | Before a tool call executes. Can block it |
-| `PermissionRequest` | When a permission dialog appears |
+| `PermissionRequest` | When a tool call needs a permission decision |
| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |
| `PostToolUse` | After a tool call succeeds |
| `PostToolUseFailure` | After a tool call fails |
@@ -767,14 +775,14 @@ The `if` field accepts the same patterns as permission rules: `"Bash(git *)"`, `
Where you add a hook determines its scope:
-| Location | Scope | Shareable |
-| :--------------------------------------------------------- | :--------------------------------- | :----------------------------------------- |
-| `~/.claude/settings.json` | All your projects | No, local to your machine |
-| `.claude/settings.json` | Single project | Yes, can be committed to the repo |
-| `.claude/settings.local.json` | Single project | No, gitignored when Claude Code creates it |
-| Managed policy settings | Organization-wide | Yes, admin-controlled |
-| [Plugin](/docs/en/plugins) `hooks/hooks.json` | When plugin is enabled | Yes, bundled with the plugin |
-| [Skill](/docs/en/skills) or [agent](/docs/en/sub-agents) frontmatter | While the skill or agent is active | Yes, defined in the component file |
+| Location | Scope | Shareable |
+| :--------------------------------------------------------- | :--------------------------------- | :---------------------------------------------------- |
+| `~/.claude/settings.json` | All your projects | No, local to your machine |
+| `.claude/settings.json` | Single project | Yes, can be committed to the repo |
+| `.claude/settings.local.json` | Single project | No, gitignored when Claude Code saves a setting to it |
+| Managed policy settings | Organization-wide | Yes, admin-controlled |
+| [Plugin](/docs/en/plugins) `hooks/hooks.json` | When plugin is enabled | Yes, bundled with the plugin |
+| [Skill](/docs/en/skills) or [agent](/docs/en/sub-agents) frontmatter | While the skill or agent is active | Yes, defined in the component file |
Run [`/hooks`](/docs/en/hooks#the-%2Fhooks-menu) in Claude Code to browse all configured hooks grouped by event.
@@ -896,8 +904,11 @@ Keep these constraints in mind when designing hooks:
* `command`, `http`, `mcp_tool`: 10 minutes. `UserPromptSubmit` lowers these to 30 seconds, and `MessageDisplay` lowers them to 10 seconds.
* `prompt`: 30 seconds.
* `agent`: 60 seconds.
+ * [`SessionEnd`](/docs/en/hooks#sessionend) hooks of any type share a 1.5-second budget. If your settings set a longer per-hook `timeout`, Claude Code raises the budget to match, up to 60 seconds.
* `PostToolUse` hooks can't undo actions since the tool has already executed.
-* `PermissionRequest` hooks don't fire in [non-interactive mode](/docs/en/headless) with the `-p` flag. Use `PreToolUse` hooks for automated permission decisions.
+* `PermissionRequest` hooks fire when Claude Code is about to ask you for permission.
+ * In [non-interactive mode](/docs/en/headless) with the `-p` flag, that prompt only exists when the Agent SDK's [`canUseTool` callback](/docs/en/agent-sdk/permissions) supplies it. In plain `-p` runs or with `--permission-prompt-tool`, use `PreToolUse` hooks for automated permission decisions instead.
+ * Background subagents can't show a prompt in non-interactive mode. Claude Code still runs the hooks for their tool calls, and if no hook returns a decision, it denies the call. In an interactive session, background subagent prompts surface in your main session and the hooks fire as usual.
* `Stop` hooks fire whenever Claude finishes responding, not only at task completion. They don't fire on user interrupts. API errors fire [StopFailure](/docs/en/hooks#stopfailure) instead.
* When multiple `PreToolUse` hooks return [`updatedInput`](/docs/en/hooks#pretooluse) to rewrite a tool's arguments, the last one to finish takes effect. Since hooks run in parallel, the order is non-deterministic. Avoid having more than one hook modify the same tool's input.
@@ -914,7 +925,7 @@ The hook is configured but never executes.
* Run `/hooks` and confirm the hook appears under the correct event
* Check that the matcher pattern matches the tool name exactly. Matchers are case-sensitive
* Verify you're triggering the right event type: `PreToolUse` fires before tool execution, `PostToolUse` fires after
-* If using `PermissionRequest` hooks in non-interactive mode with the `-p` flag, switch to `PreToolUse` instead
+* In non-interactive mode with the `-p` flag, `PermissionRequest` hooks fire only when the Agent SDK's `canUseTool` callback supplies the prompt, or for tool calls inside background subagents. In plain `-p` runs or with `--permission-prompt-tool`, use `PreToolUse` hooks instead
### Hook error in output
diff --git a/content/en/docs/claude-code/hooks.md b/content/en/docs/claude-code/hooks.md
index a51b53a38..3293a48eb 100644
--- a/content/en/docs/claude-code/hooks.md
+++ b/content/en/docs/claude-code/hooks.md
@@ -37,7 +37,7 @@ The table below summarizes when each event fires. The [Hook events](#hook-events
| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |
| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |
| `PreToolUse` | Before a tool call executes. Can block it |
-| `PermissionRequest` | When a permission dialog appears |
+| `PermissionRequest` | When a tool call needs a permission decision |
| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |
| `PostToolUse` | After a tool call succeeds |
| `PostToolUseFailure` | After a tool call fails |
@@ -87,7 +87,7 @@ To see how these pieces fit together, consider this `PreToolUse` hook that block
}
```
-The script reads the JSON input from stdin, extracts the command, and returns a `permissionDecision` of `"deny"` if it contains `rm -rf`:
+The script reads the JSON input from stdin, extracts the command, and returns a `permissionDecision` of `"deny"` if it contains `rm -rf`. Save it to `.claude/hooks/block-rm.sh` in your project:
```bash theme={null}
#!/bin/bash
@@ -107,6 +107,8 @@ else
fi
```
+On macOS and Linux, make the script executable with `chmod +x .claude/hooks/block-rm.sh` so Claude Code can run it. On Windows, write the hook in PowerShell instead and register it with `"command": "powershell.exe"`, as shown in the [MessageDisplay example](#messagedisplay).
+
This script and the Bash examples on this page that parse JSON input use `jq`, so install `jq` and make sure it is on your `PATH` before trying them.
Now suppose Claude Code decides to run `Bash "rm -rf /tmp/build"`. Here's what happens:
@@ -173,14 +175,14 @@ See [How a hook resolves](#how-a-hook-resolves) above for a complete walkthrough
Where you define a hook determines its scope:
-| Location | Scope | Shareable |
-| :--------------------------------------------------------- | :---------------------------- | :----------------------------------------- |
-| `~/.claude/settings.json` | All your projects | No, local to your machine |
-| `.claude/settings.json` | Single project | Yes, can be committed to the repo |
-| `.claude/settings.local.json` | Single project | No, gitignored when Claude Code creates it |
-| Managed policy settings | Organization-wide | Yes, admin-controlled |
-| [Plugin](/docs/en/plugins) `hooks/hooks.json` | When plugin is enabled | Yes, bundled with the plugin |
-| [Skill](/docs/en/skills) or [agent](/docs/en/sub-agents) frontmatter | While the component is active | Yes, defined in the component file |
+| Location | Scope | Shareable |
+| :--------------------------------------------------------- | :---------------------------- | :---------------------------------------------------- |
+| `~/.claude/settings.json` | All your projects | No, local to your machine |
+| `.claude/settings.json` | Single project | Yes, can be committed to the repo |
+| `.claude/settings.local.json` | Single project | No, gitignored when Claude Code saves a setting to it |
+| Managed policy settings | Organization-wide | Yes, admin-controlled |
+| [Plugin](/docs/en/plugins) `hooks/hooks.json` | When plugin is enabled | Yes, bundled with the plugin |
+| [Skill](/docs/en/skills) or [agent](/docs/en/sub-agents) frontmatter | While the component is active | Yes, defined in the component file |
For details on settings file resolution, see [settings](/docs/en/settings).
@@ -334,7 +336,7 @@ These fields apply to all hook types:
| :-------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type` | yes | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"`, or `"agent"` |
| `if` | no | Permission rule syntax to filter when this hook runs, such as `"Bash(git *)"` or `"Edit(*.ts)"`. The hook command only runs if the tool call matches the pattern. See the [Bash matching table](#bash-if-matching) below for how Bash patterns evaluate against subcommands, `$()`, and backticks. Only evaluated on tool events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, and `PermissionDenied`. On other events, a hook with `if` set never runs. Uses the same syntax as [permission rules](/docs/en/permissions) |
-| `timeout` | no | Seconds before canceling. Defaults: 600 for `command`, `http`, and `mcp_tool`; 30 for `prompt`; 60 for `agent`. [`UserPromptSubmit`](#userpromptsubmit) lowers the `command`, `http`, and `mcp_tool` default to 30, and [`MessageDisplay`](#messagedisplay) lowers it to 10 |
+| `timeout` | no | Seconds before canceling. Defaults: 600 for `command`, `http`, and `mcp_tool`; 30 for `prompt`; 60 for `agent`. [`UserPromptSubmit`](#userpromptsubmit) lowers the `command`, `http`, and `mcp_tool` default to 30, and [`MessageDisplay`](#messagedisplay) lowers it to 10. [`SessionEnd`](#sessionend) hooks share a 1.5-second budget; if your settings set a longer per-hook `timeout`, Claude Code raises the budget to match, up to 60 seconds |
| `statusMessage` | no | Custom spinner message displayed while the hook runs |
| `once` | no | If `true`, runs once per session then is removed. Only honored for hooks declared in [skill frontmatter](#hooks-in-skills-and-agents); ignored in settings files and agent frontmatter |
@@ -590,12 +592,12 @@ Type `/hooks` in Claude Code to open a read-only browser for your configured hoo
The menu displays all five hook types: `command`, `prompt`, `agent`, `http`, and `mcp_tool`. Each hook is labeled with a `[type]` prefix and a source indicating where it was defined:
-* `User`: from `~/.claude/settings.json`
-* `Project`: from `.claude/settings.json`
-* `Local`: from `.claude/settings.local.json`
-* `Plugin`: from a plugin's `hooks/hooks.json`
-* `Session`: registered in memory for the current session
-* `Built-in`: registered internally by Claude Code
+* `User Settings`: from `~/.claude/settings.json`
+* `Project Settings`: from `.claude/settings.json`
+* `Local Settings`: from `.claude/settings.local.json`
+* `Plugin Hooks`: from a plugin's `hooks/hooks.json`
+* `Session Hooks`: registered in memory for the current session
+* `Built-in Hooks`: registered internally by Claude Code
Selecting a hook opens a detail view showing its event, matcher, type, source file, and the full command, prompt, or URL. The menu is read-only: to add, modify, or remove hooks, edit the settings JSON directly or ask Claude to make the change.
@@ -678,7 +680,8 @@ For example, a hook command script that blocks dangerous Bash commands:
```bash theme={null}
#!/bin/bash
# Reads JSON input from stdin, checks the command
-command=$(jq -r '.tool_input.command' < /dev/stdin)
+input=$(cat)
+command=$(jq -r '.tool_input.command' <<<"$input")
if [[ "$command" == rm* ]]; then
echo "Blocked: rm commands are not allowed" >&2
@@ -1060,7 +1063,11 @@ The matcher value corresponds to the CLI flag that triggered the hook:
| `init` | `claude --init-only` or `claude -p --init` |
| `maintenance` | `claude -p --maintenance` |
-`--init-only` runs Setup hooks and `SessionStart` hooks with the `startup` matcher, then exits without starting a conversation. `--init` and `--maintenance` fire Setup hooks only when combined with `-p`; in an interactive session those two flags don't currently fire Setup hooks.
+When you run `claude --init-only`, Claude Code runs Setup hooks and `SessionStart` hooks with the `startup` matcher, then exits without starting a conversation.
+
+`--init` and `--maintenance` fire Setup hooks only when you combine them with `-p`. In an interactive session, those two flags don't currently fire Setup hooks.
+
+When you start or continue a conversation with `-p`, you also need to supply a prompt, as an argument or piped on stdin. You can skip the prompt when a `SessionStart` hook supplies [`initialUserMessage`](#sessionstart-decision-control) or when you resume a session with a [deferred tool call](#defer-a-tool-call-for-later).
On success, `--init-only` prints nothing to the terminal. To confirm the hooks ran, start with `claude --debug-file --init-only`, replacing `` with a log file location, and check the log for the Setup and SessionStart hook entries.
@@ -1611,7 +1618,7 @@ If the deferred tool is no longer available when you resume, the process exits w
### PermissionRequest
-Runs when the user is shown a permission dialog.
+Runs when Claude Code is about to ask you for permission. In sessions that can't show a prompt, such as background subagents in [non-interactive mode](/docs/en/headless), Claude Code still runs these hooks, and if no hook returns a decision, it denies the tool call.
Use [PermissionRequest decision control](#permissionrequest-decision-control) to allow or deny on behalf of the user.
Matches on tool name, same values as PreToolUse.
@@ -1620,7 +1627,7 @@ Matches on tool name, same values as PreToolUse.
PermissionRequest hooks receive `tool_name` and `tool_input` fields like PreToolUse hooks, but without `tool_use_id`. An optional `permission_suggestions` array contains the "always allow" options the user would normally see in the permission dialog.
-The difference from PreToolUse is when the hook fires: PermissionRequest hooks run when a permission dialog is about to be shown to the user, while PreToolUse hooks run before tool execution regardless of permission status. Neither event fires for [`EndConversation`](/docs/en/tools-reference#endconversation-tool-behavior).
+PreToolUse hooks run before every tool call, whether or not it needs permission. PermissionRequest hooks run only when Claude Code is about to ask you for permission, or when it would otherwise auto-deny a call that can't prompt. Neither event fires for [`EndConversation`](/docs/en/tools-reference#endconversation-tool-behavior).
```json theme={null}
{
diff --git a/content/en/docs/claude-code/large-codebases.md b/content/en/docs/claude-code/large-codebases.md
index acf623702..5f6d4ea2c 100644
--- a/content/en/docs/claude-code/large-codebases.md
+++ b/content/en/docs/claude-code/large-codebases.md
@@ -134,7 +134,7 @@ When you start Claude from the repository root, each subdirectory's CLAUDE.md lo
Use this for directories you never work in, such as other teams' packages, legacy code, or vendored subtrees. The exclusion list is static, not a per-task switch. To focus on one package today and another tomorrow, [start Claude from that package's directory](#choose-where-to-start-claude) instead of editing exclusions.
-If you only want these exclusions for yourself, put the setting in `.claude/settings.local.json`. Claude Code gitignores that file when it creates it; since you're creating it by hand here, add it to your gitignore. Patterns use glob syntax matched against absolute file paths, so start relative-style patterns with `**/` to match anywhere in the tree. The example below excludes a package owned by another team:
+If you only want these exclusions for yourself, put the setting in `.claude/settings.local.json`. Claude Code adds that file to your global gitignore when it saves a setting there. Since you are creating it by hand here, add it to your gitignore yourself. Patterns use glob syntax matched against absolute file paths, so start relative-style patterns with `**/` to match anywhere in the tree. The example below excludes a package owned by another team:
```json .claude/settings.local.json theme={null}
{
@@ -366,7 +366,7 @@ With skills spread across many directories, the list Claude chooses from can gro
Which skills are in scope depends on where you start Claude:
* **From a subdirectory such as `packages/api/`**: skills from that directory, every parent up to the repository root, and the user and enterprise levels
-* **From the repository root**: skills from every subdirectory Claude touches during the session, which can accumulate into the hundreds
+* **From the repository root**: root skills, plus skills from every subdirectory Claude touches during the session, which can accumulate into the hundreds
* **After adding a sibling with [`--add-dir`](#grant-access-across-packages-or-repositories)**: that sibling's skills load too. The `additionalDirectories` setting grants file access only and does not load skills
Names always load, but [descriptions are shortened when there are many](/docs/en/skills#skill-descriptions-are-cut-short), which can strip the keywords Claude uses to decide whether a skill applies. Keep descriptions short and lead with words a request would contain, like "writing or modifying tests in `packages/api/`".
diff --git a/content/en/docs/claude-code/llm-gateway-connect.md b/content/en/docs/claude-code/llm-gateway-connect.md
index 6c4b0f07b..289671be9 100644
--- a/content/en/docs/claude-code/llm-gateway-connect.md
+++ b/content/en/docs/claude-code/llm-gateway-connect.md
@@ -100,7 +100,7 @@ If you export the gateway only in your shell, it doesn't reliably reach backgrou
To make the configuration apply everywhere Claude Code runs, including [background agents](/docs/en/agent-view#how-background-sessions-are-hosted), set the variables in the `env` block of a [settings file](/docs/en/settings) instead of relying on your shell. Settings files have different scopes:
* `~/.claude/settings.json` applies to all your projects. On Windows the path is `%USERPROFILE%\.claude\settings.json`
-* `.claude/settings.local.json` applies to one project. Claude Code adds it to your gitignore when it creates the file; if you create it yourself, add it to your gitignore manually first so you don't accidentally commit your credential
+* `.claude/settings.local.json` applies to one project. Claude Code adds it to your global gitignore when it saves a setting there; if you create it by hand or have Claude write it, add it to your gitignore yourself first so you don't accidentally commit your credential
Don't put the credential in a project's `.claude/settings.json`. That file is committed and shared with everyone who clones the repository.
@@ -307,7 +307,7 @@ Enable it if your gateway serves model names that aren't in Claude Code's built-
To enable it, set `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1` in your shell or in the `env` block of `~/.claude/settings.json`. Discovery requires Claude Code v2.1.129 or later. {/* min-version: 2.1.129 */}
-Discovered models appear as additional `/model` entries labeled `From gateway`. To confirm discovery ran, start `claude --debug` and look for the `[gatewayDiscovery]` lines: a success logs how many models were cached, and a `404`, timeout, or redirect is recorded there too. For when discovery runs, what it filters, and the response format gateways serve, see the [model discovery reference](/docs/en/llm-gateway-protocol#model-discovery).
+Discovered models appear as additional `/model` entries labeled `From gateway`. To confirm discovery ran, start `claude --debug` and look for the `[gatewayDiscovery]` lines in the debug log at `~/.claude/debug/.txt`: a success logs how many models were cached, and a `404`, timeout, or redirect is recorded there too. For when discovery runs, what it filters, and the response format gateways serve, see the [model discovery reference](/docs/en/llm-gateway-protocol#model-discovery).
### Rotate credentials with apiKeyHelper
diff --git a/content/en/docs/claude-code/llm-gateway-protocol.md b/content/en/docs/claude-code/llm-gateway-protocol.md
index 1420bdfc5..5c8c21691 100644
--- a/content/en/docs/claude-code/llm-gateway-protocol.md
+++ b/content/en/docs/claude-code/llm-gateway-protocol.md
@@ -102,7 +102,10 @@ The strip is positional, so it only works when the gateway forwards the `system`
Requests that reach the endpoint unmodified are unaffected.
-{/* min-version: 2.1.181 */}From Claude Code v2.1.181, the block is stable for the lifetime of a conversation when requests route through a custom base URL, so a gateway-side prompt cache keyed on the full request body works without disabling it. Before v2.1.181 the block included a per-request token; on those versions, set `CLAUDE_CODE_ATTRIBUTION_HEADER=0` if your gateway implements such a cache.
+{/* min-version: 2.1.181 */}From Claude Code v2.1.181, the block is stable for the lifetime of a conversation when requests route through a custom base URL, so a gateway-side prompt cache keyed on the full request body works without disabling it, and any provider your gateway forwards to receives a stable prompt prefix. Before v2.1.181 the block included a per-request token that changed the start of the system prompt on every request. On those versions, set `CLAUDE_CODE_ATTRIBUTION_HEADER=0` when your gateway does either of these:
+
+* Implements a prompt cache keyed on the request body.
+* Forwards requests to a third-party provider such as Amazon Bedrock, Microsoft Foundry, or Google Cloud's Agent Platform, in the Anthropic Messages format or the provider's own, where the changing prefix reduces prompt-cache reuse on that provider.
## Feature pass-through
@@ -177,7 +180,7 @@ The picker is the interactive model list that opens when a developer runs `/mode
A discovered ID is skipped when it exactly matches a row already in the picker, or when both the discovered and existing IDs resolve to [Fable](/docs/en/model-config#work-with-fable-5). {/* min-version: 2.1.197 */}As of Claude Code v2.1.197, a discovered explicit ID is also folded into a built-in entry when both resolve to the same model. Built-in rows are keyed on aliases such as `sonnet`, so a discovered explicit ID of the model the alias currently resolves to, such as `claude-sonnet-5`, collapses into the `sonnet` row, while an ID the alias doesn't resolve to, such as `claude-sonnet-4-6`, still adds its own "From gateway" row alongside the built-in entry.
-Results are cached to `~/.claude/cache/gateway-models.json`, or `%USERPROFILE%\.claude\cache\gateway-models.json` on Windows, and refreshed on each startup. If the request fails or the gateway doesn't implement `/v1/models`, the picker falls back to the cached list from the previous startup or to the built-in model list. If your gateway serves Claude models under aliases that don't match the discovery filter, developers can add those aliases manually with the [model configuration](/docs/en/model-config) variables.
+Results are cached to `~/.claude/cache/gateway-models.json`, or `%USERPROFILE%\.claude\cache\gateway-models.json` on Windows, and refreshed on each startup. If you set [`CLAUDE_CONFIG_DIR`](/docs/en/env-vars), the cache lives under that directory instead. If the request fails or the gateway doesn't implement `/v1/models`, the picker falls back to the cached list from the previous startup or to the built-in model list. If your gateway serves Claude models under aliases that don't match the discovery filter, developers can add those aliases manually with the [model configuration](/docs/en/model-config) variables.
## Related resources
diff --git a/content/en/docs/claude-code/mcp.md b/content/en/docs/claude-code/mcp.md
index 7ffeabc22..faca8df8b 100644
--- a/content/en/docs/claude-code/mcp.md
+++ b/content/en/docs/claude-code/mcp.md
@@ -85,6 +85,8 @@ A JSON entry that has a `url` but no `type` is a configuration error, because Cl
The SSE (Server-Sent Events) transport is deprecated. Use HTTP servers instead, where available.
+Some services still expose only an SSE endpoint. Use the same command as the HTTP transport, with `--transport sse`:
+
```bash theme={null}
# Basic syntax
claude mcp add --transport sse
@@ -153,17 +155,21 @@ Once configured, you can manage your MCP servers with these commands:
claude mcp list
# Get details for a specific server
-claude mcp get github
+claude mcp get notion
# Remove a server
-claude mcp remove github
+claude mcp remove notion
# (within Claude Code) Check server status
/mcp
```
+`claude mcp add` confirms a successful add by printing an `Added ...` line, which means the configuration was written. `claude mcp list` then shows a health status next to each server it lists, such as `✔ Connected`, `! Needs authentication`, or `✘ Failed to connect`. A failure status means Claude Code couldn't connect to that server, not that the list command failed.
+
Project-scoped servers from `.mcp.json` that are awaiting your approval appear in `claude mcp list` and `claude mcp get ` as ``⏸ Pending approval (run `claude` to approve)``. Run `claude` interactively to review and approve them. `claude mcp get ` shows rejected servers as `✘ Rejected (see disabledMcpjsonServers in settings)`.
+WebSocket servers don't appear in `claude mcp list` output. Use `claude mcp get ` or the `/mcp` panel to check them.
+
As of v2.1.196, `claude mcp list` and `claude mcp get` read `.mcp.json` approvals only from settings files that aren't checked into the repository until you trust the workspace by running `claude` in it and accepting the workspace trust dialog. A cloned repository can't approve its own servers: [`enableAllProjectMcpServers` or `enabledMcpjsonServers`](/docs/en/settings#available-settings) committed to the project's `.claude/settings.json` is ignored in an untrusted folder, and the server stays at `⏸ Pending approval` instead of being connected and health-checked.
Approvals from these sources still apply in an untrusted folder:
@@ -180,7 +186,7 @@ The `/mcp` panel shows the tool count next to each connected server and flags se
A remote server whose configuration has an empty `url` shows as `not configured` in `/mcp`, in `claude mcp list`, and in the [`/plugin`](/docs/en/plugins) manager, and Claude Code doesn't attempt to connect to it. A plugin can include a placeholder entry like this for a connector you configure later, so Claude Code doesn't report it as an error or a setup issue. The server's detail view in `/mcp` reads `No URL configured for this server`; set the entry's `url` to connect it. Before v2.1.208, Claude Code reported an empty `url` as a configuration issue with a prompt to reconnect.
-If your request needs tools from a server that is still connecting in the background, Claude waits for that server before continuing. With [tool search](#scale-with-mcp-tool-search) enabled, which is the default, the wait happens inside the `ToolSearch` call. In configurations without tool search, such as Google Cloud's Agent Platform, a custom `ANTHROPIC_BASE_URL`, or `ENABLE_TOOL_SEARCH=false`, Claude uses the `WaitForMcpServers` tool instead.
+If your request needs tools from a server that is still connecting in the background, Claude waits for that server before continuing. With [tool search](#scale-with-mcp-tool-search) enabled, which is the default, the wait happens inside the `ToolSearch` call. In configurations without tool search, such as Google Cloud's Agent Platform, a custom `ANTHROPIC_BASE_URL`, or `ENABLE_TOOL_SEARCH=false`, Claude uses the `WaitForMcpServers` tool instead. A Microsoft Foundry [deployment hosted on Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options) starts on the tool-search path rather than with `WaitForMcpServers`, since Claude Code discovers the deployment's server-side rejection only from the API; after Claude Code switches that deployment to [upfront loading](#scale-with-mcp-tool-search), tools from a server that finishes connecting become available on Claude's next request.
Some server names are reserved for Claude Code's built-in servers: `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, and `Claude Browser`. If your configuration defines a server with a reserved name, Claude Code skips it at load time and shows a warning asking you to rename it. `claude mcp add` rejects a reserved name with an error.
@@ -307,7 +313,7 @@ Or inline in `plugin.json`:
* **Automatic lifecycle**: servers connect and disconnect at these points:
* At session startup, Claude Code connects the servers for enabled plugins automatically
- * If you enable or disable a plugin during a session, run `/reload-plugins` to connect or disconnect its MCP servers
+ * If you enable or disable a plugin during a session, run `/reload-plugins` to connect or disconnect its MCP servers. When you reload, Claude Code keeps the live connections of plugin servers whose configuration is unchanged, and does the same when you [replace the session's MCP server list](/docs/en/agent-sdk/typescript#mcpsetserversresult) from the Agent SDK without naming them. {/* min-version: 2.1.210 */}Before v2.1.210, Claude Code disconnected plugin-provided MCP servers that the new SDK server list didn't name
* In [web sessions](/docs/en/claude-code-on-the-web), an MCP call to a plugin server that isn't connected yet, such as right after an idle session wakes, starts the server on demand and waits for it to connect. {/* min-version: 2.1.211 */}Before v2.1.211, plugin servers in a web session reconnected only when the next message started a turn, so MCP calls after an idle session woke failed until then
* **Path placeholders**: `${CLAUDE_PLUGIN_ROOT}` resolves to the plugin's installation directory, `${CLAUDE_PLUGIN_DATA}` to its [persistent state](/docs/en/plugins-reference#persistent-data-directory) directory, and `${CLAUDE_PROJECT_DIR}` to the stable project root. Substitution applies to:
* `stdio` servers: `command`, `args`, `env`
@@ -393,7 +399,7 @@ Project-scoped servers enable team collaboration by storing configurations in a
```bash theme={null}
# Add a project-scoped server
-claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp
+claude mcp add --transport http shared-server --scope project https://example.com/mcp
```
The resulting `.mcp.json` file follows a standardized format:
@@ -402,9 +408,8 @@ The resulting `.mcp.json` file follows a standardized format:
{
"mcpServers": {
"shared-server": {
- "command": "/path/to/server",
- "args": [],
- "env": {}
+ "type": "http",
+ "url": "https://example.com/mcp"
}
}
}
@@ -433,6 +438,8 @@ When the same server is defined in more than one place, Claude Code connects to
The three scopes match duplicates by name. Plugins and connectors match by endpoint, so one that points at the same URL or command as a server above is treated as a duplicate.
+If you open a local session in the [Desktop app's Code tab](/docs/en/desktop#mcp-servers-from-the-claude-desktop-chat-app) with the same stdio server name at the top level of `~/.claude.json` (user scope) and in `.mcp.json`, the Code tab uses the `~/.claude.json` definition.
+
### Environment variable expansion in `.mcp.json`
Claude Code supports environment variable expansion in `.mcp.json` files, allowing teams to share configurations while maintaining flexibility for machine-specific paths and sensitive values like API keys.
@@ -473,6 +480,10 @@ If a referenced environment variable isn't set and has no default value, the con
### Example: Monitor errors with Sentry
+Sentry's remote MCP server gives Claude access to the errors your applications report to Sentry. It authenticates through OAuth rather than an API key, so you don't pass a credential when you add it.
+
+If you already added the `sentry` server in the [MCP quickstart](/docs/en/mcp-quickstart), skip this command: running `claude mcp add` again with the same server name at the same scope fails with `MCP server sentry already exists in local config`.
+
```bash theme={null}
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
```
@@ -483,6 +494,8 @@ Authenticate with your Sentry account:
/mcp
```
+Follow the sign-in steps in your browser. Once you're signed in, the `sentry` server shows `connected` in the `/mcp` menu.
+
Then debug production issues:
```text theme={null}
@@ -524,11 +537,15 @@ Show me all open PRs assigned to me
### Example: Query your PostgreSQL database
+[DBHub](https://github.com/bytebase/dbhub), the `@bytebase/dbhub` package, is an MCP server that connects Claude to a relational database through the connection string you pass in `--dsn`. Use a read-only database user in the connection string so the queries Claude runs can't modify data:
+
```bash theme={null}
claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
--dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"
```
+To confirm the server starts, run `/mcp` and check that `db` shows `connected`.
+
Then query your database naturally:
```text theme={null}
@@ -563,7 +580,7 @@ If you configured `headers.Authorization` for the server and the server rejects
- For example:
+ If you already added this server in the [Sentry example](#example-monitor-errors-with-sentry) or the [MCP quickstart](/docs/en/mcp-quickstart), skip this step: running `claude mcp add` again with the same server name at the same scope fails with `MCP server sentry already exists in local config`. Otherwise, run:
```bash theme={null}
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
@@ -944,6 +961,8 @@ You can use Claude Code itself as an MCP server that other applications can conn
claude mcp serve
```
+The command prints nothing when it starts. A stdio MCP server communicates over stdin and stdout, so a silent, blocked terminal means the server is running and waiting for a client to connect.
+
You can use this in Claude Desktop by adding this configuration to claude\_desktop\_config.json:
```json theme={null}
@@ -1137,6 +1156,10 @@ MCP servers can expose resources that you can reference using @ mentions, simila
Tool search keeps MCP context usage low by deferring tool definitions until Claude needs them. Only tool names and server instructions load at session start, so adding more MCP servers has minimal impact on your context window. Claude Code doesn't impose a fixed per-server tool cap; the practical limit is your context window budget.
+
+ Tool search isn't supported on Microsoft Foundry [deployments hosted on Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options), which reject it server-side: Claude Code detects the rejection and loads MCP tools upfront for that deployment instead. [`ENABLE_TOOL_SEARCH`](#configure-tool-search) can't override this, since the rejection comes from the deployment itself.
+
+
### How it works
Tool search is enabled by default. MCP tools are deferred rather than loaded into context upfront, and Claude uses a search tool to discover relevant ones when a task needs them. Only the tools Claude actually uses enter context. From your perspective, MCP tools work exactly as before.
@@ -1165,13 +1188,13 @@ Tool search requires a model that supports `tool_reference` blocks: Claude Sonne
Control tool search behavior with the `ENABLE_TOOL_SEARCH` environment variable:
-| Value | Behavior |
-| :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| (unset) | All MCP tools deferred and loaded on demand. Falls back to loading upfront on Google Cloud's Agent Platform or when `ANTHROPIC_BASE_URL` is a non-first-party host |
-| `true` | All MCP tools deferred. Claude Code sends the beta header even on Google Cloud's Agent Platform and through proxies. Requests fail on Google Cloud's Agent Platform models earlier than Sonnet 4.5 or Opus 4.5, or on proxies that don't support `tool_reference` blocks |
-| `auto` | Threshold mode: tools load upfront if they fit within 10% of the context window, deferred otherwise |
-| `auto:N` | Threshold mode with a custom percentage, where `N` is 0-100. For example, `auto:5` for 5% |
-| `false` | All MCP tools loaded upfront, no deferral |
+| Value | Behavior |
+| :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| (unset) | All MCP tools deferred and loaded on demand. Falls back to loading upfront on Google Cloud's Agent Platform, when `ANTHROPIC_BASE_URL` is a non-first-party host, or on a Microsoft Foundry deployment hosted on Azure |
+| `true` | All MCP tools deferred, except on a Microsoft Foundry deployment hosted on Azure, where the server-side rejection still forces upfront loading. Claude Code sends the beta header even on Google Cloud's Agent Platform and through proxies. Requests fail on Google Cloud's Agent Platform models earlier than Sonnet 4.5 or Opus 4.5, or on proxies that don't support `tool_reference` blocks |
+| `auto` | Threshold mode: tools load upfront if they fit within 10% of the context window, deferred otherwise |
+| `auto:N` | Threshold mode with a custom percentage, where `N` is 0-100. For example, `auto:5` for 5% |
+| `false` | All MCP tools loaded upfront, no deferral |
```bash theme={null}
# Use a custom 5% threshold
diff --git a/content/en/docs/claude-code/model-config.md b/content/en/docs/claude-code/model-config.md
index f689f4a3c..0abe595a7 100644
--- a/content/en/docs/claude-code/model-config.md
+++ b/content/en/docs/claude-code/model-config.md
@@ -602,13 +602,13 @@ A custom ID that embeds a family name, such as `my-gateway/claude-opus-5`, count
You can use the following environment variables to control the model names that the aliases map to. Each value must be a full model name, or the equivalent identifier for your API provider.
-| Environment variable | Description |
-| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `ANTHROPIC_DEFAULT_FABLE_MODEL` | The model to use for `fable`, and the model ID Claude Code recognizes as Fable 5 for [automatic model fallback](#automatic-model-fallback) on third-party providers |
-| `ANTHROPIC_DEFAULT_OPUS_MODEL` | The model to use for `opus`, or for `opusplan` when Plan Mode is active. |
-| `ANTHROPIC_DEFAULT_SONNET_MODEL` | The model to use for `sonnet`, or for `opusplan` when Plan Mode is not active. |
-| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | The model to use for `haiku`, or [background functionality](/docs/en/costs#background-token-usage) |
-| `CLAUDE_CODE_SUBAGENT_MODEL` | The model to use for all [subagents](/docs/en/sub-agents#choose-a-model), [agent teams](/docs/en/agent-teams), and the agents a [workflow](/docs/en/workflows) runs. Accepts an alias such as `haiku` or a full model name, and overrides the per-invocation `model` parameter and the subagent definition's `model` frontmatter. Set to `inherit` to use normal model resolution instead |
+| Environment variable | Description |
+| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `ANTHROPIC_DEFAULT_FABLE_MODEL` | The model to use for `fable`, and the model ID Claude Code recognizes as Fable 5 for [automatic model fallback](#automatic-model-fallback) on third-party providers |
+| `ANTHROPIC_DEFAULT_OPUS_MODEL` | The model to use for `opus`, or for `opusplan` when Plan Mode is active. |
+| `ANTHROPIC_DEFAULT_SONNET_MODEL` | The model to use for `sonnet`, or for `opusplan` when Plan Mode is not active. |
+| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | The model to use for `haiku`, or [background functionality](/docs/en/costs#background-token-usage) |
+| `CLAUDE_CODE_SUBAGENT_MODEL` | The model Claude Code uses for all [subagents](/docs/en/sub-agents#choose-a-model), [agent teams](/docs/en/agent-teams), and agents in a [workflow](/docs/en/workflows). Accepts an alias such as `haiku` or a full model name, and overrides the per-invocation `model` parameter and the subagent definition's `model` frontmatter. Set to `inherit` to use normal model resolution instead |
Note: `ANTHROPIC_SMALL_FAST_MODEL` is deprecated in favor of
`ANTHROPIC_DEFAULT_HAIKU_MODEL`.
@@ -657,11 +657,11 @@ When you pin a model on a third-party provider, the provider-specific ID appears
These variables take effect on third-party providers such as Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry. The `_NAME` and `_DESCRIPTION` variables also take effect when `ANTHROPIC_BASE_URL` points to an [LLM gateway](/docs/en/llm-gateway). They have no effect when connecting directly to `api.anthropic.com`.
-| Environment variable | Description |
-| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
-| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Display name for the pinned Opus model in the `/model` picker. Defaults to the model ID when not set |
-| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Display description for the pinned Opus model in the `/model` picker. Defaults to `Custom Opus model` when not set |
-| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Comma-separated list of capabilities the pinned Opus model supports |
+| Environment variable | Description |
+| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Display name for the pinned Opus model in the `/model` picker. Defaults to the model ID when not set |
+| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Display description for the pinned Opus model in the `/model` picker. When not set, defaults to `Custom Opus model`, or `Custom Opus model (1M context)` if the pinned model ID has the `[1m]` suffix and `CLAUDE_CODE_DISABLE_1M_CONTEXT` isn't turned on |
+| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Comma-separated list of capabilities the pinned Opus model supports |
The same `_NAME`, `_DESCRIPTION`, and `_SUPPORTED_CAPABILITIES` suffixes are available for `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, `ANTHROPIC_DEFAULT_FABLE_MODEL`, and `ANTHROPIC_CUSTOM_MODEL_OPTION`.
diff --git a/content/en/docs/claude-code/monitoring-usage.md b/content/en/docs/claude-code/monitoring-usage.md
index 684a64bf6..136d1e024 100644
--- a/content/en/docs/claude-code/monitoring-usage.md
+++ b/content/en/docs/claude-code/monitoring-usage.md
@@ -68,18 +68,18 @@ Example managed settings configuration:
Claude Code doesn't pass `OTEL_*` environment variables to the subprocesses it spawns, including the Bash tool, hooks, MCP servers, and language servers. An OpenTelemetry-instrumented application that you run through the Bash tool doesn't inherit Claude Code's exporter endpoint or headers, so set those variables directly in the command if that application needs to export its own telemetry.
-### Managed endpoints govern signal-specific endpoints
+### How managed settings lock the OTLP destination
-A generic `OTEL_EXPORTER_OTLP_ENDPOINT` set in managed settings governs every signal's endpoint. If a lower-precedence source, such as user settings or a shell export, sets a signal-specific endpoint like `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`, Claude Code removes that variable at startup and logs a warning, visible with `claude --debug`. Users can't point one signal's OTLP traffic at a different endpoint, so you don't need to set the signal-specific endpoint variables in managed settings to prevent it.
+When you set an `OTEL_EXPORTER_OTLP_*` variable in managed settings, Claude Code removes conflicting developer-set variables at startup and logs a warning you can see with `claude --debug`. What it removes depends on which variable you set:
-This applies only on machines where an administrator deploys managed settings with telemetry configured, and it changes where telemetry is delivered, not what Claude Code collects.
+* **Endpoints**: when you set `OTEL_EXPORTER_OTLP_ENDPOINT`, Claude Code removes every developer-set per-signal endpoint. Developers can't point one signal at a different collector, so you don't need to also set the per-signal endpoint variables in managed settings.
+* **Protocols**: when you set `OTEL_EXPORTER_OTLP_PROTOCOL`, Claude Code removes every developer-set per-signal protocol.
+* **Credentials**: when you set `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_EXPORTER_OTLP_CLIENT_KEY`, or `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`, Claude Code removes the developer-set per-signal versions of that variable, plus every developer-set endpoint variable, generic or per-signal, since those credentials would otherwise reach a collector the managed settings didn't choose.
+* **Exporter selectors**: `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, and the beta `OTEL_TRACES_EXPORTER` follow normal per-key precedence. A developer's setting can still disable a signal or switch it to the console exporter, so set the selectors in managed settings too if you need them locked.
-A managed `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_EXPORTER_OTLP_CLIENT_KEY`, or `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE` variable also governs the endpoint variables, since those credentials would otherwise accompany telemetry to a collector the managed settings didn't choose.
+Claude Code doesn't remove per-signal variables that you set in managed settings itself, so you can route one signal to a different collector by setting its variable there, as the [SIEM example](#send-events-to-a-siem) does. If you set a per-signal credential there, Claude Code removes the developer-set endpoint for that signal.
-Two cases keep the normal per-key precedence:
-
-* Signal-specific variables set in the managed settings file itself still apply, so you can route one signal to a different collector by setting them there, as the [SIEM example](#send-events-to-a-siem) does.
-* The exporter selectors (`OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, and the beta `OTEL_TRACES_EXPORTER`) and the protocol variables follow per-key precedence, so a lower-precedence source can still change how a signal is exported. To make those authoritative too, set the signal-specific keys in managed settings directly.
+This removal behavior changes where telemetry is delivered, not what Claude Code collects.
{/* min-version: 2.1.217 */}Before v2.1.217, every variable followed per-key settings precedence independently, so a signal-specific endpoint set in user settings or the shell redirected that signal away from the managed collector.
@@ -87,14 +87,14 @@ Two cases keep the normal per-key precedence:
### Common configuration variables
-These variables configure exporters, endpoints, and export behavior for all deployments. A signal-specific variable overrides its generic counterpart, except that a generic endpoint or credential variable set in [managed settings](#administrator-configuration) governs all signals' endpoints and can't be overridden from lower-precedence sources.
+These variables configure exporters, endpoints, and export behavior for all deployments. A per-signal variable overrides its generic counterpart. On machines with managed settings, see [How managed settings lock the OTLP destination](#how-managed-settings-lock-the-otlp-destination) for what Claude Code removes.
| Environment Variable | Description | Example Values |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CLAUDE_CODE_ENABLE_TELEMETRY` | Enables telemetry collection (required) | `1` |
| `OTEL_METRICS_EXPORTER` | Metrics exporter types, comma-separated. Use `none` to disable | `console`, `otlp`, `prometheus`, `none` |
| `OTEL_LOGS_EXPORTER` | Logs/events exporter types, comma-separated. Use `none` to disable | `console`, `otlp`, `none` |
-| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protocol for OTLP exporter, applies to all signals | `grpc`, `http/json`, `http/protobuf` |
+| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protocol for OTLP exporter, applies to all signals. Claude Code has no default protocol, so set this or the signal-specific protocol variable for each `otlp` exporter you enable | `grpc`, `http/json`, `http/protobuf` |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP collector endpoint for all signals | `http://localhost:4317` |
| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | Protocol for metrics, overrides general setting | `grpc`, `http/json`, `http/protobuf` |
| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | OTLP metrics endpoint, overrides general setting | `http://localhost:4318/v1/metrics` |
@@ -123,7 +123,7 @@ How you configure client certificates for the OTLP exporter depends on the OTLP
| `http/protobuf`, `http/json` | `CLAUDE_CODE_CLIENT_CERT`, `CLAUDE_CODE_CLIENT_KEY`, and optionally `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE`. See [Network configuration](/docs/en/network-config#mtls-authentication) | `NODE_EXTRA_CA_CERTS` |
| `grpc` | `OTEL_EXPORTER_OTLP_CLIENT_KEY` and `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`, or the per-signal variants such as `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` to use a different certificate per signal | `OTEL_EXPORTER_OTLP_CERTIFICATE` |
-For `grpc`, the OpenTelemetry SDK reads the standard OTLP variables directly, so existing configurations that set the per-signal metrics variables continue to work.
+For `grpc`, the OpenTelemetry SDK reads the standard OTLP variables directly, so existing configurations that set the per-signal metrics variables continue to work. On machines with managed settings, Claude Code [may remove developer-set per-signal credentials and endpoints](#how-managed-settings-lock-the-otlp-destination) at startup.
### Metrics cardinality control
@@ -143,7 +143,7 @@ These variables help control the cardinality of metrics, which affects storage r
Distributed tracing exports spans that link each user prompt to the API requests and tool executions it triggers, so you can view a full request as a single trace in your tracing backend.
-Tracing is off by default. To enable it, set both `CLAUDE_CODE_ENABLE_TELEMETRY=1` and `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`, then set `OTEL_TRACES_EXPORTER` to choose where spans are sent. Traces reuse the [common OTLP configuration](#common-configuration-variables) for endpoint, protocol, headers, and [mTLS](#mtls-authentication). A generic endpoint or credential variable set in [managed settings](#managed-endpoints-govern-signal-specific-endpoints) governs the traces endpoint too, so the `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` override in the table below applies only when managed settings don't set one.
+Tracing is off by default. To enable it, set both `CLAUDE_CODE_ENABLE_TELEMETRY=1` and `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`, then set `OTEL_TRACES_EXPORTER` to choose where spans are sent. Traces reuse the [common OTLP configuration](#common-configuration-variables) for endpoint, protocol, headers, and [mTLS](#mtls-authentication). On machines with managed settings, Claude Code [may remove developer-set](#how-managed-settings-lock-the-otlp-destination) `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` and `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` variables at startup.
| Environment Variable | Description | Example Values |
| ------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------ |
@@ -371,7 +371,7 @@ Each custom key becomes a label on every metric series, so high-cardinality valu
### Example configurations
-Set these environment variables before running `claude`. Each scenario below shows a complete configuration, and each variable is described under [Common configuration variables](#common-configuration-variables).
+Set these environment variables before running `claude`. Each scenario below shows a complete configuration, and each variable is described under [Common configuration variables](#common-configuration-variables). To confirm a configuration took effect, check your backend for the `claude_code.session.count` metric after starting a session; the [Quick start](#quick-start) covers logs-only verification and what to check when nothing arrives.
For console debugging with a 1-second export interval:
@@ -1225,6 +1225,8 @@ Point `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` at your SIEM's OTLP receiver, or at an
}
```
+To confirm events arrive, submit a prompt in a session running under this configuration and check your SIEM for the `claude_code.user_prompt` event. If nothing arrives, run `claude --debug` and check the debug log for OTel export errors.
+
## Backend considerations
Your choice of metrics, logs, and traces backends determines the types of analyses you can perform:
diff --git a/content/en/docs/claude-code/network-config.md b/content/en/docs/claude-code/network-config.md
index e9b758310..015e44bcc 100644
--- a/content/en/docs/claude-code/network-config.md
+++ b/content/en/docs/claude-code/network-config.md
@@ -8,6 +8,8 @@
Claude Code supports various enterprise network and security configurations through environment variables. This includes routing traffic through corporate proxy servers, trusting custom Certificate Authorities (CA), and authenticating with mutual Transport Layer Security (mTLS) certificates for enhanced security.
+Set these environment variables before you launch Claude Code. Variables exported in your shell are read once at startup, so a running session doesn't pick up later changes to your shell environment.
+
All environment variables shown on this page can also be configured in [`settings.json`](/docs/en/settings).
@@ -33,6 +35,8 @@ export NO_PROXY="localhost,192.168.1.1,example.com,.example.com"
export NO_PROXY="*"
```
+Lowercase variants also work, and Claude Code uses the first one that's set in the order `https_proxy`, `HTTPS_PROXY`, `http_proxy`, `HTTP_PROXY`.
+
Claude Code does not support SOCKS proxies.
@@ -113,6 +117,32 @@ Claude Code notes each ignored key in the session's debug log.
In [Claude Desktop](/docs/en/desktop) sessions where the app manages the provider connection, such as the Code tab on a [third-party provider](/docs/en/third-party-integrations) and Cowork sessions, Claude Code reads these variables and the proxy variables `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` only from [managed settings](/docs/en/settings#settings-files) and `~/.claude/settings.json`: it ignores them in a repository's own settings files, so a checked-out repository can't redirect the TLS or proxy path of a session whose credentials come from the app. In a local, SSH, or WSL Code tab session signed in through claude.ai, the app doesn't manage the connection, and Claude Code reads these variables from every settings scope, like any terminal session; [cloud sessions](/docs/en/claude-code-on-the-web) follow the cloud-session rules above wherever you start them. Before v2.1.217, Claude Code ignored these variables in every settings file when the app managed the connection.
+## Verify your configuration
+
+You usually find out about a wrong proxy address or a bad certificate path from a [connection or certificate error](/docs/en/errors#network-and-connection-errors) on a later request, since Claude Code doesn't validate most of these settings when it reads them. The one setting it checks at startup is the proxy URL: when it can't parse the value, such as one missing the `http://` scheme, Claude Code stops launch with an error naming the variable to fix.
+
+To confirm your configuration loaded before you send a request, start Claude Code with debug logging:
+
+```bash theme={null}
+claude --debug
+```
+
+Debug output goes to `~/.claude/debug/.txt` rather than the terminal, or to a path you set with `--debug-file `. In the log, look for the lines that confirm each file loaded:
+
+```text theme={null}
+CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (/etc/ssl/certs/corp-ca.pem)
+mTLS: Loaded client certificate from CLAUDE_CODE_CLIENT_CERT
+mTLS: Loaded client key from CLAUDE_CODE_CLIENT_KEY
+```
+
+If Claude Code can't read one of these files, the log shows a `Failed to read` or `Failed to load` line with the reason instead.
+
+You can also run `/status` in an interactive session and check these rows:
+
+* **Proxy**: shows the active proxy URL, and marks a value it can't parse as invalid and ignored.
+* **mTLS client cert** and **mTLS client key**: appear only when the files loaded, so a missing row means the load failed and the debug log has the reason.
+* **Additional CA cert(s)**: shows the `NODE_EXTRA_CA_CERTS` path without checking that the file loaded, so confirm this one in the debug log.
+
## Apply network settings to background agents
[Background agents](/docs/en/agent-view) don't run inside the terminal that dispatched them. A per-user supervisor process starts on demand, outlives your shell, and hosts every `claude agents`, `--bg`, and `/background` session. See [How background sessions are hosted](/docs/en/agent-view#how-background-sessions-are-hosted). This changes how the configuration on this page reaches those sessions.
diff --git a/content/en/docs/claude-code/overview.md b/content/en/docs/claude-code/overview.md
index 57069f5ea..60243ab63 100644
--- a/content/en/docs/claude-code/overview.md
+++ b/content/en/docs/claude-code/overview.md
@@ -81,7 +81,7 @@ Claude Code runs on several surfaces: the terminal, IDE extensions, a desktop ap
claude
```
- You'll be prompted to log in on first use. That's it! [Continue with the Quickstart →](/docs/en/quickstart)
+ You'll be prompted to log in on first use. If you've set the `ANTHROPIC_API_KEY` environment variable, Claude Code skips the login prompt and asks you to approve the key instead. That's it! [Continue with the Quickstart →](/docs/en/quickstart)
See [advanced setup](/docs/en/setup) for installation options, manual updates, or uninstallation instructions. Visit [installation troubleshooting](/docs/en/troubleshoot-install) if you hit issues.
@@ -208,7 +208,7 @@ Here are some of the ways you can use Claude Code:
* Step away from your desk and keep working from your phone or any browser with [Remote Control](/docs/en/remote-control)
* Message [Dispatch](/docs/en/desktop#sessions-from-dispatch) a task from your phone and open the Desktop session it creates
* Kick off a long-running task on the [web](/docs/en/claude-code-on-the-web) or the [Claude mobile app](/docs/en/mobile), then pull it into your terminal with `claude --teleport`. Teleport requires a claude.ai subscription.
- * Run `/desktop` to continue your current terminal session in the [Desktop app](/docs/en/desktop), where you can review diffs visually. Available on macOS and x64 Windows.
+ * Run `/desktop` to continue your current terminal session in the [Desktop app](/docs/en/desktop), where you can review diffs visually. The `/desktop` handoff requires a claude.ai subscription. Available on macOS and x64 Windows.
* Route tasks from team chat: mention `@Claude` in [Slack](/docs/en/slack) with a bug report and get a pull request back
diff --git a/content/en/docs/claude-code/permission-modes.md b/content/en/docs/claude-code/permission-modes.md
index 57db578e9..b47355b21 100644
--- a/content/en/docs/claude-code/permission-modes.md
+++ b/content/en/docs/claude-code/permission-modes.md
@@ -207,7 +207,7 @@ Auto mode also nudges Claude to keep working without stopping for clarifying que
Auto mode is available only when your account meets all of these requirements:
* **Plan**: All plans.
-* **Owner**: on Team and Enterprise, an Owner must enable it in [Claude Code admin settings](https://claude.ai/admin-settings/claude-code) before users can turn it on. Administrators can also turn auto mode off by setting `permissions.disableAutoMode` to `"disable"` in [managed settings](/docs/en/permissions#managed-settings). For the desktop app's Code tab, `disableAutoMode` is the organization-level control, and the admin settings toggle doesn't apply.
+* **Organization**: on Team and Enterprise, auto mode is available by default. Administrators can turn it off for the organization by setting `permissions.disableAutoMode` to `"disable"` in [managed settings](/docs/en/permissions#managed-settings).
* **Model**: on the Anthropic API and [Claude Platform on AWS](/docs/en/claude-platform-on-aws), Claude Opus 4.6 or later, Sonnet 4.6 or later, or [Fable 5](/docs/en/model-config#work-with-fable-5). On Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, and signed-in [Claude apps gateway](/docs/en/claude-apps-gateway) sessions, only Claude Sonnet 5, Opus 4.7 or later, and Fable 5. Older models, including Sonnet 4.5, Opus 4.5, Haiku, and claude-3 models, are not supported on any provider.
* **Provider**: available by default on the Anthropic API, Claude Platform on AWS, Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, and signed-in Claude apps gateway sessions. {/* min-version: 2.1.207 */}In v2.1.158 through v2.1.206, auto mode was off on all of these providers except the Anthropic API and Claude Platform on AWS until you set `CLAUDE_CODE_ENABLE_AUTO_MODE=1`; v2.1.207 removed the requirement.
diff --git a/content/en/docs/claude-code/plugin-marketplaces.md b/content/en/docs/claude-code/plugin-marketplaces.md
index 347e1d51e..0a61b2d66 100644
--- a/content/en/docs/claude-code/plugin-marketplaces.md
+++ b/content/en/docs/claude-code/plugin-marketplaces.md
@@ -656,15 +656,15 @@ For organizations requiring strict control over plugin sources, administrators c
When `strictKnownMarketplaces` is configured in managed settings, the restriction behavior depends on the value:
-| Value | Behavior |
-| ------------------- | ---------------------------------------------------------------- |
-| Undefined (default) | No restrictions. Users can add any marketplace |
-| Empty array `[]` | Complete lockdown. Users can't add any new marketplaces |
-| List of sources | Users can only add marketplaces that match the allowlist exactly |
+| Value | Behavior |
+| ------------------- | ------------------------------------------------------------------------------------------------ |
+| Undefined (default) | No restrictions. Users can add any marketplace |
+| Empty array `[]` | Complete lockdown. Blocks every marketplace source, including the official Anthropic marketplace |
+| List of sources | Users can only add marketplaces that match the allowlist exactly |
#### Common configurations
-Disable all marketplace additions:
+Disable all marketplace additions, including the official Anthropic marketplace:
```json theme={null}
{
@@ -672,6 +672,21 @@ Disable all marketplace additions:
}
```
+Allow only the official Anthropic marketplace. Matching is exact, so this entry doesn't cover `ref` or `path` variants of the same repository:
+
+```json theme={null}
+{
+ "strictKnownMarketplaces": [
+ {
+ "source": "github",
+ "repo": "anthropics/claude-plugins-official"
+ }
+ ]
+}
+```
+
+With this entry, the official marketplace registers itself automatically the first time you start Claude Code interactively, so you don't need to pair it with `extraKnownMarketplaces`. In a non-interactive environment that runs before that first interactive launch, add it explicitly with `claude plugin marketplace add anthropics/claude-plugins-official` or include it in `extraKnownMarketplaces`.
+
Allow specific marketplaces only:
```json theme={null}
@@ -732,7 +747,7 @@ Restrictions are checked before any network or filesystem operation. The check r
The allowlist uses exact matching for most source types. For a marketplace to be allowed, all specified fields must match exactly:
-* For GitHub sources: `repo` is required, and `ref` or `path` must also match if specified in the allowlist
+* For GitHub sources: `repo` is required, and `ref` and `path` must each match exactly or be absent from both the marketplace source and the allowlist entry
* For URL sources: the full URL must match exactly
* For `hostPattern` sources: the marketplace host is matched against the regex pattern
* For `pathPattern` sources: the marketplace's filesystem path is matched against the regex pattern
diff --git a/content/en/docs/claude-code/plugins-reference.md b/content/en/docs/claude-code/plugins-reference.md
index a5de7cfc4..aeb212538 100644
--- a/content/en/docs/claude-code/plugins-reference.md
+++ b/content/en/docs/claude-code/plugins-reference.md
@@ -119,7 +119,7 @@ Plugin hooks respond to the same lifecycle events as [user-defined hooks](/docs/
| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |
| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |
| `PreToolUse` | Before a tool call executes. Can block it |
-| `PermissionRequest` | When a permission dialog appears |
+| `PermissionRequest` | When a tool call needs a permission decision |
| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |
| `PostToolUse` | After a tool call succeeds |
| `PostToolUseFailure` | After a tool call fails |
@@ -189,6 +189,7 @@ Plugins can bundle Model Context Protocol (MCP) servers to connect Claude Code w
* Servers appear as standard MCP tools in Claude's toolkit
* Server capabilities integrate seamlessly with Claude's existing tools
* Plugin servers can be configured independently of user MCP servers
+* If you run [`/reload-plugins`](/docs/en/discover-plugins#apply-plugin-changes-without-restarting) mid-session, Claude Code keeps the live connections of servers whose configuration is unchanged
### LSP servers
@@ -358,12 +359,12 @@ Selecting a plugin theme persists `custom::` in the user's co
When you install a plugin, you choose a **scope** that determines where the plugin is available and who else can use it:
-| Scope | Settings file | Use case |
-| :-------- | :---------------------------------------------- | :------------------------------------------------------- |
-| `user` | `~/.claude/settings.json` | Personal plugins available across all projects (default) |
-| `project` | `.claude/settings.json` | Team plugins shared via version control |
-| `local` | `.claude/settings.local.json` | Project-specific plugins, gitignored |
-| `managed` | [Managed settings](/docs/en/settings#settings-files) | Managed plugins (read-only, update only) |
+| Scope | Settings file | Use case |
+| :-------- | :---------------------------------------------- | :-------------------------------------------------------------------------- |
+| `user` | `~/.claude/settings.json` | Personal plugins available across all projects (default) |
+| `project` | `.claude/settings.json` | Team plugins shared via version control |
+| `local` | `.claude/settings.local.json` | Project-specific plugins, gitignored when Claude Code saves a setting to it |
+| `managed` | [Managed settings](/docs/en/settings#settings-files) | Managed plugins (read-only, update only) |
Plugins use the same scope system as other Claude Code configurations. For installation instructions and scope flags, see [Install plugins](/docs/en/discover-plugins#install-plugins). For a complete explanation of scopes, see [Configuration scopes](/docs/en/settings#configuration-scopes).
@@ -397,7 +398,7 @@ A project-scope plugin is checked into the repository and reaches every collabor
Personal-scope plugins have none of these restrictions.
- Project-scope `@skills-dir` plugins load only from the `.claude/skills/` of the directory where you start Claude Code. They do not [walk up to the repository root](/docs/en/skills#automatic-discovery-from-parent-and-nested-directories) the way plain skills and commands do, so launching from a subdirectory misses a plugin that lives at the repo root. Launch from the repository root, or run `/reload-plugins` after changing directories.
+ Project-scope `@skills-dir` plugins load only from the `.claude/skills/` of the directory where you start Claude Code. They don't [walk up to the repository root](/docs/en/skills#discovery-from-parent-and-nested-directories) the way plain skills and commands do, so launching from a subdirectory misses a plugin that lives at the repo root. Launch from the repository root, or run `/reload-plugins` after changing directories.
### Edit, reload, and disable a skills-directory plugin
@@ -953,7 +954,7 @@ claude plugin install formatter@my-marketplace
# Install to project scope (shared with team)
claude plugin install formatter@my-marketplace --scope project
-# Install to local scope (gitignored)
+# Install to local scope (not shared with team)
claude plugin install formatter@my-marketplace --scope local
```
diff --git a/content/en/docs/claude-code/plugins.md b/content/en/docs/claude-code/plugins.md
index 88c2af3fa..1cae19746 100644
--- a/content/en/docs/claude-code/plugins.md
+++ b/content/en/docs/claude-code/plugins.md
@@ -271,6 +271,8 @@ LSP (Language Server Protocol) plugins give Claude real-time code intelligence.
Users installing your plugin must have the language server binary installed on their machine.
+To confirm the server starts, launch Claude Code with the plugin enabled and check the `/plugin` Errors tab: a language server that fails to start appears there, for example with `Executable not found in $PATH` when the binary isn't installed. An entry with an invalid configuration is skipped instead; run `claude --debug` to see why.
+
For complete LSP configuration options, see [LSP servers](/docs/en/plugins-reference#lsp-servers).
### Add background monitors to your plugin
@@ -329,7 +331,7 @@ As you make changes to your plugin, run `/reload-plugins` to pick up the updates
* Try your skills with `/plugin-name:skill-name`
* Check that agents appear in `/context` under Custom Agents, or @-mention one by its scoped name
-* Verify hooks work as expected
+* Trigger the event each hook matches, such as asking Claude to edit a file for a `PostToolUse` hook, and confirm its effect. Claude Code records which hooks matched, their exit codes, and their output in the [debug log](/docs/en/hooks#debug-hooks)
You can load multiple plugins at once by specifying the flag multiple times:
@@ -467,7 +469,7 @@ If you already have skills or hooks in your `.claude/` directory, you can conver
claude --plugin-dir ./my-plugin
```
- Test each component: run your commands, check that agents appear in `/context`, and verify hooks trigger correctly.
+ Test each component: run your commands, check that agents appear in `/context`, and trigger the event each hook matches to confirm its effect. Claude Code records which hooks matched and how they exited in the [debug log](/docs/en/hooks#debug-hooks).
diff --git a/content/en/docs/claude-code/prompt-caching.md b/content/en/docs/claude-code/prompt-caching.md
index cb89244e3..5a1c73ee6 100644
--- a/content/en/docs/claude-code/prompt-caching.md
+++ b/content/en/docs/claude-code/prompt-caching.md
@@ -6,7 +6,7 @@
> Claude Code manages prompt caching automatically. See why a model switch triggers a slow uncached turn, what `/compact` costs, why CLAUDE.md edits don't apply mid-session, and how to check your cache hit rate.
-Prompt caching makes Claude Code faster and more cost-efficient. Without caching, the API would reprocess your full history on every turn. With caching, it reuses what it already processed and only does new work for what changed.
+Prompt caching makes Claude Code faster and more cost-efficient. Without caching, the API would reprocess your full history on every turn. With caching, it reuses what it already processed, bills the re-read at the [cached token rate](https://platform.claude.com/docs/en/about-claude/pricing), and fully processes only what changed.
Claude Code handles prompt caching for you, unless you [disable it](#disable-prompt-caching). It is still useful to know how prompt caching works, because some actions invalidate the cache and make the next response slower and more expensive while it rebuilds. This page covers which actions those are, why some settings wait for a restart to apply, and how to check cache performance when usage looks high.
@@ -92,7 +92,7 @@ The cost applies once per conversation. After the first fast mode turn, Claude C
Tool definitions sit in the system prompt layer, so the cache invalidates when the set of tool definitions in the request changes between turns. Toggling the [advisor tool](/docs/en/advisor) is an exception: its definition sits after the cache breakpoint, so enabling or disabling `/advisor` keeps the cached prefix intact. Whether an [MCP server](/docs/en/mcp) change does this depends on whether its tools are deferred by [tool search](/docs/en/mcp#scale-with-mcp-tool-search) or loaded into the prefix:
* **Deferred tools**, the default on supported models: a server connecting, disconnecting, or changing its tool list only appends new content and doesn't disturb anything already cached.
-* **Tools loaded into the prefix**: any change to them invalidates the cache. This happens when [tool search is unavailable or disabled](/docs/en/mcp#configure-tool-search), such as on Google Cloud's Agent Platform or with a custom `ANTHROPIC_BASE_URL` gateway. It also happens for a server or tool marked [`alwaysLoad`](/docs/en/mcp#exempt-a-server-from-deferral), and for definitions kept upfront by [threshold-based loading](/docs/en/mcp#configure-tool-search).
+* **Tools loaded into the prefix**: any change to them invalidates the cache. This happens when [tool search is unavailable or disabled](/docs/en/mcp#configure-tool-search), such as on Google Cloud's Agent Platform, with a custom `ANTHROPIC_BASE_URL` gateway, or on a Microsoft Foundry [deployment hosted on Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options) once Claude Code detects that the deployment rejects tool search. It also happens for a server or tool marked [`alwaysLoad`](/docs/en/mcp#exempt-a-server-from-deferral), and for definitions kept upfront by [threshold-based loading](/docs/en/mcp#configure-tool-search).
When tools load into the prefix, the most common cause of an invalidation is a server connecting or disconnecting mid-session, which can happen without any action on your part: a stdio server's process exits, an HTTP session expires, or a server [reconnects automatically after a transient failure](/docs/en/mcp#automatic-reconnection). A connected server can also push a [dynamic tool update](/docs/en/mcp#dynamic-tool-updates) that changes its tool list.
@@ -118,7 +118,9 @@ Only a deny rule that matches in the tool-name position has this effect: a bare
[Compaction](/docs/en/context-window#what-survives-compaction) replaces your message history with a summary. By design, this invalidates the conversation layer, since the next request has a new, shorter history that doesn't share a prefix with the old one. Claude Code reuses the system prompt layer and reloads project context from disk, which cache-hits only if CLAUDE.md and memory are unchanged since the session started.
-To produce the summary, Claude Code sends a one-off request with the same system prompt, tools, and history as your conversation, plus a summarization instruction appended as a final user message. Because it shares your prefix, that request reads the existing cache rather than reprocessing the full history. Most of compaction's time goes to generating the summary, not to a cache miss. The turn that follows rebuilds the conversation cache only for the much shorter summary, so the post-compaction turn is not the slow part.
+To produce the summary, Claude Code sends a separate request with the same system prompt, tools, and history as your conversation, plus a summarization instruction appended as a final user message. While the cache is warm, that request reads your prefix from the cache, so a mid-session `/compact` costs a fraction of what the context size suggests and spends most of its time generating the summary.
+
+After a break longer than the [cache lifetime](#cache-lifetime), there is no cache left to read, so the summarization request reprocesses the full history as uncached input. This is why `/compact` costs the most when you [resume an old session](/docs/en/sessions#resume-from-a-summary). In both the warm and cold cases, the turn after compaction rebuilds the conversation cache for only the much shorter summary, so that turn is not the slow part.
Compaction works in your favor when the context you discard is content you no longer need. To choose when its overhead happens, run `/compact` at a natural break in your work, such as between tasks, instead of waiting for auto-compaction to trigger mid-task. If you've gone down a path you want to abandon entirely, [`/rewind`](#rewinding-the-conversation) to an earlier turn instead. Rewinding truncates back to a prefix that is already cached, rather than building a new one as compaction does.
@@ -181,13 +183,15 @@ Restoring file checkpoints alongside the conversation has no separate effect on
Cached prefixes expire after a period of inactivity. Each request that hits the cache resets the timer, so the cache stays warm as long as you keep working. After a long enough gap, the next request recomputes the full input and re-establishes the cache, which is why the first turn back after stepping away can be noticeably slower.
+On a Pro or Max plan, when you resume a large session after a long break, Claude Code [offers to resume from a summary](/docs/en/sessions#resume-from-a-summary) so later requests don't carry the full history.
+
The time to live (TTL) controls how long a gap the cache survives. The API offers two: a five-minute TTL, and a [one-hour TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) that keeps the cache warm through longer breaks but [bills cache writes at a higher rate](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Claude Code picks the TTL for you based on how you authenticate, and you can override it with environment variables.
### On a Claude subscription
-On a Claude subscription, Claude Code requests the one-hour TTL automatically. Usage is included in your plan rather than billed per token, so the longer TTL costs you nothing extra and only affects how long your cache stays warm.
+On a Claude subscription, Claude Code requests the one-hour TTL automatically, so the cache survives breaks of up to an hour.
-If you've gone over your plan's usage limit and Claude Code is drawing on [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans), you are billed for that usage, so Claude Code automatically drops the TTL to five minutes.
+If you've gone over your plan's usage limit and Claude Code is drawing on [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans), you are billed for that usage. Cache writes cost more at the one-hour TTL than at the five-minute TTL, so Claude Code automatically drops to the shorter one.
### On an API key or third-party provider
diff --git a/content/en/docs/claude-code/prompt-library.md b/content/en/docs/claude-code/prompt-library.md
index 79fe1f937..d2610de81 100644
--- a/content/en/docs/claude-code/prompt-library.md
+++ b/content/en/docs/claude-code/prompt-library.md
@@ -1335,37 +1335,37 @@ The prompts above share a few patterns. Recognizing them helps you adapt any pro
**Describe the outcome, not the steps.** Say what you want and let Claude find the files. The prompt below works without naming a single file path.
-```text theme={null}
+```text wrap theme={null}
add rate limiting to the public API and make sure existing tests still pass
```
**Give it a way to check its own work.** Ask for run, test, compare, or verify in the same prompt so Claude iterates instead of stopping after one attempt.
-```text theme={null}
+```text wrap theme={null}
write the migration, run it against the dev database, and confirm the schema matches
```
**Point at a reference.** Name an existing file, test, or pattern to match so the new code is consistent with what you already have.
-```text theme={null}
+```text wrap theme={null}
add a settings page that follows the same layout as the profile page
```
**State the measurable target.** When the goal is performance or coverage, give the metric and threshold so completion is unambiguous.
-```text theme={null}
+```text wrap theme={null}
get the bundle size under 200KB and show me what you removed
```
**Give it the artifact.** Paste errors, logs, screenshots, and plan output directly in the prompt, or type `@` to reference a file. Claude reads the source instead of your description of it.
-```text theme={null}
+```text wrap theme={null}
why is the build failing? @build.log
```
**Say how you want the answer.** Name the format, length, or audience so the explanation fits how you'll use it. To make a format the default for every response, set an [output style](/docs/en/output-styles).
-```text theme={null}
+```text wrap theme={null}
explain how the payment retry logic works as an HTML page with a diagram, then open it in my browser
```
diff --git a/content/en/docs/claude-code/quickstart.md b/content/en/docs/claude-code/quickstart.md
index 376b03384..2868d80ba 100644
--- a/content/en/docs/claude-code/quickstart.md
+++ b/content/en/docs/claude-code/quickstart.md
@@ -29,19 +29,19 @@ To install Claude Code, use one of the following methods:
**macOS, Linux, WSL:**
- ```bash theme={null}
+ ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
curl -fsSL https://claude.ai/install.sh | bash
```
**Windows PowerShell:**
- ```powershell theme={null}
+ ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
irm https://claude.ai/install.ps1 | iex
```
**Windows CMD:**
- ```batch theme={null}
+ ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd
```
@@ -57,7 +57,7 @@ To install Claude Code, use one of the following methods:
- ```bash theme={null}
+ ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
brew install --cask claude-code
```
@@ -69,7 +69,7 @@ To install Claude Code, use one of the following methods:
- ```powershell theme={null}
+ ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
winget install Anthropic.ClaudeCode
```
@@ -97,9 +97,9 @@ Claude Code requires an account to use. Start an interactive session with the `c
claude
```
-For Claude subscription or Console accounts, follow the prompts to complete authentication in your browser. To switch accounts later or re-authenticate, type `/login` inside the running session:
+For Claude subscription or Console accounts, follow the prompts to complete authentication in your browser. If you've set the `ANTHROPIC_API_KEY` environment variable, Claude Code skips the login prompt and asks you to approve the key instead. To switch accounts later or re-authenticate, type `/login` inside the running session:
-```text theme={null}
+```text wrap theme={null}
/login
```
@@ -133,35 +133,35 @@ You'll see the Claude Code prompt with the version, current model, and working d
Let's start with understanding your codebase. Try one of these commands:
-```text theme={null}
+```text wrap theme={null}
what does this project do?
```
Claude will analyze your files and provide a summary. You can also ask more specific questions:
-```text theme={null}
+```text wrap theme={null}
what technologies does this project use?
```
-```text theme={null}
+```text wrap theme={null}
where is the main entry point?
```
-```text theme={null}
+```text wrap theme={null}
explain the folder structure
```
You can also ask Claude about its own capabilities:
-```text theme={null}
+```text wrap theme={null}
what can Claude Code do?
```
-```text theme={null}
+```text wrap theme={null}
how do I create custom skills in Claude Code?
```
-```text theme={null}
+```text wrap theme={null}
can Claude Code work with Docker?
```
@@ -173,7 +173,7 @@ can Claude Code work with Docker?
Now let's make Claude Code do some actual coding. Try a simple task:
-```text theme={null}
+```text wrap theme={null}
add a hello world function to the main file
```
@@ -192,25 +192,25 @@ Claude Code will:
Claude Code makes Git operations conversational:
-```text theme={null}
+```text wrap theme={null}
what files have I changed?
```
-```text theme={null}
+```text wrap theme={null}
commit my changes with a descriptive message
```
You can also prompt for more complex Git operations:
-```text theme={null}
+```text wrap theme={null}
create a new branch called feature/quickstart
```
-```text theme={null}
+```text wrap theme={null}
show me the last 5 commits
```
-```text theme={null}
+```text wrap theme={null}
help me resolve merge conflicts
```
@@ -220,13 +220,13 @@ Claude is proficient at debugging and feature implementation.
Describe what you want in natural language:
-```text theme={null}
+```text wrap theme={null}
add input validation to the user registration form
```
Or fix existing issues:
-```text theme={null}
+```text wrap theme={null}
there's a bug where users can submit empty forms - fix it
```
@@ -243,25 +243,25 @@ There are a number of ways to work with Claude:
**Refactor code**
-```text theme={null}
+```text wrap theme={null}
refactor the authentication module to use async/await instead of callbacks
```
**Write tests**
-```text theme={null}
+```text wrap theme={null}
write unit tests for the calculator functions
```
**Update documentation**
-```text theme={null}
+```text wrap theme={null}
update the README with installation instructions
```
**Code review**
-```text theme={null}
+```text wrap theme={null}
review my changes and suggest improvements
```
@@ -307,7 +307,7 @@ For more, see [best practices](/docs/en/best-practices) and [common workflows](/
Break complex tasks into steps:
- ```text theme={null}
+ ```text wrap theme={null}
1. create a new database table for user profiles
2. create an API endpoint to get and update user profiles
3. build a webpage that allows users to see and edit their information
@@ -317,11 +317,11 @@ For more, see [best practices](/docs/en/best-practices) and [common workflows](/
Before making changes, let Claude understand your code:
- ```text theme={null}
+ ```text wrap theme={null}
analyze the database schema
```
- ```text theme={null}
+ ```text wrap theme={null}
build a dashboard showing products that are most frequently returned by our UK customers
```
diff --git a/content/en/docs/claude-code/remote-control.md b/content/en/docs/claude-code/remote-control.md
index 5c972fe44..cc2ad5c1d 100644
--- a/content/en/docs/claude-code/remote-control.md
+++ b/content/en/docs/claude-code/remote-control.md
@@ -30,6 +30,7 @@ Before using Remote Control, confirm that your environment meets these condition
* **Subscription**: available on Pro, Max, Team, and Enterprise plans. API keys are not supported. On Team and Enterprise, an Owner must first enable the Remote Control toggle in [Claude Code admin settings](https://claude.ai/admin-settings/claude-code).
* **Authentication**: run `claude` and use `/login` to sign in through claude.ai if you haven't already. Without an eligible login, `claude remote-control` exits with an error, while `claude --remote-control` still starts an interactive session and shows a Remote Control failure notification shortly after launch.
* **API endpoint**: not available on Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry. {/* min-version: 2.1.196 */}As of v2.1.196, Remote Control is also disabled when [`ANTHROPIC_BASE_URL`](/docs/en/env-vars) points at a host other than `api.anthropic.com`, such as an [LLM gateway](/docs/en/llm-gateway) or proxy. Unset the variable to use Remote Control.
+* **Feature-flag evaluation**: [`DISABLE_TELEMETRY`, `DO_NOT_TRACK`, `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, and `DISABLE_GROWTHBOOK`](/docs/en/env-vars) each disable the feature-flag evaluation that Remote Control availability depends on. Unset the variable wherever it's set, in your shell environment or in the `env` block of a [`settings.json` file](/docs/en/settings#available-settings), to use Remote Control.
* **Workspace trust**: run `claude` in your project directory at least once to accept the workspace trust dialog. The startup trust dialog never saves trust for your home directory, so start Remote Control from a project directory.
## Start a Remote Control session
@@ -59,6 +60,8 @@ You can start a Remote Control session from the CLI or the VS Code extension. Th
| `--[no-]create-session-in-dir` | Pre-create one session in the current directory when the server starts, so you have somewhere to type immediately. In `worktree` mode this session stays in the current directory while on-demand sessions get isolated worktrees. On by default; pass `--no-create-session-in-dir` to start with none. |
| `--verbose` | Show detailed connection and session logs. |
| `--sandbox` / `--no-sandbox` | Enable or disable [sandboxing](/docs/en/sandboxing) for filesystem and network isolation. Off by default. |
+
+ Claude Code checks Remote Control eligibility before printing help, so `claude remote-control --help` returns an error instead of this flag list when you aren't signed in with an eligible account.
@@ -150,9 +153,9 @@ If you don't have the Claude app yet, use the `/mobile` command inside Claude Co
### Enable Remote Control for all sessions
-Remote Control only activates when you explicitly run `claude remote-control`, `claude --remote-control`, or `/remote-control`, unless auto-connect is turned on. To enable it automatically for every interactive session, run `/config` inside Claude Code and set **Enable Remote Control for all sessions** to `true`. Set it to `false` to never auto-connect, or leave it unset to follow your organization's default. In the Desktop app, you can also toggle this from **Settings → Claude Code → Enable remote control by default**. {/* min-version: 2.1.203 */}In the [VS Code extension](/docs/en/vs-code#use-the-prompt-box), the same toggle appears as **Enable Remote Control for all sessions** in the command menu's Settings section; requires Claude Code v2.1.203 or later.
+Remote Control only activates when you explicitly run `claude remote-control`, `claude --remote-control`, or `/remote-control`, unless auto-connect is turned on. To enable it automatically for every interactive session, run `/config` inside Claude Code and set **Enable Remote Control for all sessions** to `true`. Set it to `false` to never auto-connect, or to `default` to clear your choice. When the setting is cleared, Remote Control follows your organization's admin default if one is set, and otherwise Claude Code's current default. In the Desktop app, you can also toggle this from **Settings → Claude Code → Enable remote control by default**. {/* min-version: 2.1.203 */}In the [VS Code extension](/docs/en/vs-code#use-the-prompt-box), the same toggle appears as **Enable Remote Control for all sessions** in the command menu's Settings section; requires Claude Code v2.1.203 or later.
-With this setting on, each interactive Claude Code process registers one remote session. If you run multiple instances, each one gets its own environment and session. To run multiple concurrent sessions from a single process, use [server mode](#start-a-remote-control-session) instead.
+With this setting on, each interactive Claude Code process registers one remote session. If you run multiple instances, each one gets its own remote session. To run multiple concurrent sessions from a single process, use [server mode](#start-a-remote-control-session) instead.
## Connection and security
@@ -290,7 +293,7 @@ Your cached account information is stale or incomplete. Run `claude auth login`
### "Remote Control is not yet enabled for your account"
-The Remote Control rollout has not reached your account, or your cached entitlements are out of date. If you recently changed plans, run `claude auth logout` then `claude auth login` to refresh them. Run `claude doctor` to see which individual eligibility check failed. Environment-variable conflicts, unreachable checks, and organization policy each produce their own message, so this error means the rollout gate itself.
+The Remote Control rollout has not reached your account, or your cached entitlements are out of date. If you recently changed plans, run `claude auth logout` then `claude auth login` to refresh them. Run `claude doctor` to see which individual eligibility check failed. Environment-variable conflicts, unreachable checks, and organization policy each produce their own message, so this error means the rollout gate itself. {/* min-version: 2.1.154 */}Before v2.1.154, a variable that disables feature-flag evaluation, such as `DISABLE_TELEMETRY` or `DO_NOT_TRACK`, also produced this message; the "Remote Control requires feature-flag evaluation" entry below covers that configuration.
### "Couldn't verify Remote Control eligibility"
@@ -298,7 +301,7 @@ Claude Code could not reach the feature-flag service to check whether Remote Con
### "Remote Control requires feature-flag evaluation"
-The full message names the environment variable that caused it: `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_TELEMETRY`, `DO_NOT_TRACK`, or `DISABLE_GROWTHBOOK`. These privacy opt-outs disable feature-flag evaluation, which Remote Control needs to check its rollout gate. Unset the named variable, or start the session in a shell without it. Before v2.1.154, this case surfaced as "Remote Control is not yet enabled for your account" instead of naming the variable.
+One of these variables is set: [`DISABLE_TELEMETRY`, `DO_NOT_TRACK`, `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, or `DISABLE_GROWTHBOOK`](/docs/en/env-vars). Each of them disables the feature-flag evaluation that Remote Control availability depends on, and the full message names the variable Claude Code found. Unset that variable wherever it's set, in your shell environment or in the `env` block of a [`settings.json` file](/docs/en/settings#available-settings). On versions before 2.1.154, the same configuration produces "Remote Control is not yet enabled for your account" instead.
### "Remote Control is only available when using Claude via api.anthropic.com"
diff --git a/content/en/docs/claude-code/sandbox-environments.md b/content/en/docs/claude-code/sandbox-environments.md
index 6347538da..6e988dc7a 100644
--- a/content/en/docs/claude-code/sandbox-environments.md
+++ b/content/en/docs/claude-code/sandbox-environments.md
@@ -18,14 +18,14 @@ Claude Code can run in several kinds of isolated environments, ranging from a li
The first two approaches in the table below run on the host operating system without containers. The rest place Claude Code inside a container or virtual machine.
-| Approach | What is isolated | Requires Docker | Setup effort |
-| :------------------------------------------------ | :-------------------------------------------------------------------------- | :-------------- | :---------------------------------------------- |
-| [Sandboxed Bash tool](#sandboxed-bash-tool) | Bash commands and their child processes | No | Minimal on macOS; low on Linux and WSL2 |
-| [Sandbox runtime](#sandbox-runtime) | The whole Claude Code process, including file tools, MCP servers, and hooks | No | Low |
-| [Dev container](#dev-containers) | Full development environment | Yes | Medium |
-| [Custom container](#custom-container) | Full development environment | Yes | Medium to high |
-| [Virtual machine](#virtual-machine) | Full operating system | No | High |
-| [Claude Code on the web](#claude-code-on-the-web) | Full operating system, hosted by Anthropic | No | None; requires a Claude subscription and GitHub |
+| Approach | What is isolated | Requires Docker | Setup effort |
+| :------------------------------------------------ | :-------------------------------------------------------------------------- | :-------------- | :-------------------------------------------------------------------------------------- |
+| [Sandboxed Bash tool](#sandboxed-bash-tool) | Bash commands and their child processes | No | Minimal on macOS; low on Linux and WSL2 |
+| [Sandbox runtime](#sandbox-runtime) | The whole Claude Code process, including file tools, MCP servers, and hooks | No | Low |
+| [Dev container](#dev-containers) | Full development environment | Yes | Medium |
+| [Custom container](#custom-container) | Full development environment | Yes | Medium to high |
+| [Virtual machine](#virtual-machine) | Full operating system | No | High |
+| [Claude Code on the web](#claude-code-on-the-web) | Full operating system, hosted by Anthropic | No | None; requires a Claude subscription, and GitHub when you launch from the web interface |
The [sandboxed Bash tool](/docs/en/sandboxing) is built into Claude Code and restricts only Bash commands. Built-in file tools, MCP servers, and hooks still run directly on your host. Every other approach in the table puts the whole Claude Code process inside the isolation boundary, so file tools, MCP servers, and hooks are restricted too.
@@ -39,16 +39,16 @@ The [sandboxed Bash tool](/docs/en/sandboxing) is built into Claude Code and res
Match your goal to a row below, then read the detail section that follows.
-| You want to | Start with |
-| :---------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Reduce permission prompts during everyday work on your own machine | The [sandboxed Bash tool](/docs/en/sandboxing), enabled with `/sandbox` |
-| Let Claude work unattended with `--dangerously-skip-permissions` or auto mode | The preconfigured [dev container](/docs/en/devcontainer), any container or VM, or the [sandbox runtime](#sandbox-runtime) |
-| Isolate MCP servers and hooks as well as Bash, without Docker | The sandbox runtime |
-| Work on an untrusted repository | A dedicated virtual machine, or [Claude Code on the web](/docs/en/claude-code-on-the-web) if you have a Claude subscription and a connected GitHub account |
-| Standardize a sandboxed environment across a team | The preconfigured [dev container](/docs/en/devcontainer), copied into your repository |
-| Use Claude Code from a device with no local setup | [Claude Code on the web](/docs/en/claude-code-on-the-web), which requires a Claude subscription and a connected GitHub account |
-| Require isolation for every developer in your organization | [Enforce isolation across an organization](#enforce-isolation-across-an-organization) |
-| Work on a native Windows host | A container or VM, or run the Bash sandbox inside WSL2 |
+| You want to | Start with |
+| :---------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Reduce permission prompts during everyday work on your own machine | The [sandboxed Bash tool](/docs/en/sandboxing), enabled with `/sandbox` |
+| Let Claude work unattended with `--dangerously-skip-permissions` or auto mode | The preconfigured [dev container](/docs/en/devcontainer), any container or VM, or the [sandbox runtime](#sandbox-runtime) |
+| Isolate MCP servers and hooks as well as Bash, without Docker | The sandbox runtime |
+| Work on an untrusted repository | A dedicated virtual machine, or [Claude Code on the web](/docs/en/claude-code-on-the-web) if you have a Claude subscription; GitHub is only required when you launch from the web interface |
+| Standardize a sandboxed environment across a team | The preconfigured [dev container](/docs/en/devcontainer), copied into your repository |
+| Use Claude Code from a device with no local setup | [Claude Code on the web](/docs/en/claude-code-on-the-web), which requires a Claude subscription and a connected GitHub account |
+| Require isolation for every developer in your organization | [Enforce isolation across an organization](#enforce-isolation-across-an-organization) |
+| Work on a native Windows host | A container or VM, or run the Bash sandbox inside WSL2 |
### How isolation relates to permission modes
@@ -115,7 +115,7 @@ Use this approach when you are evaluating untrusted code, when your security pol
[Claude Code on the web](/docs/en/claude-code-on-the-web) runs each session in an isolated, Anthropic-managed virtual machine. A network proxy enforces a default allowlist, and a separate proxy holds your GitHub token outside the sandbox while issuing scoped credentials for repository access inside it.
-Use this approach when you want full VM isolation without provisioning infrastructure yourself, or when you are delegating tasks from a device that does not have a local development environment. It requires a Claude subscription and a connected GitHub account, and sessions clone your repository from GitHub. See [Claude Code on the web](/docs/en/claude-code-on-the-web) for plan availability and GitHub authentication options.
+Use this approach when you want full VM isolation without provisioning infrastructure yourself, or when you are delegating tasks from a device that does not have a local development environment. It requires a Claude subscription. When you launch a session from the web interface, you also need a connected GitHub account so the sandbox can clone your repository. When you launch from the CLI with `--cloud`, Claude Code can [bundle and upload your local repository](/docs/en/claude-code-on-the-web#send-local-repositories-without-github) instead if GitHub isn't connected. See [Claude Code on the web](/docs/en/claude-code-on-the-web) for plan availability and GitHub authentication options.
## Enforce isolation across an organization
diff --git a/content/en/docs/claude-code/sandboxing.md b/content/en/docs/claude-code/sandboxing.md
index 6b511aa24..ef98882a5 100644
--- a/content/en/docs/claude-code/sandboxing.md
+++ b/content/en/docs/claude-code/sandboxing.md
@@ -46,7 +46,7 @@ On macOS, there is nothing to install: sandboxing uses the built-in Seatbelt fra
-Selecting a mode in the panel writes to your project's local settings at `.claude/settings.local.json`, which apply to the current project and are not checked into git. To enable the sandbox across all of your projects, set [`sandbox.enabled`](/docs/en/settings#sandbox-settings) to `true` in your user settings at `~/.claude/settings.json`. To enforce sandboxing for every developer in an organization, use [managed settings](#enforce-sandboxing-with-managed-settings).
+Selecting a mode in the panel writes to your project's local settings at `.claude/settings.local.json`, which apply to the current project. Claude Code adds that file to your global gitignore when it saves a setting there. To enable the sandbox across all of your projects, set [`sandbox.enabled`](/docs/en/settings#sandbox-settings) to `true` in your user settings at `~/.claude/settings.json`. To enforce sandboxing for every developer in an organization, use [managed settings](#enforce-sandboxing-with-managed-settings).
By default, if the sandbox cannot start because dependencies are missing or the platform is unsupported, Claude Code shows a warning and runs commands without sandboxing. To make this a hard failure instead, set [`sandbox.failIfUnavailable`](/docs/en/settings#sandbox-settings) to `true`. This is intended for managed deployments that require sandboxing as a security gate.
diff --git a/content/en/docs/claude-code/security-guidance.md b/content/en/docs/claude-code/security-guidance.md
index bb1ecf198..bd21586f1 100644
--- a/content/en/docs/claude-code/security-guidance.md
+++ b/content/en/docs/claude-code/security-guidance.md
@@ -10,7 +10,7 @@ The security guidance plugin makes Claude review its own code changes for common
Once installed, the plugin runs automatically. There is nothing to invoke and no separate command to remember.
-The plugin is the in-session companion to [Code Review](/docs/en/code-review), which runs on pull requests. This plugin reduces what reaches the PR. Code Review catches what does. For how the plugin layers with on-demand review and CI scanning, see [How this fits with other security tools](#how-this-fits-with-other-security-tools).
+The plugin is the in-session companion to [Code Review](/docs/en/code-review), which runs on pull requests. This plugin reduces what reaches the PR. Code Review catches what does. For how the plugin layers with on-demand review and CI scanning, or to scan code you already have rather than changes Claude is writing, see [How this fits with other security tools](#how-this-fits-with-other-security-tools).
## Prerequisites
@@ -156,11 +156,11 @@ The plugin also reads `.claude/security-patterns.yml` and `.claude/security-patt
The plugin looks for `claude-security-guidance.md` and `security-patterns.yaml` in the same locations, independently of how the plugin was enabled:
-| Scope | Path | Notes |
-| :------------ | :------------------------------------------ | :--------------------------------------- |
-| User | `~/.claude/claude-security-guidance.md` | Applies to every project on your machine |
-| Project | `.claude/claude-security-guidance.md` | Checked in with the repository |
-| Project local | `.claude/claude-security-guidance.local.md` | Gitignored, for personal overrides |
+| Scope | Path | Notes |
+| :------------ | :------------------------------------------ | :-------------------------------------------------- |
+| User | `~/.claude/claude-security-guidance.md` | Applies to every project on your machine |
+| Project | `.claude/claude-security-guidance.md` | Checked in with the repository |
+| Project local | `.claude/claude-security-guidance.local.md` | For personal overrides; add it to your `.gitignore` |
The plugin loads all locations that exist and concatenates them, with a combined cap of 8 KB for the guidance file. Administrators can distribute organization-wide rules by pushing the user-scope file to `~/.claude/` through device management. The same paths apply to `security-patterns.yaml`.
@@ -226,6 +226,8 @@ The plugin is one layer in a defense-in-depth approach. It catches issues earlie
Each later stage catches what earlier ones miss. The plugin's value is reducing the volume that reaches them, not eliminating the need for them.
+To find security issues in code you already have, rather than in changes Claude is writing, ask Claude in a session to review a specific file or directory for vulnerabilities, or use the [Claude Security plugin](/docs/en/claude-security) for a deeper multi-agent scan of the whole repository; [`/security-review`](/docs/en/commands#all-commands) covers only the changes on your current branch. Either way, the review reads the source code in your checkout, not a running site or deployed service.
+
## Troubleshooting
The plugin writes runtime diagnostics to `~/.claude/security/log.txt`. Check there first if reviews are not appearing.
diff --git a/content/en/docs/claude-code/security.md b/content/en/docs/claude-code/security.md
index c2e1dc461..8c6d26e97 100644
--- a/content/en/docs/claude-code/security.md
+++ b/content/en/docs/claude-code/security.md
@@ -138,6 +138,7 @@ If you discover a security vulnerability in Claude Code:
## Related resources
* [Security guidance plugin](/docs/en/security-guidance): have Claude review and fix vulnerabilities in its own code changes during the session
+* [`/security-review`](/docs/en/commands#all-commands): run an on-demand security pass over the changes on your current branch
* [Sandbox environments](/docs/en/sandbox-environments): compare isolation approaches and choose one for your threat model
* [Sandboxing](/docs/en/sandboxing): filesystem and network isolation for Bash commands
* [Permissions](/docs/en/permissions): configure permissions and access controls
diff --git a/content/en/docs/claude-code/sessions.md b/content/en/docs/claude-code/sessions.md
index a5805369e..94ee5c621 100644
--- a/content/en/docs/claude-code/sessions.md
+++ b/content/en/docs/claude-code/sessions.md
@@ -37,6 +37,18 @@ A resumed session restores the conversation along with the state saved in it:
Not every configuration flag from the original launch is restored. If the session depended on `--mcp-config`, `--settings`, `--plugin-dir`, `--fallback-model`, or directories added with `--add-dir`, pass them again when you resume; directories added mid-session with `/add-dir` aren't restored either, though the session picker still uses them to locate the session. The standard settings files, such as `settings.json` and `settings.local.json`, are re-read at launch, so configuration that lives in them doesn't need to be passed again.
+### Resume from a summary
+
+On a Pro or Max plan, when you resume a session that has been inactive for more than about an hour and is over 100,000 tokens, Claude Code restores the conversation and then opens a dialog before you send your first message. The session's [prompt cache](/docs/en/prompt-caching#cache-lifetime) has expired by then, so the next request processes the full history once no matter which of the dialog's options you pick.
+
+The dialog offers three ways to continue the session. They differ in how much of the conversation each one carries forward into later requests, which is a tradeoff between keeping every detail and sending fewer tokens per request:
+
+* **Resume from summary**: runs [`/compact`](/docs/en/context-window#what-survives-compaction) immediately. Claude Code sends one summarization request over the full history, then replaces the history with the summary, your most recent exchanges, and up to five recently read files. Later requests carry the summary instead of the full history.
+* **Resume full session as-is**: loads the conversation unchanged. After you send your first message, Claude Code reprocesses and re-caches the full history, then re-reads it from the cache on later requests while the cache stays warm.
+* **Don't ask me again**: resumes the full session and stops showing the dialog on all future resumes.
+
+Resuming as-is keeps every detail of the conversation available, at a per-request cost that scales with the conversation's size. Resuming from the summary costs less on each later request because it carries the summary instead of the full history, but whatever the summary leaves out is no longer in Claude's context. See [why usage climbs in a long session](/docs/en/costs#why-usage-climbs-in-a-long-session) for where that per-request cost comes from.
+
### Where the session picker looks
Claude Code stores sessions per project directory. By default the session picker shows:
diff --git a/content/en/docs/claude-code/settings.md b/content/en/docs/claude-code/settings.md
index 94985171b..361ebe8f4 100644
--- a/content/en/docs/claude-code/settings.md
+++ b/content/en/docs/claude-code/settings.md
@@ -14,12 +14,12 @@ Claude Code uses a scope system to determine where configurations apply and who
### Available scopes
-| Scope | Location | Who it affects | Shared with team? |
-| :---------- | :--------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ |
-| **Managed** | Server-managed settings, plist / registry, or system-level `managed-settings.json` | All organization members for server-managed delivery; all users on the machine for plist, HKLM registry, and file delivery; the current user for HKCU registry delivery | Yes (deployed by IT) |
-| **User** | `~/.claude/` directory | You, across all projects | No |
-| **Project** | `.claude/` in repository | All collaborators on this repository | Yes (committed to git) |
-| **Local** | `.claude/settings.local.json` at the repository root | You, in this repository only | No (gitignored when Claude Code creates it) |
+| Scope | Location | Who it affects | Shared with team? |
+| :---------- | :--------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- |
+| **Managed** | Server-managed settings, plist / registry, or system-level `managed-settings.json` | All organization members for server-managed delivery; all users on the machine for plist, HKLM registry, and file delivery; the current user for HKCU registry delivery | Yes (deployed by IT) |
+| **User** | `~/.claude/` directory | You, across all projects | No |
+| **Project** | `.claude/` in repository | All collaborators on this repository | Yes (committed to git) |
+| **Local** | `.claude/settings.local.json` at the repository root | You, in this repository only | No (gitignored when Claude Code saves a setting to it) |
### When to use each scope
@@ -84,7 +84,7 @@ Code through hierarchical settings:
projects.
* **Project settings** are saved in your project directory:
* `.claude/settings.json` for settings that are checked into source control and shared with your team
- * `.claude/settings.local.json` for settings that are not checked in, useful for personal preferences and experimentation. When Claude Code creates `.claude/settings.local.json`, it configures git to ignore the file. If you create the file yourself, add it to your gitignore manually.
+ * `.claude/settings.local.json` for settings that are not checked in, useful for personal preferences and experimentation. When Claude Code saves a setting to this file in a repository that doesn't already ignore it, Claude Code adds `**/.claude/settings.local.json` to your global git excludes file. That excludes file is `core.excludesFile` from your global git config when it's set to an absolute or `~`-prefixed path, otherwise `$XDG_CONFIG_HOME/git/ignore`, or `~/.config/git/ignore`. If you create the file by hand or have Claude write it with the Write tool, add it to your gitignore yourself.
Claude Code reads and writes this file at the root of the git repository, resolved through [worktrees](/docs/en/worktrees) to the main checkout, so one file covers sessions started in any subdirectory or worktree of the repository. The file stays in the directory you start Claude Code from in three cases: outside a git repository, when the repository root is your home directory, and in [Agent SDK](/docs/en/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) sessions.
@@ -153,7 +153,8 @@ The following example works in any of the settings file locations above. Where y
},
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
- "OTEL_METRICS_EXPORTER": "otlp"
+ "OTEL_METRICS_EXPORTER": "otlp",
+ "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf"
},
"companyAnnouncements": [
"Welcome to Acme Corp! Review our code guidelines at docs.acme.com",
@@ -306,7 +307,7 @@ This tolerance applies only to managed settings. User, project, and local settin
| `processWrapper` | {/* min-version: 2.1.210 */}Corporate launcher command placed in front of the [background processes Claude Code starts](/docs/en/corporate-launcher#what-the-launcher-covers). Honored from managed settings, a `--settings` file, and user settings only; the [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/en/env-vars) environment variable takes precedence when both are set. See [Run Claude Code behind a corporate launcher](/docs/en/corporate-launcher) for the launcher contract. Requires Claude Code v2.1.210 or later | `"/opt/corp/launcher --profile claude"` |
| `prUrlTemplate` | URL template for the PR badge shown in the footer and in tool-result summaries. Substitutes `{host}`, `{owner}`, `{repo}`, `{number}`, and `{url}` from the `gh`-reported PR URL. Use to point PR links at an internal code-review tool instead of `github.com`. Does not affect `#123` autolinks in Claude's prose | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |
| `remote.defaultEnvironmentId` | Default [cloud environment](/docs/en/cloud-environments) for cloud sessions you create from the CLI, such as with `claude --cloud` or [ultraplan](/docs/en/ultraplan). Written to user settings when you pick an environment with [`/remote-env`](/docs/en/cloud-environments#select-an-environment-from-the-cli). Follows the standard settings precedence, so a value in a repo's project settings overrides the user-level pick | `"env_0123abcd"` |
-| `remoteControlAtStartup` | {/* min-version: 2.1.119 */}Connect [Remote Control](/docs/en/remote-control) automatically when each interactive session starts, instead of waiting for `/remote-control`. Set to `true` to always auto-connect, `false` to never auto-connect, or leave unset to follow your organization's default. Appears in `/config` as **Enable Remote Control for all sessions**. See [Enable Remote Control for all sessions](/docs/en/remote-control#enable-remote-control-for-all-sessions) | `false` |
+| `remoteControlAtStartup` | {/* min-version: 2.1.119 */}Connect [Remote Control](/docs/en/remote-control) automatically when each interactive session starts, instead of waiting for `/remote-control`. Set to `true` to always auto-connect, `false` to never auto-connect, or leave unset to follow your organization's admin default if one is set, and otherwise Claude Code's current default. Appears in `/config` as **Enable Remote Control for all sessions**. See [Enable Remote Control for all sessions](/docs/en/remote-control#enable-remote-control-for-all-sessions) | `false` |
| `requiredMaximumVersion` | Managed settings only. Maximum Claude Code version allowed to start. If the running version is newer, Claude Code exits at startup and instructs the user to install an approved version through the organization's approved method; `claude install ` may also work. Background auto-updates and `claude update` skip versions above the ceiling, so an in-range installation stays in range. `claude update`, `claude install`, and `claude doctor` keep working above the ceiling so users can recover. Versions that predate this setting ignore it | `"2.1.150"` |
| `requiredMinimumVersion` | Managed settings only. Minimum Claude Code version required to start. If the running version is older, Claude Code exits at startup and instructs the user to update through the organization's approved method. `claude update`, `claude install`, and `claude doctor` keep working below the floor so users can recover. Differs from `minimumVersion`, which prevents downgrades but never blocks startup. Versions that predate this setting ignore it | `"2.1.150"` |
| `respectGitignore` | **Default**: `true`. Control whether the `@` file picker respects `.gitignore` patterns. When `true`, files matching `.gitignore` patterns are excluded from suggestions | `false` |
@@ -787,7 +788,7 @@ Controls which plugins are enabled. Format: `"plugin-name@marketplace-name": tru
* **User settings** (`~/.claude/settings.json`): Personal plugin preferences
* **Project settings** (`.claude/settings.json`): Project-specific plugins shared with team
-* **Local settings** (`.claude/settings.local.json`): Per-machine overrides, gitignored when Claude Code creates it
+* **Local settings** (`.claude/settings.local.json`): Per-machine overrides, gitignored when Claude Code saves a setting to it
* **Managed settings** (`managed-settings.json`): Organization-wide policy overrides that block installation at all scopes and hide the plugin from the marketplace
@@ -920,7 +921,7 @@ Use `source: 'settings'` to declare a small set of plugins inline without settin
**Allowlist behavior**:
* `undefined` (default): no restrictions, so users can add any marketplace
-* Empty array `[]`: complete lockdown, so users can't add any new marketplaces
+* Empty array `[]`: complete lockdown that blocks every marketplace source, including the official Anthropic marketplace, so users can't add any new marketplaces
* List of sources: users can only add marketplaces that match exactly
**All supported source types**:
@@ -1044,7 +1045,7 @@ Example: allow specific marketplaces only:
}
```
-Example: disable all marketplace additions:
+Example: disable all marketplace additions, including the official Anthropic marketplace:
```json theme={null}
{
@@ -1052,6 +1053,21 @@ Example: disable all marketplace additions:
}
```
+Example: allow only the official Anthropic marketplace. Matching is exact, so this entry doesn't cover `ref` or `path` variants of the same repository:
+
+```json theme={null}
+{
+ "strictKnownMarketplaces": [
+ {
+ "source": "github",
+ "repo": "anthropics/claude-plugins-official"
+ }
+ ]
+}
+```
+
+With this entry, the official marketplace registers itself automatically the first time you start Claude Code interactively, so you don't need to pair it with `extraKnownMarketplaces`. In a non-interactive environment that runs before that first interactive launch, add it explicitly with `claude plugin marketplace add anthropics/claude-plugins-official` or include it in `extraKnownMarketplaces`.
+
Example: allow all marketplaces from an internal git server:
```json theme={null}
diff --git a/content/en/docs/claude-code/setup.md b/content/en/docs/claude-code/setup.md
index ad4e8ddf9..6abcb2107 100644
--- a/content/en/docs/claude-code/setup.md
+++ b/content/en/docs/claude-code/setup.md
@@ -358,6 +358,8 @@ To install a specific version number:
+To confirm which version installed, run `claude --version`: the command prints the exact version you passed, such as `2.1.89 (Claude Code)`.
+
### Install with Linux package managers
Claude Code publishes signed apt, dnf, and apk repositories. Each repository offers two channels: `stable` serves a version that is typically about one week old, skipping releases with major regressions, and `latest` serves every release as soon as it ships. The commands below configure the `stable` channel, which fits most users; each tab also shows the `latest` repository URL. Package manager installations do not auto-update through Claude Code; updates arrive through your normal system upgrade workflow.
@@ -366,18 +368,31 @@ All repositories are signed with the [Claude Code release signing key](#binary-i
- For Debian and Ubuntu. The install commands below download the signing key with `curl`, which fresh Debian and Ubuntu installations may not include. If the download fails with `sudo: curl: command not found`, install curl first:
+ For Debian and Ubuntu. The install commands below download the signing key with `curl` and verify it with `gpg`, which fresh Debian and Ubuntu installations may not include. If either command reports `command not found`, install both first:
```bash theme={null}
- sudo apt install curl
+ sudo apt install curl gnupg
```
- The following commands configure the `stable` channel:
+ Download the signing key:
```bash theme={null}
sudo install -d -m 0755 /etc/apt/keyrings
sudo curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \
-o /etc/apt/keyrings/claude-code.asc
+ ```
+
+ If this download fails, `apt update` later fails with `NO_PUBKEY BAA929FF1A7ECACE`. Confirm the key downloaded and belongs to Anthropic before continuing:
+
+ ```bash theme={null}
+ gpg --show-keys /etc/apt/keyrings/claude-code.asc
+ ```
+
+ The fingerprint gpg prints should be `31DDDE24DDFAB679F42D7BD2BAA929FF1A7ECACE`. If gpg reports that the file can't be opened or contains no valid OpenPGP data, the download failed or returned the wrong content: confirm your network can reach `downloads.claude.ai`, then rerun the download command.
+
+ Register the repository on the `stable` channel and install:
+
+ ```bash theme={null}
echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \
| sudo tee /etc/apt/sources.list.d/claude-code.list
sudo apt update
@@ -391,8 +406,6 @@ All repositories are signed with the [Claude Code release signing key](#binary-i
| sudo tee /etc/apt/sources.list.d/claude-code.list
```
- Verify the GPG key fingerprint before trusting it: `gpg --show-keys /etc/apt/keyrings/claude-code.asc` should report `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`.
-
To upgrade later, run `sudo apt update && sudo apt upgrade claude-code`.
diff --git a/content/en/docs/claude-code/skills.md b/content/en/docs/claude-code/skills.md
index ccc989004..d8e1b33c9 100644
--- a/content/en/docs/claude-code/skills.md
+++ b/content/en/docs/claude-code/skills.md
@@ -143,9 +143,11 @@ Claude Code watches skill directories for file changes. Adding, editing, or remo
Live change detection covers `SKILL.md` text only. For a skill folder that is also a [plugin](/docs/en/plugins-reference#skills-directory-plugins), changes to `hooks/`, `.mcp.json`, `agents/`, and `output-styles/` need `/reload-plugins` to take effect.
-#### Automatic discovery from parent and nested directories
+#### Discovery from parent and nested directories
-Project skills load from `.claude/skills/` in your starting directory and in every parent directory up to the repository root, so starting Claude in a subdirectory still picks up skills defined at the root. When you work with files in subdirectories below your starting directory, Claude Code also discovers skills from nested `.claude/skills/` directories on demand. For example, if you're editing a file in `packages/frontend/`, Claude Code also looks for skills in `packages/frontend/.claude/skills/`. This supports monorepo setups where packages have their own skills.
+Project skills load from `.claude/skills/` in the directory where you start Claude Code and in every parent directory up to the repository root. Starting Claude in a subdirectory still picks up skills defined at the root. To load skills from a directory outside that path at startup, pass it with [`--add-dir`](/docs/en/cli-reference). Claude Code reads `.claude/skills/` inside each added directory alongside the project skills.
+
+Skills in nested `.claude/skills/` directories below your starting directory aren't loaded at startup. They load the first time Claude reads or edits a file inside that subdirectory, and stay available for the rest of the session. For example, after Claude edits a file under `packages/frontend/`, skills in `packages/frontend/.claude/skills/` become available. Until then, those skills don't appear in autocomplete and can't be invoked by name.
Each skill is a directory with `SKILL.md` as the entrypoint:
diff --git a/content/en/docs/claude-code/slack.md b/content/en/docs/claude-code/slack.md
index 2fdd56a97..7d3dc5d41 100644
--- a/content/en/docs/claude-code/slack.md
+++ b/content/en/docs/claude-code/slack.md
@@ -4,11 +4,14 @@
# Claude Code in Slack
-> Delegate coding tasks directly from your Slack workspace
+> Delegate coding tasks directly from your Slack workspace. Anthropic is retiring this earlier version for Team and Enterprise workspaces in favor of Claude Tag; it remains the setup path on Pro and Max plans.
-
- Claude Code in Slack is being replaced by [Claude Tag](https://claude.com/product/tag) for Team and Enterprise workspaces. Claude Tag runs @Claude as your organization's shared identity with admin-configured access, under the same Slack app, so there is nothing to reinstall and existing setups continue to work during the transition. To switch a workspace, see [Migrate from the earlier Claude in Slack](https://claude.com/docs/claude-tag/admins/migrate-from-earlier).
-
+
+ This page documents the earlier Claude Code in Slack, which runs each session under an individual user's account.
+
+ * **Team and Enterprise plans:** Anthropic is retiring this version in favor of [Claude Tag](https://claude.com/docs/claude-tag/overview), which runs @Claude as your organization's shared identity with admin-configured access. Your existing Slack app and @Claude handle stay, and your Anthropic account team can tell you the cutover date. Set up Claude Tag for a new workspace; to move one that already uses this version, see [Migrate from the earlier Claude in Slack](https://claude.com/docs/claude-tag/admins/migrate-from-earlier).
+ * **Pro and Max plans:** Claude Tag isn't available on individual plans, so this page remains the setup path.
+
Claude Code in Slack brings the power of Claude Code directly into your Slack workspace. When you mention `@Claude` with a coding task, Claude automatically detects the intent and creates a Claude Code session on the web, allowing you to delegate development work without leaving your team conversations.
@@ -193,6 +196,17 @@ This error means your Claude account has no cloud environment yet, not that an a
2. Check that you have Claude Code on the web access enabled
3. Ensure you have at least one GitHub repository connected to Claude Code
+### Sessions from a Claude Tag channel fail to start
+
+This entry applies to workspaces using [Claude Tag](https://claude.com/docs/claude-tag/overview), where Claude works in channels as your organization's shared identity, not as any member's account. If you created the channel's cloud environment at [claude.ai/code](https://claude.ai/code), it belongs to your personal account, and Claude can't start channel sessions in a personal environment. Claude Code fails the session immediately, and retrying doesn't help.
+
+If you're an Owner or admin, recreate the environment as an [organization-shared environment](/docs/en/cloud-environments#organization-shared-environments) from the **Cloud environments** page in [admin settings](https://claude.ai/admin-settings). You can apply it in two ways:
+
+* Set it as the organization default at [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).
+* [Set it on the channel](https://claude.com/docs/claude-tag/admins/troubleshooting#channel-sessions-use-the-wrong-environment-or-can%E2%80%99t-find-one) in the Claude Tag admin settings.
+
+If you're not an Owner or admin, send this entry to one.
+
### Repository not showing
1. Connect the repository in Claude Code on the web at [claude.ai/code](https://claude.ai/code)
diff --git a/content/en/docs/claude-code/sub-agents.md b/content/en/docs/claude-code/sub-agents.md
index d7fe5a720..b659d00d1 100644
--- a/content/en/docs/claude-code/sub-agents.md
+++ b/content/en/docs/claude-code/sub-agents.md
@@ -573,6 +573,14 @@ fi
exit 0
```
+On macOS and Linux, make the script executable, or the hook fails instead of blocking anything:
+
+```bash theme={null}
+chmod +x ./scripts/validate-readonly-query.sh
+```
+
+To test the rule, ask the subagent to run an `UPDATE` statement: the script exits with code 2, Claude Code blocks the command, and the subagent sees the `Blocked: Only SELECT queries are allowed` message.
+
See [Hook input](/docs/en/hooks#pretooluse-input) for the complete input schema and [exit codes](/docs/en/hooks#exit-code-output) for how exit codes affect behavior. On Windows, write hook scripts in PowerShell and add `shell: powershell` to the hook entry as shown in [running hooks in PowerShell](/docs/en/hooks#windows-powershell-tool).
#### Disable specific subagents
@@ -1227,6 +1235,8 @@ On Windows, write the validation script in PowerShell and add `shell: powershell
The hook receives JSON via stdin with the Bash command in `tool_input.command`. Exit code 2 blocks the operation and feeds the error message back to Claude. See [Hooks](/docs/en/hooks#exit-code-output) for details on exit codes and [Hook input](/docs/en/hooks#pretooluse-input) for the complete input schema.
+The system prompt tells the subagent to refuse write requests, so the hook is a backstop: if the subagent attempts a write anyway, Claude Code blocks the command and the subagent sees the `Blocked: Write operations not allowed. Use SELECT queries only.` message.
+
## Next steps
Now that you understand subagents, explore these related features:
diff --git a/content/en/docs/claude-code/tools-reference.md b/content/en/docs/claude-code/tools-reference.md
index 216d29e77..ca4d3ffaf 100644
--- a/content/en/docs/claude-code/tools-reference.md
+++ b/content/en/docs/claude-code/tools-reference.md
@@ -38,7 +38,7 @@ To add custom tools, connect an [MCP server](/docs/en/mcp). To extend Claude wit
| `Monitor` | Runs a command in the background and feeds each output line back to Claude, so it can react to log entries, file changes, or polled status mid-conversation. Can also open a WebSocket and treat each incoming message as an event. See [Monitor tool](#monitor-tool) | Yes |
| `NotebookEdit` | Modifies Jupyter notebook cells. See [NotebookEdit tool behavior](#notebookedit-tool-behavior) | Yes |
| `PowerShell` | Executes PowerShell commands natively. See [PowerShell tool](#powershell-tool) for availability | Yes |
-| `PushNotification` | Sends a desktop notification, and a phone push when [Remote Control](/docs/en/remote-control) is connected, so a long-running task or [scheduled task](/docs/en/scheduled-tasks) can reach you when you step away. {/* plan-availability: feature=push-notifications providers=anthropic */}Push delivery runs through Anthropic-hosted infrastructure, which is not accessible from Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry | No |
+| `PushNotification` | Sends a desktop notification, and a phone push when [Remote Control](/docs/en/remote-control) is connected, so a long-running task or [scheduled task](/docs/en/scheduled-tasks) can reach you when you step away. {/* plan-availability: feature=push-notifications providers=anthropic */}Push delivery runs through Anthropic-hosted infrastructure, which is not accessible from Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, or Microsoft Foundry | No |
| `Read` | Reads the contents of files. See [Read tool behavior](#read-tool-behavior) | No |
| `ReadMcpResourceTool` | Reads a specific MCP resource by URI | No |
| `RemoteTrigger` | Creates, updates, runs, and lists [Routines](/docs/en/routines) on claude.ai. Backs the `/schedule` command. {/* plan-availability: feature=routines plans=pro,max,team,enterprise providers=anthropic */}Routines live on claude.ai and require a Pro, Max, Team, or Enterprise plan, so this tool is not accessible from Amazon Bedrock, Google Cloud's Agent Platform, or Microsoft Foundry | No |
@@ -424,7 +424,7 @@ WebSearch permission rules take no specifier. A bare `WebSearch` entry in `allow
The search backend is not configurable. To search with a different provider, add an [MCP server](/docs/en/mcp) that exposes a search tool.
- WebSearch is available on the Claude API, [Claude Platform on AWS](/docs/en/claude-platform-on-aws), and Microsoft Foundry. On Google Cloud's Agent Platform it works with Claude 4 and later models, including Opus, Sonnet, and Haiku. Amazon Bedrock doesn't expose the server-side web search tool.
+ WebSearch is available on the Claude API and [Claude Platform on AWS](/docs/en/claude-platform-on-aws). On Microsoft Foundry it requires a [deployment hosted on Anthropic](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options): deployments hosted on Azure don't support server-side tools, so the WebSearch call fails. On Google Cloud's Agent Platform it works with Claude 4 and later models, including Opus, Sonnet, and Haiku. Amazon Bedrock doesn't expose the server-side web search tool.
### Session search limit
diff --git a/content/en/docs/claude-code/troubleshoot-install.md b/content/en/docs/claude-code/troubleshoot-install.md
index 4fd87193a..d0393ffe4 100644
--- a/content/en/docs/claude-code/troubleshoot-install.md
+++ b/content/en/docs/claude-code/troubleshoot-install.md
@@ -352,6 +352,8 @@ Otherwise, this can happen due to network issues, regional routing, or a tempora
winget install Anthropic.ClaudeCode
```
+ Then run `claude --version` to confirm: the command prints a version number such as `2.1.211 (Claude Code)`. If the shell reports `claude` isn't found, open a new terminal window and retry: the session you installed from keeps its old `PATH`.
+
2. **Retry after a few minutes**: the issue is often temporary. Wait and try the original command again.
### `command not found: claude` after installation
@@ -399,6 +401,8 @@ The `curl ... | bash` command downloads the script and pipes it to Bash for exec
winget install Anthropic.ClaudeCode
```
+ Then run `claude --version` to confirm: the command prints a version number such as `2.1.211 (Claude Code)`. If the shell reports `claude` isn't found, open a new terminal window and retry: the session you installed from keeps its old `PATH`.
+
### Homebrew cask unavailable or outdated
Homebrew reports `Error: Cask 'claude-code' is unavailable: No Cask with this name exists` when your local copy of the Homebrew cask index predates the cask's publication. Refresh the index and retry:
@@ -485,6 +489,8 @@ The installer couldn't reach the download server. This typically means `download
winget install Anthropic.ClaudeCode
```
+ Then run `claude --version` to confirm: the command prints a version number such as `2.1.211 (Claude Code)`. If the shell reports `claude` isn't found, open a new terminal window and retry: the session you installed from keeps its old `PATH`.
+
### Wrong install command on Windows
If you see `'irm' is not recognized`, `The token '&&' is not valid`, `A parameter cannot be found that matches parameter name 'fsSL'`, or `'bash' is not recognized as the name of a cmdlet`, you copied the install command for a different shell or operating system.
@@ -554,11 +560,11 @@ irm https://claude.ai/install.ps1 | iex
### Install killed on low-memory Linux servers
-A `Killed` message during install usually means the Linux out-of-memory (OOM) killer terminated the `claude install` step because the system ran out of free memory. This is common on small VPS and cloud instances. The install script reports the cause and exits with code 137:
+A `Killed` message during install usually means the Linux out-of-memory (OOM) killer terminated the `claude install` step because the system ran out of free memory. This is common on small VPS and cloud instances. The install script reports the cause and exits with code 137. In this example, the line number and process ID vary by release and run:
```text theme={null}
Setting up Claude Code...
-bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}
+bash: line 183: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}
Installation was killed before it could finish (exit code 137). This usually means the system ran out of memory.
Claude Code needs roughly 512MB of free memory to install. Free up memory, then run this script again.
```
diff --git a/content/en/docs/claude-code/web-quickstart.md b/content/en/docs/claude-code/web-quickstart.md
index ddf793efb..2f7ed4a21 100644
--- a/content/en/docs/claude-code/web-quickstart.md
+++ b/content/en/docs/claude-code/web-quickstart.md
@@ -88,7 +88,7 @@ If you already use the GitHub CLI (`gh`), you can set up Claude Code on the web
- In the Claude Code CLI, run `/login` to sign in with your claude.ai account. Skip this step if you're already signed in.
+ In the Claude Code CLI, run `/login` to sign in with your claude.ai account. Skip this step if you're already signed in with a claude.ai account. Authenticating with an API key doesn't count. To check, run `/status` and confirm the **Login method** row shows a claude.ai account.
@@ -98,7 +98,7 @@ If you already use the GitHub CLI (`gh`), you can set up Claude Code on the web
/web-setup
```
- This syncs your `gh` token to your Claude account. If you don't have a cloud environment yet, `/web-setup` creates one with Trusted network access and no setup script. You can [edit the environment or add variables](/docs/en/cloud-environments#configure-your-environment) afterward. Once `/web-setup` completes, you can start cloud sessions from your terminal with [`--cloud`](/docs/en/claude-code-on-the-web#from-terminal-to-web) or set up recurring tasks with [`/schedule`](/docs/en/routines).
+ This syncs your `gh` token to your Claude account. On success, Claude Code prints `Connected as ` and opens [claude.ai/code](https://claude.ai/code) in your browser. If you don't have a cloud environment yet, `/web-setup` creates one with Trusted network access and no setup script. You can [edit the environment or add variables](/docs/en/cloud-environments#configure-your-environment) afterward. Once `/web-setup` completes, you can start cloud sessions from your terminal with [`--cloud`](/docs/en/claude-code-on-the-web#from-terminal-to-web) or set up recurring tasks with [`/schedule`](/docs/en/routines).
@@ -179,11 +179,15 @@ Cloud sessions require a connected GitHub account. Connect via the browser flow
Enterprise organizations may need an Owner to enable Claude Code on the web. Contact your Anthropic account team.
+### `/web-setup` says "Not signed in to Claude"
+
+If `/web-setup` responds with "Not signed in to Claude. Run /login first.", the CLI doesn't have a valid claude.ai sign-in. This can also happen when a previous sign-in has expired. Run `/login`, sign in with your claude.ai account, then run `/web-setup` again.
+
### `/web-setup` shows "No commands match" or "Unknown command"
`/web-setup` runs inside the Claude Code CLI, not your shell. Launch `claude` first, then type `/web-setup` at the prompt.
-If you typed it inside Claude Code and the command menu shows `No commands match "/web-setup"`, or submitting it returns `Unknown command: /web-setup`, the command is hidden because a requirement isn't met. The cause is usually that you're authenticated with an API key or third-party provider instead of a claude.ai subscription. Run `/login` to sign in with your claude.ai account.
+If you typed it inside Claude Code and the command menu shows `No commands match "/web-setup"`, or submitting it returns `Unknown command: /web-setup`, the command is hidden because a requirement isn't met. The cause is usually that you're authenticated with an API key or third-party provider instead of a claude.ai subscription. Run `/login` to sign in with your claude.ai account. Team and Enterprise Owners can also [disable `/web-setup`](/docs/en/claude-code-on-the-web#github-authentication-options) for their organization, which hides the command. In that case, use the browser flow above instead.
On Team and Enterprise plans, the command is also hidden when any of the following apply:
diff --git a/content/en/docs/claude-code/whats-new/2026-w29.md b/content/en/docs/claude-code/whats-new/2026-w29.md
index 3f6725439..5ba977400 100644
--- a/content/en/docs/claude-code/whats-new/2026-w29.md
+++ b/content/en/docs/claude-code/whats-new/2026-w29.md
@@ -25,8 +25,8 @@
Name the connector and the data you want in your prompt:
- ```text Claude Code theme={null}
- > Build a dashboard artifact of open pull requests that pulls the live list through my GitHub connector when the page loads.
+ ```text title="Claude Code" wrap theme={null}
+ Build a dashboard artifact of open pull requests that pulls the live list through my GitHub connector when the page loads.
```
Pull live data with MCP connectors
diff --git a/content/en/docs/claude-code/workflows.md b/content/en/docs/claude-code/workflows.md
index ccc1d396a..3a8dbbd4e 100644
--- a/content/en/docs/claude-code/workflows.md
+++ b/content/en/docs/claude-code/workflows.md
@@ -41,7 +41,7 @@ The quickest way to see a workflow in action is to run `/deep-research`, the [bu
Run `/deep-research` with a question you want investigated. It fans out web searches across several angles, fetches and cross-checks the sources it finds, and synthesizes a cited report.
- ```text theme={null}
+ ```text wrap theme={null}
/deep-research What changed in the Node.js permission model between v20 and v22?
```
@@ -53,7 +53,7 @@ The quickest way to see a workflow in action is to run `/deep-research`, the [bu
The run starts in the background. Run `/workflows`, use the arrow keys to select the run, and press Enter to open its progress view:
- ```text theme={null}
+ ```text wrap theme={null}
/workflows
```
@@ -87,7 +87,7 @@ Claude Code includes `/deep-research` as a built-in workflow:
Workflows run in the background, so the session stays responsive while agents work. Run `/workflows` at any time to list running and completed workflows, then select one to open its progress view.
-```text theme={null}
+```text wrap theme={null}
/workflows
```
@@ -118,7 +118,7 @@ You can also run a workflow command that already exists: a [bundled workflow](#b
To run a single task as a workflow without changing the session's effort level, include the keyword `ultracode` in your prompt. Asking in your own words, for example "use a workflow" or "run a workflow", also works: Claude treats a direct request as the same opt-in. Before v2.1.160 the literal trigger keyword was `workflow`; natural-language requests work in both versions.
-```text theme={null}
+```text wrap theme={null}
ultracode: audit every API endpoint under src/routes/ for missing auth checks
```
@@ -147,7 +147,7 @@ The keyword is an opt-in only in a prompt you type yourself: at the interactive
Ultracode is a Claude Code setting that combines `xhigh` [reasoning effort](/docs/en/model-config#adjust-effort-level) with automatic workflow orchestration. With it on, Claude plans a workflow for each substantive task instead of waiting for you to ask.
-```text theme={null}
+```text wrap theme={null}
/effort ultracode
```
@@ -220,8 +220,8 @@ A saved workflow can accept input through the `args` parameter. The script reads
The following prompt runs a saved workflow with a list of issue numbers:
-```text theme={null}
-> Run /triage-issues on issues 1024, 1025, and 1030
+```text wrap theme={null}
+Run /triage-issues on issues 1024, 1025, and 1030
```
Claude passes the list as structured data, so the script can call array and object methods on `args` directly without parsing it first. If `args` is omitted, the global is `undefined` inside the script.
@@ -234,48 +234,48 @@ A workflow fits best when the task is larger than one agent can hold in context,
Fan out one agent per file, then collect and verify the findings.
-```text theme={null}
-> use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting it
+```text wrap theme={null}
+use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting it
```
### Keep fixing until a check passes
Run a checker, fix what failed, and repeat until it passes or stops making progress.
-```text theme={null}
-> use a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progress
+```text wrap theme={null}
+use a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progress
```
### Migrate many files in parallel
Discover the files to migrate, transform each one in an isolated copy so edits don't conflict, and verify each result.
-```text theme={null}
-> use a workflow to migrate every component under src/components/ from styled-components to Tailwind, working on each file in its own isolated copy
+```text wrap theme={null}
+use a workflow to migrate every component under src/components/ from styled-components to Tailwind, working on each file in its own isolated copy
```
### Review every changed file and write one summary
Run a reviewer per file, then hand all the findings to one agent that ranks and deduplicates them.
-```text theme={null}
-> use a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summary
+```text wrap theme={null}
+use a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summary
```
### Research a topic across many sources
Fan out readers across changelogs, issues, and docs, then synthesize. The bundled `/deep-research` workflow does this; you can also describe a narrower version.
-```text theme={null}
-> use a workflow to research how our three competitors handle rate limiting: read their public docs and recent changelog entries in parallel, then compare the approaches
+```text wrap theme={null}
+use a workflow to research how our three competitors handle rate limiting: read their public docs and recent changelog entries in parallel, then compare the approaches
```
### Find issues until the list stops growing
Keep searching in rounds and stop when new rounds turn up nothing new.
-```text theme={null}
-> use a workflow to find flaky tests in this repo: run the suite repeatedly, record which tests fail intermittently, and stop once two rounds in a row find nothing new
+```text wrap theme={null}
+use a workflow to find flaky tests in this repo: run the suite repeatedly, record which tests fail intermittently, and stop once two rounds in a row find nothing new
```
### What the saved script looks like
@@ -326,7 +326,18 @@ Once a run starts, you manage it from the `/workflows` view, or by expanding its
### Resume after a pause
-If you stop a run, you can resume it: agents that already completed return their cached results, and the rest run live. An agent that was still running when you stopped isn't saved and starts over on resume, so a workflow that fans work out across many small agents preserves more progress than one long agent. Resume a paused run from `/workflows` by selecting it and pressing `p`, or ask Claude to relaunch the workflow with the same script.
+If you stop a run, you can resume it. Agents that already completed usually return their cached results, and the rest run live.
+
+Two rules decide which results survive:
+
+* An agent that was still running when you stopped isn't saved, so it starts over on resume.
+* Replay follows the order agents started. Cached results stop at the first agent that didn't finish, and every agent that started after that one runs again, even if it completed.
+
+The second rule is what makes stopping mid fan-out expensive. Say a script starts four agents, A, B, C, and D, in that order, and you stop the run while B is still going. On resume, A returns from cache. B runs again because it never finished. C and D run again too, because they started after B, even though both completed before you stopped.
+
+A workflow that fans work out across many small agents therefore preserves more progress than one long agent.
+
+Resume a paused run from `/workflows` by selecting it and pressing `p`, or ask Claude to relaunch the workflow with the same script.
Resume works within the same Claude Code session. If you exit Claude Code while a workflow is running, the next session starts the workflow fresh.
@@ -334,7 +345,7 @@ Resume works within the same Claude Code session. If you exit Claude Code while
A workflow spawns many agents, so a single run can use meaningfully more tokens than working through the same task in conversation. Runs count toward your plan's usage and rate limits like any other session.
-To gauge the spend before committing to a large task, run the workflow on a small slice first: one directory instead of the whole repo, or a narrow question instead of a broad one. The `/workflows` view shows each agent's token usage as the run progresses, and you can stop the run there at any time without losing completed work. The runtime's [agent caps](#behavior-and-limits) limit how many agents a single run can spawn, which bounds the cost of a runaway script. To keep runs to fewer agents, choose the `small` [size guideline](#set-a-size-guideline).
+To gauge the spend before committing to a large task, run the workflow on a small slice first: one directory instead of the whole repo, or a narrow question instead of a broad one. The `/workflows` view shows each agent's token usage as the run progresses, and you can stop the run there at any time, usually without losing completed work. [Resume after a pause](#resume-after-a-pause) covers what a stopped run keeps. The runtime's [agent caps](#behavior-and-limits) limit how many agents a single run can spawn, which bounds the cost of a runaway script. To keep runs to fewer agents, choose the `small` [size guideline](#set-a-size-guideline).
Claude Code also flags a run that grows unusually large. When a workflow schedules more than 25 agents, or its projected token total passes 1.5 million, its progress line in the task panel below the input box shows a `Large workflow` warning. The warning points you to [`/workflows`](#watch-the-run), where you can stop the run. Requires Claude Code v2.1.203 or later.
diff --git a/content/en/docs/claude-code/worktrees.md b/content/en/docs/claude-code/worktrees.md
index 76c8462bb..919b23769 100644
--- a/content/en/docs/claude-code/worktrees.md
+++ b/content/en/docs/claude-code/worktrees.md
@@ -183,10 +183,10 @@ Create a worktree on a new branch:
git worktree add ../project-feature-a -b feature-a
```
-Create a worktree from an existing branch:
+Create a worktree from an existing branch, replacing `fix-issue-456` with a branch that already exists in your repository:
```bash theme={null}
-git worktree add ../project-bugfix bugfix-123
+git worktree add ../project-bugfix fix-issue-456
```
Start Claude in the worktree:
diff --git a/content/github/anthropic-sdk-python/CHANGELOG.md b/content/github/anthropic-sdk-python/CHANGELOG.md
index 3b6ea9351..0b4a79825 100644
--- a/content/github/anthropic-sdk-python/CHANGELOG.md
+++ b/content/github/anthropic-sdk-python/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 0.120.2 (2026-07-28)
+
+Full Changelog: [v0.120.1...v0.120.2](https://github.com/anthropics/anthropic-sdk-python/compare/v0.120.1...v0.120.2)
+
+### Bug Fixes
+
+* **mcp:** support mcp sdk v2 alongside v1 ([#300](https://github.com/anthropics/anthropic-sdk-python/issues/300)) ([177f88c](https://github.com/anthropics/anthropic-sdk-python/commit/177f88ccd7f966e47b654cb19ad0e9cfa4c58ac2))
+
## 0.120.1 (2026-07-28)
Full Changelog: [v0.120.0...v0.120.1](https://github.com/anthropics/anthropic-sdk-python/compare/v0.120.0...v0.120.1)
diff --git a/content/github/claude-plugins-official/.claude-plugin/marketplace.json b/content/github/claude-plugins-official/.claude-plugin/marketplace.json
index 3b74bd17e..d338cbb4a 100644
--- a/content/github/claude-plugins-official/.claude-plugin/marketplace.json
+++ b/content/github/claude-plugins-official/.claude-plugin/marketplace.json
@@ -65,7 +65,7 @@
"source": {
"source": "url",
"url": "https://github.com/SalesforceAIResearch/agentforce-adlc.git",
- "sha": "74e7c25b9b0141b57f1c04300b15e7b3ff139647"
+ "sha": "2e735ab70a33d83aeea5ce10b6d61a99a978dc68"
},
"homepage": "https://github.com/SalesforceAIResearch/agentforce-adlc"
},
@@ -190,7 +190,7 @@
"url": "https://github.com/amd/skills.git",
"path": "skills",
"ref": "main",
- "sha": "228980933abd97a8aa4a2656c8ea3ae9e8b590c7"
+ "sha": "d93e3ed65ddeb86807b088870aca14367ca57a26"
},
"strict": false,
"skills": [
@@ -238,7 +238,7 @@
"source": {
"source": "url",
"url": "https://github.com/apollographql/skills.git",
- "sha": "3466193ed52d61ae51d48582b57a95575ae384e2"
+ "sha": "85996a0b75cb106eacfc4b9f3a4fdae7a2109a89"
},
"homepage": "https://www.apollographql.com"
},
@@ -445,7 +445,7 @@
"url": "https://github.com/awslabs/startups.git",
"path": "advisor/plugins/aws-startup-advisor",
"ref": "main",
- "sha": "084d44e1dedab244c938a2eb37bd613a9643b223"
+ "sha": "927def0cbf8e3c3d17b670f3054ef049ae84a09a"
},
"homepage": "https://github.com/awslabs/startups"
},
@@ -508,7 +508,7 @@
"source": {
"source": "url",
"url": "https://github.com/base44/skills.git",
- "sha": "b557b167b07ab9c315f7ff194f533f3f76c3fcf4"
+ "sha": "0d3b72a76e91d920f4a151b68dd224510ca5dc14"
},
"homepage": "https://docs.base44.com"
},
@@ -538,7 +538,7 @@
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/bigquery-data-analytics.git",
- "sha": "7b89e74199b1f1432fa020605d5a6dbedbe8210a"
+ "sha": "b8feae853c8b676cada2b3c33b094763443b1a97"
},
"homepage": "https://github.com/gemini-cli-extensions/bigquery-data-analytics"
},
@@ -658,7 +658,7 @@
"url": "https://github.com/carta/plugins.git",
"path": "plugins/carta-cap-table",
"ref": "main",
- "sha": "35c258475c5c618be5161b0eafe6f8d170206a8d"
+ "sha": "7e2e42fc2131c7d6000547bc3c99a3e78692ce56"
},
"homepage": "https://carta.com"
},
@@ -720,7 +720,7 @@
"source": {
"source": "url",
"url": "https://github.com/cap-js/mcp-server.git",
- "sha": "1f08b6288ca1b78a0200c003a5cc787aafe5bd06"
+ "sha": "562ac32d2ea2750b8847d8329913ae986acb5dc3"
},
"homepage": "https://cap.cloud.sap/"
},
@@ -731,7 +731,7 @@
"source": {
"source": "url",
"url": "https://github.com/ChromeDevTools/chrome-devtools-mcp.git",
- "sha": "dd2661c764c82da28e352030ec7fe56998471ed4"
+ "sha": "04269f1b31ddf395d71ce046a06cdb54a29be429"
},
"homepage": "https://github.com/ChromeDevTools/chrome-devtools-mcp"
},
@@ -999,7 +999,7 @@
"source": {
"source": "url",
"url": "https://github.com/CodSpeedHQ/codspeed.git",
- "sha": "aebdbbc63c1a001728c11287fb05d62dc94652be"
+ "sha": "0418479c0edbb552d477c496d44f47f1d5dc2225"
},
"homepage": "https://codspeed.io"
},
@@ -1095,7 +1095,7 @@
"source": {
"source": "url",
"url": "https://github.com/CrowdStrike/foundry-skills.git",
- "sha": "fad171a87bb0bccce4f92c148b7d1c1501a31a71"
+ "sha": "cd35ba4d750f9b27b7235b2650ae4ab86609cc19"
},
"homepage": "https://github.com/CrowdStrike/foundry-skills"
},
@@ -1166,7 +1166,7 @@
"source": {
"source": "url",
"url": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack.git",
- "sha": "cc9c6719f6847a647e0b932896e3e520d15e53fe"
+ "sha": "e8fa2b8ca06c4269dd2953f39e8798764f687c34"
},
"homepage": "https://github.com/gemini-cli-extensions/data-agent-kit-starter-pack"
},
@@ -1261,7 +1261,7 @@
"source": {
"source": "url",
"url": "https://github.com/datarobot-oss/datarobot-agent-skills.git",
- "sha": "f432e0cbfc04a38176bc27246f10cf779646c9e3"
+ "sha": "b54fba9708cf87aa47543aaefdbcd48f08370349"
},
"homepage": "https://datarobot.com"
},
@@ -1274,7 +1274,7 @@
"url": "https://github.com/microsoft/Dataverse-skills.git",
"path": ".github/plugins/dataverse",
"ref": "main",
- "sha": "a6e497123a1a8a618d9a0dd5764c660861bb9f8b"
+ "sha": "ab56d1ad56783ffce1c671b55b4d964b2d09501d"
},
"homepage": "https://github.com/microsoft/Dataverse-skills"
},
@@ -1289,7 +1289,7 @@
"source": {
"source": "url",
"url": "https://github.com/confident-ai/deepeval.git",
- "sha": "bc296f8ad2eeba763796fc3ec099b7893ef1cdf8"
+ "sha": "0d100e37d4263f208488f3c13e15561bce3b694f"
},
"homepage": "https://github.com/confident-ai/deepeval"
},
@@ -1420,7 +1420,7 @@
"url": "https://github.com/expo/skills.git",
"path": "plugins/expo",
"ref": "main",
- "sha": "09eb052410e7f609624cb161ea4cd9576c69cd5d"
+ "sha": "b1ec56fc67ab61528f80652ae7cd5b8c94f88e2c"
},
"homepage": "https://github.com/expo/skills/blob/main/plugins/expo/README.md"
},
@@ -1724,7 +1724,7 @@
"source": {
"source": "url",
"url": "https://github.com/hunter-io/claude-plugin.git",
- "sha": "aa23b21c9c1c36344e65639e33c6d8a24cd3f5f7"
+ "sha": "c8b2d456a85ec0f5ad8f8fbf93e880fda04e7521"
},
"homepage": "https://hunter.io"
},
@@ -1738,7 +1738,7 @@
"source": {
"source": "url",
"url": "https://github.com/heygen-com/hyperframes.git",
- "sha": "dbdc940833c5a8278f56227bfaca775a4413b1ca"
+ "sha": "4f344c50b0c70e74a791e3613c3a285531e1862f"
},
"homepage": "https://hyperframes.heygen.com"
},
@@ -2099,7 +2099,7 @@
"source": {
"source": "url",
"url": "https://github.com/mattpocock/skills.git",
- "sha": "ed37663cc5fbef691ddfecd080dff42f7e7e350d"
+ "sha": "2ab958093e83e0ec752e6c1c5932da465bf23e0c"
},
"homepage": "https://github.com/mattpocock/skills"
},
@@ -2362,7 +2362,7 @@
"source": {
"source": "url",
"url": "https://github.com/Nimbleway/agent-skills.git",
- "sha": "74ca4dd4bad18a899b1fbf364b70e5a9ceace80d"
+ "sha": "83fcffc38b693e98b319e10cd8e77d57519aa2c6"
},
"homepage": "https://docs.nimbleway.com/integrations/agent-skills/plugin-installation"
},
@@ -2467,7 +2467,7 @@
"url": "https://github.com/growthxai/output.git",
"path": "coding_assistants/claude/plugins/outputai",
"ref": "main",
- "sha": "2cbd0a260d470d22143ba0c0478d992f16c0bd12"
+ "sha": "3d1f9bd02b58ba89e7f7e97b9a1e941f500e8820"
},
"homepage": "https://output.ai"
},
@@ -2492,7 +2492,7 @@
"source": {
"source": "url",
"url": "https://github.com/paypal/AI-Toolkit.git",
- "sha": "c93cbfe5b0b16ef920670ce7d6afabdf7e79c7a3"
+ "sha": "a8e5aef84bf7006054a17ad98f8c5114e92358ad"
},
"homepage": "https://developer.paypal.com/"
},
@@ -2725,7 +2725,7 @@
"source": {
"source": "url",
"url": "https://github.com/qdrant/skills.git",
- "sha": "e24485f0e76d3d4504bf5045ead9a42b56561521"
+ "sha": "50d3590744b9ee26bd7a3c95e84b82ab9c572e45"
},
"homepage": "https://skills.qdrant.tech"
},
@@ -2765,7 +2765,7 @@
"source": {
"source": "url",
"url": "https://github.com/quarkusio/quarkus-agent-mcp.git",
- "sha": "47cd6df3582942352d63348f99e6528cd60ef93e"
+ "sha": "d39fa1cf9c1b8bcdc39265ef64b5b128605557e9"
},
"homepage": "https://quarkus.io"
},
@@ -2778,7 +2778,7 @@
"url": "https://github.com/railwayapp/railway-skills.git",
"path": "plugins/railway",
"ref": "main",
- "sha": "191601b4954527a87f4f004eaa355c8f30a855bf"
+ "sha": "c8b1487773d88f27b33e599300d6100b0978eafe"
},
"homepage": "https://docs.railway.com/ai/claude-code-plugin"
},
@@ -2838,7 +2838,7 @@
"source": {
"source": "url",
"url": "https://github.com/Digital-Process-Tools/claude-remember.git",
- "sha": "d1fc794569e6fa4fc0ee19d5283ff1039fd89919"
+ "sha": "c85af5397ecff5fa2fffceadef9c1062ede61dad"
},
"homepage": "https://github.com/Digital-Process-Tools/claude-remember"
},
@@ -2991,7 +2991,7 @@
"source": {
"source": "url",
"url": "https://github.com/sanity-io/agent-toolkit.git",
- "sha": "af54474c21b00aee8e2fa2855b8ff6ef8a0cf41c"
+ "sha": "fc0e709f61be8abd03e805756d0c4c2983b0a1b5"
},
"homepage": "https://www.sanity.io"
},
@@ -3007,7 +3007,7 @@
"source": {
"source": "url",
"url": "https://github.com/cap-js/mcp-server.git",
- "sha": "1f08b6288ca1b78a0200c003a5cc787aafe5bd06"
+ "sha": "562ac32d2ea2750b8847d8329913ae986acb5dc3"
},
"homepage": "https://cap.cloud.sap/"
},
@@ -3057,7 +3057,7 @@
"source": {
"source": "url",
"url": "https://github.com/SAP/mdk-mcp-server.git",
- "sha": "dd1bd4673c3d90a66f7a64a3f1ed91fb8c91d12c"
+ "sha": "0bc8ea10139be06d08cdb3a8157d34128858ff0e"
},
"homepage": "https://help.sap.com/docs/MDK"
},
@@ -3108,7 +3108,7 @@
"source": {
"source": "url",
"url": "https://github.com/getsentry/plugin-claude.git",
- "sha": "8ed4f25563d90806e8a50c7fb78170ede9ca2f5e"
+ "sha": "b098833ef3bd25d17ef7b404597f80ea35c493ba"
},
"homepage": "https://github.com/getsentry/plugin-claude"
},
@@ -3124,7 +3124,7 @@
"url": "https://github.com/getsentry/cli.git",
"path": "plugins/sentry-cli",
"ref": "main",
- "sha": "ed185afd09e9eef02f2f4e4d9d90cc9a64a7c00b"
+ "sha": "3e292ee4beb5c8254e0f020d2bfaf64fa16a7132"
},
"homepage": "https://sentry.io"
},
@@ -3213,7 +3213,7 @@
"source": {
"source": "url",
"url": "https://github.com/slackapi/slack-mcp-plugin.git",
- "sha": "e75b0cf18f1a19f3fd629e3af9565ee84b8c2ce0"
+ "sha": "f43f620b0f7a95271ec044e3cfebeef81d2a6ee7"
},
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
},
@@ -3369,7 +3369,7 @@
"source": {
"source": "url",
"url": "https://github.com/obra/superpowers.git",
- "sha": "3dcbd5c4b48e02263fbf4a3c01e3fe4f81d584d9"
+ "sha": "44c9b2d6e889982ac18c27d05a19fefe335194e1"
},
"homepage": "https://github.com/obra/superpowers.git"
},
@@ -3684,7 +3684,7 @@
"source": {
"source": "url",
"url": "https://github.com/wix/skills.git",
- "sha": "5498215d69d8df054cbaed35c85b1555f249299f"
+ "sha": "6fd2e431ea3411688ed3eff2fc99cbab78d61820"
},
"homepage": "https://dev.wix.com/docs/wix-cli/guides/development/about-wix-skills"
},
@@ -3724,7 +3724,7 @@
"source": {
"source": "url",
"url": "https://github.com/youdotcom-oss/agent-skills.git",
- "sha": "b390ddb6d0b6c0ec650ce1991eb0c601075476da"
+ "sha": "4006e71aad9b0380a18385c9ef89888b1cdfc601"
},
"homepage": "https://you.com"
},
@@ -3805,7 +3805,7 @@
"source": {
"source": "url",
"url": "https://github.com/langfuse/skills.git",
- "sha": "e42071670d01e537c16f4931d81c3e388f41346e"
+ "sha": "cf98ef9b6e154b821012f9773ec9ec3238b3b976"
},
"homepage": "https://langfuse.com"
},
diff --git a/content/mcp/specification/2026-07-28.md b/content/mcp/specification/2026-07-28.md
index b42c3932c..efe353c8c 100644
--- a/content/mcp/specification/2026-07-28.md
+++ b/content/mcp/specification/2026-07-28.md
@@ -14,7 +14,7 @@ they need.
This specification defines the authoritative protocol requirements, based on the
TypeScript schema in
-[schema.ts](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.ts).
+[schema.ts](https://github.com/modelcontextprotocol/specification/blob/main/schema/2026-07-28/schema.ts).
For implementation guides and examples, visit
[modelcontextprotocol.io](https://modelcontextprotocol.io).
diff --git a/content/mcp/specification/2026-07-28/basic.md b/content/mcp/specification/2026-07-28/basic.md
index a7ca58cca..4dc45f9b5 100644
--- a/content/mcp/specification/2026-07-28/basic.md
+++ b/content/mcp/specification/2026-07-28/basic.md
@@ -217,7 +217,7 @@ Their state is scoped to the request itself, not to the connection underneath.
For a walkthrough of how the per-request model maps to SDK code, see the
- [Architecture guide](/docs/draft/learn/architecture#example).
+ [Architecture guide](/docs/2026-07-28/learn/architecture#example).
## Auth
@@ -238,11 +238,11 @@ to help shape the future of the protocol!
## Schema
The full specification of the protocol is defined as a
-[TypeScript schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.ts).
+[TypeScript schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/2026-07-28/schema.ts).
This is the source of truth for all protocol messages and structures.
There is also a
-[JSON Schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.json),
+[JSON Schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/2026-07-28/schema.json),
which is automatically generated from the TypeScript source of truth, for use with
various automated tooling.
diff --git a/content/mcp/specification/2026-07-28/basic/authorization.md b/content/mcp/specification/2026-07-28/basic/authorization.md
index 368f1333a..c8cc8ae1a 100644
--- a/content/mcp/specification/2026-07-28/basic/authorization.md
+++ b/content/mcp/specification/2026-07-28/basic/authorization.md
@@ -131,7 +131,7 @@ only the scopes necessary for their intended operations. During the initial auth
2. **If `scope` is not available**, use all scopes defined in `scopes_supported` from the Protected Resource Metadata document, omitting the `scope` parameter if `scopes_supported` is undefined.
The `scopes_supported` field is intended to represent the minimal set of scopes necessary
-for basic functionality (see [Scope Minimization](/docs/draft/tutorials/security/security_best_practices#scope-minimization)),
+for basic functionality (see [Scope Minimization](/docs/2026-07-28/tutorials/security/security_best_practices#scope-minimization)),
with additional scopes requested incrementally through the step-up authorization flow steps
described in the [Scope Challenge Handling](#scope-challenge-handling) section.
diff --git a/content/mcp/specification/2026-07-28/basic/authorization/security-considerations.md b/content/mcp/specification/2026-07-28/basic/authorization/security-considerations.md
index 670c56797..43e0a0cc7 100644
--- a/content/mcp/specification/2026-07-28/basic/authorization/security-considerations.md
+++ b/content/mcp/specification/2026-07-28/basic/authorization/security-considerations.md
@@ -20,7 +20,7 @@ audiences **when the Authorization Server supports the capability**. To enable c
* MCP clients **MUST** include the `resource` parameter in authorization and token requests as specified in the [Resource Parameter Implementation](/specification/2026-07-28/basic/authorization#resource-parameter-implementation) section
* MCP servers **MUST** validate that tokens presented to them were specifically issued for their use
-The [Security Best Practices document](/docs/draft/tutorials/security/security_best_practices#token-passthrough)
+The [Security Best Practices document](/docs/2026-07-28/tutorials/security/security_best_practices#token-passthrough)
outlines why token audience validation is crucial and why token passthrough is explicitly forbidden.
## Token Theft
@@ -107,7 +107,7 @@ Authorization servers **MAY** implement domain-based trust policies for acceptin
## Confused Deputy Problem
-Attackers can exploit MCP servers acting as intermediaries to third-party APIs, leading to [confused deputy vulnerabilities](/docs/draft/tutorials/security/security_best_practices#confused-deputy-problem).
+Attackers can exploit MCP servers acting as intermediaries to third-party APIs, leading to [confused deputy vulnerabilities](/docs/2026-07-28/tutorials/security/security_best_practices#confused-deputy-problem).
By using stolen authorization codes, they can obtain access tokens without user consent.
MCP proxy servers using static client IDs **MUST** obtain user consent for each
@@ -122,7 +122,7 @@ MCP servers **MUST** validate access tokens before processing the request, ensur
A MCP server **MUST** follow the guidelines in [OAuth 2.1 - Section 5.2](https://www.ietf.org/archive/id/draft-ietf-oauth-v2-1-13.html#section-5.2) to validate inbound tokens.
-MCP servers **MUST** only accept tokens specifically intended for themselves and **MUST** reject tokens that do not include them in the audience claim or otherwise verify that they are the intended recipient of the token. See the [Security Best Practices Token Passthrough section](/docs/draft/tutorials/security/security_best_practices#token-passthrough) for details.
+MCP servers **MUST** only accept tokens specifically intended for themselves and **MUST** reject tokens that do not include them in the audience claim or otherwise verify that they are the intended recipient of the token. See the [Security Best Practices Token Passthrough section](/docs/2026-07-28/tutorials/security/security_best_practices#token-passthrough) for details.
If the MCP server makes requests to upstream APIs, it may act as an OAuth client to them. The access token used at the upstream API is a separate token, issued by the upstream authorization server. The MCP server **MUST NOT** pass through the token it received from the MCP client.
diff --git a/content/mcp/specification/2026-07-28/changelog.md b/content/mcp/specification/2026-07-28/changelog.md
index 9d532cfc6..c87ef692d 100644
--- a/content/mcp/specification/2026-07-28/changelog.md
+++ b/content/mcp/specification/2026-07-28/changelog.md
@@ -120,4 +120,4 @@ Features listed here remain part of the specification but are scheduled for remo
## Full changelog
For a complete list of all changes that have been made since the last protocol revision,
-[see GitHub](https://github.com/modelcontextprotocol/specification/compare/2025-11-25...draft).
+[see GitHub](https://github.com/modelcontextprotocol/specification/compare/2025-11-25...2026-07-28).
diff --git a/content/mcp/specification/2026-07-28/client/elicitation.md b/content/mcp/specification/2026-07-28/client/elicitation.md
index bdde2c07a..438635f33 100644
--- a/content/mcp/specification/2026-07-28/client/elicitation.md
+++ b/content/mcp/specification/2026-07-28/client/elicitation.md
@@ -470,7 +470,7 @@ Servers should handle each state appropriately:
Elicitations do not require that the server maintain state about users with the [multi round-trip requests](/specification/2026-07-28/basic/patterns/mrtr#multi-round-trip-requests) mechanism.
-However, if state is stored, servers implementing elicitation **MUST** securely associate this state with individual users following the guidelines in the [security best practices](/docs/draft/tutorials/security/security_best_practices) document. Specifically:
+However, if state is stored, servers implementing elicitation **MUST** securely associate this state with individual users following the guidelines in the [security best practices](/docs/2026-07-28/tutorials/security/security_best_practices) document. Specifically:
* State storage **MUST** be protected against unauthorized access
* For remote MCP servers, user identification **MUST** be derived from credentials acquired via [MCP authorization](../basic/authorization) when possible (e.g. `sub` claim)
@@ -519,7 +519,7 @@ Example scenario:
The critical security requirements are:
1. **The third-party credentials MUST NOT transit through the MCP client**: The client must never see third-party credentials to protect the security boundary
-2. **The MCP server MUST NOT use the client's credentials for the third-party service**: That would be [token passthrough](/docs/draft/tutorials/security/security_best_practices#token-passthrough), which is forbidden
+2. **The MCP server MUST NOT use the client's credentials for the third-party service**: That would be [token passthrough](/docs/2026-07-28/tutorials/security/security_best_practices#token-passthrough), which is forbidden
3. **The user MUST authorize the MCP server directly**: The interaction happens outside the MCP protocol, without involving the MCP client
4. **The MCP server is responsible for tokens**: The MCP server is responsible for storing and managing the third-party tokens obtained through the URL mode elicitation (in other words, the MCP server must be stateful).
@@ -527,7 +527,7 @@ Credentials obtained via URL mode elicitation are distinct from the MCP server c
For additional background, refer to the [token passthrough
- section](/docs/draft/tutorials/security/security_best_practices#token-passthrough)
+ section](/docs/2026-07-28/tutorials/security/security_best_practices#token-passthrough)
of the Security Best Practices document to understand why MCP servers cannot
act as pass-through proxies.
@@ -623,7 +623,7 @@ When handling URL mode elicitation requests, MCP clients:
### Identifying the User
Servers **MUST NOT** rely on client-provided user identification without server verification, as this can be forged.
-Instead, servers **SHOULD** follow [security best practices](/docs/draft/tutorials/security/security_best_practices).
+Instead, servers **SHOULD** follow [security best practices](/docs/2026-07-28/tutorials/security/security_best_practices).
Non-normative examples:
diff --git a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
index 67b10bc6c..09e30a9be 100644
--- a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
+++ b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
@@ -38,7 +38,7 @@ To regain access to your account on any device, you'll need to authenticate agai
If you used your Claude account to authenticate into Claude Code, you can manage your authorization tokens by navigating to [Settings > Claude Code](http://claude.ai/settings/claude-code). To remove a token and log out of Claude Code, click the trash can icon.
-
+
## Unable to access your account?
diff --git a/content/support/10366376-how-can-i-delete-my-claude-console-account.md b/content/support/10366376-how-can-i-delete-my-claude-console-account.md
index 17b158d8f..f2dc04bef 100644
--- a/content/support/10366376-how-can-i-delete-my-claude-console-account.md
+++ b/content/support/10366376-how-can-i-delete-my-claude-console-account.md
@@ -36,7 +36,7 @@ If you followed the steps above to delete your Console organization but want to
If you have an outstanding balance, you will see a message during the deletion flow that prompts you to pay the balance first by routing you to [Settings > Billing](https://platform.claude.com/settings/billing).
-
+
You must pay this outstanding balance before you’re able to move forward with the deletion process.
@@ -44,6 +44,6 @@ You must pay this outstanding balance before you’re able to move forward with
There are some scenarios where you will need to contact our team to delete your account. If this is the case, it will be noted when you try to delete your organization:
-
+
If you are seeing this message, this indicates that your Console organization cannot be deleted via the self-service pathway.
\ No newline at end of file
diff --git a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
index 810fd4bb5..ca48d47e3 100644
--- a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
+++ b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
@@ -6,6 +6,6 @@ As a Primary Owner or Owner of a Team or Enterprise plan, you can manage the abi
2. Use the toggle to change the **Rate chats** setting for your organization:
-
+
More information on how Anthropic collects, uses, and stores feedback data can be found in our Privacy Center: **[How long do you store my organization’s data?](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)**
\ No newline at end of file
diff --git a/content/support/10504853-manage-user-feedback-settings-on-claude-console.md b/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
index 7bea8d133..b532520c6 100644
--- a/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
+++ b/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
@@ -8,6 +8,6 @@ To manage feedback for your Console organization:
2. Toggle the feedback switch on or off.
-
+
More information on how Anthropic collects, uses, and stores feedback data can be found in our Privacy Center: [How long do you store my organization’s data?](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)
\ No newline at end of file
diff --git a/content/support/10593882-share-and-unshare-chats.md b/content/support/10593882-share-and-unshare-chats.md
index b25bcef7a..e329b0ab8 100644
--- a/content/support/10593882-share-and-unshare-chats.md
+++ b/content/support/10593882-share-and-unshare-chats.md
@@ -38,12 +38,12 @@ To unshare a chat:
Users on free, Pro, or Max plans can review a log of shared chats by navigating to **[Settings > Privacy](https://claude.ai/settings/data-privacy-controls)**. Find the **Privacy settings** section and click “Manage” next to **Shared chats:**
-
+
This will open a **Shared chats** modal listing the title, date shared, and link to each chat, allowing you to easily review and access all your previously-shared content. From here, you also have the option to click “Unshare” next to each listed chat to revoke access to the last snapshot you shared:
-
+
If you don’t have any shared chat snapshots, the **Shared chats** modal will show “No shared content found”:
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/10684626-enable-and-use-web-search.md b/content/support/10684626-enable-and-use-web-search.md
index ccf063b87..565267ebb 100644
--- a/content/support/10684626-enable-and-use-web-search.md
+++ b/content/support/10684626-enable-and-use-web-search.md
@@ -24,7 +24,7 @@ Web search expands Claude's knowledge with real-time data, helping you make bett
An Owner or Primary Owner must first enable web search for the entire workspace. This can be found in **[Admin settings > Capabilities](https://claude.ai/admin-settings/capabilities)**:
-
+
Once this is enabled at the workspace level, any member of the organization can switch it on while starting a chat by clicking the “+” button in the lower left corner of the chat window and selecting “Web search." Users can toggle this off for chats that don’t require web search capabilities.
diff --git a/content/support/10722177-sharing-prompts-in-the-claude-console.md b/content/support/10722177-sharing-prompts-in-the-claude-console.md
index 0e6886ba5..cc3f318ad 100644
--- a/content/support/10722177-sharing-prompts-in-the-claude-console.md
+++ b/content/support/10722177-sharing-prompts-in-the-claude-console.md
@@ -10,13 +10,13 @@ The prompt sharing feature enables teams to collaborate on prompt development wi
3. Select "Share" from the dropdown menu:
-
+
4. Change the access settings from "Private" to "Shared."
5. Click the "Copy link" button that appears:
-
+
6. Share the link with members of your workspace.
@@ -38,7 +38,7 @@ When working on a shared prompt:
**Note:** If a collaborator saves changes to the prompt while you are viewing it, you will be prompted with a message to “Go to the Latest Version,” where all their changes will be reflected.
-
+
## Viewing Version History
@@ -48,13 +48,13 @@ To see previous versions of a prompt:
2. Select "Version history" from the dropdown:
-
+
3. Choose the specific version you want to view from the list.
**Note:** Past versions cannot be edited. To restore the prompt to a previous version, select the version from the version history list, and click the “Restore” button in the pop up.
-
+
## Unsharing a Prompt
@@ -64,6 +64,6 @@ To see previous versions of a prompt:
3. Change the access settings from "Shared" to "Private":
-
+
**Note:** Unsharing immediately disables access via the direct link. Anyone that the link was previously shared with will no longer be able to view the prompt.
\ No newline at end of file
diff --git a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
index 3340fb0a6..a284e75d3 100644
--- a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
+++ b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
@@ -48,7 +48,7 @@ for specific instructions.
Custom desktop extensions uploads allow Team and Enterprise plans to leverage organization-specific workflows that aren’t available in the public directory. After creating a custom desktop extension, Owners and Primary Owners can navigate to Settings > Extensions within Claude Desktop and click “Advanced settings” to access the **Extension Developer** section:
-
+
Click “Install Extension…” and select the .mcpb file. Follow the prompts to install and configure your custom desktop extension. For more in-depth information, please refer to our [desktop extension developer documentation](https://github.com/anthropics/mcpb).
diff --git a/content/support/11101966-use-voice-mode.md b/content/support/11101966-use-voice-mode.md
index 1cf87ebf1..5a3ac953a 100644
--- a/content/support/11101966-use-voice-mode.md
+++ b/content/support/11101966-use-voice-mode.md
@@ -24,7 +24,7 @@ Voice mode transforms how you interact with Claude by:
2. Tap the sound wave symbol in the lower right corner of the chat window to activate voice mode:
-
+
3. Start talking and see your prompt automatically populate in the chat input.
@@ -32,7 +32,7 @@ Voice mode transforms how you interact with Claude by:
5. Claude will remain in voice mode until you click the “Stop” button in the lower right corner of the chat window:
-
+
### On mobile (iOS and Android)
@@ -40,7 +40,7 @@ Voice mode transforms how you interact with Claude by:
2. Tap the voice mode icon (sound wave symbol next to the microphone icon) in the text input field:
-
+
3. Choose a voice to personalize your experience.
@@ -78,7 +78,7 @@ To change the voice later:
- **On mobile:** Click the settings button in the bottom left corner while chatting with Claude in voice mode, then tap your preferred voice and pace:
-
+
## Choose a model
diff --git a/content/support/11506255-get-started-with-claude-in-slack.md b/content/support/11506255-get-started-with-claude-in-slack.md
index 97bebc9fc..e195c4ac7 100644
--- a/content/support/11506255-get-started-with-claude-in-slack.md
+++ b/content/support/11506255-get-started-with-claude-in-slack.md
@@ -12,17 +12,17 @@ It’s how we’ve brought Claude’s capabilities directly to Slack, bringing A
**Direct message with Claude**: Start a private conversation with @Claude.
-
+
**AI assistant panel**: Click the Claude icon in Slack's AI assistant header to open a panel on the right side of your Slack window, allowing you to access Claude from anywhere in the Slack app.
-
+
-
+
**Thread participation**: Mention @Claude in any thread to get Claude's help with the conversation.
-
+
All surfaces provide the same capabilities that you have enabled in Claude, including web search and connections to your integrated tools, allowing you to seamlessly integrate AI assistance into your existing workflow.
@@ -60,17 +60,17 @@ Once your Slack admin has approved Claude (or if you're on a personal Slack plan
2. Click "Connect Account” to be prompted to connect your Claude account:
- 
+ 
3. In the window that opens, select which organization you would like to connect with Claude for Slack.
4. Click “Authorize” to allow Claude in Slack to access your Claude chat account:
-
+
5. You should see a confirmation message upon successful connection:
- 
+ 
6. After successful authentication, return to Slack.
@@ -142,7 +142,7 @@ To disconnect your Claude account from Slack:
3. Confirm the disconnection.
-
+
Disconnecting will:
diff --git a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
index 1058bbef5..ef88fdb64 100644
--- a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
+++ b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
@@ -44,7 +44,7 @@ This article provides information on how to enable the Claude LTI integration in
5. Click "Install" and refresh the course page.
-
+
## Turn on the Claude LTI Integration in Claude for Education organization settings
diff --git a/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md b/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
index 2cc467484..41796ad96 100644
--- a/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
+++ b/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
@@ -40,7 +40,7 @@ When Claude searches your previous chats, you will see this reflected in your cu
Yes, navigate to **[Settings > Memory](https://claude.ai/new#settings/customize-memory)** and switch the toggle next to "Search and reference chats" off:
-
+
## Can I exclude a specific past chat from searches?
@@ -80,7 +80,7 @@ Each project has its own separate memory space and dedicated project summary, so
You can toggle Claude’s memory on by navigating to **[Settings > Memory](https://claude.ai/new#settings/customize-memory)** and turning on **Generate memory from chats**:
-
+
If you want to disable Claude’s memory, click the toggle and you'll see two options:
@@ -184,7 +184,7 @@ When Claude searches your previous chats, you will see this reflected in your cu
Yes, navigate to **[Settings > Capabilities](http://claude.ai/settings/capabilities)** and find the **Preferences** section. Switch the toggle next to “Search and reference chats” off:
-
+
### Can I exclude a specific past chat from searches?
@@ -192,7 +192,7 @@ Incognito chats are available to all Claude users (free, Pro, Max, Team, and Ent
When starting a new chat with Claude outside of a project, you'll see a ghost icon in the upper right corner of your screen:
-
+
Clicking the ghost icon will open an incognito chat, creating a temporary conversation that isn’t saved to your chat history. Claude won’t pull information from incognito chats when searching previous conversations.
@@ -224,7 +224,7 @@ Each project has its own separate memory space and dedicated project summary, so
You can toggle Claude’s memory on by navigating to **[Settings > Capabilities](http://claude.ai/settings/capabilities)**:
-
+
If you want to disable Claude’s memory, click the toggle to see two options:
diff --git a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
index 6a3d7b286..81554d593 100644
--- a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
+++ b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
@@ -2,7 +2,7 @@
If you see the following pop-up when you log in to your Claude account, you’ll need to click the “Verify now” button to verify your payment method:
-
+
## What happens if I click “Remind me later?”
diff --git a/content/support/11869629-use-claude-with-android-apps.md b/content/support/11869629-use-claude-with-android-apps.md
index 99f7b4ddc..52e889fde 100644
--- a/content/support/11869629-use-claude-with-android-apps.md
+++ b/content/support/11869629-use-claude-with-android-apps.md
@@ -222,7 +222,7 @@ Permission requirements vary by feature:
For features requiring permissions (like location or calendar access), Claude will request permission contextually with clear explanations of why the access is needed. You’ll be prompted to approve the action with three options: Allow once, Always allow, or Don't allow.
-
+
These permissions can be managed at any time in your device settings by going to Settings > Apps > Claude > Permissions. Click into each permission listed under **Allowed** and **Not allowed** to make changes. You can toggle between “Allow only while using the app” or “Ask every time” to change Claude’s access, or remove permissions by choosing “Don’t allow.” Claude will only request permissions if needed for specific features, and you can always choose to decline while still using other capabilities.
diff --git a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
index 748ad73d5..3024ccbbb 100644
--- a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
+++ b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
@@ -70,7 +70,7 @@ After navigating to **[Organization settings > Usage](https://claude.ai/admin-se
The **Usage and spend limits** section will show the current limit (if any) or **Unlimited**. Clicking on "Adjust limit" opens a modal where you can either input an amount and click "Set spend limit," or click "Set to unlimited" to remove the organization-wide monthly spend limit.
-
+
Changes to your organization’s overall spend limit go into effect immediately.
@@ -78,11 +78,11 @@ Changes to your organization’s overall spend limit go into effect immediately.
Owners and Primary Owners on **seat-based Enterprise plans only** can set spend limits that apply to all users within a specific seat tier.
-
+
Select the "By group" tab to see **Standard seats** and **Premium seats** groups. Click the "..." icon next to the current limit, then "Edit limit." This opens a modal where you can either select "Set dollar amount" and input an amount, or click "Unlimited" to remove the limit for that seat type. Click "Set limit" to save your changes.
-
+
---
@@ -90,11 +90,11 @@ Select the "By group" tab to see **Standard seats** and **Premium seats** groups
Owners and Primary Owners can also set individual monthly spend limits for each member by finding **Spend limits by user** and clicking the "..." button next to the user, then "Edit limit."
-
+
Enter the amount and click "Set limit." Alternatively, selecting "Set to unlimited" will remove that member's monthly spend limit (they will still be subject to any organization or seat-level spend limits).
-
+
This allows owners fine control over usage credits, so you can set limits for different members based on their roles or individual needs. Once a user reaches their defined spend limit, this will automatically pause their usage credits until the end of the month. They will need to wait for their usage limits to reset before using Claude again.
diff --git a/content/support/12012173-get-started-with-claude-in-chrome.md b/content/support/12012173-get-started-with-claude-in-chrome.md
index a012d3af9..19195a472 100644
--- a/content/support/12012173-get-started-with-claude-in-chrome.md
+++ b/content/support/12012173-get-started-with-claude-in-chrome.md
@@ -34,7 +34,7 @@ Follow these steps to enable the Claude in Chrome connector in your desktop app:
4. Toggle the connector on, then download and install the extension if you haven’t already.
-
+
Completing these steps will add Claude in Chrome to the “Connectors” drop-down on your chats with Claude. This is disabled by default, so you’ll need to enable it manually for each conversation.
diff --git a/content/support/12083917-change-your-team-plan-from-monthly-to-annual-billing.md b/content/support/12083917-change-your-team-plan-from-monthly-to-annual-billing.md
index 9a1d0bf62..2cf1afbf4 100644
--- a/content/support/12083917-change-your-team-plan-from-monthly-to-annual-billing.md
+++ b/content/support/12083917-change-your-team-plan-from-monthly-to-annual-billing.md
@@ -8,11 +8,11 @@ Owners and Primary Owners of Team plans with monthly subscriptions can switch fr
3. Or from /upgrade, click the “Switch to Annual plan” button:
-
+
4. The confirmation screen will display the total cost for your upgrade from monthly to annual billing:
-
+
5. Click “Confirm subscription.”
diff --git a/content/support/12111783-create-and-edit-files-with-claude.md b/content/support/12111783-create-and-edit-files-with-claude.md
index 81bd4a9ce..44fe3c372 100644
--- a/content/support/12111783-create-and-edit-files-with-claude.md
+++ b/content/support/12111783-create-and-edit-files-with-claude.md
@@ -48,7 +48,7 @@ These capabilities make it easy to produce professional documents by simply chat
To give Claude access to external data sources, toggle **Allow network egress** on:
-
+
### Enabling on Claude Mobile
@@ -66,11 +66,11 @@ Team and Enterprise organization owners can control network access settings in *
- **Allow network egress to package managers and specific domains:** Claude can access package managers plus additional domains you specify. Add domains individually to whitelist specific resources your organization needs:
-
+
**All domains:** Claude has full internet access except for domains on Anthropic's legal blocklist. While this provides maximum flexibility for file creation and analysis tasks, it’s also the riskiest option. Please review the **[security considerations below](#h_0ee9d698a1)** before enabling “All domains”:
-
+
---
diff --git a/content/support/12157520-claude-code-usage-analytics.md b/content/support/12157520-claude-code-usage-analytics.md
index 9770ada41..a9375d7cd 100644
--- a/content/support/12157520-claude-code-usage-analytics.md
+++ b/content/support/12157520-claude-code-usage-analytics.md
@@ -50,7 +50,7 @@ The **Usage** tab displays the following metrics for your organization. Data on
- **Top commands**: The Claude Code commands used most often across your organization.
-
+
### User-level metrics
diff --git a/content/support/12260368-use-incognito-chats.md b/content/support/12260368-use-incognito-chats.md
index cc78d9abb..c649d81b1 100644
--- a/content/support/12260368-use-incognito-chats.md
+++ b/content/support/12260368-use-incognito-chats.md
@@ -30,7 +30,7 @@ Incognito chats are temporary conversations that aren't saved to your chat histo
When starting a new chat with Claude outside of a project, you'll see a ghost icon in the upper right corner of your screen:
-
+
1. Click the ghost icon to enable incognito mode.
diff --git a/content/support/12293051-use-claude-in-xcode.md b/content/support/12293051-use-claude-in-xcode.md
index d73c7f451..ae3febfc6 100644
--- a/content/support/12293051-use-claude-in-xcode.md
+++ b/content/support/12293051-use-claude-in-xcode.md
@@ -34,7 +34,7 @@ To start using Claude in Xcode:
3. Log in with your Claude account.
-
+
## Usage limits
diff --git a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
index fc91962ee..da2c6d537 100644
--- a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
+++ b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
@@ -46,7 +46,7 @@ To enable usage credits on your paid Claude plan:
8. You can also enable auto-reload to automatically make a purchase when your balance falls below a threshold you set:
-
+
**Note:** There is a daily redemption limit of $2000.
diff --git a/content/support/12461605-use-claude-in-slack.md b/content/support/12461605-use-claude-in-slack.md
index 4b312af9b..3638666ab 100644
--- a/content/support/12461605-use-claude-in-slack.md
+++ b/content/support/12461605-use-claude-in-slack.md
@@ -28,7 +28,7 @@ Claude in Slack gives you AI assistance right where your team collaborates. This
6. Access previous conversations by clicking the clock icon.
-
+
## Mention @Claude in a thread or channel
diff --git a/content/support/12466728-troubleshoot-claude-error-messages.md b/content/support/12466728-troubleshoot-claude-error-messages.md
index b85a47181..1843af204 100644
--- a/content/support/12466728-troubleshoot-claude-error-messages.md
+++ b/content/support/12466728-troubleshoot-claude-error-messages.md
@@ -58,4 +58,4 @@ Capacity issues will not appear on our status page because they represent normal
Service incidents are disruptions where Claude is unavailable or significantly degraded for all or most users. These represent actual technical problems with our systems. To check for confirmed incidents, visit status.claude.com, where you'll find real-time updates on scope, impact, and resolution progress for any active incidents.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/12512180-use-skills-in-claude.md b/content/support/12512180-use-skills-in-claude.md
index bd3ee6b12..c4a3e241f 100644
--- a/content/support/12512180-use-skills-in-claude.md
+++ b/content/support/12512180-use-skills-in-claude.md
@@ -164,7 +164,7 @@ To remove a custom skill you've uploaded:
4. To delete the custom skill entirely, click the "..." button next to the toggle, then select "Delete":
- 
+ 
5. Click "Delete" in the confirmation prompt.
diff --git a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
index bed74005d..3a6ef4b2f 100644
--- a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
+++ b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
@@ -20,11 +20,11 @@ The desktop extension allowlist is disabled by default, so an organization Owner
4. Switch to the "Desktop" tab:
-
+
5. Toggle **Allowlist** on:
-
+
## What happens after enabling the allowlist?
@@ -42,7 +42,7 @@ Consider completing the allowlist setup during off-hours to minimize disruption
**Important:** The allowlist requires Claude Desktop version 0.13.91 or higher, so users should update the desktop app by clicking “Claude”, then either “Check for updates” or “Restart to update to Claude 0.13.91”:
-
+
## Managing allowed extensions
@@ -60,7 +60,7 @@ After enabling the allowlist, you can choose which extensions to allow:
If you want to remove an extension from the allowlist, click the “...” button and “Remove from allowlist.”
-
+
## Uploading custom extensions
diff --git a/content/support/12618689-claude-code-on-the-web.md b/content/support/12618689-claude-code-on-the-web.md
index 4c7679962..2aadb26ca 100644
--- a/content/support/12618689-claude-code-on-the-web.md
+++ b/content/support/12618689-claude-code-on-the-web.md
@@ -10,7 +10,7 @@ This feature works with repositories you may not have on your local machine. You
Claude Code for web enables asynchronous development workflows. With Claude Code in your terminal or editor, you typically work synchronously: you make a request, wait for Claude to respond, review the changes, then make another request. Synchronous work like this gives you fine-grained control but requires your attention throughout the process. Claude Code on the web handles this differently: you can assign a larger task, let Claude work independently, and return later to review the completed work.
-
+
You can also run multiple tasks in parallel. Since each task runs in its own isolated environment, you can have Claude working on several different issues or repositories simultaneously. Each task proceeds independently and creates its own pull request when complete. More than one task can work on the same repository at the same time.
@@ -18,13 +18,13 @@ You can also run multiple tasks in parallel. Since each task runs in its own iso
When you start a task, Claude Code on the web creates an isolated virtual machine for your work. Your GitHub repository is cloned into this environment, which comes pre-configured with common development tools and language ecosystems.
-
+
Claude prepares the environment by running any setup commands you've defined in your repository's configuration. This includes installing dependencies, setting up databases, or running other initialization steps your project needs. If your task requires network access, maybe to install packages or fetch data, you can configure the level of internet access the environment has.
Once the environment is ready, Claude begins working on your task. Claude reads your code, makes changes, writes tests, and runs commands to verify the work. You can monitor progress and provide guidance through the web interface if needed.
-
+
When Claude completes the task, it pushes the changes to a new branch in your GitHub repository. You receive a notification and can review the changes, then create a pull request directly from the interface. The pull request includes all of Claude's work, ready for your review and any additional changes you want to make.
diff --git a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
index 7082d6edf..89ab8a16d 100644
--- a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
+++ b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
@@ -40,7 +40,7 @@ When you first open the updated version of Claude Desktop, you'll see a prompt t
Once enabled, double-tapping Option will open a text box where you can type your message and start a new chat. You can also click "New chat" to see your five most recent conversations.
-
+
### Enable the voice shortcut (optional)
diff --git a/content/support/12650343-use-claude-for-excel.md b/content/support/12650343-use-claude-for-excel.md
index be3c2d6ee..2023b505f 100644
--- a/content/support/12650343-use-claude-for-excel.md
+++ b/content/support/12650343-use-claude-for-excel.md
@@ -330,7 +330,7 @@ Users can approve all of Claude’s actions via a confirmation pop-up that appea
- System information: REGISTER.ID, RTD, INFO
-
+
While we continue to develop our offerings and improve safety measures to reduce these risks, users should exercise caution when using Claude for Excel and should not use it with spreadsheets from external, untrusted sources.
diff --git a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
index 5c396c8a6..3803a3ee4 100644
--- a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
+++ b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
@@ -22,7 +22,7 @@ This page includes the following analytics:
- Sessions in Cowork
-
+
### Who’s using Claude?
@@ -34,7 +34,7 @@ This page includes the following analytics:
Use the dropdown on the **Active members and assigned seats** chart to filter by product, including Claude Design.
-
+
### How are they using Claude?
@@ -48,9 +48,9 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by
- How agentic is their work? (beta)
-
+
-
+
### What are the results?
@@ -66,7 +66,7 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by
- Estimated time saved
-
+
### How much is Claude costing?
@@ -82,9 +82,9 @@ This section includes the following analytics:
- Spend by model (month-to-date, quarter-to-date, year-to-date, 1 year)
-
+
-
+
## Export a spend report
@@ -160,7 +160,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top members by chats
-
+
### Projects
@@ -172,7 +172,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top members by project usage
-
+
### Artifacts
@@ -182,7 +182,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top 10 users by artifacts generated (month-to-date, quarter-to-date, year-to-date, 1 year)
-
+
---
@@ -278,7 +278,7 @@ Navigate to **[Analytics > Cowork](https://claude.ai/analytics/cowork)** to view
- Daily, weekly, and monthly active Cowork users
-
+
**Note:** Cowork analytics are available alongside Chat and Claude Code data in the **[Analytics API](https://platform.claude.com/docs/en/manage-claude/analytics-api)**.
@@ -288,7 +288,7 @@ Navigate to **[Analytics > Cowork](https://claude.ai/analytics/cowork)** to view
When your admin turns on individual usage analytics, any member of the organization can see their own usage broken down by product, model, and skill, along with where they stand against any spend limits set for them. Individual usage analytics are available in **[Settings > Usage](https://claude.ai/settings/usage)**.
-
+
---
diff --git a/content/support/12902446-claude-in-chrome-permissions-guide.md b/content/support/12902446-claude-in-chrome-permissions-guide.md
index c41481d03..fee5f4f10 100644
--- a/content/support/12902446-claude-in-chrome-permissions-guide.md
+++ b/content/support/12902446-claude-in-chrome-permissions-guide.md
@@ -22,7 +22,7 @@ Claude in Chrome uses a multi-layered permission system to give you control over
Choose "Manually approve" to have Claude create a plan from your prompt, which you can approve and allow Claude to execute. The plan will specify which websites you’re allowing Claude to access, as well as the approach it will follow:
-
+
Note that Claude will only use the websites listed in the plan, so you’ll need to manually approve any additional access requests.
@@ -50,7 +50,7 @@ When you choose "Skip all approvals," Claude doesn't pause to ask, and nothing c
There are some websites on which Claude requires approval for every action. If you navigate to one of these sites, a **Permission required** prompt will appear in the extension side panel, Claude Cowork, or Claude Code where Claude will ask for permission before accessing the page or taking any action.
-
+
### Permission options
diff --git a/content/support/12997503-team-plan-billing-faqs.md b/content/support/12997503-team-plan-billing-faqs.md
index a81152c2f..1f8b26e6d 100644
--- a/content/support/12997503-team-plan-billing-faqs.md
+++ b/content/support/12997503-team-plan-billing-faqs.md
@@ -18,7 +18,7 @@ Your organization's billing address determines where your invoices are sent. You
If you want to use a name other than the one tied to your payment method, an organization Owner should check the "Use a different name on invoices" box when adding or updating your payment method in **[Organization settings > Billing](https://claude.ai/admin-settings/billing)**:
-
+
## When will I be billed?
diff --git a/content/support/13132885-set-up-single-sign-on-sso.md b/content/support/13132885-set-up-single-sign-on-sso.md
index f09bee984..ca49d3f9d 100644
--- a/content/support/13132885-set-up-single-sign-on-sso.md
+++ b/content/support/13132885-set-up-single-sign-on-sso.md
@@ -42,7 +42,7 @@ You can verify multiple domains for a single organization, but all domains must
3. Enter the domain(s) you want to verify in the **Update organization email domains** modal and click the “+” button:
-
+
4. Click “Save” when you’re finished adding domains.
@@ -50,7 +50,7 @@ You can verify multiple domains for a single organization, but all domains must
6. Enter your domain in the text box and click “Continue”:
-
+
7. The setup screen displays a TXT record. **Copy the full Value using the copy button**—it begins with `anthropic-domain-verification-` and is longer than what's visible in the box. In your DNS provider, add a TXT record with **Host/Name** set to `@` (the root of your domain) and **Value** set to the copied string. Add it alongside any existing TXT records; don't replace them. The value is case-sensitive, so paste it exactly.
@@ -76,7 +76,7 @@ Clicking "Refresh" re-checks your DNS; it won't show Verified until the publishe
If the record is correct and propagated but the status still shows Pending, contact Support.
-
+
**Note:** Once your domain is verified, you'll see a **Restrict organization creation** toggle under **Security** on the Organization and access organization settings page. Enable this if you want to prevent users from creating new Claude or Console organizations—including personal accounts—using your verified domains.
@@ -116,7 +116,7 @@ For IdP-specific setup instructions, see:
You can now choose to toggle on **Require SSO for Console** and/or **Require SSO for Claude,** on the **Organization and access** page, under the **Authentication** section:
-
+
When SSO is required, users must use the “Continue with SSO” option to log in to their Claude/Console accounts. When SSO is not required, they will have the option to choose “Continue with SSO” or “Continue with email.”
diff --git a/content/support/13133195-set-up-jit-or-scim-provisioning.md b/content/support/13133195-set-up-jit-or-scim-provisioning.md
index 985041b8e..3c519cd00 100644
--- a/content/support/13133195-set-up-jit-or-scim-provisioning.md
+++ b/content/support/13133195-set-up-jit-or-scim-provisioning.md
@@ -34,7 +34,7 @@ Use this table to help decide which provisioning mode is right for your organiza
Both JIT and SCIM can be combined with **Enable group mappings** to control role or seat tier assignment based on IdP group membership. If you select either of these options for your provisioning mode, **Enable group mappings** will appear within the **User provisioning** section:
-
+
### Available roles and seat tiers
@@ -118,7 +118,7 @@ Once your IdP is connected, continue to Step 3.
4. Toggle **Enable group mappings** on (if it’s not already):
-
+
5. In the **Enable group mappings** section, click “Add” next to each role and select the corresponding group from your IdP in the dropdown.
@@ -170,7 +170,7 @@ Verify you have enough seats purchased and available to add members to your org.
4. **For SCIM:** Click "Sync" to prompt an immediate sync, or wait for the automatic sync cycle:
-
+
### I lost Admin/Owner access after enabling group mappings
diff --git a/content/support/13163631-configuring-session-security-settings.md b/content/support/13163631-configuring-session-security-settings.md
index 94bba4b3e..b4e039f5d 100644
--- a/content/support/13163631-configuring-session-security-settings.md
+++ b/content/support/13163631-configuring-session-security-settings.md
@@ -18,7 +18,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s
5. Confirm your selection by clicking “Enable.”
-
+
### For Console Admins
@@ -32,7 +32,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s
5. Confirm your selection by clicking “Enable.”
-
+
### What happens after enabling shortened session length?
@@ -50,7 +50,7 @@ You can change the session duration at any time by selecting a new value from th
- Sessions scheduled to expire beyond the new duration will have their expiration shortened accordingly.
-
+
## Disabling session length settings
diff --git a/content/support/13189465-log-in-to-your-claude-account.md b/content/support/13189465-log-in-to-your-claude-account.md
index 8b9d4838f..659d8396a 100644
--- a/content/support/13189465-log-in-to-your-claude-account.md
+++ b/content/support/13189465-log-in-to-your-claude-account.md
@@ -2,7 +2,7 @@
When you open Claude on a web browser ([claude.ai](http://claude.ai)), the desktop app, or a mobile app, you will see two different options for logging in to your Claude account.
-
+
## Continue with Google
diff --git a/content/support/13325567-account-management-faqs.md b/content/support/13325567-account-management-faqs.md
index b314ec40f..3e70baf26 100644
--- a/content/support/13325567-account-management-faqs.md
+++ b/content/support/13325567-account-management-faqs.md
@@ -44,6 +44,6 @@ The email domain that was used to create your Team or Enterprise plan organizati
Owners can remove domains by opening up the same modal and clicking the trash can icon to the right of the domain:
-
+
While the account creator must use a business email address, you can add public domains like @gmail.com, @yahoo.com, and @hotmail.com as allowed domains for other members of your organization.
\ No newline at end of file
diff --git a/content/support/13345190-get-started-with-claude-cowork.md b/content/support/13345190-get-started-with-claude-cowork.md
index dfd3d9492..94a681c5e 100644
--- a/content/support/13345190-get-started-with-claude-cowork.md
+++ b/content/support/13345190-get-started-with-claude-cowork.md
@@ -176,7 +176,7 @@ To set global instructions:
3. Type your instructions in the text box and click "Save":
-
+
### Folder instructions
diff --git a/content/support/13346458-customizing-your-console-appearance-settings.md b/content/support/13346458-customizing-your-console-appearance-settings.md
index de882bd3f..00f73e081 100644
--- a/content/support/13346458-customizing-your-console-appearance-settings.md
+++ b/content/support/13346458-customizing-your-console-appearance-settings.md
@@ -8,4 +8,4 @@
3. Select from Light, System, or Dark under **Color mode**.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/13371040-logging-in-to-your-console-account.md b/content/support/13371040-logging-in-to-your-console-account.md
index bc9c8bb2c..75b383fd9 100644
--- a/content/support/13371040-logging-in-to-your-console-account.md
+++ b/content/support/13371040-logging-in-to-your-console-account.md
@@ -2,7 +2,7 @@
When you navigate to the [Claude Console](https://platform.claude.com), you will see two different options for logging in to your Console account.
-
+
## Continue with Google
diff --git a/content/support/13641943-visual-and-interactive-content.md b/content/support/13641943-visual-and-interactive-content.md
index b53003a73..d009014f9 100644
--- a/content/support/13641943-visual-and-interactive-content.md
+++ b/content/support/13641943-visual-and-interactive-content.md
@@ -18,7 +18,7 @@ Claude can show current weather conditions and forecasts when you ask about the
Claude automatically displays temperatures in Fahrenheit for US locations and Celsius for everywhere else.
-
+
Weather is powered by Google Maps ().
@@ -28,7 +28,7 @@ When you ask about recipes, Claude can display formatted recipe cards that are e
**Note:** Visual recipe cards are available on web and desktop only. On mobile, Claude provides recipe information as text in the conversation.
-
+
### Custom visuals
@@ -76,7 +76,7 @@ For example, if you ask Claude to help you plan a trip, it might ask you to:
This content appears at the bottom of the chat. You can still type a response if you prefer.
-
+
---
diff --git a/content/support/13756069-public-sector-faqs.md b/content/support/13756069-public-sector-faqs.md
index 72055eb18..fd6edcffa 100644
--- a/content/support/13756069-public-sector-faqs.md
+++ b/content/support/13756069-public-sector-faqs.md
@@ -6,7 +6,7 @@
Select your product based on both your technical/functional requirements, and also your compliance/security/deployment environment requirements. Here is a list of options:
-
+
### What is Claude for Government (C4G)?
diff --git a/content/support/13837433-manage-plugins-for-your-organization.md b/content/support/13837433-manage-plugins-for-your-organization.md
index c716cdb6c..3f0393180 100644
--- a/content/support/13837433-manage-plugins-for-your-organization.md
+++ b/content/support/13837433-manage-plugins-for-your-organization.md
@@ -106,7 +106,7 @@ Your personal GitHub token is verified to confirm you have access, then Cowork u
An initial sync runs automatically when you connect a repository. After that, organization owners can opt-in to continued automatic updates per marketplace by going to **[Organization settings > Plugins](https://claude.ai/admin-settings/plugins)**, clicking the menu button in the upper right corner of the marketplace, then toggling "Sync automatically" on:
-
+
Enabling automatic sync creates a webhook on the connected repository. The person turning the toggle on must have admin-level access to that repository on GitHub. This is checked through their personal GitHub connection, which is separate from the Claude GitHub App installation. Without admin access, the page shows "Cannot access repository. Ensure the repository exists and the Claude GitHub App is installed," even when the App is installed correctly and manual updates work.
diff --git a/content/support/13837440-use-plugins-in-claude.md b/content/support/13837440-use-plugins-in-claude.md
index 1736c6b80..c82aa14ca 100644
--- a/content/support/13837440-use-plugins-in-claude.md
+++ b/content/support/13837440-use-plugins-in-claude.md
@@ -40,7 +40,7 @@ In Cowork, open the "Cowork" tab first, then open **Customize**.
You can also upload a custom plugin file if you built one yourself or received one from a colleague. On Claude Desktop and in Cowork, plugins you add yourself are saved locally to your computer.
-
+
---
@@ -48,7 +48,7 @@ You can also upload a custom plugin file if you built one yourself or received o
Each plugin you install adds skills you can use while working with Claude. Type "/" or click the "+" button to see the available skills from your installed plugins, in chat and in Cowork. Click any skill to see its details.
-
+
---
diff --git a/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md b/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
index f86f2c46a..ddf40b38b 100644
--- a/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
+++ b/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
@@ -52,7 +52,7 @@ There are two ways to create a scheduled task:
6. You can explicitly confirm you want to schedule the task when prompted by Claude by clicking “Schedule":
-
+
7. Claude will create and schedule your task, and it will be added to the **Scheduled tasks** page.
diff --git a/content/support/13892150-work-across-microsoft-365-apps.md b/content/support/13892150-work-across-microsoft-365-apps.md
index ace2a7771..4400b1690 100644
--- a/content/support/13892150-work-across-microsoft-365-apps.md
+++ b/content/support/13892150-work-across-microsoft-365-apps.md
@@ -34,13 +34,13 @@ Open each app and activate the add-in at least once before using the cross-app f
Go to **Settings** in each of the add-ins and toggle **Let Claude work across files** on:
-
+
**Note:** This setting is default on for Pro and Max plans and default off for Team and Enterprise plans.
You'll see connected file indicators when Excel, PowerPoint, Word, or Outlook files are linked to your session:
-
+
---
diff --git a/content/support/13930458-set-up-role-based-permissions-on-enterprise-plans.md b/content/support/13930458-set-up-role-based-permissions-on-enterprise-plans.md
index a88cf89e6..b98500e8b 100644
--- a/content/support/13930458-set-up-role-based-permissions-on-enterprise-plans.md
+++ b/content/support/13930458-set-up-role-based-permissions-on-enterprise-plans.md
@@ -66,7 +66,7 @@ Create roles that delegate parts of administration without granting the Owner ro
4. For each team or department, decide which features they need access to.
-
+
Remember: any feature you want to control per-group must be **enabled** at the organization level. If a feature is toggled off at the organization level, no custom role can grant access to it.
@@ -84,7 +84,7 @@ Create your custom roles before enabling any features or migrating members. This
3. Name the role and toggle the appropriate capabilities on the **Capabilities** tab, or choose "All capabilities" or "All generally available" to grant everything at once:
-
+
4. On the **Permissions** tab, set admin permissions for the role. See **Step 3**.
@@ -114,7 +114,7 @@ Set admin permissions on each role to delegate access to admin settings, like bi
3. Select the **Permissions** tab, between **Capabilities** and **Connectors**.
-
+
### **Set admin permissions**
@@ -154,7 +154,7 @@ Set connector permissions on each role to control which connectors, and which to
The default settings for new roles are permissive. When creating or modifying a role, confirm the settings on each tab to avoid granting unintended permissions.
-
+
### Set connector-level permissions
@@ -170,7 +170,7 @@ The **Connectors** tab lists an **All connectors** row at the top, followed by e
Choosing “Always allow,” “Needs approval,” or “Blocked” applies that level to every tool on the connector. The **All connectors** row works the same way one level up: it sets a baseline for every connector at once, including any connector you add later. Use it to set a role’s default, then override individual connectors.
-
+
### Set per-tool permissions
@@ -178,7 +178,7 @@ Set a connector to **Custom** to reveal its tools as individual rows. Each tool
Per-tool permissions let a role reach part of a connector. For example, with Jira set to **Custom**, its `search_issues` tool set to “Needs approval,” and every other Jira tool set to “Blocked,” members with the role can search Jira but nothing else. Claude only sees the tools you’ve granted, so asking it to create a ticket returns “I don’t have a tool for that” rather than an error.
-
+
### Review cross-role conflicts
@@ -186,7 +186,7 @@ Because connector permissions are additive across roles, blocking a connector in
If you have unsaved edits when you open a linked role, you’re asked to discard them first.
-
+
### Verify enforcement
@@ -236,13 +236,13 @@ Verify model access after you've migrated members to "Custom" roles. See **Step
4. Assign each group to the custom roles you created in step 2.
-
+
-
+
If you use SCIM directory sync, you can sync groups from your identity provider instead of creating them manually. For details on SCIM group sync, see **[Manage groups and group spend limits on Enterprise plans](https://support.claude.com/en/articles/13799932-manage-groups-and-group-spend-limits-on-enterprise-plans)**.
-
+
**Multiple organizations under the same parent organization:** Groups are managed at the parent organization level and propagate to all child organizations. You may see members from other organizations listed in a group—this doesn't mean they have access to your organization. Custom roles assigned to a group only grant capabilities to members who are part of your specific organization.
@@ -284,7 +284,7 @@ Use this path only if your organization already enabled group mappings for role
3. Save your changes. Members in those IdP groups are migrated to "Custom" roles on the next sync.
-
+
Members in IdP groups mapped to "Custom" roles follow the permissions of the custom roles assigned to their groups in Claude. Members in IdP groups mapped to User follow the organization-level capability settings. If a member is in groups across both mappings, "Custom" roles take precedence.
@@ -300,11 +300,11 @@ Use this path if your organization hasn’t enabled group mappings.
3. Use the bulk assignment tool in the Members table to change the selected members' role to "Custom."
-
+
-
+
-
+
We recommend migrating a pilot group first—one team or department—and verifying their access is correct before expanding to the rest of the organization.
@@ -340,9 +340,9 @@ Enabling a feature at the organization level doesn't mean everyone gets it—cus
Navigate to the “Usage” page to assign a per-user monthly spend limit to any group.
-
+
-
+
Note the following precedence rules:
diff --git a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
index e77591747..9abf03b80 100644
--- a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
+++ b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
@@ -48,11 +48,11 @@ Follow these steps to get started:
5. You’ll land on a page describing the functionality. Click “Get started”:
-
+
6. On the next screen, you can give Claude access to your files and keep your computer awake by toggling those on:
-
+
7. Click “Finish setup.”
diff --git a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
index 67903c52d..4475ea06d 100644
--- a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
+++ b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
@@ -22,23 +22,23 @@ Cowork is available for paid plans (Pro, Max, Team, Enterprise) on:
Find **Projects** in the left navigation panel and click the “+” button to see the three different ways to create a project:
-
+
### Start from scratch
Selecting “Start from scratch” allows you to set up a new folder with instructions and files:
-
+
### Import from a Claude project
After selecting “Import from project,” you’ll see a “Search projects in Chat…” field:
-
+
Clicking into the field will display a drop-down showing your recent projects, but you can also use it to search all your projects. After you select a chat project (bulk upload is not supported), you can name the new Cowork project and choose where to save it on your computer:
-
+
Clicking “Create” will transfer the files and instructions from your existing Claude project and create a new Cowork project.
@@ -46,11 +46,11 @@ Clicking “Create” will transfer the files and instructions from your existin
If you select “Use an existing folder,” you’ll be prompted to pick a file to use as context for the new Cowork project:
-
+
After selecting a folder, you can name the new Cowork project, choose where to save it on your computer, add instructions, and attach any additional files. Click “Create” to start using your new project:
-
+
---
diff --git a/content/support/14128542-let-claude-use-your-computer-in-cowork.md b/content/support/14128542-let-claude-use-your-computer-in-cowork.md
index 542d2a086..3944329df 100644
--- a/content/support/14128542-let-claude-use-your-computer-in-cowork.md
+++ b/content/support/14128542-let-claude-use-your-computer-in-cowork.md
@@ -40,7 +40,7 @@ If your work involves a physical machine, Claude keeps working while you step aw
Claude asks for your permission before accessing each application. You’ll see a prompt and must approve before Claude can interact with that app. Some apps are off-limits by default.
-
+
Claude is trained to avoid risky operations—like transferring funds, modifying or deleting files, or handling sensitive data—and to flag signs of prompt injection. However, these safeguards aren't perfect, and Claude may occasionally act outside these boundaries.
@@ -128,7 +128,7 @@ To start using computer use:
3. Find the **Computer use** toggle and turn it on:
-
+
4. Open Cowork or Claude Code in the desktop app and start a session.
diff --git a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
index 558e595c6..b5d1806ed 100644
--- a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
+++ b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
@@ -50,7 +50,7 @@ You can trigger a manual sync from two places in your admin settings.
2. Click "Check for updates" under **SCIM sync**:
-
+
3. Select whether to sync members, groups, or both.
@@ -62,7 +62,7 @@ You can trigger a manual sync from two places in your admin settings.
3. Select whether to sync members, groups, or both:
-
+
**Note:** If you trigger a manual sync while background changes are processing, your organization takes the most recent change for each member or group. If multiple changes are queued for the same member or group, you may need to resync again to make sure everything applies correctly.
diff --git a/content/support/14503613-sso-login.md b/content/support/14503613-sso-login.md
index 3bb4169a0..9308a32e5 100644
--- a/content/support/14503613-sso-login.md
+++ b/content/support/14503613-sso-login.md
@@ -47,9 +47,9 @@ Before configuring your Identity Provider (IdP), you must verify ownership of yo
3. Wait for the DNS propagation. Once the platform detects the record, the domain status will update to “**Verified**.”
-
+
-
+
**Important:** Each domain can only have one identity provider. If multiple organizations share a single login domain, IT administrators from both organizations will be able to modify login settings. Contact **[Anthropic Support](https://claude.fedstart.com/support)** for assistance with multi-organization setups. For more details about multi-organization setups, see our **[SCIM provisioning guide](https://support.claude.com/en/articles/14503643-set-up-scim-in-claude-for-government)**.
@@ -77,7 +77,7 @@ Once your SAML application is set up in your IdP, provide Anthropic with the det
- Claims Information — Attribute mappings for user name and email.
-
+
**Tip:** Using a metadata XML file: Most IdPs let you download a metadata.xml file. Upload it on the identity settings page to auto-fill the Signing Certificate, IdP Entity ID, and SSO URL. Some IdPs (like Entra ID) also include claims information in the metadata file; if present, the system will suggest field mappings automatically.
diff --git a/content/support/14503643-set-up-scim-in-claude-for-government.md b/content/support/14503643-set-up-scim-in-claude-for-government.md
index 7bf726618..19d15091f 100644
--- a/content/support/14503643-set-up-scim-in-claude-for-government.md
+++ b/content/support/14503643-set-up-scim-in-claude-for-government.md
@@ -41,7 +41,7 @@ With SCIM, login and provisioning are separate. Your IdP tells Anthropic who sho
**Important**: Store this key securely. It cannot be retrieved after you leave the page.
-
+
### Step 2: Configure SCIM in your Identity Provider
@@ -67,7 +67,7 @@ After enabling the integration in your IdP:
**Warning**: When you fully enable SCIM provisioning, any users who were **not** synced via SCIM will be removed from the organization. Confirm that all expected users appear in the sync before proceeding.
-
+
### Step 4: Map groups to roles and seat tiers
@@ -83,7 +83,7 @@ SCIM provisioning uses IdP groups to assign roles and seat tiers within Claude f
3. Save your mappings.
-
+
If you manage multiple organizations under a single parent (see below), each organization maintains its own role and seat tier mappings. Switch between organizations using the organization selector in the bottom-left corner of the page.
diff --git a/content/support/14503775-mcp-web-search.md b/content/support/14503775-mcp-web-search.md
index 5c3cb3282..9fbc2ef86 100644
--- a/content/support/14503775-mcp-web-search.md
+++ b/content/support/14503775-mcp-web-search.md
@@ -4,7 +4,7 @@ The Web Search connector gives Claude the ability to search the public internet
For questions about web search in commercial Claude, see **[Enabling and using web search](https://support.claude.com/en/articles/10684626-enabling-and-using-web-search)**.
-
+
## How Web Search differs for Claude for Government
diff --git a/content/support/14604397-set-up-your-design-system-in-claude-design.md b/content/support/14604397-set-up-your-design-system-in-claude-design.md
index 62b93e45a..862fddc59 100644
--- a/content/support/14604397-set-up-your-design-system-in-claude-design.md
+++ b/content/support/14604397-set-up-your-design-system-in-claude-design.md
@@ -72,7 +72,7 @@ To validate your design system, create a test project and see if the output matc
Once you’re satisfied with the design system quality, make sure the “Published” toggle is switched on. After publishing, any projects created from the Claude Design homescreen while in your organization will use your design system instead of the default.
-
+
---
diff --git a/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md b/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
index 0517450d5..b9fd1d15d 100644
--- a/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
+++ b/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
@@ -18,7 +18,7 @@ Team and Enterprise plan admins can enable this organization-wide by following t
2. Find the **Claude Design** toggle under **Anthropic Labs** and switch it on.
-
+
---
diff --git a/content/support/14604416-get-started-with-claude-design.md b/content/support/14604416-get-started-with-claude-design.md
index 89fe2cc65..c2b7876b5 100644
--- a/content/support/14604416-get-started-with-claude-design.md
+++ b/content/support/14604416-get-started-with-claude-design.md
@@ -153,7 +153,7 @@ Use the “Export” button in the upper right corner when viewing your project
- Send to Claude Code Web
-
+
You can also share projects within your organization using a shareable link. Sharing options include view-only, comment, and edit access.
diff --git a/content/support/15330088-set-a-default-model-for-your-organization.md b/content/support/15330088-set-a-default-model-for-your-organization.md
index a6fc9b5ff..dd4fb4a3a 100644
--- a/content/support/15330088-set-a-default-model-for-your-organization.md
+++ b/content/support/15330088-set-a-default-model-for-your-organization.md
@@ -46,7 +46,7 @@ The organization default applies to every member. To set it:
4. Click “Save changes.”
-
+
---
diff --git a/content/support/15694740-manage-model-access-for-your-organization.md b/content/support/15694740-manage-model-access-for-your-organization.md
index 382eb58b3..4b807d7d8 100644
--- a/content/support/15694740-manage-model-access-for-your-organization.md
+++ b/content/support/15694740-manage-model-access-for-your-organization.md
@@ -42,9 +42,9 @@ The organization setting is the ceiling, so a role can’t grant access to a mod
If any custom role uses the model you’re disabling as its default, you’ll be prompted to change that role’s default before the change can be saved.
-
+
-
+
---
@@ -62,7 +62,7 @@ If any custom role uses the model you’re disabling as its default, you’ll be
Only models the role grants access to can be selected as that role’s default model.
-
+
---
@@ -80,7 +80,7 @@ Effort limits determine how much computation members on a role can apply per res
5. Click "Save" to save your changes.
-
+
Members on the role see only effort levels at or below the cap in their model menu. Note that available effort levels differ depending on the model, and some models don’t support effort level settings at all. For an explanation of each level, see **[Change the model, effort, and thinking settings](https://support.claude.com/en/articles/8664678)**.
diff --git a/content/support/15936181-get-started-with-1password-for-claude.md b/content/support/15936181-get-started-with-1password-for-claude.md
index 257fdc4a4..b73f98664 100644
--- a/content/support/15936181-get-started-with-1password-for-claude.md
+++ b/content/support/15936181-get-started-with-1password-for-claude.md
@@ -52,7 +52,7 @@ Once the requirements are in place, you can set up 1Password from a few places i
4. Toggle on **Password managers**:
-
+
Once enabled, eligible users will see the discovery options above. Users still need to install and set up the required apps and extensions themselves.
diff --git a/content/support/8114491-get-started-with-claude.md b/content/support/8114491-get-started-with-claude.md
index 20b177dc7..57e7fa518 100644
--- a/content/support/8114491-get-started-with-claude.md
+++ b/content/support/8114491-get-started-with-claude.md
@@ -36,7 +36,7 @@ You use **prompts** to communicate with Claude. The best approach is to speak to
Type your prompt into the chat interface and click the submit button to start a conversation with Claude. You can click the "+" button in the lower left or type "/" to view additional options and commands:
-
+
---
diff --git a/content/support/8230524-how-can-i-delete-or-rename-a-conversation.md b/content/support/8230524-how-can-i-delete-or-rename-a-conversation.md
index f351456ea..4b108f816 100644
--- a/content/support/8230524-how-can-i-delete-or-rename-a-conversation.md
+++ b/content/support/8230524-how-can-i-delete-or-rename-a-conversation.md
@@ -12,7 +12,7 @@ To delete or rename an individual conversation:
3. Select either "Delete" or "Rename" from the options that appear:
-
+
## Deleting conversations in bulk
diff --git a/content/support/8287232-verify-your-phone-number.md b/content/support/8287232-verify-your-phone-number.md
index 9ccb14185..c8025681d 100644
--- a/content/support/8287232-verify-your-phone-number.md
+++ b/content/support/8287232-verify-your-phone-number.md
@@ -2,7 +2,7 @@
When you first create a Claude account, you’ll be asked to enter your phone number from a **[supported location](https://support.claude.com/en/articles/8461763-where-can-i-access-claude)** to receive a verification code via text message:
-
+
Once you receive the text message with the code, type it into the box and click “Verify code.” This will complete the verification and account creation process and allow you to start chatting with Claude.
diff --git a/content/support/8325618-paid-plan-billing-faqs.md b/content/support/8325618-paid-plan-billing-faqs.md
index 3c97526c0..c84996941 100644
--- a/content/support/8325618-paid-plan-billing-faqs.md
+++ b/content/support/8325618-paid-plan-billing-faqs.md
@@ -50,7 +50,7 @@ There's no separate option to remove a card, and updating to a new card replaces
If you want to use a name other than the one tied to your payment method, check the "Use a different name on invoices" box when adding or updating your payment method in **[Settings > Billing](https://claude.ai/settings/billing)**.
-
+
## How can I edit a paid invoice?
diff --git a/content/support/8606378-how-do-i-use-the-workbench.md b/content/support/8606378-how-do-i-use-the-workbench.md
index 9744a81a6..c8f1e0b60 100644
--- a/content/support/8606378-how-do-i-use-the-workbench.md
+++ b/content/support/8606378-how-do-i-use-the-workbench.md
@@ -68,15 +68,15 @@ Code examples in our documentation include an "Open in Workbench" option, which
Workbench (legacy) allows you to create and test prompts within your Claude Console account. You can enter your prompt into the "Human" dialogue box and click "Run" to test Claude's output. Click on the + icon in the upper left to create a new prompt, or click on the bulleted list icon to see prompts you've tested in the past:
-
+
Workbench (legacy) also allows you to configure several settings when prompting Claude. You can click on the slider icon to review your model settings. This allows you to select the model, temperature, and max tokens to sample:
-
+
After crafting your prompt, click on the "Get code" button to generate a sample using our Python and Typescript SDKs:
-
+
## How can I access my previous work and prompt history in Workbench (legacy)?
@@ -88,7 +88,7 @@ You can access your previous Workbench prompts on your Console account by follow
3. Click the "List prompts" button on the upper left corner of the page, next to the "+" button to create a new prompt:
-
+
4. A list of your previously-saved prompts will appear.
diff --git a/content/support/8887527-customizing-your-appearance-settings.md b/content/support/8887527-customizing-your-appearance-settings.md
index 90f31ebcd..ee8924113 100644
--- a/content/support/8887527-customizing-your-appearance-settings.md
+++ b/content/support/8887527-customizing-your-appearance-settings.md
@@ -8,7 +8,7 @@
3. Select from Light, Match System, and Dark under **Color mode**.
-
+
## How to change your font
@@ -16,10 +16,10 @@
2. Select from Default, Match System, and Dyslexic Friendly.
-
+
## Can I disable the sidebar?
It's not currently possible to completely disable the sidebar. You can click the button on the top right of the sidebar to open or close it.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/9028421-how-can-i-delete-my-claude-account.md b/content/support/9028421-how-can-i-delete-my-claude-account.md
index cd589e00f..ce7127e99 100644
--- a/content/support/9028421-how-can-i-delete-my-claude-account.md
+++ b/content/support/9028421-how-can-i-delete-my-claude-account.md
@@ -2,7 +2,7 @@
Once you are logged in, click your initials or name in the lower left corner and select "Settings." Navigate to **[Settings > Account](https://claude.ai/settings/account)** and click the "Delete account" button:
-
+
## Considerations for paid Claude accounts
@@ -20,4 +20,4 @@ If you have multiple accounts associated with the same email address, you'll nee
There are some scenarios where you will need to **[contact our team](https://support.claude.com/en/articles/9015913-how-to-get-support)** to delete your account. If this is the case, it will be noted in your account:
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
index 17a6cec52..c0bd596b6 100644
--- a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
+++ b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
@@ -120,7 +120,7 @@ For the full walkthrough of your options, deadlines, and what happens to your su
You may have both a personal account and an organization account tied to the same email address. You can switch between them by clicking your initials or name in the lower left corner of the screen.
-
+
A blue checkmark shows which account you're currently using. Click the other account to switch to it and access its separate conversations and projects.
diff --git a/content/support/9519177-how-can-i-create-and-manage-projects.md b/content/support/9519177-how-can-i-create-and-manage-projects.md
index 6055ee2cf..bcdc1f559 100644
--- a/content/support/9519177-how-can-i-create-and-manage-projects.md
+++ b/content/support/9519177-how-can-i-create-and-manage-projects.md
@@ -104,19 +104,19 @@ Starring a project allows for quick access from your projects and chats list, vi
You can move a standalone chat into a project by clicking on the dropdown arrow next to the chat name, then “Add to project”:
-
+
Browse or search for the correct project in the **Move chat** modal that appears, then click on it to move the chat.
-
+
You can also remove chats from projects, or move them between projects, using the same dropdown menu within the chat:
-
+
You can move chats into projects in bulk from **[Your chat history page](https://claude.ai/recents)**:
-
+
Select the chats you want to move, then click the icon next to the number of selected chats to move them into your project.
diff --git a/content/support/9519189-manage-project-visibility-and-sharing.md b/content/support/9519189-manage-project-visibility-and-sharing.md
index 0a8efeec4..9ea97d874 100644
--- a/content/support/9519189-manage-project-visibility-and-sharing.md
+++ b/content/support/9519189-manage-project-visibility-and-sharing.md
@@ -12,7 +12,7 @@ When creating a project on a Team or Enterprise plan, you can choose between two
- **Private:** Only invited members can view and use the project.
-
+
## What are public projects?
@@ -22,11 +22,11 @@ If you choose to share a project with the rest of your organization upon creatio
Yes, you can switch the visibility of a project you created as public to private at any time by opening the project and clicking the “Share” button to the right of the project name:
-
+
Click “Everyone at [your organization]” under **General access** and select “Only people invited” to change the project from public to private:
-
+
## What are private projects?
@@ -36,11 +36,11 @@ Choosing “Only people invited” keeps your project private so that you are th
Yes, you can switch the visibility of a project you created as private to public at any time by opening the project and clicking the “Share” button to the right of the project name:
-
+
Click “Only people invited” under General access and select “Everyone at [your organization]” to change the project from private to public:
-
+
## Add and remove access to private projects
diff --git a/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md b/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
index 6007deb27..1ad095a8d 100644
--- a/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
+++ b/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
@@ -8,7 +8,7 @@ The Claude Console provides detailed cost and usage reporting to help you effect
Users with access to these reports can click into them on the left navigation menu on the Console:
-
+
---
@@ -46,9 +46,9 @@ The [Usage page](https://platform.claude.com/usage) offers a detailed breakdown
6. Use the export button to download a CSV of the displayed data.
-
+
-
+
### Rate Limit Use
@@ -88,6 +88,6 @@ The [Cost page](https://platform.claude.com/cost) helps you understand your spen
5. Use the export button to download a CSV of the cost data.
-
+
**Note**: Currently, it's not possible to break down usage or cost by individual users.
\ No newline at end of file
diff --git a/content/support/9547008-publish-and-share-artifacts.md b/content/support/9547008-publish-and-share-artifacts.md
index da1f50d23..deced0441 100644
--- a/content/support/9547008-publish-and-share-artifacts.md
+++ b/content/support/9547008-publish-and-share-artifacts.md
@@ -56,11 +56,11 @@ Publishing also adds the artifact to the **[Artifacts](https://claude.ai/artifac
After publishing, you'll see a “Get embed code” button.
-
+
Click it to open a modal with automatically generated code you can copy and paste to embed your artifact on another website.
-
+
You must specify which websites can embed your artifact by entering URLs in the **Allowed domains** field, separated by commas.
@@ -116,7 +116,7 @@ Artifacts created on Team or Enterprise accounts can only be shared within your
4. Click “Share & copy link” to make this version shareable.
-
+
### Who can access shared artifacts
@@ -138,7 +138,7 @@ When you share an artifact, viewers also gain access to any attachments and file
2. In the **Artifact shared** modal, click “Unshare.”
-
+
---
diff --git a/content/support/9927533-disable-public-projects-for-your-organization.md b/content/support/9927533-disable-public-projects-for-your-organization.md
index 508754d9a..1cc6c5eee 100644
--- a/content/support/9927533-disable-public-projects-for-your-organization.md
+++ b/content/support/9927533-disable-public-projects-for-your-organization.md
@@ -10,7 +10,7 @@ Follow these steps:
2. Find **Public projects** and toggle it off
-
+
## How does disabling public projects work?