开源项目

andrej-karpathy-skills

从 Andrej Karpathy 对 LLM 编码陷阱的观察中提炼出的 CLAUDE.md 配置文件,为 Claude Code 设定四个原则:先思考再编码、简洁优先、精准修改、目标驱动执行。直接针对 LLM 常犯的过度抽象、随意修改无关代码等问题,让 Claude Code 输出更可靠、更简洁的代码。同时支持 Cursor 规则,适合追求高质量 AI 辅助编码的开发者。

README

受 Karpathy 启发的 Claude Code 使用指南

查看我的新项目 Multica——一个开源平台,用于运行和管理具有可复用技能(skills)的编码智能体。

在 X 上关注我:https://x.com/jiayuan_jy

一个单一的 CLAUDE.md 文件,旨在改进 Claude Code 的行为,源自 Andrej Karpathy 针对 LLM 编码陷阱的观察。

英文 | 简体中文

存在的问题

摘自 Andrej 的帖子:

“模型会替你做错误的假设,然后干脆顺着走下去,根本不去检查。它们管理不了自己的困惑,不寻求澄清,不暴露不一致,不呈现权衡,也不在应该的时候提出反对。”

“它们非常喜欢把代码和 API 弄得过于复杂,膨胀抽象,不清除死代码…… 100 行就能搞定的事,它们非要搞出一个超过 1000 行的臃肿结构。”

“它们有时还会改变/删除自己理解不够充分的注释和代码(作为副作用),即使这些与任务正交。”

解决方案

一份文件中的四条原则,直接针对这些问题:

原则 解决的问题
先思考再编码(Think Before Coding) 错误假设、隐藏困惑、缺失的权衡
简洁优先(Simplicity First) 过度复杂、膨胀的抽象
手术式变更(Surgical Changes) 正交修改、触碰不该碰的代码
目标驱动执行(Goal-Driven Execution) 通过测试优先、可验证的成功标准来驱动

四条原则详解

1. 先思考再编码

不要假设。不要隐藏困惑。暴露权衡。

LLM 通常会默默地选择一种解释并执行下去。这条原则强制进行显式推理:

  • 明确陈述假设——如果不确定,就提问而不是猜测
  • 呈现多种解释——存在歧义时,不要默默选择一种
  • 在合理时提出反对——如果存在更简单的方法,就指出来
  • 困惑时停下来——指出不清楚的地方并寻求澄清

2. 简洁优先

用最少的代码解决问题。不做投机性设计。

对抗过度工程的倾向:

  • 不添加未被要求的功能
  • 不为一次性使用的代码创建抽象
  • 不提供未被要求的“灵活性”或“可配置性”
  • 不为不可能的场景编写错误处理
  • 如果 200 行能写成 50 行,就重写它

检验标准: 资深工程师会不会说这太复杂了?如果是,就简化。

3. 手术式变更

只改动必须改的部分。只清理自己留下的烂摊子。

编辑已有代码时:

  • 不要“改进”相邻的代码、注释或格式
  • 不要重构没有问题的部分
  • 匹配现有风格,即使你自己会采用不同的方式
  • 如果注意到不相关的死代码,可以提出来——但不要删除它

当你的更改产生了孤儿代码:

  • 删除因你的更改而变得未使用的导入/变量/函数
  • 除非被要求,否则不要移除已有的死代码

检验标准: 每行更改都应该直接追溯到用户的请求。

4. 目标驱动执行

定义成功标准。循环验证直到达成。

将命令式任务转化为可验证的目标:

不要…… 而是转化为……
“添加验证” “为无效输入编写测试,然后让它们通过”
“修复这个 bug” “编写一个能复现它的测试,然后让测试通过”
“重构 X” “确保重构前后所有测试都通过”

对于多步骤任务,列出简要计划:

1. [步骤] → 验证:[检查项]
2. [步骤] → 验证:[检查项]
3. [步骤] → 验证:[检查项]

强成功标准能让 LLM 独立循环。弱标准(“让它工作”)则需要不断澄清。

安装

选项 A:Claude Code 插件(推荐)

在 Claude Code 中,先添加市场:

/plugin marketplace add forrestchang/andrej-karpathy-skills

然后安装插件:

/plugin install andrej-karpathy-skills@karpathy-skills

这会将指南安装为 Claude Code 插件,使该技能在所有项目中可用。

选项 B:CLAUDE.md(每个项目单独配置)

新项目:

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

已有项目(追加):

echo "" >> CLAUDE.md
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md

与 Cursor 一起使用

此仓库包含一个已提交的 Cursor 项目规则(.cursor/rules/karpathy-guidelines.mdc),因此当你用 Cursor 打开该项目时,同样的指南也会生效。参见 CURSOR.md 了解设置方法、如何将规则用于其他项目,以及这与 Claude Code 的关系。

核心洞察

来自 Andrej:

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

“目标驱动执行”原则抓住了这一点:将命令式指令转化为带有验证循环的声明式目标。

如何判断它在工作

如果出现以下情况,说明这些指南正在生效:

  • diff 中不必要的更改更少——只出现被请求的更改
  • 因过度复杂导致的代码重写更少——第一次写出的代码就是简洁的
  • 澄清问题出现在实现之前——而不是犯错误之后
  • 干净、最小化的 PR——没有顺手重构或“改进”

自定义

这些指南设计为可与项目特定的指令合并。将它们添加到现有的 CLAUDE.md 中,或创建一个新的。

对于项目特定的规则,可以添加诸如以下的部分:

## 项目特定指南

- 使用 TypeScript 严格模式
- 所有 API 端点都必须有测试
- 遵循 `src/utils/errors.ts` 中已有的错误处理模式

权衡说明

这些指南倾向于谨慎优先于速度。对于琐碎任务(简单的拼写修正、一目了然的单行修改),请自行判断——并非每处更改都需要完全严格的流程。

目标是减少在非平凡工作上的高成本错误,而不是拖慢简单任务。

许可证

MIT

开源项目multica-ai2026-05-19原文

相关内容