Defined in hooks/hooks.json
{
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -S ${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse_safety.py",
"timeout": 10
}
],
"matcher": "Bash(git:*)"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -S ${CLAUDE_PLUGIN_ROOT}/hooks/posttooluse_validate.py",
"timeout": 10
},
{
"type": "prompt",
"prompt": "Review the commit that was just created. Run: git log -1 --format='%B' && git diff --stat HEAD~1..HEAD\n\nEvaluate the commit against Conventional Commits standards:\n\n1. **Subject line**: Is it imperative mood? Specific about WHAT changed? 50-72 chars?\n\n2. **Body (if present)**: Does it explain WHY, not just repeat WHAT the code shows?\n\n3. **Scope**: Is this ONE logical change? Are tests included with their feature/fix?\n\n4. **Separation**: Is refactoring mixed with features/fixes? (violation)\n\nIf ANY issue found, output 'ISSUE: [description]' and suggest amending.\n\nIf the commit is good, output 'VALIDATED: Commit follows Conventional Commits standards.'"
}
],
"matcher": "Bash(git commit:*)"
}
],
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python3 -S ${CLAUDE_PLUGIN_ROOT}/hooks/session_start.py",
"timeout": 5
}
]
}
]
}{
"riskFlags": {
"touchesBash": true,
"matchAllTools": false,
"touchesFileWrites": false
},
"typeStats": {
"prompt": 1,
"command": 3
},
"eventStats": {
"PreToolUse": 1,
"PostToolUse": 2,
"SessionStart": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 3,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 0
}
}