Claude Code 最佳实践

用好 Claude Code 的经验和模式:从环境配置到多会话并行。

Claude Code 是一个 agentic coding(代理式编码) 环境。它不像普通聊天机器人那样答完问题就停,而是会读你的文件、跑命令、改代码,在你旁观、纠偏、甚至离开时自主推进任务。

这改变了你的工作方式:从「自己写代码、让 Claude review」,变成「描述你要什么,让 Claude 探索、规划、实现」。但这种自主性是有学习曲线的。

大多数最佳实践都源于一个约束:Claude 的 context window 填得很快,填越满性能越差。整个对话、读过的文件、命令输出全都计入上下文,一次调试或代码探索动辄消耗几万 token。当上下文塞满时,Claude 会开始「忘记」早期指令、犯更多错。上下文是最重要的资源


一、给 Claude 一个验证自己工作的方法 ⭐ 杠杆最大的一件事

提供测试、截图或预期输出,让 Claude 能自检。没有清晰的成功标准,它可能产出「看起来对、其实跑不通」的东西,最后你成了唯一的反馈环。

策略改之前改之后
提供验证标准”实现一个邮箱校验函数""写 validateEmail。测试用例:user@example.com → true,invalid → false,user@.com → false。实现完跑测试”
视觉验证 UI 改动”让 dashboard 好看点""[贴截图] 按这个设计实现,结果截图跟原图对比,列出差异并修复”
治根因不治症状”build 挂了""build 报错:[贴错误]。修复并验证 build 通过,要根因不要 suppress”

UI 改动可以用 Claude in Chrome 扩展验证。让 Claude 展示证据(测试输出、命令和返回、截图)而不是断言”成功了”——你 review 证据比自己重新跑一遍快得多。


二、先探索 → 再规划 → 再写代码

让 Claude 直接写代码常常解错问题。用 plan mode 把探索和执行分开:

  1. Explore(进 plan mode):让 Claude 读文件、回答问题,不做改动
  2. Plan:让它写详细实施方案。Ctrl+G 可以打开方案到编辑器里直接改
  3. Implement:切出 plan mode,对照方案写代码
  4. Commit:让 Claude 提交并开 PR

什么时候跳过 plan mode:改动范围明确、改动小(修 typo、加 log、改变量名),直接干就行。如果你一句话能描述 diff,就别 plan。


三、提示词要具体

Claude 能推测意图,但不会读心术。指明文件、约束、参考模式。

策略改之前改之后
限定范围”给 foo.py 加测试""给 foo.py 写测试,覆盖用户登出的边界场景,不要 mock”
指向信息源”为啥 ExecutionFactory 的 API 这么怪""翻 ExecutionFactory 的 git history,总结这个 API 是怎么演化成现在这样的”
参考既有模式”加个日历组件""看主页其他 widget 是怎么实现的,HotDogWidget.php 是个好例子。照这个模式实现日历组件,能选月份、能翻年份。不引入新依赖”
描述症状”修登录 bug""用户报会话过期后登录失败。检查 src/auth/,特别是 token refresh。先写一个能复现的失败测试,再修”

模糊提示在探索阶段有用,比如”这个文件有哪些可以改进的”——能让你想到没想过的角度。


四、提供丰富内容


五、配置环境

5.1 写好 CLAUDE.md

/init 生成初版,再慢慢调。CLAUDE.md 是每次会话开始都会加载的特殊文件。

保持简短。每一行问自己:「删了这条,Claude 会不会出错?」——不会就删。臃肿的 CLAUDE.md 会让 Claude 忽略你真正的指令

✅ 该写❌ 不该写
Claude 猜不到的 Bash 命令Claude 看代码就知道的事
与默认不同的代码风格标准语言惯例
测试说明、首选测试 runner详细 API 文档(贴链接就行)
仓库规范(分支命名、PR 约定)经常变的信息
项目特有架构决策长篇教程
环境怪癖(必需的环境变量)文件级的代码描述
常见坑、非显然的行为”写干净代码”这种废话

可以加强语气(“IMPORTANT”、“YOU MUST”)。检入 git 让团队共建。

位置

支持 @路径 导入其他文件。

5.2 配置权限

默认每个修改性操作都要批准,烦。三种方法减少打断:

5.3 用 CLI 工具

告诉 Claude 用 ghawsgcloudsentry-cli 这些 CLI——这是和外部服务交互最省 context 的方式。装了 gh 它就能开 issue、PR、读评论。Claude 也能学新 CLI:用 'foo-cli --help' 学一下 foo,然后用它解决 A、B、C

5.4 接 MCP 服务器

claude mcp add 接 Notion、Figma、数据库等。

5.5 设置 Hooks

必须每次都发生、零例外的事用 hooks。CLAUDE.md 是建议性的,hooks 是确定性的。让 Claude 帮你写:"写个 hook,每次编辑文件后跑 eslint"

5.6 创建 Skills

.claude/skills/ 下放 SKILL.md,给 Claude 项目/团队/领域知识。Claude 相关时自动应用,或者 /skill-name 直接调用。

---
name: api-conventions
description: REST API design conventions for our services
---
# API Conventions
- URL 路径用 kebab-case
- JSON 字段用 camelCase
- 列表接口必须分页
- URL 里带版本(/v1/、/v2/)

带副作用、只想手动触发的工作流,加 disable-model-invocation: true

5.7 自定义 subagent

.claude/agents/ 下定义专门助手。Subagent 有独立 context 和独立工具集,适合读很多文件或需要专注的任务。明确告诉 Claude:“用 subagent 审下这段代码的安全问题”。

5.8 安装插件

/plugin 浏览市场。插件把 skill + hook + subagent + MCP 打包安装。如果用静态类型语言,装一个 code intelligence 插件。


六、有效沟通

6.1 问代码库的问题

把 Claude 当资深工程师问:

新人 onboarding 神器,不用特殊提示词。

6.2 让 Claude 反过来面试你

大功能开发前,让它先问你:

我要做 [简短描述]。用 AskUserQuestion 工具详细面试我。

问技术实现、UI/UX、边界情况、顾虑、权衡。别问显然的问题,
挖那些我可能没想过的难点。

问完之后写一份完整 spec 到 SPEC.md。

写完 spec 后开新会话执行——新会话上下文干净、专注实现。最有用的 spec 是自包含的:点名文件和接口、明确什么不在范围内、最后给一个端到端的验证步骤。


七、管理会话

7.1 早纠偏、勤纠偏

经验法则:同一个问题纠正超过两次,说明 context 已经被失败方案污染了。/clear 重开,写一个吸收了刚才教训的更具体提示词。干净的会话 + 好提示词,几乎总是赢过长会话 + 累积纠正

7.2 激进管理 context

7.3 用 subagent 做调研

Context 是根本约束,subagent 是最强工具之一。

用 subagent 调研我们的认证系统是怎么处理 token refresh 的,
看看有没有现成的 OAuth 工具我可以复用

它在独立 context 里探索、读文件、最后给你总结,不污染主会话。也可以用 subagent 做实现后验证:用 subagent 审下这段代码的边界情况

7.4 用 checkpoint 回退

每次你发的 prompt 都是 checkpoint。Claude 自动在每次改动前快照文件。双击 Esc 或 /rewind 打开菜单——可以只回滚对话、只回滚代码、或都回滚。Checkpoint 跨会话保留。

这意味着:你可以让 Claude 试激进方案,不行就 rewind。Checkpoint 只跟踪 Claude 的改动,不替代 git。

7.5 续会话

/rename 给会话起名,当成 branch 用,每条工作线独立 context。


八、自动化与扩展

当你一个人 + 一个 Claude 已经熟练后,靠并行多倍输出。

8.1 非交互模式

claude -p "prompt" 用于 CI、pre-commit hook、脚本。

# 一次性查询
claude -p "解释这个项目做什么"

# 结构化输出
claude -p "列出所有 API endpoint" --output-format json

# 流式
claude -p "分析这个日志" --output-format stream-json --verbose

8.2 多 Claude 会话并行

按你愿意承担的协调成本选:

Writer/Reviewer 模式

测试版变体:A 写测试,B 写代码过测试。

8.3 跨文件 fan-out

大迁移:

  1. 让 Claude 列出所有要迁的文件
  2. 写脚本 loop 调用 claude -p
  3. 先在几个文件上试,再全跑
for file in $(cat files.txt); do
  claude -p "Migrate $file from React to Vue. Return OK or FAIL." \
    --allowedTools "Edit,Bash(git commit *)"
done

--allowedTools 限制无人值守时能做的事。

8.4 Auto mode 自治

claude --permission-mode auto -p "fix all lint errors"

分类器审命令,拦权限升级/未知基础设施/恶意驱动动作,常规活直接放行。非交互模式下,如果分类器反复拦截,会自动中止(因为没人兜底)。

8.5 加一个对抗性 review 步骤

Claude 自主跑越久,独立检查越重要。Reviewer 在新 subagent context 里只看 diff 和你给的标准,不带产出过程的 reasoning,所以会按结果本身评判。

用 subagent 把限流器 diff 对照 PLAN.md 审一遍。
检查每条需求是否实现、边界情况是否有测试、
有没有动到任务范围外的东西。报缺口,不要风格偏好。

注意:被要求”找缺口”的 reviewer 通常一定会报些东西,即便工作没问题。追着每条改会导致过度工程化。只让它报影响正确性或既定需求的缺口,其余当可选。


九、避开常见失败模式

模式表现修法
杂物间会话一会儿干 A、一会儿插一个无关 B、又回去干 A不相关任务间 /clear
反复纠正改→错→改→还错,context 全是失败方案两次纠正后 /clear,写吸收教训的新 prompt
过度详写的 CLAUDE.md太长,重要规则被埋没,Claude 忽略一半狠剪。Claude 不靠那条也能做对,就删掉,或转 hook
信任但不验证看起来挺像那么回事,边界没处理总是给验证手段;验证不了就别上
无尽探索让它「调研」却没限范围,它读几百个文件填满 context收窄范围,或用 subagent 隔离

十、培养直觉

这些模式不是金科玉律,是好用的起点。

注意什么有效。产出好时,回想:提示词结构?提供的 context?所处模式?产出差时,问为什么。Context 太杂?提示太空?任务太大?

时间久了你会有任何指南都给不了的直觉。