SpyBara
Go Premium

Documentation 2026-02-16 21:05 UTC to 2026-02-17 21:08 UTC

14 files changed +190 −79. View all changes and history on the product overview
2026
Sat 28 21:01 Fri 27 21:05 Thu 26 21:08 Wed 25 03:47 Tue 24 21:08 Mon 23 21:13 Sat 21 18:03 Fri 20 21:03 Thu 19 21:06 Wed 18 03:48 Tue 17 21:08 Mon 16 21:05 Sat 14 03:44 Fri 13 21:09 Thu 12 00:06 Wed 11 21:10 Tue 10 21:13 Mon 9 15:17 Sat 7 21:05 Fri 6 21:06 Thu 5 21:06 Wed 4 21:07 Tue 3 21:08 Sun 1 21:03
Details

11Before configuring Claude Code with Bedrock, ensure you have:11Before configuring Claude Code with Bedrock, ensure you have:

12 12 

13* An AWS account with Bedrock access enabled13* An AWS account with Bedrock access enabled

14* Access to desired Claude models (for example, Claude Sonnet 4.5) in Bedrock14* Access to desired Claude models (for example, Claude Sonnet 4.6) in Bedrock

15* AWS CLI installed and configured (optional - only needed if you don't have another mechanism for getting credentials)15* AWS CLI installed and configured (optional - only needed if you don't have another mechanism for getting credentials)

16* Appropriate IAM permissions16* Appropriate IAM permissions

17 17 


125Claude Code uses these default models for Bedrock:125Claude Code uses these default models for Bedrock:

126 126 

127| Model type | Default value |127| Model type | Default value |

128| :--------------- | :------------------------------------------------- |128| :--------------- | :-------------------------------------------- |

129| Primary model | `global.anthropic.claude-sonnet-4-5-20250929-v1:0` |129| Primary model | `global.anthropic.claude-sonnet-4-6` |

130| Small/fast model | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |130| Small/fast model | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |

131 131 

132<Note>132<Note>


137 137 

138```bash theme={null}138```bash theme={null}

139# Using inference profile ID139# Using inference profile ID

140export ANTHROPIC_MODEL='global.anthropic.claude-sonnet-4-5-20250929-v1:0'140export ANTHROPIC_MODEL='global.anthropic.claude-sonnet-4-6'

141export ANTHROPIC_SMALL_FAST_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'141export ANTHROPIC_SMALL_FAST_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

142 142 

143# Using application inference profile ARN143# Using application inference profile ARN

Details

53| `--max-budget-usd` | Maximum dollar amount to spend on API calls before stopping (print mode only) | `claude -p --max-budget-usd 5.00 "query"` |53| `--max-budget-usd` | Maximum dollar amount to spend on API calls before stopping (print mode only) | `claude -p --max-budget-usd 5.00 "query"` |

54| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default | `claude -p --max-turns 3 "query"` |54| `--max-turns` | Limit the number of agentic turns (print mode only). Exits with an error when the limit is reached. No limit by default | `claude -p --max-turns 3 "query"` |

55| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated) | `claude --mcp-config ./mcp.json` |55| `--mcp-config` | Load MCP servers from JSON files or strings (space-separated) | `claude --mcp-config ./mcp.json` |

56| `--model` | Sets the model for the current session with an alias for the latest model (`sonnet` or `opus`) or a model's full name | `claude --model claude-sonnet-4-5-20250929` |56| `--model` | Sets the model for the current session with an alias for the latest model (`sonnet` or `opus`) or a model's full name | `claude --model claude-sonnet-4-6` |

57| `--no-chrome` | Disable [Chrome browser integration](/en/chrome) for this session | `claude --no-chrome` |57| `--no-chrome` | Disable [Chrome browser integration](/en/chrome) for this session | `claude --no-chrome` |

58| `--no-session-persistence` | Disable session persistence so sessions are not saved to disk and cannot be resumed (print mode only) | `claude -p --no-session-persistence "query"` |58| `--no-session-persistence` | Disable session persistence so sessions are not saved to disk and cannot be resumed (print mode only) | `claude -p --no-session-persistence "query"` |

59| `--output-format` | Specify output format for print mode (options: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |59| `--output-format` | Specify output format for print mode (options: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

costs.md +1 −1

Details

8 8 

9Claude Code consumes tokens for each interaction. Costs vary based on codebase size, query complexity, and conversation length. The average cost is \$6 per developer per day, with daily costs remaining below \$12 for 90% of users.9Claude Code consumes tokens for each interaction. Costs vary based on codebase size, query complexity, and conversation length. The average cost is \$6 per developer per day, with daily costs remaining below \$12 for 90% of users.

10 10 

11For team usage, Claude Code charges by API token consumption. On average, Claude Code costs \~\$100-200/developer per month with Sonnet 4.5 though there is large variance depending on how many instances users are running and whether they're using it in automation.11For team usage, Claude Code charges by API token consumption. On average, Claude Code costs \~\$100-200/developer per month with Sonnet 4.6 though there is large variance depending on how many instances users are running and whether they're using it in automation.

12 12 

13This page covers how to [track your costs](#track-your-costs), [manage costs for teams](#managing-costs-for-teams), and [reduce token usage](#reduce-token-usage).13This page covers how to [track your costs](#track-your-costs), [manage costs for teams](#managing-costs-for-teams), and [reduce token usage](#reduce-token-usage).

14 14 

Details

117 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}117 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

118 custom_instructions: "Follow our coding standards"118 custom_instructions: "Follow our coding standards"

119 max_turns: "10"119 max_turns: "10"

120 model: "claude-sonnet-4-5-20250929"120 model: "claude-sonnet-4-6"

121```121```

122 122 

123**GA version (v1.0):**123**GA version (v1.0):**


130 claude_args: |130 claude_args: |

131 --append-system-prompt "Follow our coding standards"131 --append-system-prompt "Follow our coding standards"

132 --max-turns 10132 --max-turns 10

133 --model claude-sonnet-4-5-20250929133 --model claude-sonnet-4-6

134```134```

135 135 

136<Tip>136<Tip>


521 with:521 with:

522 github_token: ${{ steps.app-token.outputs.token }}522 github_token: ${{ steps.app-token.outputs.token }}

523 use_bedrock: "true"523 use_bedrock: "true"

524 claude_args: '--model us.anthropic.claude-sonnet-4-5-20250929-v1:0 --max-turns 10'524 claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

525 ```525 ```

526 526 

527 <Tip>527 <Tip>

528 The model ID format for Bedrock includes the region prefix (e.g., `us.anthropic.claude...`) and version suffix.528 The model ID format for Bedrock includes a region prefix (for example, `us.anthropic.claude-sonnet-4-6`).

529 </Tip>529 </Tip>

530 </Accordion>530 </Accordion>

531 531 


645The `claude_args` parameter accepts any Claude Code CLI arguments:645The `claude_args` parameter accepts any Claude Code CLI arguments:

646 646 

647```yaml theme={null}647```yaml theme={null}

648claude_args: "--max-turns 5 --model claude-sonnet-4-5-20250929 --mcp-config /path/to/config.json"648claude_args: "--max-turns 5 --model claude-sonnet-4-6 --mcp-config /path/to/config.json"

649```649```

650 650 

651Common arguments:651Common arguments:

652 652 

653* `--max-turns`: Maximum conversation turns (default: 10)653* `--max-turns`: Maximum conversation turns (default: 10)

654* `--model`: Model to use (for example, `claude-sonnet-4-5-20250929`)654* `--model`: Model to use (for example, `claude-sonnet-4-6`)

655* `--mcp-config`: Path to MCP configuration655* `--mcp-config`: Path to MCP configuration

656* `--allowed-tools`: Comma-separated list of allowed tools656* `--allowed-tools`: Comma-separated list of allowed tools

657* `--debug`: Enable debug output657* `--debug`: Enable debug output

gitlab-ci-cd.md +1 −1

Details

319```319```

320 320 

321<Note>321<Note>

322 Model IDs for Bedrock include region-specific prefixes and version suffixes (for example, `us.anthropic.claude-sonnet-4-5-20250929-v1:0`). Pass the desired model via your job configuration or prompt if your workflow supports it.322 Model IDs for Bedrock include region-specific prefixes (for example, `us.anthropic.claude-sonnet-4-6`). Pass the desired model via your job configuration or prompt if your workflow supports it.

323</Note>323</Note>

324 324 

325### Google Vertex AI job example (Workload Identity Federation)325### Google Vertex AI job example (Workload Identity Federation)

Details

12 12 

13* A Google Cloud Platform (GCP) account with billing enabled13* A Google Cloud Platform (GCP) account with billing enabled

14* A GCP project with Vertex AI API enabled14* A GCP project with Vertex AI API enabled

15* Access to desired Claude models (for example, Claude Sonnet 4.5)15* Access to desired Claude models (for example, Claude Sonnet 4.6)

16* Google Cloud SDK (`gcloud`) installed and configured16* Google Cloud SDK (`gcloud`) installed and configured

17* Quota allocated in desired GCP region17* Quota allocated in desired GCP region

18 18 


48 48 

491. Navigate to the [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)491. Navigate to the [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)

502. Search for "Claude" models502. Search for "Claude" models

513. Request access to desired Claude models (for example, Claude Sonnet 4.5)513. Request access to desired Claude models (for example, Claude Sonnet 4.6)

524. Wait for approval (may take 24-48 hours)524. Wait for approval (may take 24-48 hours)

53 53 

54### 3. Configure GCP credentials54### 3. Configure GCP credentials


98Claude Code uses these default models for Vertex AI:98Claude Code uses these default models for Vertex AI:

99 99 

100| Model type | Default value |100| Model type | Default value |

101| :--------------- | :--------------------------- |101| :--------------- | :-------------------------- |

102| Primary model | `claude-sonnet-4-5@20250929` |102| Primary model | `claude-sonnet-4-6` |

103| Small/fast model | `claude-haiku-4-5@20251001` |103| Small/fast model | `claude-haiku-4-5@20251001` |

104 104 

105<Note>105<Note>


131 131 

132## 1M token context window132## 1M token context window

133 133 

134Claude Sonnet 4 and Sonnet 4.5 support the [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) on Vertex AI.134Claude Sonnet 4 and Sonnet 4.6 support the [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) on Vertex AI.

135 135 

136<Note>136<Note>

137 The 1M token context window is currently in beta. To use the extended context window, include the `context-1m-2025-08-07` beta header in your Vertex AI requests.137 The 1M token context window is currently in beta. To use the extended context window, include the `context-1m-2025-08-07` beta header in your Vertex AI requests.

hooks.md +1 −1

Details

579 "permission_mode": "default",579 "permission_mode": "default",

580 "hook_event_name": "SessionStart",580 "hook_event_name": "SessionStart",

581 "source": "startup",581 "source": "startup",

582 "model": "claude-sonnet-4-5-20250929"582 "model": "claude-sonnet-4-6"

583}583}

584```584```

585 585 

mcp.md +25 −0

Details

748 * If servers with the same names already exist, they will get a numerical suffix (for example, `server_1`)748 * If servers with the same names already exist, they will get a numerical suffix (for example, `server_1`)

749</Tip>749</Tip>

750 750 

751## Use MCP servers from Claude.ai

752 

753If you've logged into Claude Code with a [Claude.ai](https://claude.ai) account, MCP servers you've added in Claude.ai are automatically available in Claude Code:

754 

755<Steps>

756 <Step title="Configure MCP servers in Claude.ai">

757 Add servers at [claude.ai/settings/connectors](https://claude.ai/settings/connectors). On Team and Enterprise plans, only admins can add servers.

758 </Step>

759 

760 <Step title="Authenticate the MCP server">

761 Complete any required authentication steps in Claude.ai.

762 </Step>

763 

764 <Step title="View and manage servers in Claude Code">

765 In Claude Code, use the command:

766 

767 ```

768 # Within Claude Code, see all MCP servers including Claude.ai ones

769 > /mcp

770 ```

771 

772 Claude.ai servers appear in the list with indicators showing they come from Claude.ai.

773 </Step>

774</Steps>

775 

751## Use Claude Code as an MCP server776## Use Claude Code as an MCP server

752 777 

753You can use Claude Code itself as an MCP server that other applications can connect to:778You can use Claude Code itself as an MCP server that other applications can connect to:

Details

71# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic71# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic

72 72 

73# Set models to your resource's deployment names73# Set models to your resource's deployment names

74export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-5'74export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

75export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5'75export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5'

76export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-6'76export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-6'

77```77```

model-config.md +4 −4

Details

25| Model alias | Behavior |25| Model alias | Behavior |

26| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |26| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

27| **`default`** | Recommended model setting, depending on your account type |27| **`default`** | Recommended model setting, depending on your account type |

28| **`sonnet`** | Uses the latest Sonnet model (currently Sonnet 4.5) for daily coding tasks |28| **`sonnet`** | Uses the latest Sonnet model (currently Sonnet 4.6) for daily coding tasks |

29| **`opus`** | Uses the latest Opus model (currently Opus 4.6) for complex reasoning tasks |29| **`opus`** | Uses the latest Opus model (currently Opus 4.6) for complex reasoning tasks |

30| **`haiku`** | Uses the fast and efficient Haiku model for simple tasks |30| **`haiku`** | Uses the fast and efficient Haiku model for simple tasks |

31| **`sonnet[1m]`** | Uses Sonnet with a [1 million token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) for long sessions |31| **`sonnet[1m]`** | Uses Sonnet with a [1 million token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) for long sessions |


113 113 

114The behavior of `default` depends on your account type:114The behavior of `default` depends on your account type:

115 115 

116* **Max and Teams**: defaults to Opus 4.6116* **Max and Team Premium**: defaults to Opus 4.6

117* **Pro**: defaults to Opus 4.6 in Claude Code117* **Pro and Team Standard**: defaults to Sonnet 4.6

118* **Enterprise**: Opus 4.6 is available but not the default118* **Enterprise**: Opus 4.6 is available but not the default

119 119 

120Claude Code may automatically fall back to Sonnet if you hit a usage threshold with Opus.120Claude Code may automatically fall back to Sonnet if you hit a usage threshold with Opus.


160/model sonnet[1m]160/model sonnet[1m]

161 161 

162# Or append [1m] to a full model name162# Or append [1m] to a full model name

163/model claude-sonnet-4-5-20250929[1m]163/model claude-sonnet-4-6[1m]

164```164```

165 165 

166Note: Extended context models have166Note: Extended context models have

Details

289**Attributes**:289**Attributes**:

290 290 

291* All [standard attributes](#standard-attributes)291* All [standard attributes](#standard-attributes)

292* `model`: Model identifier (for example, "claude-sonnet-4-5-20250929")292* `model`: Model identifier (for example, "claude-sonnet-4-6")

293 293 

294#### Token counter294#### Token counter

295 295 


299 299 

300* All [standard attributes](#standard-attributes)300* All [standard attributes](#standard-attributes)

301* `type`: (`"input"`, `"output"`, `"cacheRead"`, `"cacheCreation"`)301* `type`: (`"input"`, `"output"`, `"cacheRead"`, `"cacheCreation"`)

302* `model`: Model identifier (for example, "claude-sonnet-4-5-20250929")302* `model`: Model identifier (for example, "claude-sonnet-4-6")

303 303 

304#### Code edit tool decision counter304#### Code edit tool decision counter

305 305 


374* `event.name`: `"api_request"`374* `event.name`: `"api_request"`

375* `event.timestamp`: ISO 8601 timestamp375* `event.timestamp`: ISO 8601 timestamp

376* `event.sequence`: monotonically increasing counter for ordering events within a session376* `event.sequence`: monotonically increasing counter for ordering events within a session

377* `model`: Model used (for example, "claude-sonnet-4-5-20250929")377* `model`: Model used (for example, "claude-sonnet-4-6")

378* `cost_usd`: Estimated cost in USD378* `cost_usd`: Estimated cost in USD

379* `duration_ms`: Request duration in milliseconds379* `duration_ms`: Request duration in milliseconds

380* `input_tokens`: Number of input tokens380* `input_tokens`: Number of input tokens


394* `event.name`: `"api_error"`394* `event.name`: `"api_error"`

395* `event.timestamp`: ISO 8601 timestamp395* `event.timestamp`: ISO 8601 timestamp

396* `event.sequence`: monotonically increasing counter for ordering events within a session396* `event.sequence`: monotonically increasing counter for ordering events within a session

397* `model`: Model used (for example, "claude-sonnet-4-5-20250929")397* `model`: Model used (for example, "claude-sonnet-4-6")

398* `error`: Error message398* `error`: Error message

399* `status_code`: HTTP status code (if applicable)399* `status_code`: HTTP status code (if applicable)

400* `duration_ms`: Request duration in milliseconds400* `duration_ms`: Request duration in milliseconds

Details

6 6 

7> Build and host plugin marketplaces to distribute Claude Code extensions across teams and communities.7> Build and host plugin marketplaces to distribute Claude Code extensions across teams and communities.

8 8 

9A plugin marketplace is a catalog that lets you distribute plugins to others. Marketplaces provide centralized discovery, version tracking, automatic updates, and support for multiple source types (git repositories, local paths, and more). This guide shows you how to create your own marketplace to share plugins with your team or community.9A **plugin marketplace** is a catalog that lets you distribute plugins to others. Marketplaces provide centralized discovery, version tracking, automatic updates, and support for multiple source types (git repositories, local paths, and more). This guide shows you how to create your own marketplace to share plugins with your team or community.

10 10 

11Looking to install plugins from an existing marketplace? See [Discover and install prebuilt plugins](/en/discover-plugins).11Looking to install plugins from an existing marketplace? See [Discover and install prebuilt plugins](/en/discover-plugins).

12 12 


108<Note>108<Note>

109 **How plugins are installed**: When users install a plugin, Claude Code copies the plugin directory to a cache location. This means plugins can't reference files outside their directory using paths like `../shared-utils`, because those files won't be copied.109 **How plugins are installed**: When users install a plugin, Claude Code copies the plugin directory to a cache location. This means plugins can't reference files outside their directory using paths like `../shared-utils`, because those files won't be copied.

110 110 

111 If you need to share files across plugins, use symlinks (which are followed during copying) or restructure your marketplace so the shared directory is inside the plugin source path. See [Plugin caching and file resolution](/en/plugins-reference#plugin-caching-and-file-resolution) for details.111 If you need to share files across plugins, use symlinks (which are followed during copying). See [Plugin caching and file resolution](/en/plugins-reference#plugin-caching-and-file-resolution) for details.

112</Note>112</Note>

113 113 

114## Create the marketplace file114## Create the marketplace file


191**Standard metadata fields:**191**Standard metadata fields:**

192 192 

193| Field | Type | Description |193| Field | Type | Description |

194| :------------ | :------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |194| :------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------------- |

195| `description` | string | Brief plugin description |195| `description` | string | Brief plugin description |

196| `version` | string | Plugin version |196| `version` | string | Plugin version |

197| `author` | object | Plugin author information (`name` required, `email` optional) |197| `author` | object | Plugin author information (`name` required, `email` optional) |


201| `keywords` | array | Tags for plugin discovery and categorization |201| `keywords` | array | Tags for plugin discovery and categorization |

202| `category` | string | Plugin category for organization |202| `category` | string | Plugin category for organization |

203| `tags` | array | Tags for searchability |203| `tags` | array | Tags for searchability |

204| `strict` | boolean | When true (default), marketplace component fields merge with plugin.json. When false, the marketplace entry defines the plugin entirely, and plugin.json must not also declare components. |204| `strict` | boolean | Controls whether `plugin.json` is the authority for component definitions (default: true). See [Strict mode](#strict-mode) below. |

205 205 

206**Component configuration fields:**206**Component configuration fields:**

207 207 


215 215 

216## Plugin sources216## Plugin sources

217 217 

218Plugin sources tell Claude Code where to fetch each individual plugin listed in your marketplace. These are set in the `source` field of each plugin entry in `marketplace.json`.

219 

220Once a plugin is cloned or copied into the local machine, it is copied into the local versioned plugin cache at `~/.claude/plugins/cache`.

221 

222| Source | Type | Fields | Notes |

223| ------------- | ------------------------------- | ------------------------------------- | ----------------------------------------------------------------- |

224| Relative path | `string` (e.g. `"./my-plugin"`) | — | Local directory within the marketplace repo. Must start with `./` |

225| `github` | object | `repo`, `ref?`, `sha?` | |

226| `url` | object | `url` (must end .git), `ref?`, `sha?` | Git URL source |

227| `npm` | object | `package`, `version?`, `registry?` | Installed via `npm install` |

228| `pip` | object | `package`, `version?`, `registry?` | Installed via pip |

229 

230<Note>

231 **Marketplace sources vs plugin sources**: These are different concepts that control different things.

232 

233 * **Marketplace source** — where to fetch the `marketplace.json` catalog itself. Set when users run `/plugin marketplace add` or in `extraKnownMarketplaces` settings. Supports `ref` (branch/tag) but not `sha`.

234 * **Plugin source** — where to fetch an individual plugin listed in the marketplace. Set in the `source` field of each plugin entry inside `marketplace.json`. Supports both `ref` (branch/tag) and `sha` (exact commit).

235 

236 For example, a marketplace hosted at `acme-corp/plugin-catalog` (marketplace source) can list a plugin fetched from `acme-corp/code-formatter` (plugin source). The marketplace source and plugin source point to different repositories and are pinned independently.

237</Note>

238 

218### Relative paths239### Relative paths

219 240 

220For plugins in the same repository:241For plugins in the same repository:


349 370 

350* **`commands` and `agents`**: You can specify multiple directories or individual files. Paths are relative to the plugin root.371* **`commands` and `agents`**: You can specify multiple directories or individual files. Paths are relative to the plugin root.

351* **`${CLAUDE_PLUGIN_ROOT}`**: Use this variable in hooks and MCP server configs to reference files within the plugin's installation directory. This is necessary because plugins are copied to a cache location when installed.372* **`${CLAUDE_PLUGIN_ROOT}`**: Use this variable in hooks and MCP server configs to reference files within the plugin's installation directory. This is necessary because plugins are copied to a cache location when installed.

352* **`strict: false`**: Since this is set to false, the plugin doesn't need its own `plugin.json`. The marketplace entry defines everything.373* **`strict: false`**: Since this is set to false, the plugin doesn't need its own `plugin.json`. The marketplace entry defines everything. See [Strict mode](#strict-mode) below.

374 

375### Strict mode

376 

377The `strict` field controls whether `plugin.json` is the authority for component definitions (commands, agents, hooks, skills, MCP servers, output styles).

378 

379| Value | Behavior |

380| :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |

381| `true` (default) | `plugin.json` is the authority. The marketplace entry can supplement it with additional components, and both sources are merged. |

382| `false` | The marketplace entry is the entire definition. If the plugin also has a `plugin.json` that declares components, that's a conflict and the plugin fails to load. |

383 

384**When to use each mode:**

385 

386* **`strict: true`**: the plugin has its own `plugin.json` and manages its own components. The marketplace entry can add extra commands or hooks on top. This is the default and works for most plugins.

387* **`strict: false`**: the marketplace operator wants full control. The plugin repo provides raw files, and the marketplace entry defines which of those files are exposed as commands, agents, hooks, etc. Useful when the marketplace restructures or curates a plugin's components differently than the plugin author intended.

353 388 

354## Host and distribute marketplaces389## Host and distribute marketplaces

355 390 


505 540 

506For complete configuration details including all supported source types and comparison with `extraKnownMarketplaces`, see the [strictKnownMarketplaces reference](/en/settings#strictknownmarketplaces).541For complete configuration details including all supported source types and comparison with `extraKnownMarketplaces`, see the [strictKnownMarketplaces reference](/en/settings#strictknownmarketplaces).

507 542 

543### Version resolution and release channels

544 

545Plugin versions determine cache paths and update detection. You can specify the version in the plugin manifest (`plugin.json`) or in the marketplace entry (`marketplace.json`).

546 

547<Warning>

548 When possible, avoid setting the version in both places. The plugin manifest always wins silently, which can cause the marketplace version to be ignored. For relative-path plugins, set the version in the marketplace entry. For all other plugin sources, set it in the plugin manifest.

549</Warning>

550 

551#### Set up release channels

552 

553To support "stable" and "latest" release channels for your plugins, you can set up two marketplaces that point to different refs or SHAs of the same repo. You can then assign the two marketplaces to different user groups through [managed settings](/en/settings#settings-files).

554 

555<Warning>

556 The plugin's `plugin.json` must declare a different `version` at each pinned ref or commit. If two refs or commits have the same manifest version, Claude Code treats them as identical and skips the update.

557</Warning>

558 

559##### Example

560 

561```json theme={null}

562{

563 "name": "stable-tools",

564 "plugins": [

565 {

566 "name": "code-formatter",

567 "source": {

568 "source": "github",

569 "repo": "acme-corp/code-formatter",

570 "ref": "stable"

571 }

572 }

573 ]

574}

575```

576 

577```json theme={null}

578{

579 "name": "latest-tools",

580 "plugins": [

581 {

582 "name": "code-formatter",

583 "source": {

584 "source": "github",

585 "repo": "acme-corp/code-formatter",

586 "ref": "latest"

587 }

588 }

589 ]

590}

591```

592 

593##### Assign channels to user groups

594 

595Assign each marketplace to the appropriate user group through managed settings. For example, the stable group receives:

596 

597```json theme={null}

598{

599 "extraKnownMarketplaces": {

600 "stable-tools": {

601 "source": {

602 "source": "github",

603 "repo": "acme-corp/stable-tools"

604 }

605 }

606 }

607}

608```

609 

610The early-access group receives `latest-tools` instead:

611 

612```json theme={null}

613{

614 "extraKnownMarketplaces": {

615 "latest-tools": {

616 "source": {

617 "source": "github",

618 "repo": "acme-corp/latest-tools"

619 }

620 }

621 }

622}

623```

624 

508## Validation and testing625## Validation and testing

509 626 

510Test your marketplace before sharing.627Test your marketplace before sharing.

Details

12 12 

13This reference provides complete technical specifications for the Claude Code plugin system, including component schemas, CLI commands, and development tools.13This reference provides complete technical specifications for the Claude Code plugin system, including component schemas, CLI commands, and development tools.

14 14 

15## Plugin components reference15A **plugin** is a self-contained directory of components that extends Claude Code with custom functionality. Plugin components include skills, agents, hooks, MCP servers, and LSP servers.

16 16 

17This section documents the types of components that plugins can provide.17## Plugin components reference

18 18 

19### Skills19### Skills

20 20 


378 378 

379## Plugin caching and file resolution379## Plugin caching and file resolution

380 380 

381For security and verification purposes, Claude Code copies plugins to a cache directory rather than using them in-place. Understanding this behavior is important when developing plugins that reference external files.

382 

383### How plugin caching works

384 

385Plugins are specified in one of two ways:381Plugins are specified in one of two ways:

386 382 

387* Through `claude --plugin-dir`, for the duration of a session.383* Through `claude --plugin-dir`, for the duration of a session.

388* Through a marketplace, installed to the local plugin cache.384* Through a marketplace, installed for future sessions.

389 

390When you install a plugin, Claude Code locates its marketplace and the plugin's `source` field within that marketplace.

391 

392The source can be one of five types:

393 385 

394* Relative path: copied recursively to the plugin cache. For example, if your marketplace entry specifies `"source": "./plugins/my-plugin"`, the entire `./plugins/my-plugin` directory is copied.386For security and verification purposes, Claude Code copies *marketplace* plugins to the user's local **plugin cache** (`~/.claude/plugins/cache`) rather than using them in-place. Understanding this behavior is important when developing plugins that reference external files.

395* npm - copied to the plugin cache from npm

396* pip - copied to the plugin cache from pip

397* url - any https\:// URL ending in .git

398* github - any owner/repo shorthand

399 387 

400### Path traversal limitations388### Path traversal limitations

401 389 

402Plugins cannot reference files outside their copied directory structure. Paths that traverse outside the plugin root (such as `../shared-utils`) will not work after installation because those external files are not copied to the cache.390Installed plugins cannot reference files outside their directory. Paths that traverse outside the plugin root (such as `../shared-utils`) will not work after installation because those external files are not copied to the cache.

403 391 

404### Working with external dependencies392### Working with external dependencies

405 393 

406If your plugin needs to access files outside its directory, you have two options:394If your plugin needs to access files outside its directory, you can create symbolic links to external files within your plugin directory. Symlinks are honored during the copy process:

407 

408**Option 1: Use symlinks**

409 

410Create symbolic links to external files within your plugin directory. Symlinks are honored during the copy process:

411 395 

412```bash theme={null}396```bash theme={null}

413# Inside your plugin directory397# Inside your plugin directory

414ln -s /path/to/shared-utils ./shared-utils398ln -s /path/to/shared-utils ./shared-utils

415```399```

416 400 

417The symlinked content will be copied into the plugin cache.401The symlinked content will be copied into the plugin cache. This provides flexibility while maintaining the security benefits of the caching system.

418 

419**Option 2: Restructure your marketplace**

420 

421Set the plugin path to a parent directory that contains all required files, then provide the rest of the plugin manifest directly in the marketplace entry:

422 

423```json theme={null}

424{

425 "name": "my-plugin",

426 "source": "./",

427 "description": "Plugin that needs root-level access",

428 "commands": ["./plugins/my-plugin/commands/"],

429 "agents": ["./plugins/my-plugin/agents/"],

430 "strict": false

431}

432```

433 

434This approach copies the entire marketplace root, giving your plugin access to sibling directories.

435 

436<Note>

437 Symlinks that point to locations outside the plugin's logical root are followed during copying. This provides flexibility while maintaining the security benefits of the caching system.

438</Note>

439 402 

440***403***

441 404 


730* Document changes in a `CHANGELOG.md` file693* Document changes in a `CHANGELOG.md` file

731* Use pre-release versions like `2.0.0-beta.1` for testing694* Use pre-release versions like `2.0.0-beta.1` for testing

732 695 

696<Warning>

697 Claude Code uses the version to determine whether to update your plugin. If you change your plugin's code but don't bump the version in `plugin.json`, your plugin's existing users won't see your changes due to caching.

698 

699 If your plugin is within a [marketplace](/en/plugin-marketplaces) directory, you can manage the version through `marketplace.json` instead and omit the `version` field from `plugin.json`.

700</Warning>

701 

733***702***

734 703 

735## See also704## See also

settings.md +2 −2

Details

152| `disableAllHooks` | Disable all [hooks](/en/hooks) and any custom [status line](/en/statusline) | `true` |152| `disableAllHooks` | Disable all [hooks](/en/hooks) and any custom [status line](/en/statusline) | `true` |

153| `allowManagedHooksOnly` | (Managed settings only) Prevent loading of user, project, and plugin hooks. Only allows managed hooks and SDK hooks. See [Hook configuration](#hook-configuration) | `true` |153| `allowManagedHooksOnly` | (Managed settings only) Prevent loading of user, project, and plugin hooks. Only allows managed hooks and SDK hooks. See [Hook configuration](#hook-configuration) | `true` |

154| `allowManagedPermissionRulesOnly` | (Managed settings only) Prevent user and project settings from defining `allow`, `ask`, or `deny` permission rules. Only rules in managed settings apply. See [Managed-only settings](/en/permissions#managed-only-settings) | `true` |154| `allowManagedPermissionRulesOnly` | (Managed settings only) Prevent user and project settings from defining `allow`, `ask`, or `deny` permission rules. Only rules in managed settings apply. See [Managed-only settings](/en/permissions#managed-only-settings) | `true` |

155| `model` | Override the default model to use for Claude Code | `"claude-sonnet-4-5-20250929"` |155| `model` | Override the default model to use for Claude Code | `"claude-sonnet-4-6"` |

156| `availableModels` | Restrict which models users can select via `/model`, `--model`, Config tool, or `ANTHROPIC_MODEL`. Does not affect the Default option. See [Restrict model selection](/en/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |156| `availableModels` | Restrict which models users can select via `/model`, `--model`, Config tool, or `ANTHROPIC_MODEL`. Does not affect the Default option. See [Restrict model selection](/en/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |

157| `otelHeadersHelper` | Script to generate dynamic OpenTelemetry headers. Runs at startup and periodically (see [Dynamic headers](/en/monitoring-usage#dynamic-headers)) | `/bin/generate_otel_headers.sh` |157| `otelHeadersHelper` | Script to generate dynamic OpenTelemetry headers. Runs at startup and periodically (see [Dynamic headers](/en/monitoring-usage#dynamic-headers)) | `/bin/generate_otel_headers.sh` |

158| `statusLine` | Configure a custom status line to display context. See [`statusLine` documentation](/en/statusline) | `{"type": "command", "command": "~/.claude/statusline.sh"}` |158| `statusLine` | Configure a custom status line to display context. See [`statusLine` documentation](/en/statusline) | `{"type": "command", "command": "~/.claude/statusline.sh"}` |


275```275```

276🤖 Generated with [Claude Code](https://claude.com/claude-code)276🤖 Generated with [Claude Code](https://claude.com/claude-code)

277 277 

278 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>278 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

279```279```

280 280 

281**Default pull request attribution:**281**Default pull request attribution:**