自动批批准用 PermissionRequest,不要拿 PreToolUse 的 ask
只在即将弹批准时跑。deny 优先。updatedInput 会 fail closed。不需要批准的命令根本不进这个事件。
PermissionRequest 在 shell 提权、受管网络批准这类「马上要问你」之前跑。不需要批准的调用不会进这个钩子。matcher 对 tool_name:Bash、apply_patch(也匹配 Edit/Write)、MCP 名如 mcp__server__tool。
放行:
{
"hookSpecificOutput": {
"hookEventName": "PermissionRequest",
"decision": { "behavior": "allow" }
}
}
拒绝:
{
"hookSpecificOutput": {
"hookEventName": "PermissionRequest",
"decision": { "behavior": "deny", "message": "Blocked by repository policy." }
}
}
多个钩子里任意 deny 赢。都没决定就走正常批准弹窗。stdout 纯文本会被忽略。
不要在这里返回 updatedInput、updatedPermissions、interrupt:目前保留字段,会 fail closed。改命令内容用 PreToolUse 的 permissionDecision: "allow" 加 updatedInput。PreToolUse 的 permissionDecision: "ask"、旧 decision: "approve"、continue: false 会解析但还不支持,钩子记失败,工具调用照样继续。