
每次用 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,点此了解更多