大多数最佳实践都基于一个约束:Claude 的上下文窗口会很快被填满,而随着它被填满,性能会下降。Claude 的上下文窗口容纳你的整个对话,包括每条消息、Claude 读取的每个文件以及每条命令输出。然而,这会很快被填满。一次调试会话或代码库探索可能会生成并消耗数万个 token。这很重要,因为随着上下文被填满,LLM 的性能会下降。当上下文窗口快要满时,Claude 可能会开始“遗忘”先前的指令或犯更多错误。上下文窗口是最重要的需要管理的资源。要了解会话在实践中如何被填满,观看一个交互式演示,了解启动时加载了什么以及每次读取文件的开销。使用
自定义状态栏持续跟踪上下文使用情况,并查看
减少 token 使用量了解减少 token 使用量的策略。
给 Claude 一种验证其工作的方法
Claude 在工作看起来完成时就停止。如果没有它可以运行的检查,“看起来完成”就是唯一可用的信号,而你就成了验证循环:每个错误都等着你去发现。给 Claude 一些能产生通过或失败的东西,这个循环就会自行闭合。Claude 完成工作、运行检查、读取结果,并不断迭代直到检查通过。检查是任何能返回 Claude 可在对话中读取的信号的东西:测试套件、构建退出码、linter、将输出与固定样本进行比对的脚本,或与设计稿进行比对的浏览器截图。在
Claude 的检查通过后自行运行,以针对正在运行的应用确认更改。
/verify
一旦检查存在,就决定它对停止的把关有多严格:
在一条提示中:让 Claude 在同一条消息中运行检查并迭代,如上表所示。在整个会话中:将检查设置为一个。一个单独的评估器会在每一轮之后重新检查它,Claude 会持续工作直到目标得到解决。如果 Claude 停滞,Claude Code 最终会在目标仍然设置的情况下停止运行——参见/goal
条件 /goal 评估如何工作。作为确定性关卡:一个Stop 钩子将你的检查作为脚本运行,并阻止该轮结束,直到它通过。Claude Code 会在连续 8 次阻止后覆盖该钩子并结束该轮。由第二意见把关:一个验证子代理或一个动态工作流会检查其自身的发现,让一个全新的模型尝试反驳结果,这样做工作的代理就不是给它打分的那一个。
/goal
和 Stop 钩子版本正是让无人值守的运行在没有你的情况下正确完成的原因。
让 Claude 展示证据而不是断言成功:测试输出、它运行的命令及其返回内容,或结果的截图。审查证据比自己重新运行验证更快,而且对于你没有在旁观看的会话也有效。
先探索,再规划,然后编码
让 Claude 直接开始编码可能会产出解决错误问题的代码。使用计划模式将探索与执行分开。推荐的工作流程包含四个阶段:
1
探索
按
Shift+Tab
进入计划模式,直到状态栏显示 ⏸ plan mode on
,或者用 claude --permission-mode plan 启动会话
。Claude 会读取文件并回答问题,但不做任何更改。claude(计划模式)
2
计划
让 Claude 创建详细的实施计划。按
claude(计划模式)
Ctrl+G
在文本编辑器中打开计划,在 Claude 继续之前直接编辑。3
实施
通过批准计划或按
Shift+Tab
退出计划模式,然后让 Claude 编码,并对照其计划进行验证。claude
4
提交
让 Claude 用描述性的提交信息进行提交并创建 PR。
claude
计划模式很有用,但也会增加开销。对于范围明确且修复很小的任务(比如修正拼写错误、添加一行日志或重命名变量),直接让 Claude 去做。当你对方案不确定、更改涉及多个文件,或者你不熟悉被修改的代码时,计划最有用。如果你能用一句话描述这个 diff,就跳过计划。
在提示中提供具体的上下文
Claude 可以推断意图,但无法读心。引用具体文件、说明约束条件,并指出示例模式。
当你正在探索并且能够承受纠正方向时,模糊的提示可能有用。像
"what would you improve in this file?"
这样的提示可以揭示你原本想不到要问的问题。
提供丰富的内容
你可以通过几种方式向 Claude 提供丰富的数据:用引用文件,而不是描述代码所在位置。Claude 会在回应前读取该文件。@
直接粘贴图片。复制/粘贴或将图片拖放到提示中。提供 URL用于文档和 API 参考。使用/permissions
将常用域名加入允许列表。通过管道传入数据,运行cat error.log | claude
直接发送文件内容。让 Claude 获取它需要的内容。告诉 Claude 使用 Bash 命令、MCP 工具或读取文件来自己拉取上下文。
配置你的环境
几个设置步骤能让 Claude Code 在你所有的会话中显著更高效。关于扩展功能的完整概览以及何时使用每一项,请参阅扩展 Claude Code。
编写有效的 CLAUDE.md
CLAUDE.md 是一个特殊文件,Claude 会在每次对话开始时读取。包含 Bash 命令、代码风格和工作流规则。这为 Claude 提供了它无法仅从代码中推断出的持久上下文。CLAUDE.md 文件没有必需的格式,但要保持简短且便于人类阅读。例如:CLAUDE.md
/context
以确认 Claude 已加载该文件。CLAUDE.md 会在每次会话中加载,因此只包含广泛适用的内容。对于仅有时相关的领域知识或工作流,请改用技能。Claude 会按需加载它们,而不会让每次对话都变得臃肿。保持简洁。对每一行,问自己:
*“删掉这一行会导致 Claude 犯错吗?”*如果不会,就删掉它。臃肿的 CLAUDE.md 文件会导致 Claude 忽略你实际的指令!
如果 Claude 尽管有规则禁止,却仍然在做你不希望它做的事情,那么文件可能太长了,规则被淹没了。如果 Claude 问你一些 CLAUDE.md 中已经回答过的问题,那可能是措辞有歧义。把 CLAUDE.md 当作代码来对待:出问题时审查它,定期精简它,并通过观察 Claude 的行为是否真的改变来测试修改。对于已检入的 CLAUDE.md,运行
/doctor
@path/to/import
语法导入其他文件。关于导入规则以及 CLAUDE.md 文件可以放在哪里,请参见 CLAUDE.md files。
配置权限
在 Pro、Max 和 Team 计划中,自动模式是交互式终端和 VS Code 会话的内置起始权限模式:一个单独的分类器模型会代替你审查大多数操作,只阻止看起来有风险的操作,例如权限范围升级、未知基础设施或由恶意内容驱动的操作。在手动模式下,也就是其他计划的内置起始权限模式,Claude Code 会在可能修改你系统的操作前询问你:文件写入、Bash 命令、MCP 工具。这很安全,但很繁琐。到第十次批准时,你只是在点击通过,而不是在审查。有两个工具可以减少手动模式下的这些打断,并且在自动模式下也适用:
权限允许列表:允许你已知安全的特定工具,例如npm run lint
或git commit
沙箱:启用操作系统级隔离,限制文件系统和网络访问,让 Claude 可以在定义的边界内更自由地工作
沙箱。
使用 CLI 工具
CLI 工具是与外部服务交互时最节省上下文的方式。如果你使用 GitHub,请安装gh
CLI。Claude 知道如何使用它来创建 issue、打开 pull request 和阅读评论。没有 gh
时,Claude 仍然可以使用 GitHub API,但未认证请求经常会触发速率限制。
Claude 也很擅长学习它尚不熟悉的 CLI 工具。可以尝试这样的提示:Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.
连接 MCP 服务器
借助MCP 服务器,你可以让 Claude 根据 issue 跟踪器实现功能、查询数据库、分析监控数据、集成来自 Figma 的设计,并自动化工作流。
设置 hooks
Hooks会在 Claude 工作流中的特定节点自动运行脚本。与 CLAUDE.md 指令这种建议性内容不同,hooks 是确定性的,并保证该操作会发生。Claude 可以为你编写 hooks。可以尝试这样的提示:
*“Write a hook that runs eslint after every file edit”*或
*“Write a hook that blocks writes to the migrations folder.”*编辑
.claude/settings.json
直接手动配置 hooks,并运行 /hooks
浏览已配置的内容。
创建技能
技能通过特定于你的项目、团队或领域的信息来扩展 Claude 的知识。Claude 会在相关时自动应用它们,或者你可以直接通过
/skill-name
来调用它们。
通过向 .claude/skills/
添加一个包含 SKILL.md
的目录来创建技能:
.claude/skills/api-conventions/SKILL.md
.claude/skills/fix-issue/SKILL.md
/fix-issue 1234
来调用它。对于带有副作用、你希望手动触发的工作流,请使用 disable-model-invocation: true
。
创建自定义子代理
子代理在它们自己的上下文中运行,拥有自己的一组允许使用的工具。它们对于读取大量文件或需要专门关注而不弄乱主对话的任务很有用。
.claude/agents/security-reviewer.md
“使用子代理审查此代码的安全问题。”
安装插件
插件将技能、钩子、子代理和 MCP 服务器打包成来自社区和 Anthropic 的单一可安装单元。如果你使用类型化语言,请安装一个
代码智能插件来为 Claude 提供精确的符号导航和编辑后的自动错误检测。有关在技能、子代理、钩子和 MCP 之间进行选择的指导,请参阅
有效沟通
向 Claude 提出你会向另一位工程师提出的问题,对于较大的功能,让 Claude 在你开始实现之前采访你并编写一份规格说明。### 询问代码库问题
在加入新的代码库时,使用 Claude Code 进行学习和探索。你可以向 Claude 提出与向另一位工程师提出的相同类型的问题:- 日志记录是如何工作的?
- 我如何创建一个新的 API 端点?
async move { ... }
在foo.rs
的第 134 行做了什么? - CustomerOnboardingFlowImpl
处理哪些边缘情况? - 为什么这段代码在第 333 行调用
foo()
而不是bar()
?
让 Claude 采访你
Claude 会询问你可能尚未考虑的事情,包括技术实现、UI/UX、边缘情况和权衡。在发送提示之前,将[brief description]
替换为你的功能。
管理你的会话
对话是持久且可逆的。利用这一点!### 尽早且频繁地纠正方向
最好的结果来自紧密的反馈循环。尽管 Claude 偶尔会在第一次尝试时就完美解决问题,但快速纠正它通常能更快地产生更好的解决方案。:使用Esc
Esc
键在操作中途停止 Claude。上下文会被保留,因此你可以重新引导。:按Esc + Esc
或/rewind
Esc
两次或运行/rewind
来打开回退菜单并恢复之前的对话和代码状态,或从选定的消息进行总结。:让 Claude 还原其更改。"Undo that"
:在不相关的任务之间重置上下文。带有无关上下文的长会话可能会降低性能。/clear
/clear
并从头开始,使用一个更具体的提示,其中包含你学到的东西。一个带有更好提示的干净会话几乎总是胜过带有累积修正的长会话。
积极地管理上下文
当你接近上下文限制时,Claude Code 会自动压缩对话历史,从而在释放空间的同时保留重要的代码和决策。在长时间会话中,Claude 的上下文窗口可能会被无关的对话、文件内容和命令填满。这会降低性能,有时还会分散 Claude 的注意力。- 在任务之间频繁使用
/clear
来完全重置上下文窗口 - 当自动压缩触发时,Claude 会总结最重要的内容,包括代码模式、文件状态和关键决策
- 如需更多控制,运行
/compact <instructions>
,例如/compact Focus on the API changes
- 若只想压缩部分对话,使用
Esc + Esc
或/rewind
,选择一个消息检查点,然后选择从此处总结或总结到此处。前者压缩从该点往后的消息,同时保持较早的上下文不变;后者压缩较早的消息,同时完整保留最近的消息。参见回退菜单的总结选项。 - 在 CLAUDE.md 中自定义压缩行为,使用类似
"When compacting, always preserve the full list of modified files and any test commands"
的指令,以确保关键上下文在总结后仍然保留 - 对于不需要留在上下文中的问题,使用
。答案永远不会进入对话历史,因此你可以在不增加上下文的情况下查看细节。/btw
使用子代理进行调查
由于上下文是你的根本约束,使用子代理将研究排除在上下文之外。当 Claude 研究代码库时,它会读取大量文件,所有这些都会消耗你的上下文。子代理在独立的上下文窗口中运行,并回报摘要:添加对抗性审查步骤。
使用检查点回退
Claude 在每次更改前自动对文件进行快照,以便检查点可以恢复它们。双击Escape
或运行 /rewind
打开回退菜单。你可以仅恢复对话、仅恢复代码、恢复两者,或从选定的消息开始总结。详情参见检查点。与其仔细规划每一步,你可以让 Claude 尝试一些有风险的操作。如果不行,回退并尝试不同的方法。检查点与对话一起保存,因此你可以关闭终端,稍后恢复会话,仍然可以回退。
恢复对话
Claude Code 在本地保存对话,因此当任务跨越多次会话时,你不必重新解释上下文。运行以从上次中断处继续,或
claude --continue
claude --resume
从列表中选择。给会话起描述性名称,如 oauth-migration
,以便以后找到它们。参见管理会话了解完整的恢复、分支和命名控制。
自动化与扩展
一旦你熟练使用一个 Claude,就可以通过并行会话、非交互模式和扇出模式来倍增你的产出。### 运行非交互模式
使用claude -p "your prompt"
,你可以非交互式地运行 Claude,无需交互式提示。除非你传递 --no-session-persistence,否则运行仍会创建一个可恢复的会话
非交互模式是你将 Claude 集成到 CI 流水线、pre-commit 钩子或任何自动化工作流中的方式。输出格式让你能够以编程方式解析结果:纯文本、JSON 或流式 JSON。
json
格式返回一个带有 result
字段的单一 JSON 对象。stream-json
格式每行打印一个 JSON 对象,以 init 事件开头。
运行多个 Claude 会话
选择适合你希望自己承担多少协调工作的并行方式,并在会话之间需要传递发现结果时添加消息传递:Worktrees:在隔离的 git 检出中运行独立的 CLI 会话,这样编辑不会相互冲突跨会话消息传递:让你自己运行的会话相互传递发现结果桌面应用:以可视化方式管理多个本地会话,可选地让每个会话位于自己的 worktree 中在云端使用 Claude Code:默认在 Anthropic 管理的基础设施上运行会话Agent 视图:研究预览版。运行claude agents
来派发在后台持续运行的会话,并从一个屏幕中查看它们Agent 团队:实验性功能,默认禁用。通过共享任务、消息传递和团队负责人对多个会话进行自动协调
你可以用测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码来通过测试。
跨文件扇出
对于大型迁移或分析,你可以将工作分配到许多并行的 Claude 调用中。在 git 仓库中,运行让 Claude 将更改拆分到 5 到 30 个子代理。每个子代理在自己的 worktree 中工作并打开一个拉取请求。若要改为从你自己的脚本驱动扇出,请循环遍历
/batch <instruction>
claude -p
:
1
生成任务列表
让 Claude 将需要迁移的文件列表写入一个文件,以便下一步中的循环可以读取它,使用类似这样的提示词
list all 2,000 Python files that need migrating and save the list to files.txt
2
编写一个脚本循环遍历该列表
3
先在几个文件上测试,然后在所有文件上运行
根据前 2-3 个文件出现的问题改进你的提示词,然后在完整集合上运行。
--allowedTools
标志限制 Claude 可以做什么,这在你无人值守运行时很重要。### 使用自动模式自主运行
若要在后台安全检查下不间断执行,请使用自动模式。分类器模型会在命令运行前审查它们,阻止范围升级、未知基础设施和恶意内容驱动的操作,同时让常规工作无需提示即可继续。
-p
标志,Claude Code 不会停止运行。请参阅自动模式何时回退了解会发生什么以及相关阈值。
添加对抗性审查步骤
Claude 无人值守工作的时间越长,在你把工作算作完成之前,独立检查就越重要。在全新的子代理上下文中运行的审查者只能看到 diff 和你给它的标准,而看不到产生该变更的推理过程,因此它会以自己的方式评估结果。要进行正确性检查,请运行内置的
,它会在全新的子代理中审查当前 diff 中的 bug,并将发现返回给会话。若要改为根据你的计划检查 diff,请自己编写审查提示词。指明要检查的工作、要对照检查的计划,以及什么算作一个发现:
/code-review
skill被提示去寻找缺口的审查者通常会报告一些缺口,即使工作本身是可靠的,因为那正是它被要求做的事。追逐每一个发现会导致过度工程:额外的抽象层、防御性代码,以及为不可能发生的情况编写的测试。告诉审查者只标记影响正确性或既定需求的缺口,其余的都视为可选。
避免常见失败模式
这些是常见错误。尽早识别它们可以节省时间:大杂烩会话。你从一个任务开始,然后问 Claude 一些不相关的事情,然后又回到第一个任务。上下文中充满了无关信息。修复:在不相关的任务之间使用 /clear
。反复纠正。Claude 做错了某事,你纠正它,它仍然错,你再纠正。上下文被失败的尝试污染了。修复:在两次失败的纠正之后,/clear
并编写一个更好的初始提示词,把你学到的东西纳入其中。过度指定的 CLAUDE.md。如果你的 CLAUDE.md 太长,Claude 会忽略其中一半,因为重要规则淹没在噪音中。修复:无情地删减。如果 Claude 在没有该指令的情况下已经能正确做某事,就删除它或将其转换为 hook。信任但未验证的缺口。Claude 产出一个看似合理的实现,但没有处理边缘情况。修复:始终提供验证(测试、脚本、截图)。如果你无法验证它,就不要发布它。无限探索。你让 Claude“调查”某事却没有限定范围。Claude 读取数百个文件,填满上下文。修复:将调查范围限定得很窄,或使用子代理,这样探索就不会消耗你的主上下文。
培养你的直觉
本指南中的模式并非一成不变。它们是总体上效果良好的起点,但可能并非对每种情况都是最优的。有时你应该让上下文累积,因为你正深入一个复杂问题,而历史记录很有价值。有时你应该跳过规划,让 Claude 自己弄清楚,因为任务是探索性的。有时模糊的提示词恰恰正确,因为你想在加以约束之前先看看 Claude 如何解读问题。留意什么有效。当 Claude 产出优秀输出时,注意你做了什么:提示词结构、你提供的上下文、你所处的模式。当 Claude 遇到困难时,问问为什么。上下文太嘈杂?提示词太模糊?任务对一次处理来说太大?随着时间推移,你会培养出任何指南都无法捕捉的直觉。你会知道何时该具体、何时该开放,何时该规划、何时该探索,何时该清除上下文、何时该让它累积。
相关资源
Claude Code 的工作原理:智能体循环、工具与上下文管理扩展 Claude Code:技能、钩子、MCP、子智能体与插件常见工作流:调试、测试、PR 等的分步指南CLAUDE.md:存储项目约定与持久上下文
