﻿---
title: "自动批批准用 PermissionRequest，不要拿 PreToolUse 的 ask"
summary: "只在即将弹批准时跑。deny 优先。updatedInput 会 fail closed。不需要批准的命令根本不进这个事件。"
category: hooks
level: advanced
surfaces: [cli]
tags: ["hooks", "PermissionRequest", "批准"]
canonical: /tips/permission-request-hook/
---

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

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

`PermissionRequest` 在 shell 提权、受管网络批准这类「马上要问你」之前跑。不需要批准的调用不会进这个钩子。matcher 对 `tool_name`：`Bash`、`apply_patch`（也匹配 Edit/Write）、MCP 名如 `mcp__server__tool`。

放行：

```json
{
  "hookSpecificOutput": {
    "hookEventName": "PermissionRequest",
    "decision": { "behavior": "allow" }
  }
}
```

拒绝：

```json
{
  "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` 会解析但还不支持，钩子记失败，工具调用照样继续。

## 来源

- [OpenAI · Hooks](https://learn.chatgpt.com/docs/hooks)
