Plan 模式
先规划后执行:CrabCode 切到 plan 模式时只读不写,让模型先把方案铺清楚再动手。
是什么
Plan 模式是 CrabCode 的一档只读权限模式。打开它之后,模型仍然能读代码、跑 grep、看 git 状态,但写文件、删文件、跑 shell 命令这些会改世界的工具会被一律拒绝 —— 模型只能产出一份"接下来准备怎么做"的计划,等你看完再决定是否真去做。
适合场景:
- 不熟的仓库,先让模型探一遍写计划
- 大型重构或跨文件改动,先看路线图再动手
- 高风险变更(数据库迁移、删大批文件、动 CI)前的安全垫
Plan 模式和思考模式是两个正交维度:plan 管模型「能动什么」,thinking 管模型「想多深」。两者可以叠加(深度思考 + plan 模式)。
怎么进入
三条路:
1. 在会话里 slash 切换(最常用)
/plan/plan输入 /plan 直接把当前会话切到 plan 模式。再输一次回到原模式。
2. Shift+Tab 循环
在 TUI 里反复按 Shift+Tab 会循环切权限模式(默认 / acceptEdits / plan 等),状态行会显示当前所在档。
3. 启动时锁定
crabcode --permission-mode plancrabcode --permission-mode plan整个会话强制 plan 模式启动。配合 --print 跑非交互式审计很合适:
crabcode --print --permission-mode plan "审一下这个 PR 的安全风险"crabcode --print --permission-mode plan "审一下这个 PR 的安全风险"可选的模式还有 default / acceptEdits / bypassPermissions / dontAsk,详见 cli-reference。
模型在 plan 模式下能做什么
- 读任意你授权的文件(Read / Grep / Glob)
- 跑只读 shell(如
git status/ls/cat,但git commit/rm/npm install会被拒) - 调研、列文件树、画依赖图
- 写出一份计划文件(落盘到会话级 plan 文件,可用
/plan open在外部编辑器里改)
模型在 plan 模式下不能做什么
- 写 / 改 / 删任何文件
- 跑任何「会改东西」的命令
- 起 subagent 去做带写权限的活
- 在你不知情时切回非 plan 模式(必须显式
/plan或 Shift+Tab)
退出 plan 模式后
退出时模型不会自动开始执行 —— 计划只是产出物,要不要按它做、按哪几步做,你说了算。常见做法:
- 看完计划 →
/plan退出 plan 模式 - 把计划里你认可的步骤复制到下一条消息
- 让模型按那几步真去改
本地 plan 和远程 ultraplan
CrabCode 还有一个远程深度规划入口:/ultraplan。区别:
| 维度 | 本地 plan | 远程 ultraplan |
|---|---|---|
| 跑在哪 | 你的终端 | acosmi.com 上的远程会话 |
| 命令 | /plan 或 --permission-mode plan | /ultraplan <任务描述> |
| 适合 | 中小规模规划、想边看边调 | 长跑、多 agent 并发探索、跨小时的大改造规划 |
| 你在干嘛 | 守在屏幕前 | 终端可以继续干别的,结果回来后通知 |
| 产出 | 一份计划,由你决定是否在本地执行 | 一份方案,可选择「在远程会话直接执行」或「传回本地按计划执行」 |
/ultraplan 详细玩法见 crabcode-on-the-web。
限制与注意
- plan 模式不阻止读敏感文件:模型仍可以读到工作目录下的任意授权文件 —— 如果你不想让它看到某些路径,用 iam / sandboxing 在权限层挡住,而不是靠 plan 模式
- 跨 subagent 传播:spawn 出去的 teammate 会继承 plan 模式,不会偷偷在背后写文件
- plan 模式 ≠ dry-run:模型不会"假装执行"再回滚 —— 它真的不会去跑写动作,所以「能不能跑通」要在真执行时再验
- 不是所有工具都被 block:MCP / 自定义工具如果没标"会改世界"标签,可能仍会被允许调用 —— 给自定义工具加权限元数据时注意