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 盲目编码导致解决错误的问题,推荐采用四阶段工作流:

  1. 探索(Explore):在“计划模式”下,让 Claude 阅读文件并回答问题,不进行任何修改。
  2. 计划(Plan):要求 Claude 创建详细的实施方案,列出需要修改的文件和逻辑流。开发者可以使用 Ctrl+G 在编辑器中直接修改该计划。
  3. 实施(Implement):切换回“正常模式”,让 Claude 根据计划编写代码并运行测试。
  4. 提交(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 工具(如 ghaws)和 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 限制权限,可以确保大规模自动化时的安全性。

应避免的常见失败模式:

  1. “大杂烩”会话:在一个会话中处理多个无关任务,导致上下文充斥噪音。
  2. 过度膨胀的 CLAUDE.md:包含太多 Claude 能自学的内容,导致重要规则被淹没。
  3. 信任而不验证:接受看起来合理但未经验证的代码。
  4. 无限探索:让 Claude 无限制地“调查”而不划定范围,迅速耗尽 Token。

开发者应培养直觉,识别何时该提供详细指令,何时该让 Claude 自由发挥。通过观察 Claude 在何种提示下表现优异,不断迭代自己的协作模式。


原文摘录

  1. "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 能够验证自己的工作时,表现会显著提升。这是你能做的最高杠杆的事情。)

  2. "Most best practices are based on one constraint: Claude's context window fills up fast, and performance degrades as it fills." (大多数最佳实践都基于一个约束:Claude 的上下文窗口填充很快,且性能会随之下降。)

  3. "Separate research and planning from implementation to avoid solving the wrong problem." (将研究和计划与实施分离,以避免解决错误的问题。)

  4. "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 的行为是否发生变化来测试修改。)

  5. "A clean session with a better prompt almost always outperforms a long session with accumulated corrections." (一个带有更好提示词的干净会话,表现几乎总是优于一个积累了多次修正的长会话。)


问答

问:为什么“计划模式(Plan Mode)”如此重要? 答:它强制 Claude 在动代码前先进行思考和研究。这能防止 Claude 在没理解全局架构的情况下盲目修改,减少因方向性错误导致的 Token 浪费和代码混乱。

问:CLAUDE.mdSkills 有什么区别? 答:CLAUDE.md 是每个会话都会加载的全局规则(如构建命令、代码风格);而 Skills 是存储在特定目录下的领域知识或复杂工作流,仅在相关或被显式调用时加载,更节省上下文。

问:当 Claude 开始重复犯错时该怎么办? 答:不要继续在当前会话中纠错。应使用 /clear 重置上下文,根据之前的失败经验优化提示词,在一个干净的会话中重新开始。

问:如何安全地让 Claude 运行高风险命令? 答:建议使用 /sandbox 开启 OS 级隔离,或者在没有互联网连接的容器中使用 --dangerously-skip-permissions

问:如何利用子代理(Subagents)优化性能? 答:将耗费上下文的“调查研究”或“代码评审”任务交给子代理。子代理在独立窗口运行,只返回关键结论,从而保持主会话的上下文窗口整洁高效。