Claude Code 最佳实践(译)

本文译自 Claude Code: Best practices for agentic coding,Anthropic 发布的官方指南,涵盖 CLAUDE.md 配置、上下文优化、MCP 集成、安全策略等实用技巧,助力开发者提升 agentic 编码效率与协作质量。

✉️ 免费订阅更新

订阅我的免费通讯,第一时间获取生成式 AI 领域优质内容

我承诺保护您的隐私,不会向第三方分享您的信息。
您可以随时取消订阅。

我们最近 发布了 Claude Code,这是一个专门用于智能体编程的命令行工具。作为一项研究项目,它的开发初衷是为 Anthropic 的工程师和研究人员提供一种更自然、更深入的方式,将 Claude 集成到他们的日常编程工作流程中。

Claude Code 的设计理念是“低耦合”和“无预设偏见” (unopinionated),它提供了对模型近乎原始的访问权限,而不会强迫用户遵循特定的工作流程。这种设计打造了一个灵活、可定制、可编写脚本且安全的强大工具。不过,这种强大的灵活性也给初次接触智能体编程工具的工程师带来了一定的学习挑战——至少在他们掌握自己的最佳实践之前是如此。

这篇文章总结了一些通用模式,这些模式已被证明在 Anthropic 内部团队以及使用 Claude Code 处理各种代码库、语言和环境的外部工程师中行之有效。这里列出的任何内容都不是绝对的或放之四海而皆准的;请将这些建议视为你的起点。我们鼓励你大胆尝试,找到最适合你自己的方法!

想了解更多细节?请访问我们位于 claude.ai/code 的全面文档,其中涵盖了本文提及的所有功能,并提供了更多示例、实现细节和高级技术。

1. 定制你的设置

Claude Code 是一个 AI 智能体 (AI agent) 编程助手,它会自动将相关上下文提取到提示中。尽管这个过程会消耗时间和 Token,但你可以通过调整环境来优化它。

a. 创建 CLAUDE.md 文件

CLAUDE.md 是一个特殊文件,当会话开始时,Claude 会自动将其内容加载到上下文中。因此,它是用来记录以下信息的理想选择:

  • 常用 bash 命令
  • 核心文件和实用函数
  • 代码风格指南
  • 测试说明
  • 仓库协作规范(例如:分支命名、合并还是变基等)
  • 开发者环境配置(例如:如何使用 pyenv,哪些编译器可用)
  • 项目中特有的异常行为或警告
  • 其他任何你希望 Claude 记住的信息

CLAUDE.md 文件没有固定的格式要求。我们建议保持其内容简洁并易于人类阅读。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Bash commands

- npm run build: Build the project
- npm run typecheck: Run the typechecker

# Code style

- Use ES modules (import/export) syntax, not CommonJS (require)
- Destructure imports when possible (eg. import { foo } from 'bar')

# Workflow

- Be sure to typecheck when you’re done making a series of code changes
- Prefer running single tests, and not the whole test suite, for performance

你可以将 CLAUDE.md 文件放在以下几个位置:

  • 你的代码仓库根目录,或任何你运行 claude 的地方(这是最常见的用法)。你可以将其命名为 CLAUDE.md 并提交到 git 中,以便在不同会话和团队成员间共享(推荐),或者命名为 CLAUDE.local.md 并将其添加到 .gitignore
  • 你运行 claude 的目录的任何父级目录。这对于多项目仓库 (monorepos) 最为有用,比如你在 root/foo 目录下运行 claude,而 CLAUDE.md 文件同时存在于 root/CLAUDE.mdroot/foo/CLAUDE.md。这两个文件都会自动被加载到上下文中。
  • 你运行 claude 的目录的任何子级目录。这与上一点相反,在这种情况下,当你处理子目录中的文件时,Claude 会按需加载相应的 CLAUDE.md 文件。
  • 你的主文件夹 (~/.claude/CLAUDE.md),这会使其对你所有的 Claude 会话生效。

当你运行 /init 命令时,Claude 会自动为你生成一个 CLAUDE.md 文件。

b. 优化你的 CLAUDE.md 文件

CLAUDE.md 文件是 Claude 提示的一部分,因此你应该像对待任何常用提示一样对其进行优化。一个常见的错误是添加大量内容却不验证其有效性。花些时间进行实验,找出什么能让模型更好地遵循指令。

除了手动添加内容,你还可以按 # 键来给 Claude 一个指令,它会自动将该指令整合到相应的 CLAUDE.md 文件中。许多工程师在编写代码时经常使用 # 来记录命令、文件和风格指南,然后将 CLAUDE.md 的更改提交到版本控制中,这样团队成员也能从中受益。

在 Anthropic,我们有时会通过 提示优化器 来处理 CLAUDE.md 文件,并经常调整指令(例如:使用“IMPORTANT”或“YOU MUST”来增加强调),以提高其遵循度。

Image 1: Claude Code tool allowlist

c. 管理 Claude 的可用工具列表

默认情况下,Claude Code 会对任何可能修改你系统的操作请求许可,例如:文件写入、许多 bash 命令、MCP 工具等。这种刻意保守的设计是为了优先考虑安全性。不过,你可以自定义允许列表,添加你认为安全的工具,或者允许那些易于撤销的潜在不安全工具(例如:file editgit commit)。

有四种方法可以管理允许的工具:

  • 在会话期间提示时选择“始终允许”
  • 在启动 Claude Code 后使用 /permissions 命令,从允许列表中添加或移除工具。例如,你可以添加 Edit 来始终允许文件编辑,添加 Bash(git commit:*) 来允许 git 提交,或者添加 mcp__puppeteer__puppeteer_navigate 来允许使用 Puppeteer MCP 服务器进行导航。
  • 手动编辑你的 .claude/settings.json~/.claude.json 文件(我们建议将前者提交到版本控制中,以便与团队共享)。
  • 使用 --allowedTools CLI 标志来设置当前会话的权限。

d. 如果使用 GitHub,请安装 gh CLI

Claude 知道如何使用 gh 命令行工具与 GitHub 交互,例如创建问题、打开拉取请求、读取评论等。即使你没有安装 gh,Claude 仍然可以使用 GitHub API 或 MCP 服务器(如果你已安装)。

2. 为 Claude 添加更多工具

Claude 可以访问你的 shell 环境,因此你可以像为自己编写脚本和函数一样,为它构建一套便利工具。它还可以通过 MCP 和 REST API 利用更复杂的工具。

a. 将 Claude 与 bash 工具结合使用

Claude Code 继承了你的 bash 环境,使其可以访问你的所有工具。虽然 Claude 知道像 Unix 工具和 gh 这样的常用工具,但如果没有明确的指令,它无法识别你的自定义 bash 工具:

  1. 告诉 Claude 工具的名称并提供使用示例。
  2. 告诉 Claude 运行 --help 来查看工具文档。
  3. CLAUDE.md 中记录常用工具。

b. 将 Claude 与 MCP 结合使用

Claude Code 既可以作为 MCP 服务器,也可以作为客户端。作为客户端,它可以连接到任意数量的 MCP 服务器,通过以下三种方式访问其工具:

  • 在项目配置中(当你在该目录中运行 Claude Code 时生效)。
  • 在全局配置中(在所有项目中都可用)。
  • 在已提交到版本控制的 .mcp.json 文件中(对任何在此代码库工作的成员都可用)。例如,你可以在 .mcp.json 中添加 Puppeteer 和 Sentry 服务器,这样每个在你的仓库中工作的工程师都可以立即使用这些工具。

在使用 MCP 时,使用 --mcp-debug 标志启动 Claude 也有助于识别配置问题。

c. 使用自定义斜杠命令

对于重复的工作流程——比如调试循环、日志分析等——你可以将提示模板存储在 .claude/commands 文件夹中的 Markdown 文件里。当你输入 / 时,这些模板就会出现在斜杠命令菜单中。你可以将这些命令提交到 git 中,以便团队的其他成员也可以使用。

自定义斜杠命令可以包含特殊关键字 $ARGUMENTS,用于传递命令调用中的参数。

例如,下面是一个你可以用来自动获取并修复 GitHub 问题的斜杠命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Please analyze and fix the GitHub issue: $ARGUMENTS.

Follow these steps:

1. Use `gh issue view` to get the issue details
2. Understand the problem described in the issue
3. Search the codebase for relevant files
4. Implement the necessary changes to fix the issue
5. Write and run tests to verify the fix
6. Ensure code passes linting and type checking
7. Create a descriptive commit message
8. Push and create a PR

Remember to use the GitHub CLI (`gh`) for all GitHub-related tasks.

将上述内容保存到 .claude/commands/fix-github-issue.md 文件中,它就会在 Claude Code 中以 /project:fix-github-issue 命令的形式出现。例如,你可以使用 /project:fix-github-issue 1234 来让 Claude 修复 #1234 号问题。同样,你也可以将自己的个人命令添加到 ~/.claude/commands 文件夹中,以便在你的所有会话中都可用。

3. 尝试常见工作流程

Claude Code 不会强制你遵循特定的工作流程,为你提供了随心所欲使用的灵活性。在这种灵活性之下,我们的用户社区中已经涌现出一些成功的使用模式:

a. 探索、规划、编码、提交

这个多功能工作流程适用于许多问题:

  1. 让 Claude 阅读相关文件、图片或 URL,可以提供概括性的指导(例如:“阅读处理日志的文件”)或具体的文件名(例如:“阅读 logging.py”),但要明确告诉它暂时不要编写任何代码。

    这是工作流中需要你考虑大量使用子智能体 (subagents) 的部分,尤其是对于复杂问题。在对话或任务的早期,让 Claude 使用子智能体来验证细节或探究它可能有的特定问题,通常能更好地保留上下文,并且不会牺牲太多效率。

  2. 让 Claude 针对特定问题制定一个解决方案计划。我们建议使用“think”这个词来触发扩展思考模式,这会给予 Claude 额外的计算时间来更彻底地评估备选方案。这些特定的短语直接对应于系统中不同级别的思考预算:“think” < “think hard” < “think harder” < “ultrathink”。每个级别都会为 Claude 分配逐步增加的思考预算。

    如果这一步的结果看起来合理,你可以让 Claude 用它的计划创建一个文档或 GitHub 问题,这样如果接下来的实现(第 3 步)不是你想要的,你就可以轻松地回到这一步。

  3. 让 Claude 将其解决方案通过代码实现。这也是一个好时机,可以要求它在实现解决方案的各个部分时,明确验证其合理性。

  4. 让 Claude 提交结果并创建拉取请求。如果相关,你还可以让 Claude 更新任何 README 或更新日志 (changelog),并解释它刚刚做了什么。

步骤 #1 和 #2 至关重要——没有它们,Claude 往往会直接跳到编写解决方案。虽然有时这正是你想要的,但对于那些需要前期进行深入思考的问题,让 Claude 先进行研究和规划能显著提高最终结果的质量。

b. 编写测试、提交;编码、迭代、提交

这是 Anthropic 内部最喜欢的工作流程之一,特别适用于那些可以通过单元、集成或端到端测试轻松验证的变更。通过 AI 智能体编程,测试驱动开发 (TDD) 变得更加强大:

  1. 让 Claude 根据预期的输入/输出对来编写测试。明确告诉它你正在进行测试驱动开发,这样它就会避免为代码库中尚不存在的功能创建模拟实现 (mock implementations)。

  2. 告诉 Claude 运行测试并确认它们失败。在此阶段,明确告诉它不要编写任何实现代码通常会很有帮助。

  3. 当你对测试满意时,让 Claude 提交测试

  4. 让 Claude 编写通过测试的代码,并指示它不要修改测试。告诉 Claude 继续尝试,直到所有测试都通过。Claude 通常需要几次迭代来编写代码、运行测试、调整代码并再次运行测试。

    1. 在此阶段,让它使用独立的子智能体来验证实现没有过度拟合测试会很有帮助。
  5. 当你对更改满意时,让 Claude 提交代码

当 Claude 有一个明确的目标可以迭代时,它的表现最佳——无论是可视化的设计图、测试用例,还是其他形式的预期输出。通过提供像测试这样的预期输出,Claude 可以进行更改、评估结果并逐步改进,直到成功。

c. 编写代码、截取结果、迭代

类似于测试工作流程,你也可以为 Claude 提供可视化目标:

  1. 为 Claude 提供截取浏览器屏幕截图的方法(例如:使用 Puppeteer MCP 服务器iOS 模拟器 MCP 服务器,或者手动复制/粘贴屏幕截图到 Claude 中)。
  2. 通过复制/粘贴或拖放图片,或者提供图片文件路径,给 Claude 一个可视化的设计图
  3. 让 Claude 在代码中实现该设计,然后截取结果的屏幕截图,并不断迭代直到其结果与设计图相匹配。
  4. 当你满意时,让 Claude 提交代码

和人类一样,Claude 的输出通常会通过迭代显著改善。尽管第一个版本可能不错,但在经过 2-3 次迭代后,它通常会看起来好得多。给 Claude 能够看到其输出的工具,以获得最佳结果。

Image 2: Safe yolo mode

d. 安全的 YOLO 模式

与其对 Claude 进行监督,不如使用 claude --dangerously-skip-permissions 来绕过所有权限检查,让 Claude 不间断地工作直到完成。这对于修复 Lint 错误或生成样板代码等工作流程效果很好。

让 Claude 运行任意命令是有风险的,可能导致数据丢失、系统损坏,甚至数据外泄(例如:通过提示注入攻击)。为了将这些风险降至最低,请在没有互联网访问的容器中使用 --dangerously-skip-permissions。你可以参考这个使用 Docker 开发容器 (Dev Containers) 的 参考实现

e. 代码库问答

在熟悉一个新的代码库时,可以使用 Claude Code 进行学习和探索。你可以问 Claude 那些你在结对编程时会问项目中的其他工程师的问题。Claude 可以像 AI 智能体一样搜索代码库来回答一般性问题,例如:

  • 日志是如何工作的?
  • 我如何创建一个新的 API 端点?
  • foo.rs 文件的第 134 行的 async move { ... } 是做什么的?
  • CustomerOnboardingFlowImpl 处理了哪些特殊情况?
  • 为什么我们在第 333 行调用 foo() 而不是 bar()
  • baz.py 文件的第 334 行在 Java 中对应的代码是什么?

在 Anthropic,以这种方式使用 Claude Code 已成为我们核心的入职工作流程,显著缩短了上手时间并减轻了其他工程师的负担。不需要特别的提示!只需提问,Claude 就会探索代码来寻找答案。

Image 3: Use Claude to interact with git

f. 使用 Claude 与 git 交互

Claude 可以有效地处理许多 git 操作。许多 Anthropic 工程师使用 Claude 处理我们 90% 以上的 git 交互:

  • 搜索 git 历史来回答诸如“v1.2.3 版本中包含了哪些改动?”、“谁负责这个功能?”或“为什么这个 API 是这样设计的?”之类的问题。明确提示 Claude 查看 git 历史记录来回答这些问题会很有帮助。
  • 编写提交消息。Claude 会自动查看你的改动和最近的历史记录,以撰写一条考虑到所有相关上下文的消息。
  • 处理复杂的 git 操作,例如恢复文件、解决变基 (rebase) 冲突以及比较和嫁接 (grafting) 补丁。

这让你不必记住 gh 命令行语法,同时还能自动化常规任务。

g. 使用 Claude 与 GitHub 交互

Claude Code 可以管理许多 GitHub 交互:

  • **创建拉取请求 (pull requests)**:Claude 知道“pr”这个缩写,并会根据代码差异和周围上下文生成适当的提交消息。
  • 为简单的代码审查评论提供一次性解决方案:只需告诉它修复你拉取请求上的评论(可选地,提供更具体的指令),并在完成后推回到分支。
  • 修复失败的构建或 Lint 警告。
  • 对未解决的问题进行分类和处理,通过让 Claude 循环处理开放的 GitHub 问题。

这让你不必记住 gh 命令行语法,同时还能自动化常规任务。

h. 使用 Claude 处理 Jupyter notebook

Anthropic 的研究人员和数据科学家使用 Claude Code 来读写 Jupyter notebook。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 可以推断意图,但它不能读心。具体性才能更好地匹配你的期望。

Image 4: Give Claude images

b. 为 Claude 提供图片

Claude 擅长处理图像和图表,你可以通过以下几种方法提供它们:

  • 粘贴屏幕截图(小技巧:在 macOS 中按 cmd+ctrl+shift+4 将屏幕截图复制到剪贴板,然后按 ctrl+v 粘贴。请注意,这与你通常在 Mac 上使用的 cmd+v 不同,并且在远程会话中不起作用。)
  • 直接将图片拖放到提示输入框中
  • 提供图片的文件路径。

这在处理作为 UI 开发参考的设计图,以及用于分析和调试的图表时特别有用。即使你不提供视觉素材,向 Claude 明确说明最终结果在视觉上有多重要也会有所帮助。

Image 5: Mention files you want Claude to look at or work on

c. 提及你希望 Claude 查看或处理的文件

使用 Tab 键自动补全来快速引用你仓库中的任何文件或文件夹,帮助 Claude 找到或更新正确的资源。

Image 6: Give Claude URLs

d. 为 Claude 提供 URL

将特定的 URL 与你的提示一起粘贴,让 Claude 获取并阅读内容。为了避免对相同域名(例如:docs.foo.com)反复出现权限提示,可以使用 /permissions 命令将该域名添加到你的允许列表。

e. 及时并频繁地调整方向

虽然自动接受模式(按 shift+tab 切换)可以让 Claude 自主工作,但你通常会通过积极参与和指导其方法来获得更好的结果。通过在开始时向 Claude 彻底解释任务,你可以获得最好的结果,但你也可以在任何时候调整 Claude 的方向。

以下四个工具可以帮助你调整方向:

  • 在编码前让 Claude 制定一个计划。明确告诉它,在你确认其计划看起来不错之前不要编码。
  • 在任何阶段(思考、工具调用、文件编辑)按下 Escape 来中断 Claude,这会保留上下文,以便你重定向或扩展指令。
  • 双击 Escape 跳回历史记录,编辑先前的提示,并探索一个不同的方向。你可以反复编辑和重复,直到你得到想要的结果。
  • 让 Claude 撤销更改,通常与选项 #2 结合使用,以采取不同的方法。

尽管 Claude Code 偶尔会在第一次尝试时完美地解决问题,但使用这些纠正工具通常会更快地产生更好的解决方案。

f. 使用 /clear 来保持上下文集中

在长时间的会话中,Claude 的上下文窗口可能会被不相关的对话、文件内容和命令填满。这会降低性能,有时还会分散 Claude 的注意力。在任务之间频繁使用 /clear 命令来重置上下文窗口。

g. 对于复杂工作流程使用清单和草稿板

对于有多步骤或需要详尽解决方案的大型任务——比如代码迁移、修复大量 Lint 错误或运行复杂的构建脚本——通过让 Claude 使用 Markdown 文件(甚至是 GitHub 问题!)作为清单和工作草稿板来提高性能:

例如,要修复大量的 Lint 问题,你可以这样做:

  1. 告诉 Claude 运行 Lint 命令,并将所有结果错误(包括文件名和行号)写入一个 Markdown 清单。
  2. 指示 Claude 逐一解决每个问题,修复并验证后将其勾掉并移至下一个。

h. 将数据传递给 Claude

有几种方法可以向 Claude 提供数据:

  • 直接复制和粘贴到你的提示中(最常见的方法)。
  • 通过管道输入到 Claude Code(例如:cat foo.txt | claude),特别适用于日志、CSV 和大型数据。
  • 告诉 Claude 通过 bash 命令、MCP 工具或自定义斜杠命令来拉取数据
  • 要求 Claude 读取文件或获取 URL(也适用于图像)。

大多数会话都涉及这些方法的组合。例如,你可以通过管道输入一个日志文件,然后告诉 Claude 使用一个工具来获取额外的上下文以调试日志。

5. 使用无头模式自动化你的基础设施

Claude Code 包含了 无头模式,专用于非交互式环境,如持续集成 (CI)、预提交钩子、构建脚本和自动化。使用带有提示的 -p 标志可以启用无头模式,而使用 --output-format stream-json 则可以获取流式 JSON 输出。

请注意,无头模式不会在会话之间持久化。你必须在每个会话中重新触发它。

a. 使用 Claude 进行问题处理

无头模式可以为由 GitHub 事件触发的自动化提供支持,例如在你的代码仓库中创建新问题时。例如,公共的 Claude Code 仓库 就使用了 Claude 来检查新创建的问题并分配适当的标签。

b. 使用 Claude 作为 Lint 工具

Claude Code 可以提供 主观的代码审查,超越了传统 Lint 工具的检测范围,识别出诸如拼写错误、陈旧的注释、具有误导性的函数或变量名等问题。

6. 使用多 Claude 工作流进阶

除了独立使用,一些最强大的应用涉及并行运行多个 Claude 实例:

a. 让一个 Claude 编写代码;使用另一个 Claude 来验证

一个简单但有效的方法是让一个 Claude 编写代码,而另一个则负责审查或测试它。这类似于与多名工程师合作,有时拥有独立的上下文是有益的:

  1. 让 Claude 编写代码。
  2. 运行 /clear 或在另一个终端中启动第二个 Claude。
  3. 让第二个 Claude 审查第一个 Claude 的工作。
  4. 启动另一个 Claude(或再次 /clear),读取代码和审查反馈。
  5. 让这个 Claude 根据反馈修改代码。

你也可以对测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码以使测试通过。你甚至可以给你的 Claude 实例们独立的“草稿板”,并告诉它们应该写入哪个、读取哪个,从而让它们相互通信。

这种分工通常比让一个 Claude 处理所有事情产生更好的结果。

b. 使用多个代码仓库副本 (checkouts)

与其等待 Claude 完成每一步,许多 Anthropic 工程师会这样做:

  1. 在单独的文件夹中创建 3-4 个 git 仓库副本
  2. 在独立的终端选项卡中打开每个文件夹
  3. 在每个文件夹中启动一个 Claude,并分配不同的任务。
  4. 轮流查看以检查进度并批准/拒绝权限请求。

c. 使用 git worktrees

这种方法对于多个独立任务非常出色,为多个仓库副本提供了一种更轻量级的替代方案。Git worktrees 允许你将来自同一仓库的多个分支检出到不同的目录中。每个工作树 (worktree) 都有自己的工作目录和独立的文件,同时共享相同的 Git 历史记录和引用日志 (reflog)。

使用 git worktrees 使你能够同时在项目的不同部分上运行多个 Claude 会话,每个会话都专注于自己的独立任务。例如,你可能有一个 Claude 在重构你的身份验证系统,而另一个则在构建一个完全不相关的数据可视化组件。由于任务不重叠,每个 Claude 都可以全速工作,无需等待对方的更改或处理合并冲突:

  1. 创建工作树git worktree add ../project-feature-a feature-a
  2. 在每个工作树中启动 Claudecd ../project-feature-a && claude
  3. 根据需要创建额外的工作树(在新终端选项卡中重复步骤 1-2)。

一些小贴士:

  • 使用一致的命名约定。
  • 每个工作树保持一个终端选项卡。
  • 如果你在 Mac 上使用 iTerm2,设置通知,以便在 Claude 需要注意时获得提醒。
  • 为不同的工作树使用独立的 IDE 窗口。
  • 完成后进行清理:git worktree remove ../project-feature-a

d. 使用带有自定义程序 (harness) 的无头模式

claude -p(无头模式)可以将 Claude Code 以编程方式集成到更大的工作流程中,同时利用其内置工具和系统提示。使用无头模式有两种主要模式:

  1. **扇出 (Fanning out)**:处理大型迁移或分析任务(例如:分析数百个日志中的情感或分析数千个 CSV 文件):

  2. 让 Claude 编写一个脚本来生成任务列表。例如,生成一个需要从框架 A 迁移到框架 B 的 2000 个文件列表。

  3. 遍历任务,为每个任务以编程方式调用 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:*)

  4. 多次运行脚本并优化你的提示,以获得期望的结果。

  5. **管道化 (Pipelining)**:将 Claude 集成到现有数据/处理管道中:

  6. 调用 claude -p “<your prompt>” --json | your_command,其中 your_command 是你的处理管道的下一步。

  7. 就是这样!JSON 输出(可选)可以帮助提供结构,以便更轻松地进行自动化处理。

对于这两种用例,使用 --verbose 标志进行 Claude 调用调试会很有帮助。我们通常建议在生产环境中关闭详细模式,以获得更清晰的输出。

你使用 Claude Code 的技巧和最佳实践是什么?标记 @AnthropicAI,这样我们就能看到你在构建什么!

作者

莫尔索

发布于

2025-08-21

更新于

2025-08-21

许可协议

评论