QuickRouter · 人工操作教材 · 非目标产品 UI / 非模型会话日志

Claude Code hooks 使用 · 配置与操作材料

.claude/settings.json

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect.py"
          }
        ]
      }
    ]
  }
}

.claude/hooks/protect.py

import json, os, sys
from pathlib import Path
x = json.load(sys.stdin)
if x.get('tool_name') not in {'Edit', 'Write'}:
    sys.exit(0)
root = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.')).resolve()
path = Path(x['tool_input']['file_path'])
path = (root / path).resolve() if not path.is_absolute() else path.resolve()
try:
    relative = path.relative_to(root)
except ValueError:
    print('This fixture only permits paths inside its project', file=sys.stderr)
    sys.exit(2)
if relative.name in {'.env', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'}:
    print('Blocked protected fixture: ' + str(relative), file=sys.stderr)
    sys.exit(2)