cover

每次用 Claude Code 写代码,你是不是也遇到过这些问题:

  • 让它改一个 bug,它顺手把旁边的文件也重构了
  • 一个简单功能写成几百行,抽象套抽象
  • 提完 PR 发现 diff 里一堆无关改动,有用的改动反而看不清
  • 说"帮我加个导出功能",它不问你导出什么、什么格式,直接按自己的理解开干

andrej-karpathy-skills 是一个 Claude Code 插件,整个仓库就一个 CLAUDE.md 文件,专门治这几个毛病。项目上线半个月涨了 5 万 Star,目前累计 6.3 万。

这篇文章介绍这个 Claude Code 插件的四条规则、安装方法,以及怎么和项目已有的 CLAUDE.md 配合使用。

背景

今年 1 月 Karpathy(OpenAI 联合创始人、"vibe coding" 的提出者)在 X 上发了条长推,吐槽 LLM 写代码的通病:

"模型会代你做错误假设,然后不假思索地执行。它们不管理自身的困惑,不寻求澄清,不呈现矛盾,在应该提出异议时也不反驳。"

"明明 100 行能搞定的事情,非要实现成 1000 行的臃肿架构。"

开发者 Forrest Chang 把这些观察提炼成了四条规则,写成 CLAUDE.md 开源到 GitHub。这就是 andrej-karpathy-skills 这个 Claude Code 插件的全部内容。

四条核心规则

规则 1:编码前先思考

解决 Claude Code 自作主张的问题。

以前你说"帮我加个导出功能",Claude Code 直接出代码——默认导出所有用户、JSON 格式、存本地。这些你都没说过。

CLAUDE.md 里加了这条规则之后,Claude Code 动手之前会先确认:

  • 不确定的地方主动问,不猜
  • 有多种理解时列出来让你选
  • 发现更简单的方案会说出来
  • 搞不清楚就停下来要求澄清

实际效果:多了一轮对话,但省掉后面反复修改的时间。

规则 2:简洁优先

解决 Claude Code 过度工程的问题。

我之前让 Claude Code 写一个文件上传接口,它搞了个 Strategy 模式加 Factory 加配置化,三百多行。需求就是传个文件存到 S3。

这条规则的约束:

  • 不加需求之外的功能
  • 不为一次性代码建抽象
  • 不加没人要的"灵活性"和"可配置性"
  • 不为不可能的场景做防御

检验标准:一个高级工程师看了觉得复杂吗?如果是,砍掉。

规则 3:精准修改

解决 Claude Code 到处乱改的问题。

改 A 文件的 bug,B 文件的注释也被"改进"了,C 文件的格式也被"统一"了。CLAUDE.md 里对此写得很明确:

  • 不动相邻代码、注释或格式
  • 不重构没坏的东西
  • 匹配现有风格,哪怕 Claude Code 更习惯另一种写法
  • 注意到死代码可以提一嘴,但不许自己删

每行改动必须能追溯到你的请求。

规则 4:目标驱动执行

解决执行目标模糊的问题。这条 CLAUDE.md 里写的规则,我觉得是四个里最实用的。

Karpathy 原话:

"LLM 非常擅长循环执行直到达成特定目标……不要告诉它该做什么,给它成功标准,然后看着它完成。"

操作方法是把模糊指令换成可验证目标:

别这么说 换成这么说
"添加验证" "为无效输入写测试,然后让它们通过"
"修复 bug" "写一个重现 bug 的测试,然后让测试通过"
"重构 X" "确保重构前后测试都能通过"

给 Claude Code 一个可验证的目标,它自己会闭环,你不用一步一步盯着。

安装方法

方式一:Claude Code 插件安装(推荐)

在 Claude Code 终端中执行:

# 1. 添加插件市场
/plugin marketplace add forrestchang/andrej-karpathy-skills

# 2. 安装插件
/plugin install andrej-karpathy-skills@karpathy-skills

安装后所有项目自动生效,不需要每个项目单独配置。

方式二:下载 CLAUDE.md 到项目

如果你只想在特定项目中使用:

# 新项目
curl -o CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md

# 已有 CLAUDE.md 的项目,追加到末尾
echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

追加不会和原有 CLAUDE.md 配置冲突。

Cursor 用户

仓库内置了 .cursor/rules/karpathy-guidelines.mdc,克隆下来用 Cursor 打开项目即可生效。

和项目已有的 CLAUDE.md 怎么配合

大部分团队已经有自己的 CLAUDE.md 了,写了编码规范、技术栈约束之类的内容。这个 Claude Code 插件的四条规则管的是 AI 的通用行为(别猜、别膨胀、别乱碰、给目标),和项目规则管的东西不重叠。

合并之后可以在 CLAUDE.md 里再加一段项目特定的约束:

## 项目规则

- TypeScript 严格模式
- 所有 API 端点必须有测试
- 错误处理参考 src/utils/errors.ts

配合 Prompt 技巧

安装了这个 Claude Code 插件之后,写 prompt 时可以更偏向"给目标"而不是"给步骤"。

以前可能会这么写:

打开 src/auth/login.ts,找到 validateToken 函数,在第 42 行加一个 null check,
然后更新 login.test.ts

现在可以直接写:

validateToken 在 token 为 null 时会崩溃。写一个复现测试,然后修复它。

因为 CLAUDE.md 里的"目标驱动执行"规则在约束 Claude Code 的行为,它会自己规划路径,反而少出错。

什么时候不需要

改拼写、加 import、删 console.log 这种任务,Claude Code 本来就不太会搞砸。这套 CLAUDE.md 规则的价值在非琐碎的工作上:多文件 feature 开发、涉及已有代码的重构、需要理解上下文的 bug 修复。

简单任务走完整流程反而浪费时间,该快还是快。

安装后的效果

装了大概两周,几个变化比较明显:

  • Claude Code 开始在动手前问问题了,以前接到指令直接冲
  • diff 干净了不少,基本每行改动都能对应到我的请求
  • 代码量明显减少,不再出现过度设计的抽象层
  • PR review 快了,不用过滤无关改动

不算什么革命性的东西,但确实解决了日常使用 Claude Code 时几个一直让人烦的问题。


相关推荐


如果你需要使用 Claude Code,点此了解更多