概述
Auto mode 是 Claude Code 的一种权限模式,让 AI 进入连续自主执行状态。与传统模式(每个敏感操作都弹出权限对话框等待用户审批)不同,auto mode 使用 AI 分类器(transcript classifier)自动判断每个工具调用是否安全,从而实现无中断的执行体验。核心架构
1. AI 分类器(yoloClassifier)
分类器是 auto mode 的核心,位于src/utils/permissions/yoloClassifier.ts。
每个工具调用经过分类器评估,返回三种裁决之一:
| 裁决 | 含义 | 处理方式 |
|---|---|---|
| allow | 操作安全 | 直接执行,用户无感知 |
| deny | 操作危险 | 拒绝执行,向 AI 返回拒绝消息 |
| ask | 无法确定 | 回退到传统权限对话框 |
2. 两阶段分类流水线
分类器支持两阶段 XML 分类(classifyYoloActionXml):
'both'(默认)— 两阶段都跑'fast'— 只跑 Stage 1'thinking'— 只跑 Stage 2
3. 分类器结果类型
安全机制
危险权限剥离
进入 auto mode 时,系统调用stripDangerousPermissionsForAutoMode()(permissionSetup.ts:510),移除所有可能绕过分类器的 allow 规则。
被剥离的规则类型(dangerousPatterns.ts):
| 规则类型 | 示例 | 剥离原因 |
|---|---|---|
| Bash 代码执行 | Bash(python:*), Bash(node:*) | 解释器可执行任意代码,绕过分类器审查 |
| Shell 入口 | Bash(bash:*), Bash(sh:*) | 直接 shell 访问等同无限制 |
| Agent 规则 | Agent(*) | 任何 Agent allow 规则会绕过分类器审批子代理 |
| PowerShell 代码执行 | PowerShell(node:*) | 同 Bash 逻辑 |
| 权限提升 | Bash(sudo:*), Bash(eval:*) | 可执行任意命令 |
strippedDangerousRules 中,退出 auto mode 时通过 restoreDangerousPermissions() 恢复。
模型支持检测
不是所有模型都支持 auto mode。modelSupportsAutoMode()(src/utils/betas.ts)检查当前模型是否具备安全分类能力。不支持的模型无法进入 auto mode。
Circuit Breaker 机制
autoModeState.ts 维护一个 circuit breaker 标志:
tengu_auto_mode_config.enabled)设为 'disabled' 时,circuit breaker 触发,阻止 auto mode 的进入和继续使用。这为 Anthropic 提供了远程紧急关停能力。
模式切换状态管理
进入 Auto Mode
transitionPermissionMode()(permissionSetup.ts:597)处理所有模式切换:
退出 Auto Mode
触发路径
Auto mode 可通过以下方式激活:- CLI 参数
--enable-auto-mode - settings.json 中的
autoMode配置 - Plan mode 默认使用 auto mode 语义(
useAutoModeDuringPlan,默认 true) - SDK 控制消息
- REPL 中 Shift+Tab 切换
系统提示词
进入时(Full Instructions)
注入到对话中的指令(messages.ts:3464):
Auto mode is active. The user chose continuous, autonomous execution. You should:
- Execute immediately — 直接实现,做合理假设
- Minimize interruptions — 常规决策自行判断,减少提问
- Prefer action over planning — 默认直接编码,不进 plan mode
- Expect course corrections — 用户可随时纠正
- Do not take overly destructive actions — 删除数据/修改生产系统仍需确认
- Avoid data exfiltration — 不主动分享密钥/内部文档
持续运行时(Sparse Instructions)
后续轮次注入简短提醒:Auto mode still active. Execute autonomously, minimize interruptions, prefer action over planning.
退出时(Exit Instructions)
You have exited auto mode. Ask clarifying questions when the approach is ambiguous rather than making assumptions.
与 Plan Mode 的协作
Plan mode 默认使用 auto mode 语义(getUseAutoModeDuringPlan(),默认 true)。这意味着:
- Plan mode 进入时,如果 auto mode 可用,也会激活分类器
isAutoModeActive()是权威信号(prePlanMode/strippedDangerousRules不可靠)- 退出 plan mode 时会同时退出 auto mode
分类器不可用的降级策略
当分类器 API 不可用时(unavailable: true 或 transcriptTooLong: true):
- 不会直接 allow — 回退到传统的权限对话框(ask)
- 向 AI 发送消息:” is temporarily unavailable, so auto mode cannot determine the safety of right now.”
- 确定性错误(如对话过长)不重试,直接降级
分类器 Prompt 模板
分类器的行为由三个 prompt 文件控制,位于src/utils/permissions/yolo-classifier-prompts/。这些文件在构建时通过 require() 内联为字符串常量,运行时不可修改。
auto_mode_system_prompt.txt
主系统提示词,定义分类器的角色、分类流程和决策类别。包含:- 分类流程:理解操作 → 检查用户意图 → 评估风险
- BLOCK 始终阻止:外部代码执行、不可逆删除、未授权持久化、安全削弱、提权、网络服务
- BLOCK 除非明确意图:CWD 外写入、系统包管理、git push、大规模变更
- ALLOW 安全操作:读文件、搜索、git 只读命令、测试/lint/构建、CWD 内编辑
<permissions_template>占位符 — 运行时替换为具体权限模板(external 或 anthropic)- 末尾
Use the classify_result tool to report your classification.— XML 模式下被替换为<block>标签格式说明
permissions_external.txt
外部用户版本的权限模板。三个<user_*_to_replace> 标签内包裹默认规则(bullet 格式),用户自定义规则整体替换默认值:
- allow:9 条默认规则(只读命令、版本检查、git 只读、测试/lint/构建、包安装、CWD 内文件操作等)
- soft_deny:10 条默认规则(外部代码执行、递归删除、shell 配置修改、提权、网络服务等)
- environment:4 条环境描述(终端环境、auto mode 上下文、开发工具可用、语言/框架不限)
getDefaultExternalAutoModeRules() 从此文件提取 bullet 项,供 claude auto-mode defaults 命令输出。
permissions_anthropic.txt
Anthropic 内部版本的权限模板。默认规则在标签外部,标签内为空,用户自定义规则以追加方式叠加:- 云 CLI 只读命令(aws describe, gcloud describe, kubectl get 等)
- 基础设施即代码 plan 命令(terraform plan, pulumi preview 等)
- 对应的 deny 规则(云资源创建/修改/删除、IaC apply、生产环境访问等)
模板替换流程
- 外部模板:用户设置非空时替换对应标签内容,否则保留默认值
- 内部模板:用户设置追加到默认值之后(标签在末尾为空)
当前状态说明
注意:auto mode 的完整代码逻辑已存在于代码库中,但依赖Prompt 模板文件为重建产物——原始文件在反编译过程中丢失,已根据代码逻辑和feature('TRANSCRIPT_CLASSIFIER')feature flag。 在当前反编译版本中,feature()始终返回false,因此 auto mode 不可用。 要启用需将feature('TRANSCRIPT_CLASSIFIER')改为true,并确保 GrowthBook 配置源有合理的 fallback 默认值。
yoloClassifier.ts 中的替换模式重新编写。
相关源码索引
| 文件 | 职责 |
|---|---|
src/utils/permissions/yoloClassifier.ts | 分类器核心实现 |
src/utils/permissions/autoModeState.ts | Auto mode 状态管理 |
src/utils/permissions/permissionSetup.ts | 模式切换、危险权限剥离 |
src/utils/permissions/dangerousPatterns.ts | 危险命令模式列表 |
src/utils/permissions/classifierDecision.ts | 分类器决策处理 |
src/utils/permissions/classifierShared.ts | 分类器共享逻辑 |
src/utils/permissions/bashClassifier.ts | Bash 命令分类规则 |
src/utils/permissions/bypassPermissionsKillswitch.ts | bypass 权限熔断器 |
src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt | 分类器主系统提示词 |
src/utils/permissions/yolo-classifier-prompts/permissions_external.txt | 外部权限模板 |
src/utils/permissions/yolo-classifier-prompts/permissions_anthropic.txt | 内部权限模板 |
src/cli/handlers/autoMode.ts | CLI auto-mode 子命令处理 |
src/utils/messages.ts | Auto mode 系统提示词注入 |
src/types/permissions.ts | 权限类型定义 |
src/utils/betas.ts | 模型 auto mode 支持检测 |