Plugin hooks registered but not matched in VSCode extension
Description
Plugin hooks are loaded and registered but not included in the hook matching logic when running Claude Code via the VSCode extension.
Environment
- Claude Code version: VSCode extension
- OS: macOS (Darwin 25.1.0)
Steps to Reproduce
- Create a plugin with hooks in
hooks/hooks.json:
{
"description": "Automatic code formatting",
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "uv run python ${CLAUDE_PLUGIN_ROOT}/scripts/post_tool_use.py",
"timeout": 30
}
]
}
]
}
}
- Enable the plugin in
~/.claude/settings.json:
{
"enabledPlugins": {
"python-developer@carefull-marketplace": true
}
}
- Use Claude Code in VSCode extension
- Perform an Edit operation on a Python file
Expected Behavior
The plugin's PostToolUse hook should execute after Edit operations.
Actual Behavior
The hook does not execute. Debug logs show:
[DEBUG] Loading hooks from plugin: python-developer
[DEBUG] Registered 2 hooks from 1 plugins
...
[DEBUG] Getting matching hook commands for PostToolUse with query: Edit
[DEBUG] Found 0 hook matchers in settings
[DEBUG] Matched 0 unique hooks for query "Edit" (0 before deduplication)
The hooks are loaded and registered (Registered 2 hooks from 1 plugins), but when matching occurs, only "settings" hooks are checked (Found 0 hook matchers in settings), not the registered plugin hooks.
Analysis
The matching code path appears to only check user/project hooks from settings, not the plugin hooks that were registered during initialization. The plugin hooks should be merged with settings hooks for matching.
🤖 Generated with Claude Code
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗