1. 为什么 Agent CTO 把 Plan Mode 当成默认起手式
Claude Code 是 Anthropic 推出的终端级编程 Agent,能读写文件、跑命令、改代码、执行测试,适合已经有一定工程经验、想把 AI 真正嵌进日常开发流的开发者。但很多人第一次用它,习惯是打开终端就开始打字,把需求一股脑倒进去,然后期待它一次成型。我见过太多这样的场景:需求描述三行,Claude 生成了十二个文件,跑起来报错,再改,再报错,最后人比不用 AI 还累。
问题不在模型,在输入。Plan Mode(规划模式)就是 Claude Code 里专门解决这个问题的机制。你按两次 Shift + Tab 进入 Plan Mode,Claude 不会直接动代码,而是先跟你对齐方案:它要改哪些文件、用什么数据结构、边界条件怎么处理、有没有更简单的路径。这一步只花你几分钟,但省下的是后面几小时的调试。
我试过在同一个需求上做对比:直接让 Claude 写一个带 Redis Session 的邮箱密码认证,它给我生成了 JWT + Redis + 中间件 + 三个工具函数,还顺手加了一个我根本没提的 refresh token 逻辑。换成 Plan Mode 先聊,我告诉它“Session 存 Redis,24 小时过期,只保护 /api/protected 下的路由,不要 refresh token”,它输出的方案就干净很多,文件数从 7 个降到 3 个,代码量少了一半。
Plan Mode 的核心价值不是让 Claude 变聪明,而是逼你把模糊需求翻译成可执行的约束。你越早暴露约束,Claude 越少自由发挥。Agent CTO 视角下,Plan Mode 不是可选项,是默认起手式。你可以在 Plan Mode 里跟 Claude 来回问:这个方案有没有并发问题?如果 Redis 挂了降级策略是什么?它会把你的思考过程显式化,而不是藏在代码里等你踩坑。
另一个容易被忽略的点是:Plan Mode 的输出可以直接沉淀成 CLAUDE.md 的素材。你在规划阶段反复强调的约束,比如“不要引入新依赖”“所有数据库操作必须走 repository 层”“错误日志必须带 trace_id”,这些都应该写进 CLAUDE.md,让后续每次会话都自动继承。Plan Mode 和 CLAUDE.md 是一对组合拳:前者管单次任务的方案对齐,后者管跨会话的工程约束。
如果你还没用过 Plan Mode,建议从一个小需求开始:比如给现有项目加一个健康检查接口。按两次 Shift + Tab,输入“我要加一个 /health 接口,返回数据库连接状态和版本号,不要引入新依赖,用现有的 Express 路由结构”。看它先输出方案还是直接改代码。你会发现,先规划再执行,返工率明显下降。
2. TaoToken 前置:把 endpoint 和 Key 统一到一条通道
Claude Code 默认走 Anthropic 官方 API,但很多开发者在实际项目里需要统一管理 Key、切换模型、控制成本,或者团队共用一条通道。TaoToken 提供的就是这样一个统一入口:你可以在一个地方管理 API Key,把 Claude Code 的 Base URL 指到 TaoToken 的 API 地址,模型 ID 保持 Claude 系列不变,请求就会经过 TaoToken 转发到对应模型。
这一步不是必须的,但如果你符合以下任一情况,建议前置配置:团队多人共用 Claude Code,需要统一 Key 和用量;想在 Claude 和别的模型之间快速切换做对比;需要通过一个控制台看请求日志和消耗;或者你已经在用 TaoToken 的其他能力,想把编码 Agent 也接进来。
配置本身很简单,核心就三件事:Base URL、API Key、Model ID。Claude Code 读取的是环境变量或 settings 文件,你只需要把默认的 Anthropic endpoint 替换成 TaoToken 的 API 地址。注意,这里说的是 API 地址,不是官网首页。API 地址是https://taotoken.net/api,不要加 UTM 参数,直接写这个。
Key 的获取在 TaoToken 控制台的 API Keys 页面。登录后创建一个新 Key,复制出来,注意不要提交到 Git。建议放在 shell 的 profile 文件里,或者用 direnv 这类工具按项目加载。如果你在团队里,最好给每个人单独发 Key,方便审计和回收。
Model ID 这块,Claude Code 默认会用claude-sonnet-4-5或claude-opus-4-5这类标识。你不需要改 Model ID,只需要改 Base URL 和 Key。TaoToken 会根据你请求里的模型标识路由到对应后端。如果你不确定当前 Claude Code 用的是哪个模型,可以在会话里输入/model查看,或者在 settings 里显式指定。
有一个坑要注意:Claude Code 有些版本会校验 Base URL 的格式,如果你写成https://taotoken.net/api/带尾斜杠,可能会拼接出双斜杠导致 404。建议写成https://taotoken.net/api,不带尾斜杠。另外,如果你之前配过ANTHROPIC_BASE_URL环境变量,记得先 unset 或者覆盖,否则会优先读旧值。
配置完成后,你可以用一条最简单的请求验证连通性。不需要跑完整会话,直接在终端里用 curl 发一个 messages 请求,看返回是不是正常 JSON。如果返回 401,说明 Key 不对;如果返回 404,说明 Base URL 拼错了;如果返回 200 但内容为空,检查 Model ID 是否被正确识别。这一步做完,再进 Claude Code 会话,能省掉很多“到底是配置问题还是代码问题”的纠结。
3. 可复制配置:CLAUDE.md 模板 + settings.json + Plan Mode 提示词骨架
这一节直接给可复制的配置。你不需要全部照搬,但建议至少把 CLAUDE.md 和 settings.json 这两块落地到项目里。
先说 CLAUDE.md。它的位置在项目根目录,Claude Code 启动时会自动读取。内容要短、要具体、要带“为什么”。下面是一个我实际在用的模板,你可以按项目改:
# 项目约束 ## 技术栈 - Node.js 20 + TypeScript strict 模式。开启 strict 是因为我们曾在生产环境因隐式 any 导致过线上 Bug。 - 数据库用 PostgreSQL,所有查询走 repository 层,不要在路由里直接写 SQL。 - 测试用 Vitest,新增功能必须带单测,覆盖率不低于 80%。 ## 常用命令 - 启动开发:`pnpm dev` - 跑测试:`pnpm test` - 类型检查:`pnpm typecheck` - 格式化:`pnpm format` ## 禁止事项 - 不要引入新的运行时依赖,除非我明确同意。 - 不要生成我没要求的抽象层。如果一个文件能解决,不要拆成三个。 - 不要改 .env 和任何密钥文件。 ## 为什么 - 这个项目会部署到生产环境,服务真实用户,稳定性优先于开发速度。 - 代码会被至少三个人维护,可读性比 clever 更重要。这个模板控制在 30 行以内,Claude 能可靠遵循。如果你塞进 200 行,它会开始随机忽略。记住一个经验值:Claude 一次能可靠遵循的指令大约 150 到 200 条,而系统提示已经占了约 50 条,你加的每条都在抢注意力。
再说 settings.json。Claude Code 的配置文件通常在~/.claude/settings.json或项目级.claude/settings.json。你要把 Base URL 和 Key 配进去。注意,Key 不建议直接写在 settings.json 里提交到 Git,可以用环境变量引用:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "${TAOTOKEN_API_KEY}" }, "model": "claude-sonnet-4-5", "permissions": { "allow": [ "Bash(pnpm test:*)", "Bash(pnpm typecheck:*)", "Read", "Write" ] } }然后在 shell 里 exportTAOTOKEN_API_KEY。如果你用 zsh,写在~/.zshrc;用 bash,写在~/.bashrc。Windows 用户可以在系统环境变量里加,或者用.env配合 direnv。
Plan Mode 的提示词骨架,我习惯用这个结构:
我要实现 [功能名]。 背景:[一句话说明为什么做这个]。 约束: - [约束1,带原因] - [约束2,带原因] 不要做: - [明确排除的方案] 请先输出方案,不要改代码。方案里包含:涉及文件、数据结构、边界条件、测试计划。这个骨架的关键是“不要做”和“带原因”。Claude 4.5 有过度设计倾向,你不说“不要”,它就会加。你不说“为什么”,它就会在边界情况下做错判断。
如果你用 Claude Code 的/init命令,它会自动生成一个 CLAUDE.md 草稿。但草稿通常太泛,建议手动改。另外,你在会话里按#键,可以把当前指令直接追加到 CLAUDE.md,这个习惯很好用。每次你发现自己在同一件事上纠正 Claude 两次,就按#写进去。
4. 验证请求:从 curl 到 Claude Code 会话的连通性检查
配置写完,不要直接开新会话写业务代码。先做连通性验证,分三步:curl 测 API、Claude Code 测会话、Plan Mode 测规划。
第一步,curl 测 API。在终端里执行:
curl -s -X POST https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: $TAOTOKEN_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 64, "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'正常返回应该是一个 JSON,包含content数组,里面有一段文本。如果返回 401,检查 Key 是否 export 成功,可以用echo $TAOTOKEN_API_KEY看有没有值。如果返回 404,检查 Base URL 是不是写成了https://taotoken.net/api/带尾斜杠,或者路径拼成了/v1/messages之外的东西。如果返回 400,检查 model 字段是不是拼错了。
第二步,Claude Code 测会话。在项目根目录运行claude,进入交互界面。输入一句简单的话,比如“列出当前目录下的文件”。如果它能正常调用工具并返回结果,说明 Base URL 和 Key 都生效了。如果它报local proxy failed或connection refused,通常是 Base URL 写错或者网络层有问题。如果它报reading choices相关错误,说明返回格式不是 Claude Code 预期的结构,检查 Model ID 是否被 TaoToken 正确路由。
第三步,Plan Mode 测规划。按两次 Shift + Tab,输入一个带约束的小需求,比如“给现有 Express 项目加一个 /health 接口,返回数据库连接状态和版本号,不要引入新依赖”。观察它是否先输出方案而不是直接改代码。如果它直接开始写文件,说明 Plan Mode 没生效,检查你是不是在正确的会话模式里。Plan Mode 下 Claude 不应该调用 Write 工具,只应该输出文本方案。
这三步都通过后,你可以做一个端到端验证:让 Claude 在 Plan Mode 下规划一个真实小任务,你确认方案后切回普通模式执行,跑测试,看是否通过。这个过程能同时验证 API 连通性、CLAUDE.md 是否被读取、Plan Mode 是否生效。
有一个细节:Claude Code 在启动时会读取 CLAUDE.md,但如果你在会话中途改了 CLAUDE.md,它不会自动重载。你需要/clear或重启会话。所以建议在开始任务前就把 CLAUDE.md 定好,不要边写边改。
另外,如果你在 settings.json 里配了 permissions,注意 allow 列表里的命令要跟实际用的一致。比如你写了Bash(pnpm test:*),但实际跑的是npm test,Claude 会请求权限,打断流程。建议把常用命令都加进去,减少交互中断。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
配置过程中最容易遇到的四类报错,我按实际踩过的顺序说。
第一类,401 Unauthorized。这个最直接,Key 不对或没传。检查三件事:echo $TAOTOKEN_API_KEY有没有值;settings.json 里的${TAOTOKEN_API_KEY}有没有被正确展开;curl 请求头里是不是用了x-api-key而不是Authorization: Bearer。Claude Code 用的是x-api-key,如果你从别的工具复制配置,很容易搞混。另外,Key 如果包含特殊字符,在 shell 里 export 时要用引号包起来。
第二类,local proxy failed或connection refused。这个通常不是 Key 的问题,是 Base URL 或网络层。先确认ANTHROPIC_BASE_URL的值是https://taotoken.net/api,不带尾斜杠,不带多余路径。然后确认你的终端能访问这个地址,可以用curl -I https://taotoken.net/api看返回头。如果返回 301 或 302,说明地址被重定向了,检查是不是写成了官网首页而不是 API 地址。如果返回连接超时,检查本地网络环境,不要用任何非官方的网络层工具。
第三类,reading choices相关错误。这个报错通常出现在 Claude Code 解析返回 JSON 时,说明返回结构不符合预期。常见原因是 Model ID 写错了,TaoToken 路由到了不支持 messages 格式的后端。检查 settings.json 里的model字段,确认是claude-sonnet-4-5或claude-opus-4-5这类 Claude 系列标识。如果你用了别的模型名,返回格式可能不一样。另外,如果你在 curl 里手动指定了 model,但 Claude Code 里用的是另一个,也会出现不一致。
第四类,OAuth 相关报错。Claude Code 某些版本会尝试 OAuth 登录流程,如果你已经配了 API Key,它可能仍然弹 OAuth。这时候检查是不是有旧的凭据缓存。通常在~/.claude/目录下,可以删掉credentials.json或类似文件,然后重新用 API Key 模式启动。如果你用的是 Claude Code 的订阅模式而不是 API 模式,OAuth 是正常的,但那种情况下不走 Base URL 配置,走的是官方登录。你要确认自己用的是 API 模式。
除了这四类,还有一个隐蔽问题:CLAUDE.md 没被读取。表现是 Claude 不遵守你写的约束,比如你写了“不要引入新依赖”,它还是加了。检查 CLAUDE.md 是不是在项目根目录,文件名大小写是不是正确(必须是CLAUDE.md,不是claude.md)。另外,如果你在子目录里启动 Claude Code,它可能读的是子目录的 CLAUDE.md,而不是根目录的。建议在项目根目录启动。
最后,如果你同时用了 CC Switch 或 Cline MCP 这类工具,注意它们可能也会改 Base URL 和 Key。确保三件套一致:Base URL 是https://taotoken.net/api,Key 是 TaoToken 控制台创建的,Model ID 是 Claude 系列。任何一处不一致,都会导致请求失败或路由到错误后端。
6. 把 Plan Mode 和 CLAUDE.md 变成团队资产
Plan Mode 和 CLAUDE.md 的价值,单次使用看不出来,持续用才会显现。Agent CTO 视角下,这两样东西不是个人技巧,是团队资产。
Plan Mode 的输出可以沉淀成设计文档。每次规划完,让 Claude 把方案写进plan.md或SCRATCHPAD.md,放在项目顶层。下次会话时,Claude 可以读这个文件恢复上下文,而不是从零开始。这解决了一个大问题:上下文窗口在 30% 左右就开始退化,不是 100%。你不可能在一个会话里做完所有事,但你可以用外部文件把关键决策保留下来。
CLAUDE.md 可以沉淀成团队规范。一个人写,全团队用。新成员加入时,不需要口头解释“我们为什么用 strict 模式”“为什么不要直接写 SQL”,CLAUDE.md 里都有。而且它带“为什么”,比干巴巴的规范更容易被遵守。你可以在代码评审时检查:如果某个约束反复被违反,就把它写进 CLAUDE.md,让 Claude 在生成阶段就避免。
如果你想把这条链路跑通,建议从今天开始做三件事:第一,在项目根目录建一个 CLAUDE.md,按第 3 节的模板填上你的项目约束;第二,把 Claude Code 的 Base URL 和 Key 配到 TaoToken,用第 4 节的 curl 验证连通;第三,下一个任务先用 Plan Mode 规划,确认方案后再执行。这三步做完,你会明显感觉到返工变少。
需要 Key 的话,去 TaoToken 控制台的 API Keys 页面创建;配置细节看接入文档;想先试模型对话,可以直接在模型对话页面发一条消息看返回。如果你打算长期用 Claude Code 做编码和 Agent 任务,Coding Plan 更适合,Key 和通道都统一管理,不用每次换项目重新配。
最后留一个我自己的习惯:每次会话结束前,如果发现 Claude 在某件事上被纠正了两次以上,就按#把这条约束写进 CLAUDE.md。一个月后回头看,你的 CLAUDE.md 会变成一份记录代码库实际运作方式的活文档。这比任何教程都值钱。