Karpathy 给编码代理的行为准则:一份 65 行 CLAUDE.md 凭什么拿 20 万 star

20 万 star 的极简项目:不堆技能,只用一份 65 行的 CLAUDE.md 把 Karpathy 对 LLM 编码陷阱的观察浓缩成四条准则——先想再做、简单优先、外科手术式改动、目标驱动执行。

  • AI
  • Agent
  • Claude Code
  • Karpathy
  • CLAUDE.md
  • 开源项目

前面几篇写了SuperpowersECCmattpocock/skills—— 三个都是几十万 star、几百个技能的重型框架。今天这篇写一个极简的反例:andrej-karpathy-skills—— 一个 20 万 star、却只有一份 65 行的 CLAUDE.md 文件的项目。

它的全部内容,是把它所引用的 Karpathy 关于 LLM 编码陷阱的观察, 浓缩成四条行为准则。这篇文章讲讲:这四条准则是什么、 它凭什么只有一份文件也能这么火、以及它和前面三个技能库的路线差异。

一、它是什么:一份文件,四条准则

项目描述直白得不能再直白:

一份改善 Claude Code 行为的 CLAUDE.md 文件,源自 Andrej Karpathy 对 LLM 编码陷阱的观察。

整个仓库的核心,就是 CLAUDE.md 里的四条原则:

原则针对的问题
1. Think Before Coding(先想再做)错误的假设、隐藏的困惑、缺失的权衡
2. Simplicity First(简单优先)过度复杂化、臃肿的抽象
3. Surgical Changes(外科手术式改动)改动无关代码、动你不该动的东西
4. Goal-Driven Execution(目标驱动执行)凭直觉做、缺乏可验证的成功标准

每条准则都很短,但每一条都打在 Karpathy 点名的痛处上。下面逐一展开。

二、四条准则逐条拆解

1. Think Before Coding:别自作主张

Karpathy 的原始观察是:

"模型会在你不知情的情况下替你做出错误假设,然后不管不顾地沿着这个假设跑下去。它们不管理自己的困惑,不寻求澄清,不暴露不一致,不呈现权衡,在该反驳的时候不反驳。"

这是 LLM 编码最普遍的失败模式。准则给出对应的行为要求:

  • 显式陈述假设——不确定就问,不要猜;
  • 呈现多种解读——存在歧义时,别默默选一个;
  • 该反驳就反驳——如果有更简单的方案,说出来;
  • 困惑时停下来——说出不清楚的地方,请求澄清。

简单说:把"默默执行"改成"先对齐,再动手"。这和 mattpocock 的 /grill-me 拷问技能是同一个洞察,但只用一句话实现。

2. Simplicity First:最小代码,杜绝投机

Karpathy 的观察:

"它们真的很喜欢把代码和 API 复杂化,膨胀抽象,不清理死代码……本该 100 行就够的,却实现出一个 1000 行的臃肿构造。"

准则给出的约束:

  • 不写需求之外的特性;
  • 不为一次性代码建抽象;
  • 不添加没被要求的"灵活性"或"可配置性";
  • 不为不可能发生的场景写错误处理;
  • 200 行能写成 50 行,就重写。

判断标准也特别朴素:"一位资深工程师会说这太复杂了吗?如果是,就简化。"

3. Surgical Changes:只动你该动的

Karpathy 的观察:

"它们有时仍然会改动/删除它们不够理解的注释和代码——即使这与任务正交,也会作为副作用发生。"

这大概是所有用代理写代码的人都见过的事:你想改 A,它顺手"改进"了 B、C、D, 最后 diff 里塞满了无关改动。准则这样约束:

  • 不改动相邻代码、注释或格式;
  • 不重构没坏的东西;
  • 匹配现有风格,即使你会换一种写法;
  • 发现无关的死代码,提出来,但别删

判断标准同样干脆:"每一个改动的行,都应该能追溯到用户的请求。"

4. Goal-Driven Execution:给目标,不给指令

这一条来自 Karpathy 最有名的观察:

"LLM 极其擅长朝某个具体目标循环直到达成……别告诉它该做什么,给它成功标准,然后看着它跑。"

对应的做法,是把命令式指令转成可验证的目标:

与其说…不如说…
"加上验证""为非法输入写测试,然后让它们通过"
"修这个 bug""写一个能复现它的测试,然后让它通过"
"重构 X""确保重构前后测试都通过"

关键洞察是:强的成功标准让代理能独立循环,弱的标准("把它弄好")则需要你不断澄清。 这正是目标驱动开发的思想——不是教代理怎么做,而是让它自己找到达成目标的路径。

三、为什么"只有一份文件"反而是优点

和前面三个项目比,这个项目的反差感极强:

SuperpowersECCmattpocock/skillskarpathy-skills
规模十几个技能67 agents + 284 skills25 个技能1 份文件
载体技能库 + 强制工作流技能 + 记忆 + 安全可组合的小技能一份 CLAUDE.md
心智负担极低
哲学纪律派体系派品味派极简派

这份文件的价值正在于它的克制:

  • 没有任何安装成本——插件一条命令,或者干脆 curl 一份文件放进项目;
  • 零学习曲线——四条准则读一遍就懂,不像技能库要先搞清 Skills/Agents/Hooks/Rules 的区别;
  • 容易审查和修改——65 行,你可以逐行决定留哪条、删哪条、改成什么样;
  • 任何模型都能用——它不依赖特定 harness 的技能系统,就是纯文本提示词。

它不是要取代技能库,而是提供了一个不同的切入点:先让代理"别犯错", 而不是先给它"一堆技能"。这份文件是行为底线,技能库是能力上限。

四、怎么用:两条路

方式 A:Claude Code 插件(推荐,全项目生效)

/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills

方式 B:放进项目 CLAUDE.md(按项目生效)

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

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

它同时支持 Cursor(仓库带 .cursor/rules/ 规则)。 作者建议把它和项目专属规则合并——在末尾追加你项目的技术栈规范即可。

五、诚实的提醒

  • 它偏谨慎,不偏速度——README 自己承认:这份准则"在谨慎和速度之间偏向前者"。改个错别字、一行小修,不值得走完整套严谨流程;
  • 它是行为准则,不是工作流——它不教代理怎么规划、怎么测试、怎么审查,只约束"别乱来"。要完整的方法论,仍需叠加技能库;
  • 作者背景是 Multica——这是 Multica(一个开源编码代理平台)出的项目,README 里也顺手推广自家产品,注意这个关联。

我的收获

  1. 克制本身就是一种设计——在人人堆技能的年代,一份 65 行的文件能拿 20 万 star,说明很多人真正缺的其实是最基础的"代理别乱来"。
  2. "给目标,不给指令"是通用心法——这条不止适用于代理,也适用于带新人:告诉别人"成功长什么样",比手把手教每一步更有效。
  3. 四条准则就是编码的"基本盘"——先想再做、简单优先、外科手术式改动、目标驱动。这不是 AI 时代的新规矩,而是被 Karpathy 一句话点破的工程常识。
  4. 极简派和体系派可以共存——先用这份文件守住行为底线,再按需叠加技能库。最轻的干预和最重的体系,并不矛盾。

想深入了解,直接看GitHub 仓库—— 建议你打开那个 CLAUDE.md 从头读到尾,也就一两分钟。然后问自己: 你的项目需不需要这四条?大概率需要。这就是它的全部魅力。