接着上一篇的 CLAUDE.md 继续学。今天搞清楚 Claude Code 干活的时候脑子里到底装了什么、什么时候问你、什么时候自己拿主意。
图注:上下文窗口就是 Claude 干活时的"工作台",启动时摆好一批东西,过程中边读边加;满了之后 /compact 会清桌子,只留一份摘要。
每次你跟 Claude Code 聊天,背后其实有三件事在同时运转:
三件事各管各的,但都在影响 Claude 这一次能干成什么。下面挨个拆。
上下文窗口:Claude 的"工作记忆"
打个比方。你雇了一个外包同事,他每次来你家干活,只能记住摆在桌面上的那些东西——桌面以外的资料,他得起身去书架上翻一下才能用。书架很大,但桌面就这么大。
Claude Code 的上下文窗口就是那张桌面。每次开一个新会话,桌面就那么大(默认 200K token,开了扩展能到 1M)。桌面上摆什么、什么时候摆、摆满了怎么清,这些都直接决定 Claude 这一次能干成什么。
你还没说话的时候,桌面上已经摆了一堆
很多人以为是从你打字那一刻才开始算。其实在那之前,Claude 就已经把这些东西摆好了:
- • 系统提示:Claude 自己出厂带的那一套"你是谁、你能干啥"的说明
- • CLAUDE.md 全套:你写过的工作手册(上一篇讲过的那个)
- • 自动记忆 MEMORY.md:Claude 自己记的笔记的索引页(前 200 行或 25KB)
- • Skill 描述:你装的所有 skill 的简介
- • 你的个性化设置:比如
--append-system-prompt 加的那几句、输出风格之类
一上来桌面就已经"非空"了。后面你才说"帮我看一下 user.ts"。
干活的时候,桌面越摆越满
接下来 Claude 每做一件事,桌面上就多一些东西:
- • 读文件:每次
Read 一个文件,文件内容就摆桌面上 - • 路径限定规则:上一篇讲的
.claude/rules/*.md,匹配到的规则跟着文件一起摆上 - • 跑命令的输出:
ls、git diff、npm test 的输出都在 - • 每次工具调用之后的 hook:跑完编辑触发的 PostToolUse hook 结果也在
- • 它自己的每一段回复:Claude 说过的每一句话也算桌面上的纸条
所以"桌面"是越用越满的。一份大文件读进来就是几千 token。一个 monorepo 翻几圈,几万 token 就没了。
子 Agent 是个小技巧——给它单独发一张桌子
Claude 派一个子 agent 出去干活的时候,那个子 agent 用的是它自己单独的桌面,跟主会话不共享。
意思是:你让子 agent 去翻 50 个文件做调研,那 50 个文件的内容全在子 agent 的桌面上,主会话这边只收到一份"调研结论"的小纸条。
这是 Claude Code 节省主会话上下文的一个大招。"让子 agent 去翻"基本等于"我桌面不被这堆东西占着"。
满了之后:/compact 清桌子
聊久了桌面终归会满。这时候你(或者 Claude 自动)跑 /compact:
把前面整段对话压成一份精简摘要,然后清掉原始内容,腾出空间继续干。
听起来挺好,问题是清桌子的时候哪些会自动重新摆回来,哪些直接没了,规则是不一样的。先列出来:
| /compact |
|---|
| |
| |
| |
| 丢了 |
| 丢了 |
| 重新塞回来,但每个 skill 最多 5000 token,总共 25000 token,超了从最老的开始扔 |
| |
| 丢了 |
所以一句话:根目录的 CLAUDE.md 始终在,路径限定的、子目录的、口头说过的,/compact 之后都得等触发才回来或者干脆没了。重要的规矩,要么写进根目录 CLAUDE.md,要么写进 skill,别只在聊天里说。
怎么看自己当前桌面什么样
两个命令记一下:
- •
/context:当前会话各类内容占了多少 token,按类别拆开列给你看,还会给优化建议 - •
/memory:当前加载了哪些 CLAUDE.md 和自动记忆文件
聊久了感觉 Claude 变笨,跑一下 /context 看看是不是桌面快满了。
三种工作模式:你给 Claude 多大的手脚
桌面解决了"Claude 记得啥"。工作模式解决的是另一件事:Claude 想干一件事的时候,要不要先问你一声。
Claude Code 一共有 6 种权限模式,但你日常按 Shift+Tab 切换的就三种,构成一个小循环:
图注:按 Shift+Tab 在 default、acceptEdits、plan 三种模式之间循环,每种放给 Claude 的"手脚"不一样。
default → acceptEdits → plan → default → ...
这是默认循环,剩下三种(auto、dontAsk、bypassPermissions)属于"特殊模式",需要专门开启,我们先不管。
default(默认):什么都问
最严格。Claude 想读文件直接读,但想写文件、跑命令、发请求,都先弹一个框问你"同意吗"。
适合:刚开始用、不熟悉项目、改的是敏感代码、不想被 Claude 自作主张。
代价:弹框多。你会一直在按"Yes"。
acceptEdits(接受编辑):文件编辑不问,命令还问
中间档。Claude 改文件(Edit、Write),还有一些温和的文件系统命令(mkdir、touch、mv、cp),都不再问你。但跑 shell 命令、装包、发请求,还是问。
适合:你已经盯着 Claude 干活,对它改的内容心里有数,只是不想每改一个文件都按一次 Yes。
代价:你得真的在看。不然它默默改了几十个文件,你回头才发现走偏了。
plan(计划模式):只读,不动
最克制。Claude 只能读、只能跑只读命令(比如 ls、grep、git log)。任何改你源代码的动作都被禁止。它读完之后会写一份计划给你看,等你点同意才往下走。
适合:要改的事比较大、范围不清楚、你想先看它打算怎么做。比如"重构一下认证模块"、"把这个 API 改成异步的"——这种你最好先让它出方案。
代价:多一道审批。但通常能避免它埋头猛干、最后发现方向错了。
怎么切
- • 会话进行中:按
Shift+Tab,状态栏会显示当前模式 - • 启动时指定:
claude --permission-mode plan - • 设成项目默认:在
.claude/settings.json 里写
{ "permissions": { "defaultMode": "plan" }}
VS Code、JetBrains、Desktop、网页版各有各的切法(点状态栏图标、菜单里选),但本质都是切同一个东西。
保护路径:bypass 之外永远不会自动写
不管你切到哪种模式(除了 bypassPermissions),有一组路径是永远不会被 Claude 自动写入的——它要写就一定弹框问你。这是为了防止意外把仓库或 Claude 自己的配置搞坏。包括:
- •
.git、.vscode、.idea、.husky、.cargo - •
.claude 目录(除了 .claude/commands、.claude/agents、.claude/skills、.claude/worktrees 这几个 Claude 自己常用的) - •
.gitconfig、.gitmodules、.bashrc、.zshrc 这些 shell 和 git 配置
知道有这层兜底就行,平时不用专门管它。
Plan Mode 深入:让 Agent 先想清楚再动手
Plan Mode 我想单独多说几句,因为它是 Claude Code 里比较有意思、也最容易被低估的一个功能。
它到底在干什么
很简单一句话:让 Claude 先调研、出方案,等你点头了再动手改代码。
进 Plan Mode 之后,Claude 干这些事:
- 1. 读你的代码——文件、目录结构、相关函数都翻一遍
- 2. 跑只读命令——
grep 一下、git log 看一下、ls 翻一翻 - 3. 派子 agent 去做更细的调研——这是 Plan Mode 鼓励的,把脏活累活丢给子 agent,主会话桌面不被占
- 4. 把调研结果写成一份"计划文件"(plan file),就是一个 Markdown
整个过程它不会改你的源代码。
图注:Plan Mode 走"理解 → 设计 → 复核 → 出最终方案"四步,最后才进入审批,由你决定怎么落地。
它内部是怎么实现的?
很多人以为进了 Plan Mode,Claude 的"写文件工具"就被锁了。其实没有。
工具还在,编辑文件、写文件那些函数 Claude 都还能调用。Plan Mode 干的事更像是在系统提示里塞了一段强力提醒:
Plan mode is active. 你不能改任何东西(除了那个计划文件),不能跑任何会改东西的工具。这条规则盖过你之前收到的所有指令。
外加一套"建议你这样规划"的四阶段工作流(理解 → 设计 → 复核 → 写最终计划)。然后它给了一个"退出 Plan Mode"的特殊工具,Claude 写完计划自己调用一下,就把球抛回给你。
所以 Plan Mode 是"约定",不是"硬锁"。 靠的是 Claude 听话。绝大多数情况下它会听,但你不能把它当成系统级的安全屏障。要绝对禁止某些操作,得用 hooks 或者 managed settings——和上一篇讲 CLAUDE.md 时的结论一模一样:这些都是上下文,不是强制令。
(顺便:有个已知 bug,--dangerously-skip-permissions 加上 --permission-mode plan 一起用,bypass 会悄悄盖过 plan。你以为在只读,其实在裸奔。别这么组合。)
计划文件存在哪
Claude 在 Plan Mode 写的那份"计划",是一个实实在在的 Markdown 文件,存在 Claude Code 自己的 plans 目录里。它边写边改,用的是普通的 edit 工具——也就是说,Claude 在 Plan Mode 里确实在编辑文件,只不过编辑的是它自己的计划文件,不是你的源代码。
听到这里你可能在想:那我直接让 Claude 帮我写一份计划 Markdown,不也行?
对,差不多。Armin Ronacher 那篇 What Actually Is Claude Code's Plan Mode?[1] 拆完源码后说的就是这个:从纯模型行为看,Plan Mode 不过是"一段固定的提示 + 一套小 UI"。
但 Plan Mode 的价值在 UI:
- • 计划写完会弹一个审批界面——而不是混在聊天流里
- • 审批的时候你可以选"按这个干"或"接着修",一键切换工作模式
- • 配合
opusplan 模型设置,计划阶段用 Opus(强推理),实施阶段切回 Sonnet(更省)
后面这条特别值钱。下面单独说。
审批环节:你有五个选项
Claude 把计划写完,跳出一个对话框问你怎么继续。你可以选:
- 1. 同意并切到 auto 模式:批准,从此自动跑,不再问你
- 2. 同意并切到 acceptEdits 模式:批准,文件编辑自动通过,命令还问
- 3. 同意并保持 default 模式:批准,每一步都还问你
- 5. 用 Ultraplan 在浏览器里复核:把计划送到云端 Claude Code on the Web 上做更深入的协作复核
按 Ctrl+G 还能直接在编辑器里打开计划手动改两笔。挺人性化的。
如果你打开了 showClearContextOnPlanAccept,批准的时候还多一个选项:先清空当前桌面再开干。意思是把调研过程中读的那一堆文件全清掉,只留下计划本身作为新会话的起点。下面会大段调研 + 大段实施的任务,这个特别好用——桌面瞬间清爽,Claude 不被前面调研的细节带偏。
opusplan:一个小但好用的设置
正常你跑 /model 选模型,整个会话都用这一个。opusplan 是个特殊的:"计划阶段用 Opus,实施阶段用 Sonnet。"
Opus 推理强、贵;Sonnet 写代码够用、便宜。两者你都想要:方案别想错,但实施别花太多钱。
打开方式:/model opusplan。
注意:opusplan 不享受 Opus 的 1M 扩展上下文,计划阶段还是 200K。但对绝大多数任务都够用。
把 Plan Mode 设成项目默认
某些项目(比如生产代码、跨团队共享的核心模块)你希望默认就让 Claude 先规划再动手。在 .claude/settings.json 里加:
{ "permissions": { "defaultMode": "plan" }}
谁 clone 这个项目,启动 Claude Code 都默认进 Plan Mode。要走流程才能开始改东西。
什么时候用哪种?
先问自己一个问题:你这个任务,是清楚还是不清楚?
- • 清楚到能一句话讲完,改动也很小:用 default 就行。Claude 弹框你就按 Yes,可控。
- • 清楚但量大,要改一堆文件:先切 plan 让它出方案,看完没问题再批"切到 acceptEdits",让它一路改下去,你旁边看。
- • 不清楚,自己也不知道怎么改,想让 Claude 帮你想清楚:plan 模式必备。让它先读、先调研、出方案,你和它讨论一两轮再开干。
- • 跑 CI 脚本、自动化任务、长跑后台活:那是 auto / bypassPermissions 的场景,这篇文章先不展开,但记住一句话——只在隔离环境(容器、虚拟机、CI runner)里用,绝对不要在你的真实开发机上挂着
--dangerously-skip-permissions 离开。出过不止一次"rm -rf 把家目录干掉"的事故。
至于上下文窗口,平时不用主动管它。聊久了感觉 Claude 反应变慢、记错事、忘了你说过的话,跑一下 /context 看看是不是该 /compact 了;如果是大调研 + 大实施的任务,记得 Plan Mode 批准的时候勾上"清空上下文再开干"。
记住这一条就够了:桌面要常清、规则要写文件、动手前先让它想一遍。
Choose a permission mode · Explore the context window by Anthropic
引用链接
[1] What Actually Is Claude Code's Plan Mode?: https://lucumr.pocoo.org/2025/12/17/what-is-plan-mode/