规划与权限:
放多少手,由你决定
带新同事,你不会第一天就把钥匙全交出去。先让他写方案,再逐步放手;活儿大了,请个安全员盯着。Claude Code 的权限模式就是这把"放权刻度"。
时间紧就先看"入门"和"实战";"原理"讲清楚 auto 模式的安全员凭什么拦、什么时候会退回来问你。
六种权限模式
权限模式决定 Claude 做哪些事不用先问你。读文件在所有模式下都不用问,区别在改文件、跑命令、联网这些事上。
| 模式 | 不用问就能做 | 适合 |
|---|---|---|
Manualdefault | 只有读 | 敏感代码,每一步都想亲自过目 |
acceptEdits | 读、改文件,以及 mkdir、mv、cp 等常用文件命令 | 放手让它改,最后用 git diff 统一看 |
plan | 读;auto 可用时,安全员批准的命令也能直接跑;不改文件 | 先调研、出方案,你批准了再动手 |
auto | 基本都行,由一个"安全员"模型在后台把关 | 长任务,不想被一次次确认打断 |
dontAsk | 读,以及你事先允许的;其余一律拒绝 | CI、脚本(第 4 课) |
bypassPermissions | 全部,不做检查 | 只在隔离的容器或虚拟机里 |
- 一开始是哪种:设置里没指定时,终端和 VS Code 扩展里的会话默认从
auto开始。v2.1.283 起所有套餐、所有接入方式都这样;更早的版本只有 Pro、Max、Team 如此。auto 用不了(比如管理员关了它、模型不支持)时,退回 Manual。claude -p和 Agent SDK 仍从 Manual 开始。状态栏会显示当前模式,比如⏸ manual mode on、⏵⏵ auto mode on。刚安装或升级后的第一个会话,可能还是从 Manual 开始,这是正常的。 - 模式只是底线:你写的拒绝规则在任何模式下都生效,包括
bypassPermissions。 - 有几件事任何模式都不会自动放行,比如写了"要问我"(ask)规则的操作、删除
/、~这类关键路径。
用 Shift+Tab 切换
对话中随时按 Shift+Tab 换到下一个模式。但不是六种都在这个圈里。
dontAsk永远不在这个圈里,只能在启动前定好:--permission-mode dontAsk,或在设置里写"defaultMode": "dontAsk"。bypassPermissions只有启动时就允许了它,才会出现在圈里;中途进不去。- 也可以启动时直接指定:
claude --permission-mode plan。Windows 上个别终端里 Shift+Tab 不灵时,改用 Alt+M。
规划模式:先交方案,再动手
plan 模式下,Claude 读代码、跑查看类命令、写出计划,但不改你的源代码,直到你批准。
- 怎么进:按 Shift+Tab 切到
⏸ plan mode on;或者在消息前面加/plan,比如/plan 给订单列表加导出功能:进入规划模式,并马上开始调研这件事。 - 什么时候用:多文件的改动、新功能、数据库迁移、陌生的代码库。改一行字、修个小 bug 就不必了。
- 改方案:批准前按 Ctrl+G,在你的编辑器里直接改计划;或者选"继续规划",告诉它哪里要调整。
试一试:计划写好了,你怎么回答?
计划:订单列表加 CSV 导出
- 在
src/api/orders.ts加GET /orders/export,复用现有的筛选参数 - 新建
src/utils/csv.ts,处理逗号和换行的转义 - 订单页加"导出"按钮,调用新接口
- 补单元测试,跑
pnpm test
模型选 opusplan(/model opusplan):规划阶段自动用 Opus 想清楚,批准后切到 Sonnet 执行,省钱又不牺牲方案质量。
练一练:这时候用哪种模式?
每个场景选一个最合适的。
auto 模式:请一位安全员
auto 模式不是"全部放行"。另一个模型(官方叫 classifier,也就是分类器;这里叫它安全员)在每个有风险的操作执行前看一眼:超出你要求的、碰了不认识的系统的、像是被网页里的指令带偏的,拦下。
它按这个顺序判断
- 你写的允许、拒绝、"要问我"规则,先生效。
- 读文件、在工作目录里改文件,直接放行。
- 其他操作(跑命令、联网等)交给安全员。
- 被拦下时,Claude 会收到原因,换一个做法。
| 默认拦下 | 默认放行 |
|---|---|
下载并执行代码,如 curl … | bash | 工作目录里的文件操作 |
| 把敏感数据发到外部 | 安装 lock 文件或清单里声明过的依赖 |
| 部署生产、数据库迁移 | 只读的网络请求 |
| 强制推送(force push) | 推送到当前仓库的分支 |
git reset --hard、git clean -fd 等会丢掉未提交改动的命令 | 读 .env 并发给对应的 API |
试一试:当一回安全员
点"Claude 想做"里的操作,模拟 Claude 在 auto 模式下依次去做。留意"安全员的判断"上方的两个计数:
Claude 想做
安全员的判断
- 连续拦 3 次或一共拦 20 次,auto 模式暂停,改回来问你;你批准一次,就恢复 auto。这两个数不能改。
- 你在对话里说的话算数:"先别 push"会让安全员拦下之后的推送,直到你说可以。但它不是规则,对话被压缩后可能丢;要保证,写拒绝规则。
- 批准要说具体:只说"可以强推"不够,要说清楚推哪个分支;而且只对这一次有效。
- 进入 auto 时,
Bash(*)这类"什么命令都行"的宽泛允许规则会暂时作废,离开 auto 再恢复。
官方原话的意思是:用在你信任大方向的任务上,别拿它代替你对敏感操作的审查。要"必须有人把关"的步骤(比如推送),可以加一条"要问我"规则,auto 模式下照样会弹窗。
想多深:effort 与深度思考
Claude 回答前会先"想"一会儿。effort(思考力度)决定它愿意想多深:越高越仔细,也越慢、越花钱。
示意:三条的长短只表示方向,不是实测数据。各级别具体对应多少,每个模型都不一样。
| 想做什么 | 怎么做 |
|---|---|
| 调整力度 | /effort 打开滑杆:回车会存成默认值,以后的会话也用;按 s 只改这次会话。也可以 /effort high 直接设(同样会记住)。在 /model 里用左右键也能调 |
| 启动时指定 | claude --effort xhigh |
| 只让这一句想得更深 | 在消息里写上 ultrathink。它只给这一轮加一句"多想想"的指示,不改力度设置 |
| 开关思考 | Option+T(Mac)/ Alt+T(Windows、Linux);部分新模型的思考关不掉 |
| 看它想了什么 | Ctrl+O 打开详细记录,思考过程是灰色斜体 |
- 让它想得更深的关键词只有
ultrathink。"think hard""多想想"这些只是普通的话,不会触发什么特殊模式。 max只对当前会话有效。ultracode不是一个力度级别,而是/effort里一个单独的开关(按 Tab 切换,或/effort ultracode、/effort ultracode off):打开后,Claude 遇到大任务就用多代理工作流来做,力度保持你原来选的那档(v2.1.284 起;以前打开它会顺便把力度调到 xhigh)。只想让某一个任务走工作流,在消息里写上ultracode就行。- 思考过程即使折叠起来没显示,也照样计费。
后台任务与定时任务
长命令放到后台跑,你接着聊;需要反复检查的事,交给 /loop 定时去做。
后台命令
- 让 Claude "在后台跑测试",或者命令正在跑时按 Ctrl+B 把它挪到后台(tmux 里按两次)。
- 输出写进文件,Claude 需要时去读;
/tasks查看、停止后台任务。 - 退出 Claude Code 时,后台命令会被清理掉。v2.1.285 的更新说明还写着:Claude 放到后台的命令有时间上限,默认 30 分钟、最长 2 小时,到点会被停掉并通知 Claude。要一直开着的开发服务器,可以自己在另一个终端里跑。
/loop:定时重复
输入一条 /loop 命令,看它会怎么理解:
- 只在会话开着时跑:关掉终端、开新对话都会停;
--resume回来时,固定间隔的任务会恢复。 - 定时任务(包括自适应的
/loop)7 天后自动过期;一个会话最多 50 个定时任务。按 Esc 停掉正在等待的自适应/loop。 - 一次性提醒直接说:"下午 3 点提醒我推送发布分支"。查看、取消也直接问:"我有哪些定时任务?"
| 方式 | 下一轮什么时候开始 | 适合 |
|---|---|---|
/loop | 到了时间间隔 | 盯部署、盯 CI、定时检查 |
/goal 条件 | 上一轮一结束;直到另一个模型判断条件已满足 | "改到所有测试通过为止"这种有明确终点的活 |
| Stop hook(第 6 课) | 上一轮一结束,由你的脚本决定 | 长期生效、每个会话都要的检查 |
/schedule(云端) | 按计划在云端跑,不需要你的电脑开着 | 每晚跑测试、每天早上整理 issue |
6 个权限配方
把常见的"放权程度"写进设置文件。选一个,拷贝,按"怎么验证"试一遍。
终端演练:先规划,再放手
从规划模式出方案,到 auto 模式执行、安全员拦下一次强推,再到后台跑测试、定时盯 CI。点"下一步"回放,放完可以自己输入。
终端画面为教学示意,计划内容、拦截提示的措辞是虚构的;模式名称、状态栏文字和快捷键与官方文档一致。
进阶与避坑
设了没生效、auto 用不了、定时任务不见了……按症状查。
在项目设置里写了 defaultMode: auto,没生效
auto 和 bypassPermissions 写在项目的 .claude/settings.json 或 .claude/settings.local.json 里不生效,防止别人的仓库替你打开。写到你自己的 ~/.claude/settings.json 里。auto 模式用不了
disableAutoMode;公司管理员有没有关掉。偶尔也会是服务端临时关闭,新开一个会话再试。我说了"先别 push",后来它还是推了
"permissions": { "deny": ["Bash(git push *)"] },任何模式都拦;或者写成 ask 规则,每次都问你。auto 模式老是拦我的正常操作
~/.claude/settings.json 的 autoMode.environment(写在项目设置里不生效),或者运行 /auto-mode-setup 让 Claude 帮你起草;公司统一的清单由管理员下发。也可以用 /feedback 反馈误拦。被拦的操作在 /permissions 的 Recently denied 里,按 r 可以手动批准重试。bypassPermissions 启动不了
规划模式里它居然改了文件
bypassPermissions(它在 Shift+Tab 的圈里),这时交互式终端里的规划模式不会强制拦截编辑。-p、SDK、VS Code 聊天面板里,规划模式始终拦截。定时任务怎么都不见了
/loop 和定时提醒都属于当前会话:开新对话会清掉;关掉终端就不再触发;错过的时间不会补跑。定时任务 7 天后自动过期。要长期、不依赖电脑开着的定时任务,用 /schedule 建云端任务。老教程里的写法和官方不一样
/task list、/task status bg-1234这类命令不存在:查看和管理后台任务用/tasks。- 说 Shift+Tab 在全部 6 种模式里循环:
dontAsk从不在圈里,bypassPermissions要启动时允许才有。 - 说
ultrathink会开启"深度推理模式":它只给这一轮加一句指示,发给模型的力度不变。 - 说 auto 模式默认只放行"推送到当前分支":现在是当前仓库的任何分支,包括默认分支(部署类分支除外)。
小测验
8 道题,每题选完会立刻看到解析。
