【ClaudeCode】——使用技巧

1. 自定义您的设置

a. 创建CLAUDE.md文件

CLAUDE.md是一个特殊文件,Claude在开始对话时会自动将其拉入上下文。这使其成为记录以下内容的理想场所:

  • 常用bash命令
  • 核心文件和实用函数
  • 代码风格指南
  • 测试说明
  • 代码库规范(例如,分支命名、合并与变基等)
  • 开发环境设置(例如,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的目录的任何父目录。这对于monorepo最有用,您可能从root/foo运行claude,并在root/CLAUDE.mdroot/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.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交互,用于创建问题、打开Pull Request、读取评论等。
没有安装gh时,Claude仍然可以使用GitHub API或MCP服务器(如果您已安装)。

2. 为Claude提供更多工具

Claude可以访问您的shell环境,您可以在其中为它构建便利脚本和函数集合,就像您日常开发时自己会为自己做的那样。
它还可以通过MCP和REST API利用更复杂的工具。

a. 与bash工具一起使用Claude

Claude Code继承了您的bash环境,让它可以访问您的所有工具。
虽然Claude了解常见实用程序如unix工具和gh,但它不会在没有指令的情况下了解您的自定义bash工具:

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

b. 与MCP一起使用Claude

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

  • 在项目配置中(在该目录中运行Claude Code时可用)
  • 在全局配置中(在所有项目中可用)
  • 在检入的.mcp.json文件中(对在您代码库中工作的任何人都可用)。例如,您可以将Puppeteer和Sentry服务器添加到您的.mcp.json中,这样在您代码库工作的每个工程师都可以开箱即用地使用这些。

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

c. 使用自定义斜杠命令

对于重复的工作流程 —— 调试循环、日志分析等 —— 将提示模板存储在.claude/commands文件夹内的Markdown文件中。当您输入/时,这些会通过斜杠命令菜单变得可用。您可以将这些命令检入git,使其对团队的其他成员可用。

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

例如,这里是一个可以用来自动拉取和修复Github问题的斜杠命令:

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

按照这些步骤:

1. 使用 `gh issue view` 获取问题详情
2. 理解问题中描述的问题
3. 搜索代码库中的相关文件
4. 实施必要的更改来修复问题
5. 编写并运行测试来验证修复
6. 确保代码通过代码检查和类型检查
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文件夹中,以便在所有会话中使用。

3. 尝试常见工作流程

Claude Code不强制特定的工作流程,为您提供了按照自己的方式使用它的灵活性。
在这种灵活性提供的空间内,我们的用户社区中已经出现了几种有效使用Claude Code的成功模式:

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

这种多功能工作流程适合许多问题:

  1. 要求Claude阅读相关文件、图像或URL

    ,提供一般指引(“阅读处理日志记录的文件”)或具体文件名(“阅读logging.py”),但明确告诉它暂时不要编写任何代码。

    1. 这是工作流程中应该考虑大量使用子智能体的部分,特别是对于复杂问题。告诉Claude使用子智能体来验证细节或调查它可能有的特定问题,特别是在对话或任务的早期,往往能在不损失效率的情况下保持上下文可用性。
  2. 要求Claude制定解决特定问题的计划

    。我们建议使用"think"一词来触发扩展思维模式,这为Claude提供额外的计算时间来更彻底地评估替代方案。这些特定短语直接映射到系统中递增的思维预算级别:“think” < “think hard” < “think harder” < “ultrathink”。每个级别为Claude分配越来越多的思维预算。

    1. 如果这一步的结果看起来合理,您可以让Claude创建一个文档或GitHub问题,记录其计划,这样如果实施(第3步)不是您想要的,您可以重置到这个位置。
  3. 要求Claude在代码中实施其解决方案。这也是一个可以要求它在实施解决方案的各个部分时明确验证其解决方案的合理性的好地方。

  4. 要求Claude提交结果并创建拉取请求。如果有需要,这也是让Claude更新任何README或变更日志以说明它刚才所做工作的好时机。

第1-2步至关重要 —— 没有它们,Claude倾向于直接跳到编码解决方案。虽然有时这正是您想要的,但要求Claude首先进行研究和规划显著改善了需要深度前期思考的问题的性能。

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

这是Anthropic最喜欢的工作流程,用于可以通过单元测试、集成测试或端到端测试轻松验证的更改。测试驱动开发(TDD)在智能体编程中变得更加强大:

  1. 要求Claude基于预期的输入/输出对编写测试。明确说明您正在进行测试驱动开发,这样它就会避免创建mock实现,即使对于代码库中尚不存在的功能也是如此。

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

  3. 要求Claude在您满意时把测试提交到git

  4. 要求Claude编写通过测试的代码

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

    1. 在这个阶段,可以要求它使用独立的子智能体验证实现没有过度拟合测试
  5. 在您满意更改后要求Claude提交代码到git

Claude在有明确目标进行迭代时表现最佳 —— 有视觉设计图、测试用例或其他类型的输出。通过提供像测试用例这样的预期输出,Claude可以进行更改、评估结果,并逐步改进直到成功。

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

与测试工作流程类似,您可以为Claude提供视觉输入:

  1. 为Claude提供拍摄浏览器截图的方法(例如,使用Puppeteer MCP服务器iOS模拟器MCP服务器,或手动复制/粘贴截图到Claude中)。
  2. 通过复制/粘贴或拖放图像为Claude提供视觉输入,或给Claude图像文件路径。
  3. 要求Claude在代码中实现设计,拍摄结果截图,并迭代直到其结果与模拟匹配。
  4. 在您满意时要求Claude提交

像人类一样,Claude的输出通过迭代往往会显著改善。虽然第一版可能很好,但经过2-3次迭代后通常看起来会好得多。为Claude提供查看其输出的工具以获得最佳结果。

d. 安全YOLO模式

您可以使用claude --dangerously-skip-permissions绕过所有权限检查,让Claude不受干扰地工作直到完成。
这对修复代码检查错误或生成样板代码等工作流程效果很好。

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

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分支。
  • 修复失败的构建或代码检查警告
  • 分类和整理Open的Issues,要求Claude循环遍历开放的GitHub Issues

这让开发者无需记忆如何使用gh命令行,也能自动化进行常规任务。

h. 使用Claude处理Jupyter笔记本

Anthropic的研究人员和数据科学家使用Claude Code来读取和编写Jupyter笔记本。Claude可以解释输出(包括图像),并提供探索和与数据交互的快速方式。
这里没有固定的提示词或工作流程,但我们推荐的工作流程是在VS Code中并排打开Claude Code和.ipynb文件。

在向同事展示之前,您还可以要求Claude清理或对Jupyter笔记本进行美学改进。
具体地要求它“把笔记本或数据可视化变"美观"”,往往能有助于提醒它正在为人类观看体验进行优化。

4. 优化您的工作流程

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

a. 在指令中要具体

Claude Code的成功率随着更具体的指令而显著提高,特别是在首次尝试时。预先给出明确的方向减少了后续需要修正方向的必要。

例如:

为foo.py添加测试 为foo.py编写新的测试用例,覆盖用户已注销的边缘情况。避免使用模拟
为什么ExecutionFactory有这么奇怪的api? 查看ExecutionFactory的git历史并总结其api是如何形成的
添加日历小部件 查看首页上现有小部件的实现方式,了解模式以及代码和接口如何分离。HotDogWidget.php是一个很好的开始示例。然后,遵循模式实现一个新的日历小部件,让用户选择月份并向前/向后翻页选择年份。从头构建,不使用代码库中已使用的库之外的其他库。

Claude可以推断意图,但它不会读心术。“具体的指令”能够帮助Claude更好地满足你的期望。

b. 给Claude提供图像

可以通过以下方式给Claude添加图像:

  • 粘贴截图(专业提示:在macOS中按cmd+ctrl+shift+4截图到剪贴板,然后按ctrl+v粘贴。注意这不是通常在mac上用来粘贴的cmd+v,并且无法远程工作。)
  • 拖放图像直接到提示输入中
  • 提供图像的文件路径

这在将设计图作为UI开发参考点以及用于分析和调试的可视化图表时特别有用。
如果您不向上下文中添加视觉内容,您仍然可以明确告诉Claude视觉吸引力的重要性,这也会有帮助。

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

使用tab补全快速引用代码库中任何地方的文件或文件夹,帮助Claude找到或更新正确的资源。

d. 给Claude提供网址

在提示中粘贴特定的网址供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. 为复杂工作流程使用检查清单和草稿板

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

例如,要修复大量代码检查问题,您可以执行以下操作:

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

h. 向Claude传递数据

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

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

大多数时候会组合使用这些方法。例如,您可以管道输入日志文件,然后告诉Claude使用工具拉取额外上下文来调试日志。

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

Claude Code包含无头模式,可用于CI、预提交钩子、构建脚本和自动化等非交互式上下文。
使用-p标志与提示词来启用无头模式,并使用--output-format stream-json进行流式JSON输出。

注意无头模式不在会话间持续。您必须每次会话都触发它。

a. 使用Claude进行问题分类

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

b. 使用Claude作为代码检查器

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

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. 拥有代码库的多个checkout

与等待Claude完成每个步骤不同,Anthropic的许多工程师所做的是:

  1. 在单独的文件夹中创建3-4个git checkout
  2. 在单独的终端标签中打开每个文件夹
  3. 在每个文件夹中启动Claude执行不同的任务
  4. 轮流检查各个Claude进度并批准/拒绝权限请求

c. 使用git工作树

这种方法在多个独立任务中表现出色,为多个检出提供了轻量级的替代方案。Git工作树允许您从同一代码库将多个分支检出到单独的目录中。每个工作树都有自己的工作目录和隔离的文件,同时共享相同的Git历史和reflog。

使用git工作树使您能够在项目的不同部分同时运行多个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. 使用自定义工具的无头模式

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

\1. **扇出:**处理大型迁移或分析(例如,分析数百个日志中的情感或分析数千个CSV):

  1. 让Claude编写脚本生成任务列表。例如,生成需要从框架A迁移到框架B的2k文件列表。
  2. 循环遍历任务,为每个任务以编程方式调用Claude,给它一个任务和一组可以使用的工具。例如:claude -p "将foo.py从React迁移到Vue。完成后,如果成功则必须返回字符串OK,如果任务失败则返回FAIL。" --allowedTools Edit Bash(git commit:*)
  3. 运行脚本多次并完善您的提示以获得所需的结果。

\2. **管道:**将Claude集成到现有的数据/处理管道中:

  1. 调用claude -p "<您的提示>" --json | your_command,其中your_command是处理管道的下一步
  2. 就这样!JSON输出可以帮助提供结构以便更容易的自动化处理。

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐