你有没有想过:当Claude Code在Auto模式下自动执行操作时,是谁在判断"这事能不能干"?
不是写死的规则,而是另一个AI——YOLO分类器。它是Claude Code的"安全守门员",专门负责在无人值守时把关。
YOLO是什么?AI审核AI
YOLO(You Only Live Once)分类器是一个独立的AI系统。当主AI(Claude)想执行一个工具调用时,YOLO会独立判断:“这个操作安全吗?”
这就像银行的大额转账:柜员(主AI)想操作,风控系统(YOLO)要审核。两个AI互相独立,避免单点故障。
工作流程:
主AI:我想执行这个Bash命令
↓
YOLO分类器:让我看看...这个命令安全吗?
↓
安全 → 放行,主AI继续执行
危险 → 阻止,转人工确认
分层过滤:四道安全闸门
不是所有操作都需要AI审核。YOLO有四道闸门,层层过滤:
第一道闸门:安全白名单
只读操作天然安全,直接放行:
Read:读文件Grep:搜索Glob:文件匹配LSP:代码分析TodoWrite:任务管理
这些操作不可能破坏数据,不需要审核。
第二道闸门:输入过滤
每个工具可以定义toAutoClassifierInput方法,决定哪些字段暴露给YOLO。
如果返回空字符串,说明这个工具调用没有敏感内容,直接放行。
这就像安检:有些东西一眼就能看出没问题,不用过X光机。
第三道闸门:阶段1快速判定
通过前两道闸门的操作,进入YOLO审核。但YOLO不是一上来就深度分析,而是分两个阶段:
阶段1:快速判定
- 用极小的token预算(64 tokens)
- 使用简洁的XML格式输出
- 目标是"快速放行明显安全的操作"
输出格式很简单:
<block>no</block> ← 放行
或者:
<block>yes</block>
<reason>删除根目录风险太高</reason>
阶段1的指令是"宁可错杀,不可放过"——稍有疑问就标记为阻止。
第四道闸门:阶段2深度推理
阶段1判定为"阻止"的操作,升级到阶段2:
- 更大的token预算(4096 tokens)
- 要求输出
<thinking>标签进行推理 - 重新评估,纠正可能的误判
这就像:
- 阶段1:保安看一眼觉得可疑,先拦下来
- 阶段2:警官仔细询问,判断是真的有问题还是误会
安全白名单的艺术
YOLO的白名单设计有几个精妙之处:
写操作不在白名单中
文件编辑(Edit、Write)不白名单放行。但有个例外:工作目录内的编辑自动放行,目录外的才需要审核。
这就像:
- 在家(工作目录)里随便折腾
- 出门(目录外)要小心
Swarm协调工具在白名单中
SendMessage、TeamCreate等协调工具看似有副作用,但子Agent各自有独立权限检查,所以协调层面安全。
这就像:队长发号施令不危险,执行才危险。
分类器自身在白名单中
避免递归调用:YOLO审核YOLO调用时,不能再触发YOLO。
对话转录:YOLO看到了什么
YOLO不看原始消息,而是看"转录"——经过过滤的摘要。
能看到:
- 用户指令
- 工具调用(
tool_use块)
不能看到:
- 主AI的自由文本输出(防止被注入攻击)
- 图片等非文本内容
转录格式支持两种:
- 文本格式:
User: xxx\nBash: ls -la - JSONL格式:
{"user":"xxx"}\n{"Bash":"ls -la"}
JSONL更安全,因为换行符被转义,无法伪造工具调用行。
拒绝追踪:防止死循环
YOLO可能陷入病态循环:
主AI尝试操作A → YOLO拒绝
主AI换个说法尝试操作A → YOLO拒绝
主AI再换种说法... → YOLO拒绝
拒绝追踪用两个计数器解决这个问题:
- 连续拒绝计数:达到3次,回退到人工模式
- 总计拒绝计数:达到20次,回退到人工模式
成功操作会重置"连续计数",但不重置"总计数"。这样即使穿插成功,累积的拒绝也会触发回退。
这就像:你连续三次被保安拦下,或者一天被拦了20次,经理就会介入。
模板系统:差异化的安全策略
YOLO的系统提示词不是固定的,而是模板组合:
外部用户模板:面向公开版本,安全策略保守 Anthropic内部模板:面向内部开发,可能更宽松
用户还可以自定义规则:
{
"autoMode": {
"allow": ["允许运行npm test"],
"soft_deny": ["拒绝修改项目目录外的文件"],
"environment": ["这是React项目"]
}
}
这些规则注入YOLO的系统提示词,影响AI裁决。
错误处理:失败即阻止
YOLO的设计原则是:任何不确定性都等同于阻止。
- API返回无法解析 → 阻止
- API超时 → 阻止
- API返回429/500 → 阻止
- 用户取消 → 阻止
唯一例外:unavailable: true标志让调用者知道"是分类器宕机了,不是真的危险"。
这就像银行风控系统故障时,默认拒绝所有交易——宁可业务暂停,不可资金损失。
实战:如何用好Auto模式
1. 添加自定义规则
在CLAUDE.md或settings.json中添加:
{
"autoMode": {
"allow": [
"Allow running make clean in build directory",
"Allow npm install and npm test"
]
}
}
2. 连续被拒怎么办?
如果连续3次被拒,系统会自动回退到人工确认。这时候:
- 检查CLAUDE.md是否有相关规则
- 手动放行,观察后续行为
- 必要时调整autoMode规则
3. 性能优化
YOLO分类有成本:
- 阶段1:~64 tokens,亚秒级延迟
- 阶段2:~4096 tokens,需要等待
可以通过toAutoClassifierInput返回空字符串来跳过分类,降低开销。
这对构建AI Agent的启示
YOLO分类器展示了AI安全审核的几个关键模式:
模式1:分层短路过滤
不是所有请求都需要深度审核。设置多层过滤:
- 白名单(零成本)
- 输入过滤(低成本)
- 快速判定(中成本)
- 深度推理(高成本)
模式2:失败即阻止
安全系统必须有保守的默认行为。任何故障都等同于"阻止操作"。
模式3:连续异常降级
自动化系统可能陷入死循环。监控连续失败/拒绝次数,达到阈值后降级到人工模式。
总结
YOLO分类器是Claude Code Auto模式的安全基石:
- AI审核AI:独立模型做安全裁决
- 四道闸门:白名单→输入过滤→阶段1→阶段2
- 转录机制:只暴露必要信息,防止注入
- 拒绝追踪:防止死循环
- 失败即阻止:保守的安全哲学
这就像:
- 主AI是驾驶员
- YOLO是副驾的安全员
- 白名单是"明显安全"的快速通道
- 阶段1是"看一眼"的初步判断
- 阶段2是"仔细想"的深度分析
- 拒绝追踪是"别让司机钻牛角尖"的保护机制
理解YOLO,你就能:
- 更好地使用Auto模式
- 通过自定义规则优化体验
- 在自己的AI Agent中实现类似的安全机制
下篇咱们聊聊Hooks——在关键节点插一脚。
