Follow Discord
Sweep 03 Oct 2026 · 20:28Z Build v2.1.289 510 read Stable v2.1.285 Latest v2.1.288 Next v2.1.289 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · claude-code

Plugin manifest reference changedplugins/manifest-reference

Nearest release: v2.1.287, published 10 hours before upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Upstream edited this page at 2 Oct 2026 03:05 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 2 Oct 2026 03:07 UTC.

Upstream edited
Recorded here
Lines+22added
Lines−1removed
From line 255 where the diff opens
First seen 25 Sep 2026 this site's first read of the page
Recorded edits9to this page, all time

The whole hunk

from line 255, old and new numbered
/
lines
from line 255
255255 
256256`hooks` takes a `.json` file path, an inline hooks object in the same shape as [`hooks` in `settings.json`](/docs/en/hooks#configuration), or an array mixing both. For hook events and handler fields, see the [hooks reference](/docs/en/hooks#hook-events).
257257 
258Claude Code merges whatever you declare with `hooks/hooks.json` when that file exists.
258A hooks file wraps the event map in a top-level `"hooks"` key, the shape [`hooks/hooks.json`](/docs/en/plugins/components#hooks) uses. A file that contains only the event map, without that wrapper, fails to load. An inline object is the event map itself, with no wrapper.
259259 
260Claude Code merges whatever you declare with `hooks/hooks.json` when that file exists. This array loads one hooks file and declares one inline `PostToolUse` hook:
261 
260262```json theme={null}
261263{
262264 "hooks": [
from line 277
275277}
276278```
277279 
280The file that array names carries the `"hooks"` wrapper around its own event map:
281 
282```json config/extra-hooks.json theme={null}
283{
284 "hooks": {
285 "PreToolUse": [
286 {
287 "matcher": "Bash",
288 "hooks": [
289 { "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/check-command.sh" }
290 ]
291 }
292 ]
293 }
294}
295```
296 
278297### `mcpServers`
279298 
280299`mcpServers` takes a `.json` file path, an MCP bundle path or URL, an inline map, or an array mixing them. For server config fields, see [plugin-provided MCP servers](/docs/en/mcp#plugin-provided-mcp-servers).
from line 389
370389 
371390* **`skills`**: also accepts `"."`. Both `"."` and `"./"` denote the plugin root. Before v2.1.221, `"."` failed manifest validation, so use `"./"` when the plugin must load on earlier versions
372391* **`mcpServers`**: also accepts an `https://` bundle URL
392 
393`experimental.evals` isn't a component path, so the rules in this section don't cover it, and `claude plugin eval` checks the value when it runs instead. It names a directory below the plugin root, such as `"quality/evals"`, with or without the `./` prefix. With an array, only the first entry is used. For what the value accepts and what happens with an unusable one, see [Use a different eval directory](/docs/en/plugin-evals#use-a-different-eval-directory).
373394 
374395### Containment and existence
375396 
Feedback