Claude Code 是一款用于代理编码的命令行工具。本文介绍了一些已被证实有效的技巧和窍门,可以帮助你在不同的代码库、语言和环境中使用 Claude Code。
我们最近发布了 Claude Code,这是一款用于代理编码的命令行工具。Claude Code 是一个研究项目,旨在为人类学工程师和研究人员提供一种更原生的方式,将 Claude 集成到他们的编码工作流程中。
Claude Code 刻意追求低级和开放性,提供接近原始模型的访问,而无需强制执行特定的工作流程。这种设计理念打造了一个灵活、可定制、可脚本化且安全的强大工具。虽然功能强大,但这种灵活性对于刚接触代理编码工具的工程师来说,学习难度较高——至少在他们开发出自己的最佳实践之前是这样。
本文概述了已被证明有效的通用模式,这些模式既适用于 Anthropic 的内部团队,也适用于在各种代码库、语言和环境中使用 Claude Code 的外部工程师。此列表中的任何内容都不是一成不变的,也不是放之四海而皆准的;请将这些建议视为起点。我们鼓励您进行尝试,找到最适合您的方法!
想要了解更多详细信息?我们位于claude.ai/code 的综合文档涵盖了本文提到的所有功能,并提供了更多示例、实现细节和高级技术。
1. 自定义设置
Claude Code 是一款代理式编码助手,可以自动将上下文提取到提示中。这种上下文收集过程会消耗时间和 token,但你可以通过环境调整来优化。
a.创建CLAUDE.md
文件
CLAUDE.md
是一个特殊文件,Claude 在发起对话时会自动将其加载到上下文中。这使得它成为记录以下内容的理想场所:
- 常用 bash 命令
- 核心文件和实用函数
- 代码风格指南
- 测试说明
- 存储库礼仪(例如,分支命名、合并与变基等)
- 开发者环境设置(例如,pyenv 的使用、哪些编译器可以工作)
- 项目特有的任何意外行为或警告
- 您希望克劳德记住的其他信息
文件格式没有要求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
复制
您可以将CLAUDE.md
文件放置在多个位置:
- 你的仓库的根目录,或者你运行的目录
claude
(最常见的用法)。命名它CLAUDE.md
并将其签入 git,以便你可以在会话之间以及与你的团队共享它(推荐),或者命名它CLAUDE.local.md
并将.gitignore
其 - 您运行目录的任何父目录
claude
。这对于 monorepos 最有用,您可能claude
从运行root/foo
,并且同时在和 中都有CLAUDE.md
文件。这两个目录都会自动拉入上下文中。root/CLAUDE.md
root/foo/CLAUDE.md
- 您运行的目录的任何子目录
claude
。这与上面的相反,在这种情况下,CLAUDE.md
当您处理子目录中的文件时,Claude 将按需提取文件。 - 您的主文件夹(
~/.claude/CLAUDE.md
),它将应用于您的所有Claude会话
当你运行该/init
命令时,Claude 会自动CLAUDE.md
为你生成一个。
b. 调整CLAUDE.md
文件
您的CLAUDE.md
文件将成为 Claude 提示的一部分,因此应该像任何常用提示一样进行改进。一个常见的错误是添加大量内容,而没有改进其有效性。请花时间进行实验,并根据模型确定哪些内容能够产生最佳指导。
CLAUDE.md
您可以手动将内容添加到您的,也可以按下#
键向 Claude 发出指令,它将自动合并到相关的 中CLAUDE.md
。许多工程师#
在编码时经常使用它来记录命令、文件和样式指南,然后将CLAUDE.md
更改包含在提交中,以便团队成员也能从中受益。
在 Anthropic,我们偶尔会CLAUDE.md
通过提示改进器运行文件,并经常调整指令(例如,用“重要”或“您必须”强调)来提高依从性。

c. 整理 Claude 允许使用的工具列表
默认情况下,Claude Code 会请求任何可能修改系统的操作的权限:文件写入、许多 Bash 命令、MCP 工具等等。我们在设计 Claude Code 时特意采用了这种保守的方法,以优先考虑安全性。您可以自定义允许列表,以允许您认为安全的其他工具,或者允许可能不安全但易于撤消的工具(例如文件编辑git 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
CLI 与 GitHub 交互,例如创建问题、发起拉取请求、阅读评论等等。即使没有gh
安装,Claude 仍然可以使用 GitHub API 或 MCP 服务器(如果您已安装)。
2. 给克劳德更多工具
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 也有助于识别配置问题。
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 Code 中.claude/commands/fix-github-issue.md
,即可将其用作/project:fix-github-issue
命令。例如,您可以使用它/project:fix-github-issue 1234
来修复 Claude 问题 #1234。同样,您可以将自己的个人命令添加到您希望在所有会话中都可用的命令文件夹中。 ~/.claude/commands
3. 尝试常见的工作流程
Claude Code 不强制执行特定的工作流程,让您可以灵活地按照自己的意愿使用它。在这种灵活性所提供的空间内,我们的用户社区中涌现出几种有效使用 Claude Code 的成功模式:
a. 探索、规划、编码、提交
这种多功能的工作流程适用于解决许多问题:
- 要求 Claude 读取相关文件、图像或 URL,提供一般指针(“读取处理日志记录的文件”)或特定文件名(“读取 logging.py”),但明确告诉它现在不要编写任何代码。
- 在工作流程的这一部分,您应该考虑充分利用子代理,尤其是在处理复杂问题时。告诉 Claude 使用子代理来验证细节或调查其可能遇到的特定问题(尤其是在对话或任务的早期阶段),通常可以保留上下文的可用性,而不会在效率方面造成太大损失。
- 要求克劳德制定一个解决特定问题的计划。我们建议使用“思考”一词来触发扩展思考模式,这能为克劳德提供额外的计算时间,以便更彻底地评估各种替代方案。这些特定的短语会直接映射到系统中不断提升的思考预算级别:“思考”<“认真思考”<“更加努力思考”<“超级思考”。每个级别都会逐步为克劳德分配更多的思考预算。
- 如果此步骤的结果看起来合理,您可以让 Claude 创建一个文档或 GitHub 问题及其计划,以便您可以在实施(步骤 3)不符合您的要求时重置到此位置。
- 要求 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 --dangerously-skip-permissions
您可以使用它来绕过所有权限检查,让 Claude 不间断地工作直至完成,而无需监督Claude。这对于修复 Lint 错误或生成样板代码等工作流程非常有效。
让 Claude 运行任意命令存在风险,可能导致数据丢失、系统崩溃,甚至数据泄露(例如,通过即时注入攻击)。为了最大限度地降低这些风险,请--dangerously-skip-permissions
在没有互联网连接的容器中使用。您可以使用 Docker Dev Containers 遵循此参考实现。
e. 代码库问答
在加入新的代码库时,可以使用 Claude Code 进行学习和探索。你可以向 Claude 提出一些你在结对编程时会问项目中其他工程师的问题。Claude 可以自动搜索代码库,回答一些常见的问题,例如:
- 日志记录如何工作?
- 如何创建新的 API 端点?
async move { ... }
的第 134 行 做什么foo.rs
?- 处理哪些边缘情况
CustomerOnboardingFlowImpl
? - 为什么我们要拨打电话
foo()
而不是bar()
拨打 333 号线? baz.py
Java 中的第 334 行对应的是什么?
在 Anthropic,以这种方式使用 Claude Code 已成为我们的核心入职工作流程,显著缩短了上手时间,并减轻了其他工程师的负担。无需任何特殊提示!只需提出问题,Claude 就会探索代码并找到答案。

f.使用Claude与git交互
Claude 可以高效地处理许多 git 操作。许多 Anthropic 工程师使用 Claude 完成 90% 以上的git交互:
- 搜索git历史记录来回答诸如“哪些更改导致了 v1.2.3 版本?”,“谁拥有这个特定功能?”或“为什么这个 API 如此设计?”之类的问题。它有助于明确提示 Claude 查看 git 历史记录来回答此类查询。
- 撰写提交信息。Claude 将自动查看您的更改和最近的历史记录,并根据所有相关上下文撰写一条信息
- 处理复杂的 git 操作,例如恢复文件、解决 rebase 冲突以及比较和嫁接补丁
g.使用Claude与GitHub交互
Claude Code 可以管理许多 GitHub 交互:
- 创建拉取请求:Claude 理解简写“pr”,并将根据差异和周围环境生成适当的提交消息。
- 对简单的代码审查评论实施一次性解决方案:只需告诉它修复 PR 上的评论(可选,给它更具体的说明)并在完成后推回到 PR 分支。
- 修复失败的构建或 linter 警告
- 通过要求 Claude 循环浏览 GitHub 上的未解决问题,对未解决问题进行分类和分类
这样就无需gh
在自动执行日常任务时记住命令行语法。
h. 使用 Claude 来操作 Jupyter Notebook
Anthropic 的研究人员和数据科学家使用 Claude Code 读写 Jupyter 笔记本。Claude 可以解释输出内容(包括图像),从而快速探索和交互数据。无需任何提示或工作流程,但我们建议.ipynb
在 VS Code 中同时打开 Claude Code 和文件。
你也可以要求 Claude 在向同事展示你的 Jupyter Notebook 之前,先清理一下或进行一些美化改进。明确地告诉它,让 Notebook 或其数据可视化“赏心悦目”,往往能提醒它,它正在针对人类的观看体验进行优化。
4.优化工作流程
以下建议适用于所有工作流程:
a. 指示要具体
更具体的指导能显著提高克劳德·科德的成功率,尤其是在首次尝试时。预先给出清晰的指示,可以减少后期调整路线的需要。
例如:
贫穷的 | 好的 |
---|---|
为 foo.py 添加测试 | 为 foo.py 编写一个新的测试用例,涵盖用户注销的边缘情况。避免模拟 |
为什么 ExecutionFactory 有这么奇怪的 api? | 查看 ExecutionFactory 的 git 历史记录并总结其 API 是如何形成的 |
添加日历小部件 | 查看主页上现有小部件的实现方式,以了解相关模式,特别是代码和界面的分离方式。HotDogWidget.php 是一个很好的入门示例。然后,按照该模式实现一个新的日历小部件,允许用户选择月份,并向前/向后翻页选择年份。从头构建,无需使用代码库中其他部分已使用的库以外的库。 |
Claude 可以推断意图,但无法读懂他人心思。具体化才能更好地与预期保持一致。

b. 给克劳德图片
克劳德通过多种方法擅长处理图像和图表:
- 粘贴屏幕截图(专业提示:在 macOS 中按cmd+ctrl+shift+4将屏幕截图粘贴到剪贴板,然后按 ctrl+v粘贴。请注意,这不是您通常在 Mac 上粘贴时使用的 cmd+v,并且不能远程操作。)
- 将图像直接拖放到提示输入中
- 提供图像的文件路径
这在使用设计模型作为 UI 开发的参考点,以及使用可视化图表进行分析和调试时尤其有用。即使您没有在上下文中添加视觉效果,向 Claude 明确说明结果的视觉吸引力的重要性仍然会很有帮助。

c. 提及你希望 Claude 查看或处理的文件
使用制表符补全功能快速引用存储库中任何位置的文件或文件夹,帮助 Claude 找到或更新正确的资源。

d. 为 Claude 提供 URL
将特定的 URL 粘贴到提示旁边,以便 Claude 获取并读取。为了避免出现针对相同域名(例如 docs.foo.com)的权限提示,请使用将域名添加到您的允许列表。 /permissions
e. 尽早并经常纠正航向
虽然自动接受模式(Shift+Tab 切换)允许 Claude 自主工作,但如果您积极合作并指导 Claude 的方法,通常会获得更好的结果。您可以通过一开始就向 Claude 详细解释任务来获得最佳效果,但您也可以随时纠正 Claude 的思路。
以下四种工具有助于纠正航向:
- 让 Claude 在编码之前制定一个计划。明确地告诉它,在你确认它的计划没有问题之前不要开始编码。
- 在任何阶段(思考、工具调用、文件编辑)按 Escape 键打断Claude,保留上下文,以便您可以重定向或扩展指令。
- 双击 Esc 键即可跳回历史记录,编辑之前的提示,并探索不同的方向。您可以编辑提示并重复操作,直到获得所需的结果。
- 要求 Claude 撤消更改,通常与选项 #2 结合使用以采取不同的方法。
尽管 Claude Code 偶尔会在第一次尝试时完美地解决问题,但使用这些校正工具通常可以更快地产生更好的解决方案。
f. 用于/clear
保持上下文的重点
在长时间的会话中,Claude 的上下文窗口可能会充斥着不相关的对话、文件内容和命令。这会降低 Claude 的性能,有时还会分散他的注意力。请/clear
在任务之间频繁使用该命令来重置上下文窗口。
g. 使用清单和便笺簿来处理复杂的工作流程
对于具有多个步骤或需要详尽解决方案的大型任务(例如代码迁移、修复大量 lint 错误或运行复杂的构建脚本),可以通过让 Claude 使用 Markdown 文件(甚至是 GitHub 问题!)作为清单和工作便笺簿来提高性能:
例如,要修复大量 lint 问题,您可以执行以下操作:
- 告诉 Claude 运行 lint 命令并将所有产生的错误(包括文件名和行号)写入 Markdown 清单
- 指导 Claude 逐一解决每个问题,修复并验证,然后勾选并转到下一个
h. 将数据传入Claude
有几种方法可以向 Claude 提供数据:
- 直接复制并粘贴到你的提示中(最常见的方法)
- 管道导入 Claude 代码(例如
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 作为 linter
Claude Code 可以提供超出传统 linting 工具检测范围的主观代码审查,识别拼写错误、过时的注释、误导性的函数或变量名称等问题。
6. 使用多 Claude 工作流程进行升级
除了独立使用之外,一些最强大的应用程序还涉及并行运行多个 Claude 实例:
a. 让一个 Claude 编写代码;使用另一个 Claude 来验证
一个简单但有效的方法是让一个 Claude 编写代码,另一个 Claude 审查或测试代码。与多个工程师合作类似,有时拥有独立的工作环境是有益的:
- 使用Claude编写代码
- 在另一个终端运行
/clear
或启动第二个 Claude - 让第二个克劳德审查第一个克劳德的作品
- 启动另一个 Claude(或
/clear
再次)阅读代码并查看反馈 - 让 Claude 根据反馈编辑代码
你可以对测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码来使测试通过。你甚至可以让两个 Claude 实例相互通信,只需给它们分配一个独立的工作暂存器,并告诉它们要写入哪个暂存器,要从哪个暂存器读取数据。
这种分离通常会比让克劳德一个人处理所有事情产生更好的效果。
b. 对你的仓库进行多次签出
Anthropic 的许多工程师并没有等待 Claude 完成每个步骤,而是这样做:
- 在单独的文件夹中创建 3-4 个 git checkout
- 在单独的终端选项卡中打开每个文件夹
- 在每个文件夹中启动 Claude并执行不同的任务
- 循环检查进度并批准/拒绝权限请求
c.使用 git worktrees
这种方法非常适合多个独立任务,为多次检出提供了一种更轻量级的替代方案。Git 工作树允许您从同一仓库检出多个分支到不同的目录中。每个工作树都有自己的工作目录,其中包含相互隔离的文件,同时共享相同的 Git 历史记录和引用日志。
使用 git 工作树,您可以同时在项目的不同部分运行多个 Claude 会话,每个会话专注于各自独立的任务。例如,您可以让一个 Claude 重构您的身份验证系统,而另一个 Claude 构建一个完全不相关的数据可视化组件。由于任务不重叠,每个 Claude 都可以全速工作,而无需等待对方的更改或处理合并冲突:
- 创建工作树:
git worktree add ../project-feature-a feature-a
- 在每个工作树中启动 Claude:
cd ../project-feature-a && claude
- 根据需要创建其他工作树(在新的终端选项卡中重复步骤 1-2)
一些提示:
- 使用一致的命名约定
- 每个工作树维护一个终端选项卡
- 如果您在 Mac 上使用 iTerm2,请设置Claude 需要关注时的通知
- 对不同的工作树使用单独的 IDE 窗口
- 完成后清理:
git worktree remove ../project-feature-a
d. 使用无头模式和自定义线束
claude -p
(无头模式)以编程方式将 Claude Code 集成到更大的工作流程中,同时利用其内置工具和系统提示。使用无头模式主要有两种模式:
1.扇出处理大型迁移或分析(例如,分析数百个日志中的情绪或分析数千个 CSV):
- 让 Claude 编写一个脚本来生成任务列表。例如,生成一个包含 2k 个文件的列表,这些文件需要从框架 A 迁移到框架 B。
- 循环执行每个任务,以编程方式调用 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.流水线将 Claude 集成到现有的数据/处理流水线中:
- 呼叫
claude -p “<your prompt>” --json | your_command
,your_command
你的处理管道的下一步在哪里 - 就是这样!JSON 输出(可选)可以帮助提供更易于自动化处理的结构。
对于这两种用例,使用标志来调试 Claude 调用都会很有帮助--verbose
。为了获得更清晰的输出,我们通常建议在生产环境中关闭详细模式。
您使用 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 实践经验帮助这些建议得以形成。