Defined in hooks/hooks.json
{
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/context_preserver.py",
"timeout": 2000,
"description": "Automatically preserve working context to scratch_pad.md"
},
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/compact_start.js",
"timeout": 1000,
"description": "Track context compaction for measuring context preservation"
}
],
"matcher": "*"
}
],
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/pre_tool_use_state_sync.py",
"timeout": 1000,
"description": "State sync - check if files changed externally before Edit/Write (~300 tokens only when needed)"
},
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/pre_tool_use_git_advisor.py",
"timeout": 1000,
"description": "Git workflow advisor - suggests scripts for multi-tool workflows (93-97% token reduction)"
},
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/tool_router.py",
"timeout": 2000,
"description": "Intelligent tool routing for cost optimization"
}
],
"matcher": "*"
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/session_end_recorder.py",
"timeout": 2000,
"description": "Record session metadata for next session's git context (~100 tokens write only)"
},
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/session_end_extractor.py",
"timeout": 5000,
"description": "Extract completed work to .plans/ and decisions.yaml (zero conversation overhead)"
}
],
"matcher": "*"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/tool_cost_tracker.py",
"timeout": 2000,
"description": "Track tool costs and optimization opportunities"
}
],
"matcher": "*"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/session_start_git_context.js",
"timeout": 2000,
"description": "Git-powered context injection - differential updates since last session (~1-2K tokens)"
},
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/context_restorer.js",
"timeout": 2000,
"description": "Restore working context from scratch_pad.md (DRY context transfer)"
},
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/session_start.js",
"timeout": 1000,
"description": "Display Contextune commands (zero context overhead)"
},
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/version_checker.js",
"timeout": 3000,
"description": "Check for plugin updates (once per day)"
}
],
"matcher": "*"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/context_injector.js",
"timeout": 1000,
"description": "Inject current context for grounded research"
},
{
"type": "command",
"command": "uv run ${CLAUDE_PLUGIN_ROOT}/hooks/user_prompt_submit.py",
"timeout": 5000,
"description": "SlashSense intent detection"
}
],
"matcher": "*"
}
]
}{
"riskFlags": {
"touchesBash": false,
"matchAllTools": true,
"touchesFileWrites": false
},
"typeStats": {
"command": 14
},
"eventStats": {
"PreCompact": 2,
"PreToolUse": 3,
"SessionEnd": 2,
"PostToolUse": 1,
"SessionStart": 4,
"UserPromptSubmit": 2
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 14,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 0
}
}