1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "bash -c 'FILE=$(echo \"$TOOL_INPUT\" | jq -r .file_path 2>/dev/null); [[ \"$FILE\" == *.py ]] && uv run ruff check --fix \"$FILE\" && uv run ruff format \"$FILE\" || true'",
"timeout": 15
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "bash -c 'cd \"$CLAUDE_PROJECT_DIR\" && git diff --name-only --diff-filter=AM 2>/dev/null | grep \"\\.py$\" | head -20 | xargs -r uv run mypy --no-error-summary 2>&1 || true'",
"timeout": 120
}
]
}
]
},
"enabledPlugins": {
"code-review@claude-code-plugins": true
}
}