Claude Code:智能体编程最佳实践指南
原文链接: www.anthropic.com/engineering…
发布日期: 2025年4月18日
Claude Code 是一款用于智能体编程的命令行工具。本文介绍了在各种代码库、编程语言和环境中使用 Claude Code 的技巧和最佳实践。
我们最近发布了 Claude Code,一款用于智能体编程的命令行工具。作为一个研究项目开发的 Claude Code,为 Anthropic 的工程师和研究人员提供了一种更原生的方式,将 Claude 集成到他们的编码工作流程中。
Claude Code 有意设计为底层且不固执己见,提供接近原始模型访问的能力,而不强制执行特定的工作流程。这种设计理念创造了一个灵活、可定制、可脚本化且安全的强大工具。虽然功能强大,但这种灵活性对刚接触智能体编码工具的工程师来说存在学习曲线——至少在他们形成自己的最佳实践之前是如此。
本文概述了一些被证明有效的通用模式,无论是对 Anthropic 内部团队还是在各种代码库、语言和环境中使用 Claude Code 的外部工程师而言都是如此。这些内容并非一成不变或普遍适用;请将其视为起点。我们鼓励您进行实验,找到最适合自己的方式!
想要了解更详细的信息?我们在 claude.ai/code 上的综合文档涵盖了本文提到的所有功能,并提供了更多示例、实现细节和高级技术。
1. 自定义您的设置
Claude Code 是一个智能体编码助手,会自动将上下文拉入提示中。这种上下文收集会消耗时间和 token,但您可以通过环境调优来优化它。
a. 创建 CLAUDE.md 文件
CLAUDE.md 是一个特殊文件,Claude 在开始对话时会自动将其拉入上下文。这使其成为记录以下内容的理想位置:
- 常用 bash 命令
- 核心文件和工具函数
- 代码风格指南
- 测试说明
- 仓库规范(例如,分支命名、合并与变基等)
- 开发环境设置(例如,pyenv 使用、哪些编译器可用)
- 项目特有的任何意外行为或警告
- 其他您希望 Claude 记住的信息
CLAUDE.md 文件没有必须的格式要求。我们建议保持简洁且易于人类阅读。例如:
# Bash 命令
- npm run build: 构建项目
- npm run typecheck: 运行类型检查器
# 代码风格
- 使用 ES modules(import/export)语法,而非 CommonJS(require)
- 尽可能解构导入(例如 import { foo } from 'bar')
# 工作流程
- 完成一系列代码更改后务必进行类型检查
- 为了性能,优先运行单个测试,而非整个测试套件
您可以在多个位置放置 CLAUDE.md 文件:
- 仓库根目录,或您运行
claude的任何位置(最常见的用法)。将其命名为CLAUDE.md并提交到 git,以便在会话间和团队间共享(推荐),或命名为CLAUDE.local.md并将其添加到.gitignore - 运行
claude的目录的任何父目录。这对单体仓库最有用,您可能从root/foo运行claude,同时在root/CLAUDE.md和root/foo/CLAUDE.md中都有CLAUDE.md文件。这两个文件都会自动拉入上下文 - 运行
claude的目录的任何子目录。这是上述情况的反向,在这种情况下,当您处理子目录中的文件时,Claude 会按需拉入CLAUDE.md文件 - 您的主文件夹(
~/.claude/CLAUDE.md),这会应用于您所有的 claude 会话
当您运行 /init 命令时,Claude 会自动为您生成一个 CLAUDE.md 文件。
b. 调优您的 CLAUDE.md 文件
您的 CLAUDE.md 文件会成为 Claude 提示的一部分,因此应像任何常用提示一样进行优化。一个常见错误是添加大量内容却不迭代测试其有效性。花时间进行实验,确定什么能产生最佳的模型指令遵循效果。
您可以手动向 CLAUDE.md 添加内容,或按 # 键给 Claude 一条指令,它会自动将其纳入相关的 CLAUDE.md 文件。许多工程师在编码时频繁使用 # 来记录命令、文件和风格指南,然后将 CLAUDE.md 的更改包含在提交中,以便团队成员也能受益。
在 Anthropic,我们偶尔会通过提示优化器运行 CLAUDE.md 文件,并经常调优指令(例如,添加"IMPORTANT"或"YOU MUST"等强调词)以提高遵循度。
c. 管理 Claude 的允许工具列表
默认情况下,Claude Code 会为任何可能修改您系统的操作请求权限:文件写入、许多 bash 命令、MCP 工具等。我们设计 Claude Code 时采用了这种刻意保守的方式来优先考虑安全性。您可以自定义允许列表,允许您知道是安全的额外工具,或允许容易撤销的潜在不安全工具(例如,文件编辑、git commit)。
有四种方式管理允许的工具:
- 在会话期间提示时选择"Always allow"
- 启动 Claude Code 后使用
/permissions命令来添加或删除允许列表中的工具。例如,您可以添加Edit以始终允许文件编辑,Bash(git commit:*)以允许 git 提交,或mcp__puppeteer__puppeteer_navigate以允许使用 Puppeteer MCP 服务器进行导航 - 手动编辑您的
.claude/settings.json或~/.claude.json(我们建议将前者提交到源代码控制以与团队共享) - 使用
--allowedToolsCLI 标志进行会话特定的权限设置
💡 工具权限管理方式对比
| 方式 | 适用场景 | 持久性 |
|---|---|---|
| "Always allow" 选择 | 会话中临时允许 | 会话级别 |
/permissions 命令 | 交互式配置 | 配置文件级别 |
| 编辑 settings.json | 团队共享配置 | 永久(可提交) |
--allowedTools 标志 | 脚本/自动化 | 会话级别 |
d. 如果使用 GitHub,请安装 gh CLI
Claude 知道如何使用 gh CLI 与 GitHub 交互,包括创建 issue、打开 pull request、阅读评论等。如果未安装 gh,Claude 仍然可以使用 GitHub API 或 MCP 服务器(如果您已安装)。
2. 为 Claude 提供更多工具
Claude 可以访问您的 shell 环境,您可以像为自己构建便捷脚本和函数一样为它构建。它还可以通过 MCP 和 REST API 利用更复杂的工具。
a. 将 Claude 与 bash 工具配合使用
Claude Code 继承您的 bash 环境,使其可以访问您的所有工具。虽然 Claude 知道 unix 工具和 gh 等常用工具,但如果没有说明,它不会知道您的自定义 bash 工具:
- 告诉 Claude 工具名称并附上使用示例
- 告诉 Claude 运行
--help来查看工具文档 - 在
CLAUDE.md中记录常用工具
b. 将 Claude 与 MCP 配合使用
Claude Code 既是 MCP 服务器也是客户端。作为客户端,它可以通过三种方式连接到任意数量的 MCP 服务器以访问其工具:
- 在项目配置中(在该目录中运行 Claude Code 时可用)
- 在全局配置中(在所有项目中可用)
- 在已提交的
.mcp.json文件中(对任何在您代码库中工作的人可用)。例如,您可以将 Puppeteer 和 Sentry 服务器添加到您的.mcp.json中,以便每个在您仓库工作的工程师都可以开箱即用地使用这些服务器。
使用 MCP 时,使用 --mcp-debug 标志启动 Claude 也有助于识别配置问题。
💡 MCP 配置范围
graph TD
Root((MCP 配置))
Root --> A[项目配置]
Root --> B[全局配置]
Root --> C[.mcp.json 文件]
A --> A1[目录特定<br/>仅当前项目可用]
B --> B1[全局可用<br/>所有项目共享]
C --> C1[可提交到仓库<br/>团队共享]
c. 使用自定义斜杠命令
对于重复的工作流程——调试循环、日志分析等——将提示模板存储在 .claude/commands 文件夹内的 Markdown 文件中。当您输入 / 时,这些命令会通过斜杠命令菜单可用。您可以将这些命令提交到 git 以使团队其他成员也能使用。
自定义斜杠命令可以包含特殊关键字 $ARGUMENTS 来传递命令调用的参数。
例如,这是一个您可以用来自动拉取和修复 Github issue 的斜杠命令:
请分析并修复 GitHub issue: $ARGUMENTS。
请按以下步骤操作:
1. 使用 `gh issue view` 获取 issue 详情
2. 理解 issue 中描述的问题
3. 搜索代码库中的相关文件
4. 实施必要的更改以修复 issue
5. 编写并运行测试以验证修复
6. 确保代码通过 linting 和类型检查
7. 创建描述性的提交消息
8. 推送并创建 PR
记住使用 GitHub CLI(`gh`)处理所有 GitHub 相关任务。
将上述内容放入 .claude/commands/fix-github-issue.md 后,它就可以作为 Claude Code 中的 /project:fix-github-issue 命令使用。然后您可以使用 /project:fix-github-issue 1234 让 Claude 修复 issue #1234。同样,您可以将自己的个人命令添加到 ~/.claude/commands 文件夹中,以便在所有会话中使用。
3. 尝试常用工作流程
Claude Code 不强制执行特定的工作流程,让您可以灵活地按自己的方式使用它。在这种灵活性允许的空间内,我们的用户社区中涌现出了几种有效使用 Claude Code 的成功模式:
a. 探索、规划、编码、提交
这种通用工作流程适用于许多问题:
-
要求 Claude 阅读相关文件、图像或 URL,提供一般性的指示("阅读处理日志的文件")或具体的文件名("阅读 logging.py"),但明确告诉它暂时不要编写任何代码。
- 这是工作流程中您应该考虑大量使用子代理的部分,尤其是对于复杂问题。告诉 Claude 使用子代理来验证细节或调查它可能有的特定问题,尤其是在对话或任务的早期,往往可以保持上下文可用性而不会在效率方面有太大损失。
-
要求 Claude 制定解决特定问题的计划。我们建议使用"think"一词来触发扩展思考模式,这会给 Claude 额外的计算时间来更彻底地评估替代方案。这些特定短语直接映射到系统中递增的思考预算级别:"think" < "think hard" < "think harder" < "ultrathink"。每个级别为 Claude 分配逐渐增加的思考预算。
- 如果这一步的结果看起来合理,您可以让 Claude 创建一个文档或 GitHub issue 来记录其计划,以便如果实施(第 3 步)不是您想要的,您可以重置到这个点。
-
要求 Claude 用代码实现其解决方案。这也是一个好时机,要求它在实施解决方案的各个部分时明确验证其解决方案的合理性。
-
要求 Claude 提交结果并创建 pull request。如果相关,这也是让 Claude 更新任何 README 或更新日志的好时机,解释它刚刚做了什么。
第 1-2 步至关重要——没有它们,Claude 往往会直接跳到编写解决方案。虽然有时这正是您想要的,但要求 Claude 先研究和规划可以显著提高需要深入思考的问题的表现。
💡 探索-规划-编码-提交工作流程
graph TD
A[1. 探索阶段] --> B[2. 规划阶段]
B --> C[3. 编码阶段]
C --> D[4. 提交阶段]
A --> |使用子代理| A1[验证细节]
A --> |明确指示| A2[暂不写代码]
B --> |使用 think| B1[触发深度思考]
B --> |保存计划| B2[文档/Issue]
C --> |边实现边验证| C1[确保合理性]
D --> |更新文档| D1[README/Changelog]
b. 编写测试、提交;编码、迭代、提交
这是 Anthropic 偏爱的工作流程,适用于可以通过单元测试、集成测试或端到端测试轻松验证的更改。测试驱动开发(TDD)在智能体编程中变得更加强大:
-
要求 Claude 根据预期的输入/输出对编写测试。明确说明您正在进行测试驱动开发,以便它避免创建模拟实现,即使是对代码库中尚不存在的功能。
-
告诉 Claude 运行测试并确认它们失败。明确告诉它在此阶段不要编写任何实现代码通常很有帮助。
-
当您对测试满意时,要求 Claude 提交测试。
-
要求 Claude 编写通过测试的代码,指示它不要修改测试。告诉 Claude 继续直到所有测试通过。Claude 通常需要几次迭代来编写代码、运行测试、调整代码,然后再次运行测试。
- 在这个阶段,让它用独立的子代理验证实现没有过度拟合测试会有所帮助
-
一旦您对更改满意,要求 Claude 提交代码。
当 Claude 有一个明确的目标可以迭代时表现最好——视觉模型、测试用例或另一种输出。通过提供像测试这样的预期输出,Claude 可以进行更改、评估结果,并逐步改进直到成功。
💡 测试驱动开发流程
graph TD
A[编写测试] --> B[运行测试]
B --> C{测试失败?}
C --> |是| D[提交测试]
C --> |否| A
D --> E[编写实现代码]
E --> F[运行测试]
F --> G{测试通过?}
G --> |否| E
G --> |是| H[子代理验证]
H --> I[提交代码]
c. 编写代码、截图结果、迭代
与测试工作流程类似,您可以为 Claude 提供视觉目标:
-
给 Claude 一种获取浏览器截图的方式(例如,使用 Puppeteer MCP 服务器、iOS 模拟器 MCP 服务器,或手动复制/粘贴截图到 Claude)。
-
给 Claude 一个视觉模型,通过复制/粘贴或拖放图像,或给 Claude 图像文件路径。
-
要求 Claude 用代码实现设计,获取结果的截图,并迭代直到其结果与模型匹配。
-
当您满意时要求 Claude 提交。
与人类一样,Claude 的输出往往通过迭代显著改善。虽然第一个版本可能很好,但经过 2-3 次迭代后通常会看起来更好。给 Claude 查看其输出的工具以获得最佳结果。
d. Safe YOLO 模式
您可以不监督 Claude,而是使用 claude --dangerously-skip-permissions 绕过所有权限检查,让 Claude 不间断地工作直到完成。这对于修复 lint 错误或生成样板代码等工作流程非常有效。
让 Claude 运行任意命令是有风险的,可能导致数据丢失、系统损坏,甚至数据泄露(例如,通过提示注入攻击)。为了最小化这些风险,请在没有互联网访问的容器中使用 --dangerously-skip-permissions。您可以按照使用 Docker Dev Containers 的参考实现进行操作。
e. 代码库问答
当入职新代码库时,使用 Claude Code 进行学习和探索。您可以向 Claude 提出与结对编程时向项目中另一位工程师提出的相同类型的问题。Claude 可以以智能体方式搜索代码库来回答一般性问题,如:
- 日志记录是如何工作的?
- 我如何创建新的 API 端点?
foo.rs第 134 行的async move { ... }是做什么的?CustomerOnboardingFlowImpl处理哪些边缘情况?- 为什么我们在第 333 行调用
foo()而不是bar()? baz.py第 334 行的等价 Java 代码是什么?
在 Anthropic,以这种方式使用 Claude Code 已成为我们的核心入职工作流程,显著缩短了上手时间并减少了其他工程师的负担。不需要特殊的提示!只需提问,Claude 就会探索代码以找到答案。
f. 使用 Claude 与 git 交互
Claude 可以有效处理许多 git 操作。许多 Anthropic 工程师使用 Claude 完成 90% 以上的 git 交互:
- 搜索 git 历史来回答诸如"v1.2.3 中包含了哪些更改?"、"谁拥有这个特定功能?"或"为什么这个 API 是这样设计的?"等问题。明确提示 Claude 查看 git 历史来回答这类查询会有所帮助。
- 编写提交消息。Claude 会自动查看您的更改和最近的历史记录,撰写一条考虑所有相关上下文的消息
- 处理复杂的 git 操作,如恢复文件、解决变基冲突、比较和移植补丁
g. 使用 Claude 与 GitHub 交互
Claude Code 可以管理许多 GitHub 交互:
- 创建 pull request:Claude 理解"pr"的简写,并会根据 diff 和周围上下文生成适当的提交消息。
- 实施一次性解决方案来处理简单的代码审查评论:只需告诉它修复您 PR 上的评论(可选地,给它更具体的指示),并在完成时推送回 PR 分支。
- 修复失败的构建或 linter 警告
- 分类和处理开放的 issue,通过要求 Claude 循环遍历开放的 GitHub issue
这消除了记住 gh 命令行语法的需要,同时自动化了日常任务。
h. 使用 Claude 处理 Jupyter notebooks
Anthropic 的研究人员和数据科学家使用 Claude Code 来读写 Jupyter notebooks。Claude 可以解释输出,包括图像,提供了一种快速探索和交互数据的方式。没有必需的提示或工作流程,但我们推荐的工作流程是在 VS Code 中并排打开 Claude Code 和一个 .ipynb 文件。
您还可以要求 Claude 在向同事展示之前清理或对 Jupyter notebook 进行美学改进。特别告诉它使 notebook 或其数据可视化"美观"往往有助于提醒它正在为人类观看体验进行优化。
4. 优化您的工作流程
以下建议适用于所有工作流程:
a. 在指令中具体明确
Claude Code 的成功率通过更具体的指令显著提高,尤其是在首次尝试时。提前给出明确的方向可以减少后期纠正的需要。
例如:
| 差 | 好 |
|---|---|
| 为 foo.py 添加测试 | 为 foo.py 编写一个新的测试用例,覆盖用户注销的边缘情况。避免使用 mock |
| 为什么 ExecutionFactory 有这么奇怪的 API? | 查看 ExecutionFactory 的 git 历史并总结其 API 是如何形成的 |
| 添加一个日历组件 | 查看首页上现有组件是如何实现的,以了解模式,特别是代码和接口是如何分离的。HotDogWidget.php 是一个很好的起始示例。然后,按照该模式实现一个新的日历组件,让用户选择月份并向前/向后翻页选择年份。从头构建,不使用代码库中已使用的库以外的库。 |
Claude 可以推断意图,但它不能读心。具体性导致更好地与期望对齐。
b. 给 Claude 图像
Claude 通过多种方式擅长处理图像和图表:
- 粘贴截图(专业提示:在 macOS 中按 cmd+ctrl+shift+4 截图到剪贴板,按 ctrl+v 粘贴。注意这不是 Mac 上通常用于粘贴的 cmd+v,且远程不可用。)
- 拖放图像直接到提示输入
- 提供文件路径给图像
这在使用设计模型作为 UI 开发参考点时特别有用,以及用于分析和调试的视觉图表。如果您没有向上下文添加视觉效果,仍然可以清楚地告诉 Claude 结果在视觉上美观有多重要。
c. 提及您希望 Claude 查看或处理的文件
使用 Tab 补全快速引用仓库中任何位置的文件或文件夹,帮助 Claude 找到或更新正确的资源。
d. 给 Claude URL
在提示旁边粘贴特定的 URL,让 Claude 获取和读取。为避免对相同域名(例如 docs.foo.com)的权限提示,使用 /permissions 将域名添加到您的允许列表。
e. 尽早且经常地进行纠正
虽然自动接受模式(shift+tab 切换)让 Claude 可以自主工作,但通过积极协作和指导 Claude 的方法,您通常会获得更好的结果。您可以通过在开始时向 Claude 彻底解释任务来获得最佳结果,但您也可以随时纠正 Claude。
这四个工具有助于纠正:
- 要求 Claude 在编码前制定计划。明确告诉它在您确认其计划看起来没问题之前不要编码。
- 按 Escape 中断 Claude 在任何阶段(思考、工具调用、文件编辑),保留上下文以便您可以重定向或扩展指令。
- 双击 Escape 跳回历史,编辑之前的提示,并探索不同的方向。您可以编辑提示并重复直到获得您想要的结果。
- 要求 Claude 撤销更改,通常与选项 #2 结合使用以采取不同的方法。
虽然 Claude Code 偶尔会在第一次尝试就完美解决问题,但使用这些纠正工具通常会更快地产生更好的解决方案。
💡 纠正工具对比
| 工具 | 操作 | 适用场景 |
|---|---|---|
| 要求制定计划 | 编码前规划 | 复杂任务 |
| Escape 键 | 中断当前操作 | 需要重定向 |
| 双击 Escape | 回退历史 | 尝试不同方向 |
| 撤销更改 | 回滚修改 | 实现不满意 |
f. 使用 /clear 保持上下文聚焦
在长时间会话中,Claude 的上下文窗口可能会充满不相关的对话、文件内容和命令。这可能会降低性能,有时会分散 Claude 的注意力。在任务之间频繁使用 /clear 命令来重置上下文窗口。
g. 为复杂工作流程使用清单和草稿本
对于具有多个步骤或需要详尽解决方案的大型任务——如代码迁移、修复大量 lint 错误或运行复杂的构建脚本——通过让 Claude 使用 Markdown 文件(甚至是 GitHub issue!)作为清单和工作草稿本来提高性能:
例如,要修复大量 lint 问题,您可以执行以下操作:
- 告诉 Claude 运行 lint 命令并将所有结果错误(带文件名和行号)写入 Markdown 清单
- 指示 Claude 逐个解决每个问题,在修复和验证后勾选并继续下一个
h. 向 Claude 传递数据
有几种方法可以向 Claude 提供数据:
- 复制和粘贴直接到您的提示中(最常见的方法)
- 管道传入 Claude Code(例如,
cat foo.txt | claude),特别适用于日志、CSV 和大数据 - 告诉 Claude 拉取数据通过 bash 命令、MCP 工具或自定义斜杠命令
- 要求 Claude 读取文件或获取 URL(也适用于图像)
大多数会话涉及这些方法的组合。例如,您可以管道传入日志文件,然后告诉 Claude 使用工具拉取额外的上下文来调试日志。
5. 使用无头模式自动化您的基础设施
Claude Code 包含无头模式,用于非交互式上下文,如 CI、pre-commit 钩子、构建脚本和自动化。使用 -p 标志和提示来启用无头模式,使用 --output-format stream-json 进行流式 JSON 输出。
请注意,无头模式不会在会话之间持久化。您每次会话都必须触发它。
a. 使用 Claude 进行 issue 分类
无头模式可以支持由 GitHub 事件触发的自动化,例如当您的仓库中创建新 issue 时。例如,公开的 Claude Code 仓库使用 Claude 检查新 issue 并分配适当的标签。
b. 使用 Claude 作为 linter
Claude Code 可以提供传统 linting 工具无法检测的主观代码审查,识别拼写错误、过时的注释、误导性的函数或变量名等问题。
6. 使用多 Claude 工作流程提升能力
除了独立使用外,一些最强大的应用涉及并行运行多个 Claude 实例:
a. 让一个 Claude 编写代码;使用另一个 Claude 验证
一种简单但有效的方法是让一个 Claude 编写代码,而另一个审查或测试它。与多个工程师协作类似,有时拥有独立的上下文是有益的:
- 使用 Claude 编写代码
- 运行
/clear或在另一个终端启动第二个 Claude - 让第二个 Claude 审查第一个 Claude 的工作
- 启动另一个 Claude(或再次
/clear)来阅读代码和审查反馈 - 让这个 Claude 根据反馈编辑代码
您可以对测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码使测试通过。您甚至可以通过给它们单独的工作草稿本并告诉它们写入哪个和读取哪个,让您的 Claude 实例相互通信。
这种分离通常比让单个 Claude 处理所有事情产生更好的结果。
💡 多 Claude 协作模式
graph TD
A[Claude 1: 编写代码] --> B[Claude 2: 审查代码]
B --> C[Claude 3: 读取代码+审查]
C --> D[Claude 3: 根据反馈修改]
E[Claude A: 编写测试] --> F[Claude B: 实现代码]
F --> G{测试通过?}
G --> |否| F
G --> |是| H[完成]
b. 拥有仓库的多个检出
与其等待 Claude 完成每个步骤,许多 Anthropic 工程师的做法是:
- 创建 3-4 个 git 检出在不同的文件夹中
- 在不同的终端标签页中打开每个文件夹
- 在每个文件夹中启动 Claude 处理不同的任务
- 循环检查进度并批准/拒绝权限请求
c. 使用 git worktrees
这种方法对多个独立任务非常出色,提供了比多个检出更轻量级的替代方案。Git worktrees 允许您将同一仓库的多个分支检出到不同的目录中。每个 worktree 都有自己的工作目录和隔离的文件,同时共享相同的 Git 历史和 reflog。
使用 git worktrees 使您能够在项目的不同部分同时运行多个 Claude 会话,每个都专注于自己的独立任务。例如,您可能让一个 Claude 重构您的认证系统,而另一个构建完全不相关的数据可视化组件。由于任务不重叠,每个 Claude 都可以全速工作,无需等待对方的更改或处理合并冲突:
- 创建 worktrees:
git worktree add ../project-feature-a feature-a - 在每个 worktree 中启动 Claude:
cd ../project-feature-a && claude - 根据需要创建额外的 worktrees(在新的终端标签页中重复步骤 1-2)
一些提示:
- 使用一致的命名约定
- 每个 worktree 维护一个终端标签页
- 如果您在 Mac 上使用 iTerm2,设置通知以便在 Claude 需要关注时提醒
- 为不同的 worktrees 使用单独的 IDE 窗口
- 完成时清理:
git worktree remove ../project-feature-a
d. 使用带有自定义工具的无头模式
claude -p(无头模式)以编程方式将 Claude Code 集成到更大的工作流程中,同时利用其内置工具和系统提示。使用无头模式有两种主要模式:
**1. 扇出(Fanning out)**处理大规模迁移或分析(例如,分析数百个日志中的情感或分析数千个 CSV):
- 让 Claude 编写脚本生成任务列表。例如,生成需要从框架 A 迁移到框架 B 的 2k 个文件列表。
- 循环遍历任务,为每个任务以编程方式调用 Claude,给它一个任务和一组它可以使用的工具。例如:
claude -p "migrate foo.py from React to Vue. When you are done, you MUST return the string OK if you succeeded, or FAIL if the task failed." --allowedTools Edit Bash(git commit:*) - 多次运行脚本并优化您的提示以获得所需结果。
**2. 管道化(Pipelining)**将 Claude 集成到现有的数据/处理管道中:
- 调用
claude -p "<your prompt>" --json | your_command,其中your_command是您处理管道的下一步 - 就是这样!JSON 输出(可选)可以帮助提供结构以便于自动化处理。
对于这两种用例,使用 --verbose 标志调试 Claude 调用会有所帮助。我们通常建议在生产环境中关闭 verbose 模式以获得更干净的输出。
💡 无头模式使用模式
graph TD
subgraph 扇出模式
A1[生成任务列表] --> A2[循环调用 Claude]
A2 --> A3[收集结果]
A3 --> A4[优化提示]
end
subgraph 管道化模式
B1[claude -p prompt --json] --> B2[your_command]
B2 --> B3[下一步处理]
end
您在使用 Claude Code 时有什么技巧和最佳实践?请在 @AnthropicAI 标记我们,让我们看看您正在构建什么!
致谢
由 Boris Cherny 撰写。这项工作借鉴了更广泛的 Claude Code 用户社区的最佳实践,他们富有创意的方法和工作流程不断激励着我们。特别感谢 Daisy Hollman、Ashwin Bhat、Cat Wu、Sid Bidasaria、Cal Rueb、Nodir Turakulov、Barry Zhang、Drew Hodun 以及许多其他 Anthropic 工程师,他们宝贵的见解和 Claude Code 的实践经验帮助塑造了这些建议。
📝 总结
核心要点
- 自定义设置:创建和优化
CLAUDE.md文件,管理工具允许列表,安装必要的 CLI 工具 - 扩展工具能力:利用 bash 工具、MCP 服务器和自定义斜杠命令增强 Claude 的能力
- 采用有效工作流程:探索-规划-编码-提交、TDD、视觉迭代、Safe YOLO 模式、代码库问答
- 优化工作效率:具体指令、提供图像、提及文件、给出 URL、及时纠正、使用 /clear、清单管理
- 自动化基础设施:使用无头模式进行 CI/CD、issue 分类和代码审查
- 多 Claude 协作:让多个 Claude 实例分工协作,使用 git worktrees 并行处理
原文作者: Boris Cherny