用途:为 Claude Code 生成 PermissionRequest 钩子脚本,实现权限的自动批准、自动拒绝与透传。它可替代 --dangerouslySkipPermissions,用针对性规则而非全局跳过权限。
主要能力:检测项目技术栈(Node.js、Python、Rust、Go、Ruby 及对应锁文件)后生成脚本;按类别生效,支持 git、test、lint、build、gh、deny。批准范围含 Read/Glob/Grep 及各类只读命令(如 git status、git diff、npm test、cargo test、npx biome check、npm run build、gh pr view);拒绝范围含 rm -rf / 或 ~、git push --force main、chmod 777、curl | bash、fork 炸弹、dd 写块设备、mkfs、git clean -fdx、DROP DATABASE 等;其余输出为空时透传,由用户正常确认。
使用方式:调用 /hooks:permission-request-hook,可加 --strict(默认拒绝未识别 Bash 命令)或 --category <name>(可重复)。脚本位于 scripts/permission-request.sh 或 .claude/hooks/permission-request.sh,测试脚本为 scripts/test-permission-hook.sh;用 chmod +x 赋可执行权限,并在 .claude/settings.json 合并 PermissionRequest 配置(matcher 为空、timeout 10 秒)。手动测试示例:echo '{"tool_name":"Bash","tool_input":{"command":"git status"}}' | bash scripts/permission-request.sh。可用环境变量 CLAUDE_HOOKS_DISABLE_PERMISSION_REQUEST=1 临时关闭。
输入字段含 session_id、tool_name、tool_input、permission_type、description;输出为 approve、deny 或空输出的 passthrough。钩子需 jq。限制:规则为脚本内正则匹配,可能误判或漏判;未使用 --strict 时未知命令仍会询问用户;空 matcher 匹配所有工具,可改为 Bash 仅过滤 Bash;其余平台支持与版本细节暂未提供。