别再裸跑 Claude Code 了!我用 10 个真实工单实测 Karpathy Skills,diff 干净到不敢认

186 阅读4分钟

TL;DR:Claude Code 裸奔也能写代码,但裸奔的 Claude 是个「过于自信的初级工程师」——瞎猜需求、过度工程、顺手改无关代码。Karpathy Skills(一份 ≈70 行的 CLAUDE.md)把这三点按住,我用日常迭代的 10 个真实工单做了对照实测,结论:值得装,而且建议放全局 ~/.claude/CLAUDE.md

参考博客:

Claude Code 必装的 CLAUDE.md?

为什么要关心 CLAUDE.md?

Claude Code 启动时会自动读取项目根目录(及 ~/.claude/)的 CLAUDE.md,注入到 System Prompt 中。它相当于你给 AI 同事写的入职 Onboarding 文档

  • 项目技术栈、构建/测试命令
  • 编码规范、架构决策
  • 对 AI 自身行为的约束(这就是 Karpathy Skills 在做的事)

没有它,每次对话 Claude 都得重新"猜"你的习惯;有了它,行为明显收敛。

Karpathy Skills 是什么?

Andrej Karpathy 在用 Claude Code 大量编码后发推吐槽 LLM 的三大毛病:

  1. 瞎假设不求证​ — 替你做错误假设然后一路狂奔
  2. 过度工程​ — 100 行能搞定写成 1000 行,硬堆抽象
  3. 误伤友军​ — 顺手改/删无关代码和注释

社区项目 andrej-karpathy-skills把吐槽提炼成 四条规则写入 CLAUDE.md

规则对应痛点核心指令
Think Before Coding瞎假设先陈述假设/歧义,不确定就问,不默默猜
Simplicity First过度工程最小代码解问题,不加未要求的抽象/"灵活性"
Surgical Changes误伤友军只改任务相关代码,不重构没坏的东西
Goal-Driven Execution模糊指令给成功标准(写测试→让测试通过),而非步骤式命令

一键安装(二选一)

# 方式一:Claude Code 插件(跨项目生效)
/plugin marketplace add forrestchang/andrej-karpathy-skills
/plugin install andrej-karpathy-skills@karpathy-skills

# 方式二:直接放全局配置(所有项目生效,推荐)
curl -o ~/.claude/CLAUDE.md https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md

也可以追加到你现有项目的 CLAUDE.md末尾。

实测:10 个真实工单,Before vs After

以下是我两周内用 Claude Code 处理的 10 个典型工单(Node.js + TypeScript 全栈项目),每个任务先裸 Claude Code 跑一次,再加 Karpathy Skills 跑一次,对照 diff/轮次/返工情况。

#工单类型裸 Claude Code+Karpathy Skills关键差异
1Fix:JWT 过期校验 bug重写整个 auth middleware + 加 config先写复现测试 → 改 3 行校验逻辑 ✓Surgical Changes 生效
2Feat:导出 CSV 用户列表ExportService抽象 + 策略模式(80行)简单函数 12 行 + 问清字段范围 ✓Simplicity First 生效
3Feat:接口加 rate limit引入 Redis + 配置系统 + 改错误处理风格加 express-rate-limit 中间件(最小 diff),问 QPS ✓Think Before Coding 问参数
4Refactor:整理 utils/format.ts"顺手"格式化旁边 2 个文件、删"无用"注释只动 format.ts 内指定函数 ✓未触发误伤
5Fix:SQL 时区偏移 bug猜时区改了 DB 连接串(错)问清 DB timezone → 只在 DAO 层转 → 写测试 ✓先问后动,少一轮回滚
6Feat:邮件模板变量注入自建模板引擎(60行)用现有 handlebars3 行 ✓不造未要求的轮子
7CI:加 npm audit 到 pipelineOK(简单任务)OK无明显差异
8Docs:更新 README API 示例顺手改了隔壁 CHANGELOG(内容不对)只改 README ✓范围控制
9Fix:表单字段 XSS 过滤引入新 sanitize lib + wrapper用现有 DOMPurify 包一层,问注入场景 ✓目标驱动→写测试验证
10Perf:列表页分页优化加了 cursor + offset 双模式(超需求)limit/offset 最小实现 ✓不预做"将来可能用"的功能

汇总数据(主观但可感知)

  • 无关代码改动:裸跑 4/10 次出现 → Skills 版 0/10
  • 需人工回滚/指正:裸跑 5/10 → Skills 版 1/10(时区那次是我描述不清)
  • 平均对话轮次:裸跑 ≈ 3.2 轮(含纠正)→ Skills 版 ≈ 2.1 轮
  • PR diff 干净度:Skills 版的 diff 基本 = 任务本身,Review 体验明显好

什么时候感觉最爽?

  • 修 Bug:要求"先写能复现 bug 的测试再修",Claude 不会跳步瞎改
  • 加小功能:它会先反问关键参数(格式/范围/边界),而不是默认全量导出
  • Legacy Code:你敢让它动老模块——因为它承诺不动旁边的东西

局限 & 注意事项

  • 不是银弹:复杂架构决策、安全敏感逻辑仍要你 Review
  • 规则太强时(比如你想大范围重构),可临时说 "ignore karpathy rules for this task"/clear后重开
  • 团队项目建议把裁剪过的版本签入 repo 根目录 CLAUDE.md,个人习惯放 ~/.claude/CLAUDE.md

结论

Claude Code 不必装 CLAUDE.md 也能跑,但装上 Karpathy Skills 那份 CLAUDE.md 后,它从一个"聪明但冒失的 Junior"变成"守规矩能自驱的 Pair Programmer"。

花 30 秒 curl下来放到 ~/.claude/CLAUDE.md,下一个 PR 你就能感受到 diff 干净了多少。