每个调用都问人,人会怎样?
本课一问:规则覆盖不到的调用,各家的兜底都是「停下来问人」。如果每个没把握的调用都问,人会怎样?
这一课先不碰:让另一个模型来审批时它该有多大权限(第 4 课)、沙箱怎么把弹窗变少(A4)。
从已有出发
上一课:规则替人做掉了一部分决定。剩下的调用——没有任何规则命中——落到兜底。Claude Code 的 Manual 模式、CoreCoder 的交互模式、lcc s03 的第三道闸,兜底都是「问人」。
还是贯穿任务。修 test_parse_date 这类任务,一次运行里模型要读文件、改文件、跑测试。读文件是只读的,各家都不问;改文件和跑测试会改变状态,默认都要问。下面把我们 26 次真实运行(Qwen/Qwen3-8B-MLX-4bit,本机录制)的每一次工具调用,放进不同的权限模式里重算。
先自己设计:规则没覆盖的,一律问人
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
组件加载中……(需要 JavaScript;所有裁决都在你的浏览器里由移植的原算法现算)
问人的前提是人真的在看。Anthropic 的两篇工程文章给出了同一个自报数字:用户批准了约 93% 的弹窗;并直说审批看得越多,每一次的注意力就越少 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条Anthropic 遥测,官方自报;auto mode 一文(2026-03-25)给出相同的 93%。没有公开样本量与定义细节。 出处How we contain Claude(2026-05-25) ↗需联网 。
改进的思路是只把真正需要判断的调用留给判断者:
- 只读直放:读文件、搜索、
ls/git status这类内置只读命令,各家都不问。 - 项目内编辑免审:Claude Code 的 acceptEdits 模式自动放行工作目录内的编辑;在上面组件里切到 acceptEdits,弹窗只剩跑测试的那 37 次。
- 剩下的交给别人:要么交给 OS 沙箱兜底(A4;Anthropic 自报沙箱让弹窗减少 84%),要么交给另一个模型审(auto 模式;第 4 课)。
试三件事:① 默认是 Claude Code Manual:读出「弹窗问人」的次数和百分比;② 依次点 acceptEdits、auto:弹窗从 74 次降到 37 次,再降到 0——auto 下跑测试的 37 次变成紫色「送分类器」,本页不模拟分类器怎么判;③ 勾选「每次都选以后别问」,再看 Manual:第一次批准之后同类调用不再问,弹窗变少了,但被跳过审查的调用也变多了。
组件里还放了另外几家的兜底,可以逐个对照:OpenCode 开箱即用的内置默认规则第一条就是 *: allow,所以几乎不问;CoreCoder 用 -p 一次性运行时没人可问,改变状态的调用直接拒绝;Pi 核心根本没有权限层。点任意一格,能看到这次调用在录制时 miniagent 的真实裁决。
改进:按风险分层,而不是一律问
模式:Claude Code 的六档
Claude Code 用 permission mode 设定「什么不用问」的基线,规则叠在上面(deny 规则在任何模式下都生效) 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方文档(2026-09-26 抓取);六种模式由深度调研报告 §8 三方核查满票确认,本轮复核未变。 出处Claude Code 文档 · Choose a permission mode ↗需联网 :
| 模式 | 不问就执行的 | 适合 |
|---|---|---|
default(界面上叫 Manual) | 只有读取 | 每一步都自己审 |
acceptEdits | 读取、工作目录内的编辑、mkdir / touch / mv / cp 等文件系统命令 | 编辑后用 git diff 事后审 |
plan | 读取;auto 可用时还有分类器批准的命令 | 先探索、再动手 |
auto | 全部,但有后台的分类器检查 | 长任务、减少弹窗 |
dontAsk | 读取与预先批准的工具;本该弹窗的一律拒绝 | CI 与脚本 |
bypassPermissions | 全部 | 只在隔离的容器或虚拟机里 |
一个值得记下的变化:v2.1.283 起,交互式终端与 VS Code 会话的内置起始模式是 auto;claude -p 与 Agent SDK 仍是 default。产品默认从「人审」迁到了「分类器审」 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方文档原文;v2.1.228 起先在 Pro / Max / Team 生效(D 报告 §3.1 据 CHANGELOG 与 npm 发布时间核对)。 出处Claude Code 文档 · Which mode a session starts in ↗需联网 。
模型审批:auto 的三层与两段式分类器
auto 模式把一次调用按三层处理:明确命中规则的立即定案;只读动作和工作目录内的编辑直接放行(写受保护路径除外);其余一切交给一个分类器模型在执行前判断。上面组件里被标成紫色的,就是走到第三层的调用。
分类器本身又分两段。官方公开了每一段的误差,逐项点开:
常见误解:「弹窗越多越安全。」
弹窗只有在被认真看的时候才是安全措施。批准率约 93% 意味着大部分弹窗被直接点了「是」;而每一次打断还会让人更快地点「是」。把低风险的调用从弹窗里拿掉,剩下的弹窗才有人看。官方对 auto 的定位也很克制:它减少弹窗,但「does not guarantee safety」。
其他几家怎么分层
- OpenCode:开箱默认几乎全放行(
*: allow),--auto再把所有「非显式 deny」的请求自动批准;显式 deny 仍然生效。 - CoreCoder v0.7.0:只读工具直放,其余交互时问人,「always」按工具记住;
--yes全部放行;-p没人可问就拒绝(permissions.py:28-48)。 - Codex:审批策略四档
untrusted/on-request(默认)/granular/never(pinprotocol.rs:917-941);现行文档已下线untrusted,并把用模型审批的做法产品化成 Auto-review(第 4 课)。 - Hermes:默认审批模式
smart,先由一个辅助模型放行低风险命令,剩下的才问人(hermes_cli/config_defaults.py:2098);被连续拒绝 3 次触发熔断(:2114)。
- Pi 核心、bypassPermissions、CoreCoder --yes解决了零打断,模型想跑什么马上跑。卡在L1 的 6 条本意危险的构造命令(含
rm -rf /)会全部直接执行。 - 朴素 黑名单:子串或正则lcc s01 / s03、CoreCoder bash 正则、Pi permission-gate解决了把已知危险的写法挡在执行之前,代码只有几行。卡在lcc s03 三道闸(pin 源码实跑):6 条危险命令里漏拦 4 条,5 条日常命令里误拦 2 条(
cat sudoku_solver.py因含子串 sudo 被拒)。 - CoreCoder 交互模式、Claude Code Manual、lcc s03 的第三道闸解决了判断交给人,规则写不全也不怕。卡在我们 26 次真实运行的 139 次工具调用,在 CoreCoder 交互模式下有 74 次要停下来问(53%);Anthropic 自报用户批准了约 93% 的弹窗——问多了,人就不看了。
- Claude Code(deny → ask → allow)、OpenCode(last-match)、Codex(最严格者胜)解决了把常见的放行和拒绝写成规则,只有规则没覆盖的才问人。卡在同一份规则换一种求值语义可能换一个答案:同一份
rules-standard.json改用 first-match,真实运行 pd-firstmatch-s1 里模型的python -m unittest -v test_dateparse.py被规则 #8 拒掉。 - 第三代 分层放行 + 模型审批Claude Code auto、Codex Auto-review(代码名 Guardian)、Hermes smart解决了只读直放、项目内编辑免审,其余交给另一个模型判断;弹窗接近清零。卡在Anthropic 自报:auto 分类器在真实越权动作上仍有 17% 漏判(n = 52),官方原话「does not guarantee safety」。
- 下一章 与 OS 沙箱分层Claude Code sandbox、Codex Seatbelt / bubblewrap解决了规则管「允许调用什么」,沙箱管「调用之后能碰到什么」。卡在L1 的
python3 -c "import shutil; shutil.rmtree(…)"在四个黑名单里被 4 个全部放行;规则看不见脚本在运行时做什么 → A4。
数字口径:黑名单与「每次都问」由原实现在 pin 源码上实跑(a03-permission-fixtures.json,2026-09-26);真实运行 = 本课程项目 miniagent 用 Qwen/Qwen3-8B-MLX-4bit 本机录制;93% 与 17% 为 Anthropic 官方自报。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 让人工审批只花在真正需要判断的调用上 |
| ② 为什么「一律问」会失效? | 人的注意力有限:问得越多,每次看得越少。这是机制推断,93% 是它的观测证据 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方遥测自报,没有公开实验设计;本页真实运行的弹窗次数由我们的 trace 现算。 出处How we contain Claude ↗需联网 |
| ③ 实践上选了什么? | 按风险分层:只读直放、项目内编辑免审,其余交给沙箱或模型审批;产品默认已转向 auto 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方文档;误差数字为官方自报。 出处Claude Code 文档 ↗需联网 |
一句话
问得太多,人就不再看了;把只读和低风险的放行,只把真正需要判断的调用留给判断者。
先停在这里:记住 93% 和「分层放行」。
再深一层:走岔路:Pi 为什么说权限弹窗是「安全剧场」,看一个干脆不做弹窗的 harness 怎么论证。
下一个缺口
让另一个模型来审批,审批者该有多大权限? → 第 4 课:让另一个模型来审批,审批者该有多大权限?
auto 模式把「问人」换成了「问模型」。模型审批者也会被读到的内容影响、也会出错(17%)。它该看到什么、能做什么、出错时默认怎样,是下一课的问题。
你可能会问
- 「93% 批准,是不是说明弹窗大多是多余的?」 只能说明大多数弹窗被批准了,不能说明被批准的都该批准:auto 一文里同时给了真实越权动作的数据,这些动作正是人最容易顺手批准的。
- 「那干脆全部放行呢?」 Claude Code 的 bypassPermissions 就是,官方只建议在容器或虚拟机里用;Pi 的立场是不做弹窗、要隔离就上容器,见岔路。
- 「组件里『以后别问』为什么只在同一次运行内记住?」 各家记住的范围不同:Claude Code 对文件修改只到会话结束,对 bash 命令会写进项目设置长期生效;CoreCoder 只在本次会话内按工具记住。本页为了让每一行都能单独比较,统一只在同一次运行内记住。