Auto Mode 是介于逐个批准每次工具调用与使用 --dangerously-skip-permissions 之间的一种折中权限方案。它由一个分类器评估每次权限提示,对安全操作进行静默批准,对可疑操作进行阻止并呈现出来,供用户审查和覆盖。该功能自 v2.1.83 起以研究预览形式提供。
一、三种权限模式 在终端中可使用 Shift+Tab 循环切换,三种模式及其行为如下:
- default:Claude 对每个敏感操作都请求批准。
- auto:分类器自动批准安全操作;阻止并呈现可疑操作。
- bypassPermissions:所有操作均无需提示直接运行,风险较高,仅建议在可信环境中使用。
二、启用 Auto Mode 可通过三种方式启用:
- 单会话:按 Shift+Tab,直到页脚显示 auto mode on。
- 设为默认(settings.json): { "permissions": { "defaultMode": "auto" } }
- 命令行参数: claude --permission-mode auto
三、分类器的工作方式 分类器会基于风险模型对每次工具调用进行评分。对于每个操作:
- 低风险(读取文件、运行 lint、git status):静默批准。
- 中风险(写入文件、运行测试):批准并记录一条简要日志。
- 高风险(删除文件、向未知主机发起网络调用、force-push):阻止并呈现给用户。 用户看到的界面与手动阻止时相同,因此可以在需要时进行审查并覆盖。
四、使用 PermissionDenied 钩子处理拒绝 当分类器阻止某个操作时,PermissionDenied 钩子会在 Claude 有机会响应之前触发。可以用它来:
- 记录被阻止的操作,以供审计追踪。
- 返回 retry: true,让 Claude 尝试不同的方法,而不是直接失败。
配置示例: { "hooks": { "PermissionDenied": [{ "hooks": [{ "type": "command", "command": ".claude/hooks/permission-denied.sh" }] }] } }
钩子脚本示例: #!/usr/bin/env bash
permission-denied.sh
set -euo pipefail INPUT=$(cat) TOOL=$(echo "$INPUT" | jq -r '.tool_name // "unknown"') REASON=$(echo "$INPUT" | jq -r '.reason // "no reason"')
Log to audit file
printf '%s\t%s\t%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$TOOL" "$REASON" \
.claude/logs/permission-denied.log
Return retry: true so Claude tries an alternative approach
echo '{"retry": true}'
另一种方式是在 /permissions → Recent 标签页中使用 r 手动重试。
五、在无头模式下延迟决策 对于以 -p(print/pipe)模式运行 Claude 的 SDK 应用和自定义 UI,可以在 PreToolUse 钩子上使用 defer,让 Claude 在某个工具调用处暂停,并将决策交给你的应用:
配置示例: { "hooks": { "PreToolUse": [{ "hooks": [{ "type": "command", "command": ".claude/hooks/pause-for-review.sh" }] }] } }
钩子脚本示例: #!/usr/bin/env bash
pause-for-review.sh — returns defer for sensitive tools
set -euo pipefail INPUT=$(cat) TOOL=$(echo "$INPUT" | jq -r '.tool_name // ""')
case "$TOOL" in Bash|Write|Edit) echo '{"permissionDecision": "defer"}' ;; *) echo '{"decision": "approve"}' ;; esac
当 Claude 遇到 defer 时:
- Claude Code 会带着 deferred_tool_use 负载退出。
- 你的应用呈现该决策(自定义 UI、Slack 消息、审批流程)。
- 你的应用恢复运行:claude --resume <session-id> --permission-decision approve
六、Auto Mode 与手动批准、bypassPermissions 的对比
- 文件读取:手动为提示;Auto 为静默批准;bypassPermissions 为静默批准。
- 文件写入:手动为提示;Auto 通常静默批准;bypassPermissions 为静默批准。
- git push:手动为提示;Auto 会呈现;bypassPermissions 为静默批准。
- rm -rf:手动为提示;Auto 会阻止;bypassPermissions 为静默批准。
- 网络调用:手动为提示;Auto 会呈现;bypassPermissions 为静默批准。
- 使用成本:手动摩擦高;Auto 摩擦低;bypassPermissions 零摩擦但风险高。
大多数工作流建议使用 Auto Mode。只有当你在完全可控的锁定 CI 容器中运行时,才使用 bypassPermissions。
七、与 Autonomy Profiles 结合使用 Auto Mode 可与 skills/autonomy-profiles/SKILL.md 中的自主性配置搭配使用。设置 defaultMode: "auto",然后配置合适的自主性配置(conservative、balanced、aggressive),以独立于权限批准来控制任务范围和自我纠正行为。
八、检查当前模式 /status # 在页脚显示当前权限模式 /permissions # 打开完整的权限面板