What
Hooks and commands shipped by a plugin can now point at files inside the plugin itself, using $CLAUDE_PLUGIN_ROOT or ${CLAUDE_PLUGIN_ROOT} at the start of the path.
Details
- The path validator accepts this prefix alongside the two it already allowed,
$HOMEand$CLAUDE_PROJECT_DIR. - Applies unconditionally, with no setting to turn it on.
Evidence
$CLAUDE_PLUGIN_ROOT
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
Names in the bundle$CLAUDE_PLUGIN_ROOT${CLAUDE_PLUGIN_ROOT}
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Added since
A small documentation edit on Hooks reference touched a line naming ${CLAUDE_PLUGIN_ROOT} after this was published.
* `${CLAUDE_PLUGIN_ROOT}`: the plugin's installation directory, for scripts bundled with a [plugin](/docs/en/plugins). See [plugin environment variables](/docs/en/plugins-reference#environment-variables) for how the path behaves across upd…hooks see the edit
Confirmed since
Anthropic's documentation has since written up ${CLAUDE_PLUGIN_ROOT}, on MCP, plugins, skills, and hooks.
| `.mcp.json` | MCP servers bundled with this plugin. A JSON object keyed by server name: `{"mcpServers": {"<name>": {"type": "http", "url": "...", "oauth": true}}}`. A remote entry uses `type` (`http` or `sse`), not `transport`, and suppo…third-party/claude-desktop/extensions see the edit
Two sources agreeTwo things we can check say the same as this entry.
Anthropic's documentation agrees
Anthropic's documentation has since written up ${CLAUDE_PLUGIN_ROOT}, on MCP, plugins, skills, and hooks.
Anthropic's release notes agree
Fixed hook error messages showing a literal ${CLAUDE_PLUGIN_ROOT} instead of the resolved plugin path