Describe the bug
preToolUse hooks defined in a plugin's hooks.json file are never executed. The hooks don't fire in the main agent session or in subagents spawned via the task tool.
This is distinct from #2392, which reports that config.json-defined hooks work in the main session but not subagents. In our case, plugin-sourced hooks don't fire anywhere.
Affected version
1.0.18 (macOS)
Steps to reproduce the behavior
- Install a local plugin that defines a
preToolUse hook in hooks.json:
{
"version": 1,
"hooks": {
"preToolUse": [
{
"type": "command",
"bash": "./scripts/guardrails.sh",
"cwd": ".",
"timeoutSec": 10
}
]
}
}
- The plugin's
plugin.json references it with "hooks": "hooks.json"
- The guardrails script outputs
{"permissionDecision": "deny", ...} for matching commands (verified by running the script manually with piped JSON input)
- Start a session in a project that has this plugin installed
- Run a bash command that should be blocked (e.g., one containing
ghe-config-apply)
- Result: Command executes without any hook intervention
- Manually running the same script with the same input correctly returns a deny decision
Expected behavior
Plugin-defined preToolUse hooks should be loaded and executed for all tool calls, the same way config.json-defined hooks are.
Additional context
Describe the bug
preToolUse hooks defined in a plugin's
hooks.jsonfile are never executed. The hooks don't fire in the main agent session or in subagents spawned via thetasktool.This is distinct from #2392, which reports that config.json-defined hooks work in the main session but not subagents. In our case, plugin-sourced hooks don't fire anywhere.
Affected version
1.0.18 (macOS)
Steps to reproduce the behavior
preToolUsehook inhooks.json:{ "version": 1, "hooks": { "preToolUse": [ { "type": "command", "bash": "./scripts/guardrails.sh", "cwd": ".", "timeoutSec": 10 } ] } }plugin.jsonreferences it with"hooks": "hooks.json"{"permissionDecision": "deny", ...}for matching commands (verified by running the script manually with piped JSON input)ghe-config-apply)Expected behavior
Plugin-defined preToolUse hooks should be loaded and executed for all tool calls, the same way config.json-defined hooks are.
Additional context
source.pathin config.jsoninstalled_plugins)