{ "hooks": { "SessionStart": [ { "matcher": "startup", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/session_start.py", "timeout": 30 } ] }, { "matcher": "resume", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/context_recovery_helper.py", "timeout": 30 } ] }, { "matcher": "clear", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/pre_session_hook.py", "timeout": 30 } ] }, { "matcher": "compact", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/session_start.py", "timeout": 30 } ] } ], "SessionEnd": [ { "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/post_session_hook.py", "timeout": 30 } ] } ], "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/detect_session_finish.py", "timeout": 10 } ] } ], "PreCompact": [ { "matcher": "auto", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/auto_compact.py", "timeout": 360 } ] }, { "matcher": "manual", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/auto_compact.py", "timeout": 360 } ] } ], "PreToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/token_manager.py check", "timeout": 10 } ] }, { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/command_restrictor.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/pattern_enforcer.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/no_mock_code.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/secret_scanner.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/timestamp_validator.py", "timeout": 10 } ] }, { "matcher": "Update", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/no_mock_code.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/secret_scanner.py", "timeout": 10 } ] }, { "matcher": "Bash", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/command_restrictor.py", "timeout": 10 }, { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/validate_git_commit.py", "timeout": 10 } ] }, { "matcher": "WebFetch|WebSearch", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/command_restrictor.py", "timeout": 10 } ] } ], "PostToolUse": [ { "matcher": "Bash|Read|Write|Edit|Grep|Glob|Task|TodoWrite|AskUserQuestion|mcp__.*", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/token_manager.py extract", "timeout": 180 } ] }, { "matcher": ".*", "hooks": [ { "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hook_scripts/post_tool_use_compact_progress.py", "timeout": 5 } ] } ] } }