大多数最佳实践都基于一个约束:Claude 的 context window 填充速度很快,随着填充,性能会下降。 Claude 的 context window 保存你的整个对话,包括每条消息、Claude 读取的每个文件和每个命令输出。但这可能会很快填满。单个调试会话或代码库探索可能会生成并消耗数万个 token。 这很重要,因为当 context 填充时,LLM 性能会下降。当 context window 即将满时,Claude 可能会开始”遗忘”早期的指令或犯更多错误。context window 是最重要的资源。使用 自定义状态行 持续跟踪 context 使用情况,并查看 减少 token 使用 了解减少 token 使用的策略。
给 Claude 一种验证其工作的方式
当 Claude 能够验证自己的工作时,例如运行测试、比较屏幕截图和验证输出,它的表现会显著提高。 没有明确的成功标准,它可能会产生看起来正确但实际上不起作用的东西。你成为唯一的反馈循环,每个错误都需要你的关注。| 策略 | 之前 | 之后 |
|---|---|---|
| 提供验证标准 | ”实现一个验证电子邮件地址的函数" | "编写一个 validateEmail 函数。示例测试用例:user@example.com 为真,invalid 为假,user@.com 为假。实现后运行测试” |
| 以视觉方式验证 UI 更改 | ”让仪表板看起来更好" | "[粘贴屏幕截图] 实现此设计。对结果进行屏幕截图并与原始设计进行比较。列出差异并修复它们” |
| 解决根本原因,而不是症状 | ”构建失败" | "构建失败,出现此错误:[粘贴错误]。修复它并验证构建成功。解决根本原因,不要抑制错误” |
先探索,再规划,最后编码
让 Claude 直接跳到编码可能会产生解决错误问题的代码。使用 Plan Mode 将探索与执行分开。 推荐的工作流有四个阶段:Plan Mode 很有用,但也增加了开销。对于范围明确且修复很小的任务(如修复拼写错误、添加日志行或重命名变量),要求 Claude 直接执行。当你对方法不确定、更改修改多个文件或你不熟悉被修改的代码时,规划最有用。如果你能用一句话描述 diff,跳过计划。
在提示中提供具体的上下文
Claude 可以推断意图,但它不能读心术。引用特定文件、提及约束,并指出示例模式。| 策略 | 之前 | 之后 |
|---|---|---|
| 限定任务范围。 指定哪个文件、什么场景和测试偏好。 | “为 foo.py 添加测试" | "为 foo.py 编写测试,涵盖用户已注销的边界情况。避免 mock。“ |
| 指向来源。 指导 Claude 到可以回答问题的来源。 | “为什么 ExecutionFactory 有这样奇怪的 api?" | "查看 ExecutionFactory 的 git 历史并总结其 api 是如何形成的” |
| 参考现有模式。 指向代码库中的模式。 | “添加日历小部件" | "查看主页上现有小部件的实现方式以了解模式。HotDogWidget.php 是一个很好的例子。按照模式实现一个新的日历小部件,让用户选择月份并向前/向后分页以选择年份。从头开始构建,除了代码库中已使用的库外,不使用其他库。“ |
| 描述症状。 提供症状、可能的位置以及”修复”的样子。 | “修复登录错误" | "用户报告会话超时后登录失败。检查 src/auth/ 中的身份验证流程,特别是 token 刷新。编写一个失败的测试来重现问题,然后修复它” |
"你会改进这个文件的什么?" 这样的提示可以表面你不会想到要问的东西。
提供丰富的内容
你可以通过多种方式向 Claude 提供丰富的数据:- 使用
@引用文件,而不是描述代码的位置。Claude 在响应前读取文件。 - 直接粘贴图像。复制/粘贴或拖放图像到提示中。
- 提供 URL 用于文档和 API 参考。使用
/permissions来允许列表经常使用的域。 - 管道数据 通过运行
cat error.log | claude直接发送文件内容。 - 让 Claude 获取它需要的东西。告诉 Claude 使用 Bash 命令、MCP 工具或通过读取文件来自己拉取上下文。
配置你的环境
一些设置步骤使 Claude Code 在所有会话中显著更有效。有关扩展功能的完整概述和何时使用每个功能,请参阅 扩展 Claude Code。编写有效的 CLAUDE.md
CLAUDE.md 是一个特殊文件,Claude 在每次对话开始时读取。包括 Bash 命令、代码风格和工作流规则。这给 Claude 提供了它无法从代码中推断的持久上下文。/init 命令分析你的代码库以检测构建系统、测试框架和代码模式,为你提供坚实的基础来精化。
CLAUDE.md 文件没有必需的格式,但保持简短和易读。例如:
CLAUDE.md
| ✅ 包括 | ❌ 排除 |
|---|---|
| Claude 无法猜测的 Bash 命令 | Claude 可以通过读取代码弄清楚的任何东西 |
| 与默认值不同的代码风格规则 | Claude 已经知道的标准语言约定 |
| 测试指令和首选测试运行器 | 详细的 API 文档(改为链接到文档) |
| 存储库礼仪(分支命名、PR 约定) | 经常变化的信息 |
| 特定于你的项目的架构决策 | 长解释或教程 |
| 开发者环境怪癖(必需的环境变量) | 自明的实践,如”编写干净的代码” |
| 常见陷阱或非显而易见的行为 | 文件逐个描述代码库 |
@path/to/import 语法导入其他文件:
CLAUDE.md
- 主文件夹(
~/.claude/CLAUDE.md):适用于所有 Claude 会话 - 项目根目录(
./CLAUDE.md):检入 git 以与你的团队共享 - 父目录:对于 monorepos 有用,其中
root/CLAUDE.md和root/foo/CLAUDE.md都会自动拉入 - 子目录:当处理这些目录中的文件时,Claude 按需拉入子 CLAUDE.md 文件
配置权限
默认情况下,Claude Code 请求可能修改你的系统的操作的权限:文件写入、Bash 命令、MCP 工具等。这是安全的但繁琐。在第十次批准后,你不是真的在审查,你只是点击通过。有三种方式来减少这些中断:- Auto mode:一个单独的分类器模型审查命令并仅阻止看起来有风险的东西:范围升级、未知基础设施或由敌对内容驱动的操作。最适合当你信任任务的总体方向但不想点击通过每一步时
- 权限允许列表:允许你知道是安全的特定工具,如
npm run lint或git commit - 沙箱:启用操作系统级隔离,限制文件系统和网络访问,允许 Claude 在定义的边界内更自由地工作
使用 CLI 工具
CLI 工具是与外部服务交互的最 context 高效的方式。如果你使用 GitHub,安装gh CLI。Claude 知道如何使用它来创建问题、打开拉取请求和读取评论。没有 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 servers,你可以要求 Claude 从问题跟踪器实现功能、查询数据库、分析监控数据、集成来自 Figma 的设计并自动化工作流。设置 hooks
Hooks 在 Claude 工作流中的特定点自动运行脚本。与 CLAUDE.md 指令不同,hooks 是确定性的,保证操作发生。 Claude 可以为你编写 hooks。尝试像 “编写一个在每次文件编辑后运行 eslint 的 hook” 或 “编写一个阻止写入迁移文件夹的 hook” 这样的提示。编辑.claude/settings.json 直接配置 hooks,并运行 /hooks 来浏览配置的内容。
创建 skills
Skills 使用特定于你的项目、团队或域的信息扩展 Claude 的知识。Claude 在相关时自动应用它们,或者你可以使用/skill-name 直接调用它们。
通过向 .claude/skills/ 添加带有 SKILL.md 的目录来创建 skill:
.claude/skills/api-conventions/SKILL.md
.claude/skills/fix-issue/SKILL.md
/fix-issue 1234 来调用它。对于具有你想手动触发的副作用的工作流,使用 disable-model-invocation: true。
创建自定义 subagents
Subagents 在自己的 context 中运行,拥有自己的一组允许的工具。它们对于读取许多文件或需要专门关注而不会使你的主对话混乱的任务很有用。.claude/agents/security-reviewer.md
安装 plugins
Plugins 将 skills、hooks、subagents 和 MCP 服务器捆绑到来自社区和 Anthropic 的单个可安装单元中。如果你使用类型化语言,安装 代码智能 plugin 来为 Claude 提供精确的符号导航和编辑后的自动错误检测。 有关在 skills、subagents、hooks 和 MCP 之间选择的指导,请参阅 扩展 Claude Code。有效沟通
你与 Claude Code 沟通的方式显著影响结果的质量。提出代码库问题
当加入新代码库时,使用 Claude Code 进行学习和探索。你可以问 Claude 你会问另一个工程师的相同类型的问题:- 日志如何工作?
- 我如何创建新的 API 端点?
foo.rs第 134 行的async move { ... }做什么?CustomerOnboardingFlowImpl处理哪些边界情况?- 为什么这段代码在第 333 行调用
foo()而不是bar()?
让 Claude 采访你
Claude 会问你可能还没有考虑过的东西,包括技术实现、UI/UX、边界情况和权衡。管理你的会话
对话是持久的和可逆的。利用这一点!尽早且经常改正方向
最好的结果来自紧密的反馈循环。虽然 Claude 有时会在第一次尝试时完美地解决问题,但快速改正它通常会更快地产生更好的解决方案。Esc:使用Esc键在中途停止 Claude。Context 被保留,所以你可以重定向。Esc + Esc或/rewind:按Esc两次或运行/rewind来打开 rewind 菜单并恢复之前的对话和代码状态,或从选定的消息进行总结。"撤销那个":让 Claude 恢复其更改。/clear:在不相关的任务之间重置 context。长会话与无关的 context 可能会降低性能。
/clear 并使用更具体的提示重新开始,该提示包含你学到的东西。干净的会话与更好的提示几乎总是优于长会话与累积的改正。
积极管理 context
Claude Code 在你接近 context 限制时自动压缩对话历史,这保留了重要的代码和决策,同时释放空间。 在长会话中,Claude 的 context window 可能会充满无关的对话、文件内容和命令。这可能会降低性能,有时会分散 Claude 的注意力。- 在任务之间频繁使用
/clear来完全重置 context window - 当自动压缩触发时,Claude 总结最重要的东西,包括代码模式、文件状态和关键决策
- 为了更多控制,运行
/compact <instructions>,如/compact Focus on the API changes - 要仅压缩对话的一部分,使用
Esc + Esc或/rewind,选择消息检查点,并选择 从这里总结。这会压缩从该点开始的消息,同时保持早期 context 完整。 - 在 CLAUDE.md 中使用像
"When compacting, always preserve the full list of modified files and any test commands"这样的指令来自定义压缩行为,以确保关键 context 在总结中存活 - 对于不需要留在 context 中的快速问题,使用
/btw。答案出现在可关闭的覆盖层中,永远不会进入对话历史,所以你可以检查细节而不增加 context。
使用 subagents 进行调查
由于 context 是你的基本约束,subagents 是可用的最强大的工具之一。当 Claude 研究代码库时,它读取许多文件,所有这些都消耗你的 context。Subagents 在单独的 context windows 中运行并报告摘要:使用检查点进行 Rewind
Claude 在更改前自动检查点。双击Escape 或运行 /rewind 来打开 rewind 菜单。你可以仅恢复对话、仅恢复代码、恢复两者或从选定的消息进行总结。有关详细信息,请参阅 Checkpointing。
与其仔细规划每一步,你可以告诉 Claude 尝试一些冒险的事情。如果不起作用,rewind 并尝试不同的方法。检查点在会话中持续,所以你可以关闭你的终端并稍后仍然 rewind。
恢复对话
Claude Code 在本地保存对话。当任务跨越多个会话时,你不必重新解释 context:/rename 给会话起描述性名称,如 "oauth-migration" 或 "debugging-memory-leak",以便你稍后可以找到它们。像对待分支一样对待会话:不同的工作流可以有单独的、持久的 context。
自动化和扩展
一旦你对一个 Claude 有效,通过并行会话、非交互模式和扇出模式来增加你的输出。 到目前为止,一切都假设一个人、一个 Claude 和一个对话。但 Claude Code 水平扩展。本部分中的技术展示了你如何能做更多。运行非交互模式
使用claude -p "your prompt",你可以非交互地运行 Claude,不需要会话。非交互模式是你将 Claude 集成到 CI 管道、pre-commit hooks 或任何自动化工作流中的方式。输出格式让你以编程方式解析结果:纯文本、JSON 或流式 JSON。
运行多个 Claude 会话
有三种主要方式来运行并行会话:- Claude Code 桌面应用:以视觉方式管理多个本地会话。每个会话获得自己的隔离 worktree。
- Claude Code 在网络上:在 Anthropic 的安全云基础设施中的隔离 VM 上运行。
- Agent teams:具有共享任务、消息和团队主管的多个会话的自动协调。
| 会话 A(Writer) | 会话 B(Reviewer) |
|---|---|
为我们的 API 端点实现速率限制器 | |
审查 @src/middleware/rateLimiter.ts 中的速率限制器实现。查找边界情况、竞态条件和与我们现有中间件模式的一致性。 | |
这是审查反馈:[会话 B 输出]。解决这些问题。 |
跨文件扇出
对于大型迁移或分析,你可以跨许多并行 Claude 调用分配工作:
你也可以将 Claude 集成到现有的数据/处理管道中:
--verbose 进行调试,在生产中关闭它。
使用 auto mode 自主运行
为了不间断的执行和后台安全检查,使用 auto mode。分类器模型在命令运行前审查它们,阻止范围升级、未知基础设施和由敌对内容驱动的操作,同时让常规工作无提示进行。-p 标志的非交互运行,如果分类器重复阻止操作,auto mode 会中止,因为没有用户可以回退到。请参阅 auto mode 何时回退 了解阈值。
避免常见失败模式
这些是常见的错误。尽早识别它们可以节省时间:- 厨房水槽会话。 你从一个任务开始,然后问 Claude 一些不相关的东西,然后回到第一个任务。Context 充满了无关的信息。
修复:在不相关的任务之间
/clear。 - 一次又一次地改正。 Claude 做错了什么,你改正它,它仍然是错的,你再改正。Context 被失败的方法污染。
修复:在两次失败的改正后,
/clear并编写一个更好的初始提示,包含你学到的东西。 - 过度指定的 CLAUDE.md。 如果你的 CLAUDE.md 太长,Claude 会忽略一半,因为重要的规则在噪音中丢失。
修复:无情地修剪。如果 Claude 已经在没有指令的情况下正确地做某事,删除它或将其转换为 hook。
- 信任然后验证的差距。 Claude 产生一个看起来合理的实现,但不处理边界情况。
修复:始终提供验证(测试、脚本、屏幕截图)。如果你不能验证它,不要发布它。
- 无限探索。 你要求 Claude “调查”某些东西而不限定范围。Claude 读取数百个文件,填充 context。
修复:狭隘地限定调查或使用 subagents,以便探索不会消耗你的主 context。
培养你的直觉
本指南中的模式不是一成不变的。它们是通常效果很好的起点,但可能不是每种情况的最优选择。 有时你_应该_让 context 累积,因为你深入一个复杂的问题,历史很有价值。有时你应该跳过规划,让 Claude 弄清楚,因为任务是探索性的。有时模糊的提示正是你想要的,因为你想看看 Claude 如何解释问题,然后再限制它。 注意什么有效。当 Claude 产生很好的输出时,注意你做了什么:提示结构、你提供的 context、你所在的模式。当 Claude 遇到困难时,问为什么。Context 太嘈杂了吗?提示太模糊了吗?任务对于一次通过来说太大了吗? 随着时间的推移,你会培养没有指南能捕捉的直觉。你会知道何时具体,何时开放,何时规划,何时探索,何时清除 context,何时让它累积。相关资源
- Claude Code 如何工作:代理循环、工具和 context 管理
- 扩展 Claude Code:skills、hooks、MCP、subagents 和 plugins
- 常见工作流:调试、测试、PR 等的分步配方
- CLAUDE.md:存储项目约定和持久 context