Best Practices for Claude Code - Claude Code Docs
Tips and patterns for getting the most out of Claude Code, from configuring your environment to scaling across parallel sessions.
code.claude.com
Claude Code 是一个代理式(Agentic)编程环境,它超越了传统聊天机器人的范畴,能够自主读取文件、运行命令、修改代码并解决复杂问题。本文档核心观点认为,要发挥 Claude Code 的最大潜力,开发者需要从“自己写代码”转变为“描述需求并引导代理执行”。
文档强调,上下文窗口管理是使用中的核心约束。随着对话增长,Claude 的性能会因上下文填满而下降,导致遗忘指令或产生错误。因此,高效使用的关键在于:1. 提供验证手段:通过测试用例、截图或预期输出来让 Claude 自我校验,这是提高成功率的最强杠杆;2. 遵循科学工作流:采用“探索-计划-实施-提交”的四阶段模式,利用“计划模式(Plan Mode)”分离思考与执行;3. 精准的上下文注入:利用 @ 引用文件、粘贴图片或通过管道传输数据,减少模糊性。
在环境配置方面,文档详细介绍了 CLAUDE.md 的作用,它是跨会话持久化项目规范的关键。此外,通过配置权限、集成 CLI 工具(如 gh)、连接 MCP 服务器以及创建自定义技能(Skills)和子代理(Subagents),可以极大地扩展 Claude 的能力。最后,文档提出了规模化作业的思路,如非交互模式、并行会话和扇出式(Fan-out)任务分配,并总结了应避免的常见失败模式(如“大杂烩”会话和过度复杂的配置)。
主题一:核心工作流与验证机制
在代理式编程中,最有效的策略是为 Claude 提供验证其工作的方法。Claude 在能够自我检查(如运行测试、对比截图、验证输出)时表现远超预期。如果没有明确的成功标准,它可能会生成看起来正确但实际无法运行的代码,导致开发者沦为唯一的反馈环。高杠杆的策略包括:提供具体的验证标准(如具体的测试用例)、利用 Chrome 扩展进行 UI 视觉验证,以及要求 Claude 针对根本原因而非症状进行修复。
为了避免 Claude 盲目编码导致解决错误的问题,推荐采用四阶段工作流:
- 探索(Explore):在“计划模式”下,让 Claude 阅读文件并回答问题,不进行任何修改。
- 计划(Plan):要求 Claude 创建详细的实施方案,列出需要修改的文件和逻辑流。开发者可以使用
Ctrl+G在编辑器中直接修改该计划。 - 实施(Implement):切换回“正常模式”,让 Claude 根据计划编写代码并运行测试。
- 提交(Commit):最后让 Claude 编写描述性的提交信息并创建 PR。
这种模式在处理复杂、涉及多文件或陌生代码库的任务时尤为重要。虽然对于重命名变量等小任务可以跳过计划,但对于架构变更,分离研究与执行能显著减少无效迭代。此外,提示词的精确度至关重要。开发者应明确任务范围(如指定特定文件和边缘情况)、指向参考源(如 Git 历史)、引用现有模式(如参考项目内已有的组件实现),并详细描述症状而非仅给出模糊指令。通过使用 @ 符号引用文件、直接粘贴 UI 截图或利用 URL 引入外部文档,可以为 Claude 提供丰富的上下文,减少其猜测成本。
主题二:上下文管理与会话控制
Claude 的上下文窗口是其最重要的资源,也是最大的约束。每一次消息、读取的文件和命令输出都会消耗 Token。当窗口接近饱和时,Claude 的性能会退化,表现为遗忘早期指令或逻辑混乱。因此,开发者必须学会“激进地”管理上下文。
有效的会话管理技巧包括:
- 及时纠偏:一旦发现 Claude 偏离轨道,立即按
Esc停止其动作。如果连续两次纠偏失败,说明上下文已被错误尝试污染,此时应使用/clear重置会话,并结合学到的经验重新发起更精确的提示。 - 使用
/clear和/compact:在处理不相关的任务之间,务必运行/clear。Claude 会在接近限制时自动压缩历史,但开发者也可以手动运行/compact并给出重点(如“保留 API 变更相关的上下文”),或者通过/rewind选择特定检查点进行摘要压缩。 - 利用子代理(Subagents)进行调查:这是节省主会话上下文的杀手锏。当需要研究代码库或寻找特定工具时,可以让 Claude 启动子代理。子代理在独立的上下文窗口中运行,完成后仅向主会话汇报摘要,从而避免主会话被大量读取的文件内容塞满。
- 检查点与回滚:Claude 的每一次操作都会创建检查点。通过双击
Esc或运行/rewind,开发者可以恢复代码、对话或两者。这鼓励了“冒险式”编程——可以先让 Claude 尝试高风险方案,失败后一键回滚。 - 会话持久化:利用
claude --continue或--resume可以跨终端会话恢复工作。通过/rename为会话命名(如“fix-memory-leak”),可以将不同的工作流像 Git 分支一样管理,保持每个任务的上下文纯净。
主题三:环境配置与能力扩展
为了让 Claude Code 在项目中长期高效运行,环境配置至关重要。核心工具是 CLAUDE.md 文件,它在每个会话开始时被读取。该文件应包含 Claude 无法通过阅读代码自行推断的信息,如特定的构建命令、代码风格偏好(如“使用 ES 模块而非 CommonJS”)、测试运行器选择以及项目特有的架构决策。开发者应通过 /init 生成初始版本,并随着项目演进不断精简和优化。原则是:如果删除某条规则不会导致 Claude 犯错,就删掉它,以防文件过大导致核心指令被忽略。
除了 CLAUDE.md,还有多种扩展手段:
- 技能(Skills):在
.claude/skills/下创建SKILL.md,用于存储特定领域的知识或可重复的工作流(如“修复 GitHub Issue”的标准化步骤)。技能按需加载,不会像CLAUDE.md那样占用每个会话的初始空间。 - 钩子(Hooks):用于定义必须执行的自动化脚本,如“每次编辑后运行 lint”。与建议性的指令不同,钩子是确定性的强制执行。
- 权限与沙箱:通过
/permissions设置允许列表(如允许git commit),可以减少频繁的确认弹窗。在处理高风险任务时,可以使用/sandbox进行 OS 级隔离,或在受控环境中使用--dangerously-skip-permissions实现全自动运行。 - 外部集成:利用 CLI 工具(如
gh、aws)和 MCP 服务器,Claude 可以直接与 GitHub、数据库、Notion 或 Figma 交互。CLI 工具通常比直接调用 API 更节省上下文。 - 插件(Plugins):通过
/plugin安装社区或官方插件,可以一键获得代码智能导航、错误检测等高级功能。
主题四:自动化、规模化与避坑指南
Claude Code 不仅是一个单人辅助工具,还可以通过并行化和自动化实现产出翻倍。
- 非交互模式:使用
claude -p "prompt"可以将 Claude 集成到 CI/CD 流水线、pre-commit 钩子或自动化脚本中。配合--output-format json,可以实现程序化的结果解析。 - 并行会话与代理团队:开发者可以同时开启多个会话处理不同任务。一种高级模式是“作者/评审者”模式:会话 A 编写代码,会话 B(拥有独立上下文,无偏见)进行安全或逻辑评审,会话 A 再根据反馈修改。
- 扇出式(Fan-out)处理:对于大规模迁移任务(如将 2000 个文件从 React 迁移到 Vue),可以先让 Claude 生成任务清单,然后编写 Bash 脚本循环调用
claude -p处理每个文件。通过--allowedTools限制权限,可以确保大规模自动化时的安全性。
应避免的常见失败模式:
- “大杂烩”会话:在一个会话中处理多个无关任务,导致上下文充斥噪音。
- 过度膨胀的
CLAUDE.md:包含太多 Claude 能自学的内容,导致重要规则被淹没。 - 信任而不验证:接受看起来合理但未经验证的代码。
- 无限探索:让 Claude 无限制地“调查”而不划定范围,迅速耗尽 Token。
开发者应培养直觉,识别何时该提供详细指令,何时该让 Claude 自由发挥。通过观察 Claude 在何种提示下表现优异,不断迭代自己的协作模式。
原文摘录
-
"Claude performs dramatically better when it can verify its own work, like run tests, compare screenshots, and validate outputs. This is the single highest-leverage thing you can do." (当 Claude 能够验证自己的工作时,表现会显著提升。这是你能做的最高杠杆的事情。)
-
"Most best practices are based on one constraint: Claude's context window fills up fast, and performance degrades as it fills." (大多数最佳实践都基于一个约束:Claude 的上下文窗口填充很快,且性能会随之下降。)
-
"Separate research and planning from implementation to avoid solving the wrong problem." (将研究和计划与实施分离,以避免解决错误的问题。)
-
"Treat CLAUDE.md like code: review it when things go wrong, prune it regularly, and test changes by observing whether Claude's behavior actually shifts." (像对待代码一样对待
CLAUDE.md:出错时审查它,定期修剪,并通过观察 Claude 的行为是否发生变化来测试修改。) -
"A clean session with a better prompt almost always outperforms a long session with accumulated corrections." (一个带有更好提示词的干净会话,表现几乎总是优于一个积累了多次修正的长会话。)
问答
问:为什么“计划模式(Plan Mode)”如此重要? 答:它强制 Claude 在动代码前先进行思考和研究。这能防止 Claude 在没理解全局架构的情况下盲目修改,减少因方向性错误导致的 Token 浪费和代码混乱。
问:CLAUDE.md 和 Skills 有什么区别?
答:CLAUDE.md 是每个会话都会加载的全局规则(如构建命令、代码风格);而 Skills 是存储在特定目录下的领域知识或复杂工作流,仅在相关或被显式调用时加载,更节省上下文。
问:当 Claude 开始重复犯错时该怎么办?
答:不要继续在当前会话中纠错。应使用 /clear 重置上下文,根据之前的失败经验优化提示词,在一个干净的会话中重新开始。
问:如何安全地让 Claude 运行高风险命令?
答:建议使用 /sandbox 开启 OS 级隔离,或者在没有互联网连接的容器中使用 --dangerously-skip-permissions。
问:如何利用子代理(Subagents)优化性能? 答:将耗费上下文的“调查研究”或“代码评审”任务交给子代理。子代理在独立窗口运行,只返回关键结论,从而保持主会话的上下文窗口整洁高效。
