Update avaliable. Click RELOAD to update.
📱 安装应用到主屏幕,获得更好体验
目录

Claude Code 12 大最佳实践:从跟风编程到 Agent 工程

Claude Code 最佳实践封面

前言

Claude Code 是 Anthropic 推出的终端 AI 编程助手,但很多人只是把它当聊天窗口用。

2026 年 3 月,shanraisshan/claude-code-best-practice 登顶 GitHub Trending 日榜第一。这个仓库由 Claude Code 的缔造者 Boris Cherny 审阅,整理了 11 个类别的 69 条实用建议,副标题是:”从跟风编程(vibe coding)到 Agent 工程”。

我通读了一遍,筛选出 12 个真正改变我工作方式的模式,结合自己的实践整理如下。

1. 你的 CLAUDE.md 可能适得其反

大多数人把 CLAUDE.md 当配置文件用:越长越详细越好。我之前的有 500 多行——代码风格、提交格式、测试要求、变量命名、包组织结构都有。

Claude 忽略了后半部分。不是每次都忽略,而是频繁到你没法依赖它。

研究发现:60 行是最优的,200 行是上限。 超过之后,文件靠后的规则会被悄悄降权处理。Claude 的工作注意力有限,500 行的文件要求它同时记住太多约束。

解决办法不是删规则,而是让规则只在相关时才出现。使用 <important if="language=go"> 语法——当 Claude 在处理 Go 文件时,这个标签内的规则才可见;当它在写 Python 脚本时,整个块对当前 session 来说不存在。

对于多层级 Go 服务,推荐这样的文件结构:

my-service/
├── CLAUDE.md           # 根目录:通用规则,约 30 行
├── api/
│   └── CLAUDE.md       # REST 约定、错误码
├── internal/
│   └── CLAUDE.md       # 包命名、接口模式
└── cmd/
    └── CLAUDE.md       # 参数解析、日志初始化

internal/CLAUDE.md 里使用条件规则:

<important if="language=go">
- 不要裸 goroutine,使用 errgroup 或 WaitGroup 管理生命周期
- 通道容量 > 0 需要行内注释说明原因
- context 必须是第一个参数,命名为 ctx
</important>

总行数保持可控,每条规则只在真正相关时触发。

CLAUDE.md 最佳行数区域

2. 别再像聊天窗口一样用 Claude Code

这个习惯花了我很长时间才改掉:每次以全新提示词开始,重新建立所有规则。

“帮我审查这个 PR。只读文件,别改任何东西。重点关注 internal/ 包。用项目的错误处理规范。”

每次都要。而且每次。

替代方案:把 Claude Code 当作编排系统而非聊天界面。 .claude/ 目录支持三种配置类型:

一个杀手级例子:在 .claude/agents/ 里创建 reviewer.md——一个专用 Agent,只有读取权限,没有写入工具,没有 shell 执行,没有网络访问。

这个 Agent 物理上无法修改文件。不管你在对话里要求它做什么都无所谓。提示词不再约束——是配置在约束。

“只读文件,别改任何东西”这句话已经从我的所有提示词里删除了。因为不再需要了。

.claude/ 三层架构:commands、agents、skills

3. 上下文是资源,像资源一样对待它

Skills 默认共享主 Agent 的上下文。这比听起来重要得多。

我有一个代码质量分析 skill,会读取 40 个文件生成报告。运行后,那个 session 里后续的每个任务都变重了——Claude 带着所有文件内容,即使回答完全不相关的问题也是如此。响应变慢了,而且那种”不那么锐利”的感觉很难归因到具体原因。

一行代码就能解决:

context: fork

这个 skill 在隔离的子 Agent 中运行。完成后,那部分上下文被丢弃。主 Agent 只看到输出——干净的摘要、发现列表,不管 skill 设计要返回什么。

无需手动 /compact,无需开新 session 清理。

context: fork 隔离子 Agent 示意图

4. Hooks 在 Agent 循环之外运行

PreToolUse、PostToolUse、Stop——三个大多数 Claude Code 用户从未配置过的钩子点。

它们在架构上的有趣之处是:在 Claude 的主要推理循环之外执行。不消耗 token,不中断任务。它们附着在 Claude 动作上的旁路自动化,不是 Claude 动作的一部分。

几个具体用法:

Hooks 执行周期:PreToolUse → 工具运行 → PostToolUse → Stop 钩子 → 验证

5. 减少 84% 的权限弹窗

Claude Code 默认每个 shell 命令都需要批准。这对安全是正确设置,但对流程是错误设置。

/sandbox 在隔离环境中运行 shell 命令。每个命令的爆炸半径被限制,因此批准门槛大幅降低。实际效果:减少 84% 的权限弹窗

代价是实打实的——沙盒命令的系统访问有限。但对大多数编码任务来说,沙盒边界从未触及,而中断消失了。

6. “随时随地运行几十个 Claude”

这是 Boris Cherny 对自己工作流的描述。不是夸张。

claude -w

claude -w 在 git worktree 内启动 Claude——一个隔离的、位于单独分支上的工作目录。结合 tmux 的多面板,你就拥有同时运行的、独立的 Claude 实例——每个有自己的上下文、自己的分支、自己的任务。

Agent A 在重构 auth 模块。Agent B 在修复数据库层。Agent C 在给两者写测试。没有实例共享上下文,没有实例冲突。它们的变更在准备合并前都在独立的分支上。

从一次等一个 Claude 回复,到同时运行十几个——这个转变很可能是跟风编程和 Agent 工程之间最显著的差异。

tmux + git worktree:三个并行 Claude Agent

7. ultrathink 不是噱头

在任务描述中任何地方输入 ultrathink 这个词,Claude 就会进入更高努力的推理模式。这是扩展思考的自然语言触发器——无需配置更改,无需模型切换,只是一个词放进提示词里就行。

不是所有任务都需要它。大多数任务不需要。

我曾在设计一次服务拆分时使用它。普通模式给出了三个不错的选项。使用 ultrathink 后,Claude 浮现了两个我之前没考虑到的约束——跨服务事务边界和现有监控系统的接入成本。最终选择与普通模式推荐的完全不同。

8. 本地自动化,CI 做不到的事

/loop 30m /code-review

每 30 分钟运行一次代码审查工作流。无需人工介入。最长间隔 1 小时,最长持续 3 天。

CI/CD 自动化的是代码合并后的事。/loop 自动化的是开发过程中的事——而且它能做 CI 根本做不到的事,因为它能访问你当前的工作状态。

CI 流水线看到的是 diff(差异)。基于循环的审查知道你在这次 session 中一直在做什么、之前出现过什么问题、确立了哪些约束。

我曾在周五下午让一个循环跑过周末。周一早上,我不在时的问题已被标记出来了,PR 摘要也起草好了。

大多数开发者不知道 Claude Code 原生就有这个能力。

9. 不中断主任务提出旁路问题

你在跑一个重构,90 分钟了。想问一个不相关的问题——关于另一个文件、另一个问题。中断意味着丢失上下文。但问题需要答案。

/btw <你的问题>

/btw 把问题加入队列。Claude 继续当前任务,记下你的问题,在自然的暂停点处理它,然后回到之前的地方。

一旦用过它,停下整个任务去问一个旁路问题感觉就像浪费时间。

10. 让技能值得写的核心部分

如果你在给团队写 skills,Thariq——这个仓库 skill 部分的贡献者之一——有一条建议:

“任何 skill 中信号最强的部分是 Gotchas(踩坑记录)。”

不是概述。不是使用示例。是踩坑记录。

Gotchas 部分记录了 Claude 在实际使用中遇到的失败模式。不是你预期的边界情况——是真实失败、随时间积累、发生时就被写下来的失败。它们的信噪比远高于解释性文字,因为它们是具体的、可验证的、可叠加的。每次你记录的失败都会成为未来的预防。

先写 Gotchas 部分。每次 Claude 失败就更新。让它成为 skill 文档中最核心的产物。

11. 让”完成”真正代表完成

Claude 会告诉你任务已完成。但这不代表它真的完成了。

我让 Claude 写一组 API 处理器。它说完成了。我看了代码——三个处理器中有两个的错误处理是空的。err != nil 后面什么都没跟。

Stop 钩子连接一个验证脚本——运行测试套件、检查预期文件是否存在、调用 API 端点并验证响应。如果验证失败,任务状态回滚,Claude 继续工作直到通过。

在跨夜或跨多次 session 运行的自动化工作流中,这是可信输出和仍需要手动检查的输出之间的区别。

12. 一个参数让 SDK 调用快 10 倍

当通过 Agent SDK 以编程方式使用 Claude 时——不是在交互式 CLI 中——加上 --bare

claude --bare --prompt "analyze this file"

上下文发现是 Claude 的启动过程:定位 CLAUDE.md 文件、加载配置、检查环境。在交互式 session 中,这发生一次。在批量自动化中,它在每次调用都发生。

--bare 跳过它。启动时间减少最高 10 倍

单次调用时区别几乎不可察觉。但我有一个每日代码分析管道——大约 300 个文件,每个文件一个 Agent 并行运行。配置前约 40 分钟,配置后 18 分钟。同样的基础设施,同样的工作负载。

总结

看完所有 69 条建议后,跟风编程和 Agent 工程之间的真正差距不在于不同的工具,而在于同样的工具以不同的方式使用

 跟风编程 (Vibe Coding)Agent 工程 (Agentic Engineering)
约束来源你每天写的提示词配置文件 + 权限限制
工作方式描述 → 尝试 → 纠正 → 重复预设规则 → 自动执行 → 自动验证
上下文管理手动 /compactcontext: fork 自动清理
权限控制每次你手动批准Agent 物理上无权做某些操作
可复用性每次重写提示词Skills / Commands / Agents
并行度一次一个对话几十个 Agent 同时运行
验证方式你肉眼检查Stop 钩子自动验证

做这些事的工具——agents、skills、hooks、worktrees、loops——Claude Code 自带了。它们不是高级功能。大多数人从未发现它们。

仓库地址:shanraisshan/claude-code-best-practice,仍在活跃维护,值得通读。


本文翻译改编自 huizhou92 在 Level Up Coding 的文章,由 Boris Cherny 审阅的 69 条建议浓缩为 12 个核心模式。

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2026/05/claude-code-best-practices/