自动批批准用 PermissionRequest,不要拿 PreToolUse 的 ask

只在即将弹批准时跑。deny 优先。updatedInput 会 fail closed。不需要批准的命令根本不进这个事件。

PermissionRequest 在 shell 提权、受管网络批准这类「马上要问你」之前跑。不需要批准的调用不会进这个钩子。matcher 对 tool_nameBashapply_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 纯文本会被忽略。

不要在这里返回 updatedInputupdatedPermissionsinterrupt:目前保留字段,会 fail closed。改命令内容用 PreToolUsepermissionDecision: "allow"updatedInputPreToolUsepermissionDecision: "ask"、旧 decision: "approve"continue: false 会解析但还不支持,钩子记失败,工具调用照样继续。

来源