深色模式
审批队列
AI 触发的工具调用,如果服务器策略是 Approval 或 Allowlist 未命中,会进入审批队列等你决策。5 分钟超时自动拒。
在哪审批
审批不是一个侧栏页面,它会主动来找你——因为等你想起来去看的时候,早超时自动拒了。
| 通道 | 何时出现 |
|---|---|
| 独立置顶弹窗 | 危险审批一律弹;普通审批在主窗口不可见时弹。独立于主窗口,你在别的软件里也看得到 |
| AI 桥接页就地审批 | 你正在对话页时,直接在对话流里决策 |
| 应用内通知 | 主窗口开着但你停在别的页面时弹,带「去审批 →」一键跳转 |
| 系统托盘 | 红点 + 主窗口不在前台时的系统通知 |
曾经的盲区已补上
早期版本有个三不管地带:主窗口开着、人却停在审计或服务器页——独立弹窗不弹(窗口可见)、系统通知不发(在前台)、对话页 UI 看不见。审批就那么静默超时被拒。现在这种情况会弹应用内通知,固定位置不堆叠、不自动消失,直到你处理。
列表
每条待审批:
| 字段 | 说明 |
|---|---|
| 触发时间 | |
| 工具 | ssh_exec / sftp_write / db_execute 等 |
| 服务器 | 别名 |
| 来源 | 哪个 MCP Token(Claude Code / Codex / 内置对话) |
| 命令摘要 | 前 200 字符(含语法高亮) |
| 完整参数 | 展开查看 JSON |
| 剩余时间 | 距 5 分钟超时还有多久 |
决策
每条三个按钮:
| 按钮 | 行为 |
|---|---|
| 放行 | 工具继续执行,写审计 approved |
| 拒绝 | 工具立即返回错误,写审计 denied |
| 跳过 | 仅在批量待审场景,先看下一条 |
批量决策
列表多选 + 顶部按钮:
- 全部放行
- 全部拒绝
- 选中 N 条放行
适合"AI 把同一动作分了 10 步问"。
超时
每条审批 5 分钟超时:
- 倒计时实时显示
- 到时自动拒绝 + 写审计
denied_by_timeout - AI 收到错误
防止僵尸队列堆积。
全局开关
如果想临时关掉所有 AI 访问:
AI 策略 页 → 总开关 → 设个 armed_until 时间戳(例如「禁用 30 分钟」)。
- 期间所有 AI 工具调用直接拒绝
- 时间到自动恢复
- 也可手动重新启用
决策上下文
审批弹窗里可以看到:
- 命令完整文本(含潜在危险高亮,长命令自动换行不横向截断)
- 触发 Approval 的具体原因(档位 / 白名单未命中 / 含 sudo 强制 / 陌生出站地址 / 溯源命中)
- 该服务器最近的审计行(提供上下文)
- AI 本次对话最近 5 条消息(如果是 Reeve 内置对话)
陌生出站地址高亮
命令里不在出站白名单的地址会被逐个染红 + 波浪下划线,下方再单独列一遍全部违规端点(不只是原因里提到的那一个)。一眼看出「它到底要去连哪儿」。
批准并加白名单
弹窗底部多一个按钮:批准这次的同时,把这些地址永久加进白名单,省得同一个自建源每次都来问。
| 保障 | 说明 |
|---|---|
| 二次确认 | 列清楚要永久加哪几个地址,并提示随时可在设置里移除 |
| 失败不放行 | 写白名单失败就不批准——不会出现「加白没成功但命令已经跑了」 |
| 危险审批不显示 | 黑名单命中的拦截与地址无关,摆这个按钮只会误导 |
AI 解释
看不懂这条命令要干什么?点 AI 解释,用你自己配的 API Profile 把命令翻译成人话。
只解释,不裁决
系统提示里写死了**禁止模型输出「可以批准 / 建议拒绝」**这类结论。它只负责讲清命令在做什么,批不批是你的判断——否则就成了「让 AI 审批 AI」。
- 手动触发,不自动跑(不会每条审批都偷偷发一次请求)
- 首次点击弹隐私知情同意:明确写出将发送命令原文、服务器别名、工具名、拦截原因;同意后只问这一次
- 没配 API Profile 时按钮禁用,显示「AI 解释(未配置模型)」并提示去哪配
危险命令永远不进队列
危险黑名单命中的命令直接 blocked,不进审批队列:
- 黑名单 ≥ 审批,比谁都严
- 即使你想放行也办不到(必须先把黑名单删掉)
含 sudo 的命令反过来:必进审批,无视档位是不是 trusted。
通知(事件化即时刷新)
审批队列的变化通过事件实时推送(approval:queued / approval:resolved),不用刷新页面:
- AI 助手对话页同步刷新就地审批区
- 系统托盘红点 + 主窗口不在前台时弹系统通知
- 主窗口开着但人在别的页面时,弹应用内通知(带「去审批 →」跳转)
- 裁决完通知自动消失,不会「已经处理完气泡还杵着」
审批者标识
每条决策写入 approved_by / denied_by 字段:
- 当前版本:本机操作系统用户名
- 多用户场景(未来):可对接 LDAP / OIDC
与策略联动
不同档位下审批队列的角色:
| 档位 | 审批触发 |
|---|---|
| Disabled | 永不触发(直接拒) |
| Readonly | 永不触发(直接拒改动工具) |
| Approval | 永远触发 |
| Allowlist | 仅命中 allowlist 时 auto,否则触发 |
| Trusted | 通常不触发,但含 sudo 必触发 |
详见 AI 五档策略。
故障排查
| 症状 | 排查 |
|---|---|
| 审批没弹出 | 服务器档位可能是 trusted;检查 策略。另:普通审批在主窗口可见时不弹独立窗,改走应用内通知 |
| 我点放行了 AI 还报错 | AI 客户端的 timeout 可能比 5 分钟短 |
| 队列堆积 | 全局开关 / 主密码锁定时不能审批,先解锁 |
| 跳过按钮不见 | 仅在 ≥ 2 条待审时显示 |