原文链接:Claude Code最佳实践

简单任务,比如个人文件处理、rag之类的简单项目,用智谱就够了,价格也不贵,使用参考。可以使用我的链接注册:优惠地址

Claude Code:智能代理编码最佳实践

引言

Claude Code 是一款用于智能代理编码(agentic coding)的命令行工具。本文将分享一系列实用技巧,这些技巧已在各类代码库、编程语言和开发环境中得到验证,能帮助你更高效地使用 Claude Code。

我们近期发布了 Claude Code 这款智能代理编码命令行工具。作为一项研究项目,它为 Anthropic 的工程师和研究人员提供了一种更原生的方式,将 Claude 集成到日常编码工作流中。

Claude Code 刻意采用底层设计且不强制特定工作模式,提供近乎原始的模型访问能力,同时不绑定固定工作流程。这种设计理念使其成为一款灵活、可定制、可脚本化且安全的高效工具。尽管功能强大,但这种灵活性也为初次使用智能代理编码工具的工程师带来了学习曲线——至少在他们形成自己的最佳实践之前是如此。

本文列出的通用模式已被验证行之有效,无论是 Anthropic 内部团队,还是在各类代码库、语言和环境中使用 Claude Code 的外部工程师,都能从中受益。这些建议并非一成不变或放之四海而皆准,仅作为入门参考。我们鼓励你通过实践找到最适合自己的使用方式!

1. 自定义你的设置

Claude Code 作为智能代理编码助手,会自动收集上下文并融入提示词。上下文收集过程会消耗时间和令牌(tokens),但你可以通过环境优化来提升效率。

a. 创建 CLAUDE.md 文件

CLAUDE.md 是一个特殊文件,Claude 在启动对话时会自动将其纳入上下文。因此,它非常适合用于记录以下内容:

  • 常用 Bash 命令
  • 核心文件和工具函数
  • 代码风格指南
  • 测试说明
  • 代码库规范(如分支命名、合并 vs 变基等)
  • 开发环境配置(如 pyenv 使用方法、兼容的编译器等)
  • 项目特有的异常行为或警告信息
  • 其他希望 Claude 记住的信息

CLAUDE.md 没有固定格式要求,建议保持简洁易读。示例如下:

# 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 命令所在目录的任意父目录:这在单体仓库(monorepos)中尤为实用。例如,在 root/foo 目录执行 claude 时,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.md 添加内容,或按 # 键向 Claude 发送指令,它会自动将指令整合到相关的 CLAUDE.md 中。许多工程师在编码时频繁使用 # 键记录命令、文件和风格指南,然后将 CLAUDE.md 的修改纳入提交,让团队成员也能受益。

在 Anthropic,我们偶尔会通过提示词优化工具处理 CLAUDE.md 文件,并经常调整指令(例如使用 “IMPORTANT” 或 “YOU MUST” 强调重点)以提高执行依从性。

c. 管理 Claude 的允许工具列表

默认情况下,对于可能修改系统的任何操作(文件写入、多数 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 命令行参数设置会话专属权限

d. 若使用 GitHub,请安装 gh 命令行工具

Claude 可以通过 gh 命令行工具与 GitHub 交互,包括创建议题(issues)、发起拉取请求(pull requests)、读取评论等。若未安装 gh,Claude 仍可通过 GitHub API 或 MCP 服务器(需安装)实现相关功能。

2. 为 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 服务器以访问其工具:

  • 项目配置中(仅在该目录运行 Claude Code 时生效)
  • 全局配置中(所有项目均生效)
  • 已提交的 .mcp.json 文件中(代码库所有使用者均可使用)。例如,在 .mcp.json 中添加 Puppeteer 和 Sentry 服务器,团队所有工程师即可开箱即用这些工具

使用 MCP 时,添加 --mcp-debug 参数启动 Claude 有助于排查配置问题。

c. 使用自定义斜杠命令

对于重复工作流(如调试循环、日志分析等),可将提示词模板存储在 .claude/commands 文件夹的 Markdown 文件中。输入 / 时,这些模板会显示在斜杠命令菜单中,你可以将其提交到 git 供团队共享。

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

示例:以下斜杠命令可自动拉取并修复 GitHub 议题:

请分析并修复 GitHub 议题:$ARGUMENTS。

步骤如下:
1. 使用 `gh issue view` 获取议题详情
2. 理解议题描述的问题
3. 在代码库中搜索相关文件
4. 实施必要的修复变更
5. 编写并运行测试以验证修复效果
6. 确保代码通过代码检查(linting)和类型检查
7. 编写描述性提交信息
8. 推送代码并创建拉取请求

注意:所有 GitHub 相关操作均使用 GitHub 命令行工具(`gh`)执行。

将上述内容保存到 .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”),但需明确告知其暂不编写代码
  2. 此阶段建议充分使用子代理(subagents),尤其针对复杂问题。在对话初期或任务启动时,让 Claude 使用子代理验证细节或调查特定问题,有助于保留上下文可用性,且基本不会影响效率
  3. 让 Claude 制定解决特定问题的方案。建议使用“think”一词触发扩展思考模式,为 Claude 分配更多计算时间以全面评估备选方案。以下短语对应递增的思考资源分配:“think” < “think hard” < “think harder” < “ultrathink”,级别越高,分配的思考资源越多
  4. 若方案合理,可让 Claude 将其整理为文档或 GitHub 议题,以便后续实现(步骤 3)不符合预期时能回溯到此阶段
  5. 让 Claude 按方案编写代码。此阶段可要求其在实现过程中持续验证解决方案的合理性
  6. 让 Claude 提交结果并创建拉取请求。如需,可同时让其更新 README 或变更日志(changelogs),说明所做修改

步骤 1-2 至关重要——若省略,Claude 可能直接跳转至编码阶段。虽然有时这正是你需要的,但对于需要前期深入思考的问题,先让 Claude 调研规划能显著提升效果。

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

这是 Anthropic 团队青睐的工作流,适用于可通过单元测试、集成测试或端到端测试验证的变更。智能代理编码让测试驱动开发(TDD)更加强大:

  1. 让 Claude 根据预期输入/输出对编写测试。明确告知其采用测试驱动开发模式,避免其为代码库中尚未存在的功能创建模拟实现
  2. 让 Claude 运行测试并确认测试失败。明确要求此阶段不编写实现代码通常会很有帮助
  3. 测试满意后,让 Claude 提交测试代码
  4. 让 Claude 编写通过测试的代码,同时指示其不得修改测试。告知其持续迭代直至所有测试通过——通常需要多次编写代码、运行测试、调整代码、再次运行测试的循环
  5. 此阶段可让独立子代理验证实现是否未过度拟合测试用例
  6. 对变更满意后,让 Claude 提交代码

当 Claude 有明确的迭代目标(如图形原型、测试用例或其他输出形式)时,表现最佳。通过提供测试等预期输出,Claude 可不断修改、评估结果并逐步优化,直至达成目标。

c. 编写代码→截图结果→迭代

与测试工作流类似,你可以为 Claude 提供视觉目标:

  1. 为 Claude 提供浏览器截图能力(如通过 Puppeteer MCP 服务器、iOS 模拟器 MCP 服务器,或手动复制粘贴截图)
  2. 通过复制粘贴、拖拽图片或提供文件路径的方式,向 Claude 提供视觉原型
  3. 让 Claude 编写代码实现设计,截取结果截图,并迭代直至与原型一致
  4. 满意后让 Claude 提交代码

与人类一样,Claude 的输出通过迭代会显著改善。首个版本可能已不错,但经过 2-3 次迭代后通常会更加完善。为 Claude 提供查看自身输出的工具,能获得最佳效果。

d. 安全“放手模式”(Safe YOLO mode)

若无需监督 Claude,可使用 claude --dangerously-skip-permissions 跳过所有权限检查,让其不受中断地完成任务。此模式适用于修复代码检查错误或生成样板代码等工作流。

允许 Claude 运行任意命令存在风险,可能导致数据丢失、系统损坏甚至数据泄露(如通过提示词注入攻击)。为降低风险,建议在无网络访问的容器中使用 --dangerously-skip-permissions。你可参考 Docker 开发容器的实现示例。

e. 代码库问答

接入新代码库时,可使用 Claude Code 进行学习和探索。你可以向它提出与结对编程时向其他工程师请教类似的问题。Claude 能智能搜索代码库,回答以下常见问题:

  • 日志系统如何工作?
  • 如何创建新的 API 端点?
  • foo.rs 第 134 行的 async move { ... } 作用是什么?
  • CustomerOnboardingFlowImpl 处理哪些边界情况?
  • 第 333 行为何调用 foo() 而非 bar()
  • baz.py 第 334 行的 Java 等效实现是什么?

在 Anthropic,这种使用方式已成为核心入职流程,显著缩短了上手时间,同时减轻了其他工程师的负担。无需特殊提示词——直接提问即可,Claude 会主动探索代码寻找答案。

f. 使用 Claude 操作 git

Claude 能有效处理多种 git 操作。Anthropic 的许多工程师 90% 以上的 git 交互都通过 Claude 完成:

  • 搜索 git 历史以解答问题,如“哪些变更纳入了 v1.2.3 版本?”“谁负责这个功能?”“该 API 为何如此设计?”。明确提示 Claude 查看 git 历史有助于获取更准确的答案
  • 编写提交信息:Claude 会自动分析你的变更和近期历史,结合所有相关上下文撰写提交信息
  • 处理复杂 git 操作,如还原文件、解决变基冲突、比较和合并补丁

g. 使用 Claude 操作 GitHub

Claude Code 可管理多种 GitHub 交互:

  • 创建拉取请求:Claude 理解“pr”简写,并会根据代码差异和周边上下文生成合适的提交信息
  • 一次性解决简单代码审查评论:只需告知其修复 PR 上的评论(可选提供更具体的指令),完成后会自动推送到 PR 分支
  • 修复构建失败或代码检查警告
  • 分类和筛选开放议题:让 Claude 遍历 GitHub 开放议题并进行分类

这无需记忆 gh 命令行语法,同时自动化了常规任务。

h. 使用 Claude 处理 Jupyter 笔记本

Anthropic 的研究人员和数据科学家使用 Claude Code 读写 Jupyter 笔记本。Claude 能解读输出内容(包括图片),提供快速探索和交互数据的方式。无需特定提示词或工作流,但推荐在 VS Code 中同时打开 Claude Code 和 .ipynb 文件。

你还可以让 Claude 在与同事共享前清理或优化 Jupyter 笔记本的美观度。明确要求其让笔记本或数据可视化“美观易读”,有助于提醒它以人类视觉体验为优化目标。

4. 优化你的工作流

以下建议适用于所有工作流:

a. 指令要具体

Claude Code 的成功率会随指令具体性显著提升,尤其是首次尝试时。提前给出明确指引,可减少后续修正的需求。

示例对比:

欠佳示例 优质示例
为 foo.py 添加测试 为 foo.py 编写新测试用例,覆盖用户未登录的边界场景,不使用模拟(mocks)
为什么 ExecutionFactory 的 API 这么奇怪? 查看 ExecutionFactory 的 git 历史,总结其 API 的演变过程
添加日历组件 参考首页现有组件的实现模式,尤其是代码与接口的分离方式(HotDogWidget.php 是不错的起始示例)。遵循该模式实现新日历组件,支持用户选择月份,并可前后翻页选择年份。不使用代码库中未涉及的外部库,从零构建

Claude 能推断意图,但无法读取你的想法。具体的指令能让结果更符合预期。

b. 向 Claude 提供图片

Claude 擅长处理图片和图表,可通过以下方式提供:

  • 粘贴截图(实用技巧:macOS 中按 cmd+ctrl+shift+4 截取屏幕并保存到剪贴板,按 ctrl+v 粘贴——注意:不同于常规的 cmd+v 粘贴,远程环境中无效)
  • 直接将图片拖拽到提示词输入框
  • 提供图片文件路径

这在 UI 开发中参考设计原型,以及通过可视化图表进行分析和调试时尤为实用。即使不添加视觉素材,明确告知 Claude 结果的视觉美观度重要性也会有所帮助。

c. 指明希望 Claude 查看或操作的文件

使用制表符自动补全(tab-completion)可快速引用代码库中的任意文件或文件夹,帮助 Claude 准确找到或更新目标资源。

d. 向 Claude 提供 URL

在提示词中粘贴具体 URL,Claude 会自动获取并读取内容。若需避免同一域名(如 docs.foo.com)的重复权限提示,可使用 /permissions 将域名添加到允许列表。

e. 尽早并频繁修正方向

尽管自动确认模式(按 shift+tab 切换)可让 Claude 自主工作,但作为主动协作者引导其方向,通常能获得更好结果。最佳方式是在开始时详细说明任务,但也可随时修正 Claude 的方向。

以下四种工具可辅助方向修正:

  • 让 Claude 先制定方案再编码,明确告知其在你确认方案前不进行编码
  • 任意阶段(思考、工具调用、文件编辑)按 Escape 键中断 Claude,保留上下文以便重新引导或扩展指令
  • 双击 Escape 键回溯历史,编辑之前的提示词,探索其他解决方向。可反复编辑提示词直至获得满意结果
  • 让 Claude 撤销变更,通常与第 2 种方式结合使用以尝试其他方案

虽然 Claude Code 偶尔能一次完美解决问题,但使用这些修正工具通常能更快获得更优解决方案。

f. 使用 /clear 保持上下文聚焦

长时间会话中,Claude 的上下文窗口可能会充斥无关对话、文件内容和命令,导致性能下降或分散注意力。建议在任务之间频繁使用 /clear 命令重置上下文窗口。

g. 复杂工作流使用清单和草稿本

对于包含多个步骤或需要全面解决方案的大型任务(如代码迁移、修复大量代码检查错误、运行复杂构建脚本),可让 Claude 使用 Markdown 文件(甚至 GitHub 议题)作为清单和工作草稿本,以提升效率:

示例:修复大量代码检查错误的流程:

  1. 让 Claude 运行代码检查命令,并将所有错误(含文件名和行号)写入 Markdown 清单
  2. 指示 Claude 逐一处理每个问题,修复并验证后勾选完成,再进入下一个

h. 向 Claude 传递数据

有多种方式可向 Claude 提供数据:

  • 直接复制粘贴到提示词(最常用方式)
  • 通过管道传递给 Claude Code(如 cat foo.txt | claude),特别适用于日志、CSV 和大型数据
  • 让 Claude 通过 Bash 命令、MCP 工具或自定义斜杠命令获取数据
  • 让 Claude 读取文件或获取 URL(图片同样适用)

大多数会话会结合多种方式。例如,先通过管道传入日志文件,再让 Claude 使用工具获取额外上下文以调试日志。

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

Claude Code 包含无头模式(headless mode),适用于 CI、预提交钩子、构建脚本和自动化等非交互场景。使用 -p 参数配合提示词启用无头模式,使用 --output-format stream-json 可获取流式 JSON 输出。

注意:无头模式不会在会话间持久化,需为每个会话单独触发。

a. 使用 Claude 进行议题筛选(issue triage)

无头模式可驱动由 GitHub 事件触发的自动化流程,例如代码库新增议题时。例如,Claude Code 公共代码库使用 Claude 检查新增议题并分配相应标签。

b. 使用 Claude 作为代码检查工具(linter)

Claude Code 可提供传统代码检查工具无法检测的主观性代码审查,识别拼写错误、过时注释、误导性函数或变量名等问题。

6. 借助多 Claude 工作流提升效率

除单独使用外,更强大的用法是并行运行多个 Claude 实例:

a. 一个 Claude 编写代码,另一个验证

一种简单有效的方式是让一个 Claude 编写代码,另一个进行审查或测试。与多位工程师协作类似,分离的上下文有时更有利:

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

测试也可采用类似方式:一个 Claude 编写测试,另一个编写代码通过测试。甚至可让多个 Claude 实例通过独立草稿本通信,指定彼此的读写目标。

这种分离模式通常比单个 Claude 处理所有任务的效果更好。

b. 多代码库检出(checkouts)

Anthropic 的许多工程师会采用以下方式,避免等待 Claude 完成单个步骤:

  1. 在不同文件夹创建 3-4 个 git 检出副本
  2. 在每个文件夹打开独立终端标签
  3. 在每个文件夹启动 Claude 并分配不同任务
  4. 循环查看进度并批准/拒绝权限请求

c. 使用 git worktrees

这种方式适用于多个独立任务,是多检出副本的轻量替代方案。Git worktrees 允许将同一代码库的多个分支检出到不同目录,每个工作目录拥有独立文件,同时共享相同的 Git 历史和引用日志(reflog)。

使用 git worktrees 可让多个 Claude 会话同时处理项目的不同部分,各自专注于独立任务。例如,一个 Claude 重构认证系统,另一个构建完全无关的数据可视化组件。由于任务无重叠,每个 Claude 可全速工作,无需等待其他变更或处理合并冲突:

  1. 创建 worktree:git worktree add ../project-feature-a feature-a
  2. 在每个 worktree 中启动 Claude:cd ../project-feature-a && claude
  3. 按需创建更多 worktree(在新终端标签重复步骤 1-2)

实用技巧:

  • 使用统一的命名规范
  • 每个 worktree 对应一个终端标签
  • 若使用 macOS 的 iTerm2,可设置 Claude 需要关注时的通知
  • 为不同 worktree 打开独立 IDE 窗口
  • 完成后清理:git worktree remove ../project-feature-a

d. 结合自定义工具使用无头模式

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

1. 扇出模式(Fanning out):处理大型迁移或分析(如分析数百条日志的情感倾向或数千个 CSV 文件)
  • 让 Claude 编写脚本生成任务列表。例如,生成需要从框架 A 迁移到框架 B 的 2000 个文件列表
  • 循环处理任务,为每个任务以编程方式调用 Claude 并提供工具权限。例如:claude -p "将 foo.py 从 React 迁移到 Vue。完成后必须返回字符串 OK(成功)或 FAIL(失败)。" --allowedTools Edit Bash(git commit:*)
  • 多次运行脚本并优化提示词,直至获得理想结果
2. 流水线模式(Pipelining):将 Claude 集成到现有数据/处理流水线
  • 执行 claude -p "<你的提示词>" --json | your_command,其中 your_command 是流水线的下一步操作

JSON 输出(可选)可提供结构化数据,便于自动化处理。

上述两种场景中,使用 --verbose 参数可调试 Claude 调用过程。建议生产环境中关闭该模式以获得更简洁的输出。

结语

你在使用 Claude Code 时有哪些技巧和最佳实践?欢迎标记 @AnthropicAI,让我们看到你的创新应用!

致谢

本文作者 Boris Cherny。内容借鉴了广大 Claude Code 用户社区的最佳实践,他们富有创意的使用方式和工作流持续为我们带来启发。特别感谢 Daisy Hollman、Ashwin Bhat、Cat Wu、Sid Bidasaria、Cal Rueb、Nodir Turakulov、Barry Zhang、Drew Hodun 以及众多 Anthropic 工程师,他们的宝贵见解和实践经验为这些建议的形成奠定了基础。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐