大家好,我是 Immerse,一名独立开发者、内容创作者、AGI 实践者。
关注公众号:# 沉浸式趣谈,获取最新文章(更多内容只在公众号更新)
个人网站:https://yaolifeng.com
也同步更新。
转载请在文章开头注明出处和版权信息。
我会在这里分享关于编程
、独立开发
、AI干货
、开源
、个人思考
等内容。
如果本文对您有所帮助,欢迎动动小手指一键三连 (点赞
、评论
、转发
),给我一些支持和鼓励,谢谢!
Claude Code 发布了 Claude Code,这是一个用于智能编程的命令行工具。作为一个研究项目,Claude Code 为 Anthropic 工程师和研究人员提供了一种更原生的方式来将 Claude 集成到他们的编程工作流程中。
Claude Code 故意设计得底层且不强加特定观点,提供接近原始模型访问的能力,不强制要求特定的工作流程。这种设计理念创造了一个灵活、可定制、可脚本化且安全的强大工具。虽然功能强大,但这种灵活性为刚接触智能编程工具的工程师带来了学习曲线——至少在他们形成自己的最佳实践之前是这样。
本文概述了已被证明有效的通用模式,适用于 Anthropic 内部团队和在各种代码库、语言和环境中使用 Claude Code 的外部工程师。这个列表中的内容都不是一成不变的,也不是普遍适用的;请将这些建议视为起点。我们鼓励您进行实验,找到最适合您的方法!
想要更详细的信息?我们在 claude.ai/code 的综合文档涵盖了本文提到的所有功能,并提供了额外的示例、实施细节和高级技术。
Claude Code 是一个智能编程助手,会自动将上下文拉入提示中。这种上下文收集会消耗时间和 token,但您可以通过环境调优来优化它。
CLAUDE.md
文件CLAUDE.md
是一个特殊文件,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
的目录的任何父目录。这对于 monorepo 最有用,您可能从 root/foo
运行 claude
,并在 root/CLAUDE.md
和 root/foo/CLAUDE.md
中都有 CLAUDE.md
文件。这两个文件都会自动拉入上下文claude
的目录的任何子目录。这与上面相反,在这种情况下,当您处理子目录中的文件时,Claude 会按需拉入 CLAUDE.md
文件~/.claude/CLAUDE.md
),适用于您的所有 claude 会话当您运行 /init
命令时,Claude 会自动为您生成一个 CLAUDE.md
。
CLAUDE.md
文件您的 CLAUDE.md
文件会成为 Claude 提示的一部分,因此应该像任何频繁使用的提示一样进行优化。一个常见的错误是在没有迭代其有效性的情况下添加大量内容。花时间进行实验,确定什么能从模型中产生最佳的指令遵循效果。
您可以手动向 CLAUDE.md
添加内容,或者按 #
键给 Claude 一个指令,它会自动将其纳入相关的 CLAUDE.md
。许多工程师在编程时频繁使用 #
来记录命令、文件和风格指南,然后在提交中包含 CLAUDE.md
更改,这样团队成员也能受益。
在 Anthropic,我们偶尔会通过提示改进器运行 CLAUDE.md
文件,并经常调整指令(例如,添加"重要"或"您必须"等强调词)来提高遵循程度。
默认情况下,Claude Code 会为任何可能修改您系统的操作请求权限:文件写入、许多 bash 命令、MCP 工具等。我们有意设计了这种保守的方法来优先考虑安全性。您可以自定义允许列表来允许您知道安全的额外工具,或者允许容易撤销的潜在不安全工具(例如,文件编辑、git commit
)。
有四种管理允许工具的方式:
/permissions
命令来添加或删除允许列表中的工具。例如,您可以添加 Edit
来始终允许文件编辑,Bash(git commit:*)
来允许 git 提交,或者 mcp__puppeteer__puppeteer_navigate
来允许使用 Puppeteer MCP 服务器进行导航。.claude/settings.json
或 ~/.claude.json
(我们建议将前者检入源代码控制以与团队共享)。--allowedTools
CLI 标志进行会话特定的权限设置。Claude 知道如何使用 gh
CLI 与 GitHub 交互,用于创建问题、打开拉取请求、阅读评论等。如果没有安装 gh
,Claude 仍然可以使用 GitHub API 或 MCP 服务器(如果您已安装)。
Claude 可以访问您的 shell 环境,您可以在其中为它构建便利脚本和函数集,就像为自己构建一样。它还可以通过 MCP 和 REST API 利用更复杂的工具。
Claude Code 继承了您的 bash 环境,让它可以访问您的所有工具。虽然 Claude 知道常见的实用程序,如 unix 工具和 gh
,但它不会知道您的自定义 bash 工具,除非有说明:
--help
查看工具文档CLAUDE.md
中记录频繁使用的工具Claude Code 既是 MCP 服务器又是客户端。作为客户端,它可以通过三种方式连接到任意数量的 MCP 服务器来访问它们的工具:
.mcp.json
文件中(对在您的代码库中工作的任何人可用)。例如,您可以将 Puppeteer 和 Sentry 服务器添加到您的 .mcp.json
,这样在您的仓库中工作的每个工程师都可以开箱即用地使用这些工具。使用 MCP 时,使用 --mcp-debug
标志启动 Claude 也会有帮助,以帮助识别配置问题。
对于重复的工作流程——调试循环、日志分析等——将提示模板存储在 .claude/commands
文件夹内的 Markdown 文件中。当您输入 /
时,这些会通过斜杠命令菜单变得可用。您可以将这些命令检入 git,使团队其他成员也能使用。
自定义斜杠命令可以包含特殊关键词 $ARGUMENTS
来从命令调用传递参数。
例如,这是一个您可以用来自动拉取和修复 Github 问题的斜杠命令:
请分析并修复 GitHub 问题:$ARGUMENTS。
按照以下步骤:
1. 使用 `gh issue view` 获取问题详情
2. 理解问题中描述的问题
3. 搜索代码库中的相关文件
4. 实施必要的更改来修复问题
5. 编写并运行测试来验证修复
6. 确保代码通过 linting 和类型检查
7. 创建描述性的提交消息
8. 推送并创建 PR
记住对所有 GitHub 相关任务使用 GitHub CLI (`gh`)。
将上述内容放入 .claude/commands/fix-github-issue.md
使其在 Claude Code 中作为 /project:fix-github-issue
命令可用。然后您可以例如使用 /project:fix-github-issue 1234
让 Claude 修复问题 #1234。类似地,您可以将自己的个人命令添加到 ~/.claude/commands
文件夹中,以获得在所有会话中都可用的命令。
Claude Code 不强加特定的工作流程,给您使用它的灵活性。在这种灵活性提供的空间内,我们的用户社区中出现了几种有效使用 Claude Code 的成功模式:
这个多功能工作流程适用于许多问题:
步骤 #1-#2 是至关重要的——没有它们,Claude 往往会直接跳到编写解决方案的代码。虽然有时这就是您想要的,但要求 Claude 首先研究和规划会显著提高需要预先深入思考的问题的性能。
这是 Anthropic 最喜欢的工作流程,适用于可以通过单元测试、集成测试或端到端测试轻松验证的更改。测试驱动开发(TDD)在智能编程中变得更加强大:
当 Claude 有明确的目标进行迭代时,它表现最佳——视觉模拟、测试用例或其他类型的输出。通过提供像测试这样的预期输出,Claude 可以进行更改、评估结果,并逐步改进直到成功。
类似于测试工作流程,您可以为 Claude 提供视觉目标:
像人类一样,Claude 的输出通过迭代往往会显著改善。虽然第一个版本可能很好,但经过 2-3 次迭代后,它通常会看起来好得多。给 Claude 查看其输出的工具以获得最佳结果。
不是监督 Claude,您可以使用 claude --dangerously-skip-permissions
来绕过所有权限检查,让 Claude 不间断地工作直到完成。这对于修复 lint 错误或生成样板代码等工作流程效果很好。
让 Claude 运行任意命令是有风险的,可能导致数据丢失、系统损坏,甚至数据泄露(例如,通过提示注入攻击)。为了最小化这些风险,在没有互联网访问的容器中使用 --dangerously-skip-permissions
。您可以使用 Docker Dev Containers 遵循这个参考实现。
在新代码库入职时,使用 Claude Code 进行学习和探索。您可以向 Claude 询问在结对编程时会向项目中其他工程师询问的同类问题。Claude 可以智能地搜索代码库来回答一般性问题,如:
foo.rs
第 134 行的 async move { ... }
是做什么的?CustomerOnboardingFlowImpl
处理哪些边缘情况?foo()
而不是 bar()
?baz.py
第 334 行在 Java 中的等价物是什么?在 Anthropic,以这种方式使用 Claude Code 已经成为我们的核心入职工作流程,显著改善了提升时间并减少了其他工程师的负担。不需要特殊的提示!只需提问,Claude 会探索代码来找到答案。
Claude 可以有效地处理许多 git 操作。许多 Anthropic 工程师使用 Claude 进行 90%+ 的 git 交互:
Claude Code 可以管理许多 GitHub 交互:
这消除了记住 gh
命令行语法的需要,同时自动化日常任务。
Anthropic 的研究人员和数据科学家使用 Claude Code 来读取和编写 Jupyter notebook。Claude 可以解释输出,包括图像,提供了一种快速探索和与数据交互的方式。没有必需的提示或工作流程,但我们推荐的工作流程是在 VS Code 中并排打开 Claude Code 和 .ipynb
文件。
您也可以要求 Claude 在向同事展示之前清理或美化您的 Jupyter notebook。具体告诉它使 notebook 或其数据可视化"美观"往往有助于提醒它正在为人类观看体验进行优化。
以下建议适用于所有工作流程:
Claude Code 的成功率通过更具体的指令显著提高,特别是在首次尝试时。预先给出清晰的方向减少了后续纠正的需要。
例如:
差的 | 好的 |
---|---|
为 foo.py 添加测试 | 为 foo.py 编写一个新的测试用例,涵盖用户已注销的边缘情况。避免使用模拟 |
为什么 ExecutionFactory 有这么奇怪的 api? | 查看 ExecutionFactory 的 git 历史并总结其 api 是如何形成的 |
添加一个日历小部件 | 查看主页上现有小部件的实现方式,了解模式,特别是代码和接口如何分离。HotDogWidget.php 是一个很好的开始示例。然后,遵循模式实现一个新的日历小部件,让用户选择月份并向前/向后翻页选择年份。从头开始构建,除了代码库其余部分已经使用的库之外,不使用其他库。 |
Claude 可以推断意图,但它不能读心。具体性导致与期望更好的对齐。
Claude 通过几种方法在图像和图表方面表现出色:
这在使用设计模拟作为 UI 开发的参考点,以及用于分析和调试的可视化图表时特别有用。如果您没有向上下文中添加视觉效果,明确告诉 Claude 结果在视觉上吸引人的重要性仍然很有帮助。
使用 tab 补全快速引用仓库中任何地方的文件或文件夹,帮助 Claude 找到或更新正确的资源。
在提示中粘贴特定的 URL 供 Claude 获取和阅读。为了避免相同域名(例如,docs.foo.com)的权限提示,使用 /permissions
将域名添加到您的允许列表。
虽然自动接受模式(shift+tab 切换)让 Claude 自主工作,但通过成为积极的合作者并指导 Claude 的方法,您通常会得到更好的结果。您可以通过在开始时向 Claude 彻底解释任务来获得最佳结果,但您也可以随时纠正 Claude 的方向。
这四个工具有助于方向纠正:
虽然 Claude Code 偶尔在第一次尝试时就完美解决问题,但使用这些纠正工具通常能更快地产生更好的解决方案。
/clear
保持上下文聚焦在长时间会话中,Claude 的上下文窗口可能会被无关的对话、文件内容和命令填满。这可能会降低性能,有时会分散 Claude 的注意力。在任务之间频繁使用 /clear
命令来重置上下文窗口。
对于有多个步骤或需要详尽解决方案的大型任务——如代码迁移、修复大量 lint 错误或运行复杂的构建脚本——通过让 Claude 使用 Markdown 文件(甚至 GitHub 问题!)作为检查清单和工作草稿板来提高性能:
例如,要修复大量 lint 问题,您可以执行以下操作:
向 Claude 提供数据有几种方法:
cat foo.txt | claude
),特别适用于日志、CSV 和大数据大多数会话涉及这些方法的组合。例如,您可以管道传入日志文件,然后告诉 Claude 使用工具拉入额外的上下文来调试日志。
Claude Code 包含headless mode,用于非交互式环境,如 CI、pre-commit hooks、构建脚本和自动化。使用-p
标志和 prompt 来启用 headless mode,使用--output-format stream-json
获取流式 JSON 输出。
请注意,headless mode 不会在会话之间持续存在。您必须在每个会话中都触发它。
Headless mode 可以支持由 GitHub 事件触发的自动化,例如在您的仓库中创建新 issue 时。例如,公开的Claude Code 仓库使用 Claude 检查新创建的 issue 并分配适当的标签。
Claude Code 可以提供超越传统 linting 工具检测能力的主观代码审查,识别诸如拼写错误、过期注释、误导性函数或变量名称等问题。
除了独立使用之外,一些最强大的应用涉及并行运行多个 Claude 实例:
一个简单但有效的方法是让一个 Claude 编写代码,而另一个审查或测试它。类似于与多个工程师合作,有时拥有独立的上下文是有益的:
/clear
或在另一个终端中启动第二个 Claude/clear
)来阅读代码和审查反馈您可以对测试做类似的事情:让一个 Claude 编写测试,然后让另一个 Claude 编写代码使测试通过。您甚至可以让您的 Claude 实例相互通信,通过给它们各自独立的工作草稿本,并告诉它们要写入哪一个和要读取哪一个。
这种分离通常比让单个 Claude 处理所有事情产生更好的结果。
与其等待 Claude 完成每个步骤,Anthropic 的许多工程师采用的做法是:
这种方法在处理多个独立任务时表现出色,提供了比多个 checkout 更轻量级的替代方案。Git worktrees 允许您将同一仓库的多个分支 checkout 到单独的目录中。每个 worktree 都有自己的工作目录和隔离的文件,同时共享相同的 Git 历史记录和 reflog。
使用 git worktrees 使您能够在项目的不同部分同时运行多个 Claude 会话,每个都专注于自己独立的任务。例如,您可能让一个 Claude 重构您的身份验证系统,而另一个构建完全无关的数据可视化组件。由于任务不重叠,每个 Claude 都可以全速工作,无需等待其他 Claude 的更改或处理合并冲突:
git worktree add ../project-feature-a feature-a
cd ../project-feature-a && claude
一些提示:
git worktree remove ../project-feature-a
claude -p
(headless mode)将 Claude Code 以编程方式集成到更大的工作流程中,同时利用其内置工具和 system prompt。使用 headless mode 有两种主要模式:
扇出模式处理大型迁移或分析(例如,分析数百个日志的情感或分析数千个 CSV):
让 Claude 编写脚本生成任务列表。例如,生成需要从框架 A 迁移到框架 B 的 2k 个文件列表。
循环遍历任务,为每个任务以编程方式调用 Claude,给它一个任务和一组可以使用的工具。例如:claude -p "将foo.py从React迁移到Vue。完成后,如果成功您必须返回字符串OK,如果任务失败则返回FAIL。" --allowedTools Edit Bash(git commit:*)
多次运行脚本并优化您的 prompt 以获得期望的结果。
流水线模式将 Claude 集成到现有的数据/处理流水线中:
调用claude -p "<您的prompt>" --json | your_command
,其中your_command
是处理流水线的下一步
就是这样!JSON 输出(可选)可以帮助为更容易的自动化处理提供结构。
对于这两种用例,使用--verbose
标志来调试 Claude 调用可能会有帮助。我们通常建议在生产环境中关闭 verbose 模式以获得更清洁的输出。
您使用 Claude Code 的技巧和最佳实践是什么?请标记@AnthropicAI,让我们看看您在构建什么!
由 Boris Cherny 撰写。
一个 Cursor mdc 自动生成器,基于 Gemini 2.5,很实用!
搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!