我们最近发布了Claude Code,一个用于代理式编程的命令行工具。 作为研究项目开发的Claude Code,为Anthropic的工程师和研究人员提供了一种更原生的途径,将Claude集成到他们的编程工作流中。
Claude Code有意设计为低级别且保持中立的工具,提供接近原始模型的访问权限,而不强制采用特定的工作流程。这种设计理念创造了一个灵活、可定制、可脚本化且功能强大的工具。尽管功能强大,但这种灵活性对于不熟悉代理式编程工具的工程师而言存在一定的学习曲线——至少在他们发展出自己的最佳实践之前。
本文概述了一些已被证明有效的通用模式,这些模式既适用于Anthropic的内部团队,也适用于在不同代码库、编程语言和环境中使用Claude Code的外部工程师。这份清单中的内容并非一成不变,也并非普遍适用;建议您将这些视为探索的起点。我们鼓励您进行实验,找到最适合您的方法!
- 自定义您的设置
===========
Claude Code是一款代理式编程助手,能自动将上下文拉取到提示中。这种上下文收集会消耗时间和token,但您可以通过环境调优来优化。
a. 创建CLAUDE.md
文件
CLAUDE.md
是一个特殊文件,Claude在开始对话时会自动将其拉取到上下文中。这使其成为文档化的理想场所,包括:
常用bash命令
核心文件和实用函数
代码风格指南
测试说明
仓库规范(如分支命名、合并与变基等)
开发环境配置(如pyenv使用、可用的编译器)
项目特有的意外行为或警告
其他您希望Claude记住的信息
CLAUDE.md
文件没有特定格式要求。我们建议保持简洁和易于理解。例如:
# 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
# Bash 命令
- npm run build:构建项目
- npm run typecheck:运行类型检查器
# 代码风格
- 使用 ES 模块 (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会自动将其整合到相关的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
文件(我们建议将前者提交到源代码控制中以与团队共享)
使用--allowedTools
CLI flag设置会话特定的权限
d. 如果使用GitHub,安装gh CLI
Claude知道如何使用gh
CLI与GitHub交互,用于创建问题、打开拉取请求、读取评论等。如果没有安装gh
,Claude仍然可以使用GitHub API或MCP服务器(如果您已安装)。
- 为Claude提供更多工具
=================
Claude可以访问您的shell环境,您可以在其中为其构建便捷脚本和函数集,就像为您自己构建一样。它还可以通过MCP和REST API利用更复杂的工具。
a. 与bash工具一起使用Claude
Claude Code继承您的bash环境,使其能够访问您的所有工具。虽然Claude了解诸如unix工具和gh
之类的常用工具,但如果没有指令,它不会了解您的自定义bash工具:
向Claude提供工具名称和使用示例
让Claude运行--help
以查看工具文档
在CLAUDE.md
中记录常用工具
b. 与MCP一起使用Claude
Claude Code既充当MCP服务器又充当客户端。作为客户端,它可以连接到任意数量的MCP服务器,通过三种方式访问它们的工具:
使用MCP时,使用--mcp-debug
标志启动Claude也可能有助于识别配置问题。
c. 使用自定义斜杠命令
对于重复的工作流程——调试循环、日志分析等——将提示模板存储在.claude/commands
文件夹内的Markdown文件中。当您键入/
时,这些命令会通过斜杠命令菜单可用。您可以将这些命令提交到git中,以便团队的其余成员也可以使用。
自定义斜杠命令可以包含特殊关键字$ARGUMENTS
,用于传递来自命令调用的参数。
例如,这是一个可用于自动拉取和修复Github问题的斜杠命令:
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
后,即可通过 /project:fix-github-issue
命令在 Claude Code 中调用。例如用 /project:fix-github-issue 1234
让 Claude 修复第 1234 号 issue。你也可以将个人命令放到 ~/.claude/commands
文件夹,在所有会话中使用。
- 尝试常见工作流程
============
Claude Code不强制采用特定工作流程,让您可以灵活地按自己的方式使用它。在这种灵活性提供的空间内,我们用户社区中涌现出几种有效使用Claude Code的成功模式:
a. 探索、规划、编码、提交
这个多功能工作流程适用于许多问题:
要求Claude阅读相关文件、图像或URL,既可以提供一般性指导("读取处理日志的文件"),也可以提供特定文件名("读取logging.py"),但要明确告诉它暂时不要编写任何代码。
- 这是工作流程中应该考虑充分利用子代理的部分,特别是对于复杂问题。告诉Claude使用子代理来验证细节或调查它可能有的特定问题,特别是在对话或任务早期,往往能保持上下文的可用性,而效率损失方面几乎没有缺点。
要求Claude制定如何解决特定问题的计划。我们建议使用"think"一词来触发扩展思维模式,这样Claude就有额外的计算时间来更彻底地评估各种选择。这些特定短语直接映射到系统中不断增加的思维预算级别:"think" < "think hard" < "think harder" < "ultrathink"。每个级别都为Claude分配逐步增加的思维预算。
要求Claude用代码实现其解决方案。这也是要求它明确验证其解决方案合理性的好地方,因为它在实现解决方案的各个部分。
要求Claude提交结果并创建拉取请求。如果相关,这也是让Claude更新任何README文件或变更日志的好时机,解释它刚刚做了什么。
第1-2步至关重要——没有它们,Claude往往会直接跳转到编写解决方案代码。虽然有时这正是您想要的,但要求Claude先研究和规划可以显著提高需要前期深度思考的问题的性能。
b. 编写测试、提交;编码、迭代、提交
这是Anthropic最喜爱的工作流程,适用于可以通过单元测试、集成测试或端到端测试轻松验证的更改。测试驱动开发(TDD)在代理式编程中变得更加强大:
要求Claude基于预期的输入/输出对编写测试。明确告诉您正在进行测试驱动开发,这样它就避免创建模拟实现,即使对于代码库中尚不存在的功能也是如此。
告诉Claude运行测试并确认它们失败。在此阶段明确告诉它不要编写任何实现代码通常很有帮助。
当您对测试满意时,要求Claude提交测试。
要求Claude编写通过测试的代码,指示它不要修改测试。告诉Claude继续运行,直到所有测试通过。Claude通常需要几次迭代来编写代码、运行测试、调整代码并再次运行测试。
当您对更改满意时,要求Claude提交代码。
当Claude有明确的迭代目标时,它的表现最佳——视觉模型、测试用例或其他类型的输出。通过提供像测试这样的预期输出,Claude可以进行更改、评估结果并逐步改进,直到成功。
c. 编写代码、截图结果、迭代
与测试工作流程类似,您可以为Claude提供视觉目标:
为Claude提供浏览器截图的方法(例如,使用Puppeteer MCP服务器、iOS模拟器MCP服务器,或手动复制/粘贴截图到Claude中)。
通过复制/粘贴或拖放图像,或给Claude图像文件路径,为其提供视觉模型。
要求Claude在代码中实现设计,截图结果,并迭代直到其结果与模型匹配。
当您满意时要求Claude提交。
与人类一样,Claude的输出往往会随着迭代而显著改善。虽然第一版可能不错,但经过2-3次迭代后,它通常看起来会好得多。为Claude提供查看其输出的工具以获得最佳结果。

d. 安全YOLO模式
您不需要监督Claude,而是可以使用claude --dangerously-skip-permissions
来跳过所有权限检查,让Claude不间断工作直到完成。这适用于修复代码检查错误或生成模板代码等工作流程。
让Claude运行任意命令存在风险,可能导致数据丢失、系统损坏甚至数据泄露(例如通过提示注入攻击)。为最大限度降低这些风险,请在没有网络访问权限的容器中使用--dangerously-skip-permissions
。
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交互:
创建拉取请求:Claude理解"pr"的简写,并根据差异和周围环境生成适当的提交信息。
对简单的代码审查评论实现一次性解决方案:只需告诉它修复PR上的评论(可选,提供更具体的说明),并在完成时推送到PR分支。
修复失败的构建或linter警告
通过让Claude遍历打开的GitHub问题来分类和筛选开放问题
这消除了记住gh
命令行语法的需要,同时自动化了例行任务。
h. 使用Claude处理Jupyter笔记本
Anthropic的研究人员和数据科学家使用Claude Code来读取和编写Jupyter笔记本。Claude可以解释输出(包括图像),为探索和交互数据提供快速途径。不需要特定的提示或工作流程,但我们推荐的工作流程是在VS Code中并排打开Claude Code和.ipynb
文件。
您还可以在向同事展示之前,让Claude清理或美化您的Jupyter笔记本。特别告诉它使笔记本或其数据可视化"具有美学吸引力",往往能提醒它正在优化人类观看体验。
- 优化您的工作流程
========
以下建议适用于所有工作流程:
a. 指令要具体
指令越具体,Claude Code 的成功率就会显著提高,尤其是在初次尝试时。在开始时就给出明确的指引,可以减少之后进行修正的需要。
例如:
<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
| |
效果不佳 | 效果更佳 |
为 foo.py 添加测试 | 为 foo.py 编写一个新的测试用例,覆盖用户已登出时的边缘情况。请避免使用模拟 (mocks)。 |
为什么 ExecutionFactory 的 API 这么奇怪? | 请查看 ExecutionFactory 的 git 历史,并总结一下其 API 是如何演变至今的。 |
添加一个日历小部件 | 请查看主页上现有小部件是如何实现的,以理解其设计模式,特别是代码和接口是如何分离的。HotDogWidget.php 是一个很好的入手示例。然后,请遵循该模式来实现一个新的日历小部件,该小部件要能让用户选择月份,并能向前/向后翻页来选择年份。请从头开始构建,除了代码库中已经使用的库之外,不要使用其他任何库。 |
Claude 虽然能够推断意图,但无法读懂人心。具体明确的表达有助于更好地满足期望。

b. 为Claude提供图像
Claude通过多种方式擅长处理图像和图表:
这在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偶尔能在第一次尝试时就完美解决问题,但使用这些纠正工具通常能更快地产生更好的解决方案。
f. 使用/clear
保持上下文聚焦
在长时间会话中,Claude的上下文窗口可能会填满无关的对话、文件内容和命令。这可能会降低性能,有时还会分散Claude的注意力。在任务之间频繁使用/clear
命令来重置上下文窗口。
g. 对复杂工作流程使用清单和草稿纸
对于具有多个步骤或需要全面解决方案的大型任务——如代码迁移、修复大量lint错误或运行复杂的构建脚本——通过让Claude使用Markdown文件(甚至是GitHub问题!)作为清单和工作草稿纸来提高性能:
例如,要修复大量lint问题,您可以执行以下操作:
h. 将数据传入Claude
存在几种向Claude提供数据的方法:
直接复制粘贴到您的提示中(最常见的方法)
通过管道传输到Claude Code(例如,cat foo.txt | claude
),对于日志、CSV和大型数据特别有用
告诉Claude通过bash命令、MCP工具或自定义斜杠命令拉取数据
要求Claude读取文件或获取URL(也适用于图像)
大多数会话都涉及这些方法的组合。例如,您可以传入日志文件,然后告诉Claude使用工具拉取额外上下文来调试日志。
- 使用无头模式自动化您的基础设施
===================
Claude Code包含无头模式,适用于CI、预提交钩子、构建脚本和自动化等非交互式上下文。使用-p
标志配合提示来启用无头模式,--output-format stream-json
用于流式JSON输出。
请注意,无头模式不会在会话之间保持。您必须在每次会话时触发它。
a. 使用Claude进行问题分类
无头模式可以为GitHub事件触发的自动化提供支持,例如在您的仓库中创建新问题时。例如,公开的Claude Code仓库使用Claude检查新问题并分配适当的标签。
b. 将Claude用作代码检查工具
Claude Code可以提供超越传统linting工具的主观代码审查,识别诸如拼写错误、过时注释、误导性的函数或变量名称等问题。
- 通过多Claude工作流程提升技能
=====================
除了独立使用外,一些最强大的应用涉及并行运行多个Claude实例:
a. 让一个Claude写代码,用另一个Claude验证
一个简单但有效的方法是让一个Claude写代码,而另一个进行审查或测试。与与多个工程师工作类似,有时分离上下文是有益的:
您可以对测试做类似的事情:让一个Claude编写测试,然后让另一个Claude编写代码来使测试通过。您甚至可以让您的Claude实例通过给它们单独的工作草稿纸并告诉它们写入和读取哪个来实现相互通信。
这种分离通常比让单个Claude处理所有事情产生更好的结果。
b. 创建多个仓库副本
与其等待Claude完成每个步骤,许多Anthropic工程师的做法是:
在单独的文件夹中创建3-4个git副本
在单独的终端标签页中打开每个文件夹
在每个文件夹中启动Claude并分配不同任务
循环检查进度并批准/拒绝权限请求
c. 使用git worktrees
这种方法对于多个独立任务效果很好,提供了比多个副本更轻量级的替代方案。Git worktree允许您将同一个仓库的多个分支检出到单独的目录中。每个worktree都有自己的工作目录和隔离的文件,同时共享相同的Git历史记录和reflog。
使用git worktree使您能够同时在项目的不同部分运行多个Claude会话,每个都专注于自己独立的任务。例如,您可能让一个Claude重构您的身份验证系统,而另一个构建完全无关的数据可视化组件。由于任务不重叠,每个Claude都可以全速工作,无需等待另一个的更改或处理合并冲突:
创建worktrees:git worktree add ../project-feature-a feature-a
在每个worktree中启动Claude:cd ../project-feature-a && claude
根据需要创建额外的worktrees(在新终端标签页中重复步骤1-2)
一些提示:
d. 使用无头模式配合自定义工具
claude -p
(无头模式)将Claude Code编程集成到更大的工作流程中,同时利用其内置工具和系统提示。使用无头模式有两种主要模式:
分派模式处理大型迁移或分析(例如分析数百个日志中的情感或分析数千个CSV文件):
- 让Claude编写脚本来生成任务列表。例如,生成需要从框架A迁移到框架B的2000个文件列表。
- 循环执行任务,以编程方式为每个任务调用Claude,并给它一个任务和一组可使用的工具。例如:
claude -p "将foo.py从React迁移到Vue。完成后,如果您成功,必须返回字符串OK,如果任务失败则返回FAIL。" --allowedTools Edit Bash(git commit:*)
- 多次运行脚本并优化您的提示以获得预期结果。
流水线模式将Claude集成到现有的数据处理管道中:
调用claude -p "<您的提示>" --json | your_command
,其中your_command是您处理管道的下一步骤
就是这样!JSON输出(可选)可以帮助提供结构以便更容易的自动化处理。
对于这两种用例,使用--verbose标志调试Claude调用可能很有帮助。我们通常建议在生产环境中关闭详细模式以获得更干净的输出。