别再裸跑 Claude Code 了!我用 10 个真实工单实测 Karpathy Skills,diff 干净到不敢认
TL;DR:Claude Code 裸奔也能写代码,但裸奔的 Claude 是个「过于自信的初级工程师」——瞎猜需求、过度工程、顺手改无关代码。Karpathy Skills(一份 ≈70 行的 CLAUDE.md)把这三点按住,我用日常迭代的 10 个真实工单做了对照实测,结论:值得装,而且建议放全局
~/.claude/CLAUDE.md。
参考博客:
为什么要关心 CLAUDE.md?
Claude Code 启动时会自动读取项目根目录(及 ~/.claude/)的 CLAUDE.md,注入到 System Prompt 中。它相当于你给 AI 同事写的入职 Onboarding 文档:
-
项目技术栈、构建/测试命令
-
编码规范、架构决策
-
对 AI 自身行为的约束(这就是 Karpathy Skills 在做的事)
没有它,每次对话 Claude 都得重新"猜"你的习惯;有了它,行为明显收敛。
Karpathy Skills 是什么?
Andrej Karpathy 在用 Claude Code 大量编码后发推吐槽 LLM 的三大毛病:
-
瞎假设不求证 — 替你做错误假设然后一路狂奔
-
过度工程 — 100 行能搞定写成 1000 行,硬堆抽象
-
误伤友军 — 顺手改/删无关代码和注释
社区项目 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 |
关键差异 |
|---|---|---|---|---|
|
1 |
Fix:JWT 过期校验 bug |
重写整个 auth middleware + 加 config |
先写复现测试 → 改 3 行校验逻辑 ✓ |
Surgical Changes 生效 |
|
2 |
Feat:导出 CSV 用户列表 |
造 |
简单函数 12 行 + 问清字段范围 ✓ |
Simplicity First 生效 |
|
3 |
Feat:接口加 rate limit |
引入 Redis + 配置系统 + 改错误处理风格 |
加 express-rate-limit 中间件(最小 diff),问 QPS ✓ |
Think Before Coding 问参数 |
|
4 |
Refactor:整理 utils/format.ts |
"顺手"格式化旁边 2 个文件、删"无用"注释 |
只动 format.ts 内指定函数 ✓ |
未触发误伤 |
|
5 |
Fix:SQL 时区偏移 bug |
猜时区改了 DB 连接串(错) |
问清 DB timezone → 只在 DAO 层转 → 写测试 ✓ |
先问后动,少一轮回滚 |
|
6 |
Feat:邮件模板变量注入 |
自建模板引擎(60行) |
用现有 |
不造未要求的轮子 |
|
7 |
CI:加 npm audit 到 pipeline |
OK(简单任务) |
OK |
无明显差异 |
|
8 |
Docs:更新 README API 示例 |
顺手改了隔壁 CHANGELOG(内容不对) |
只改 README ✓ |
范围控制 |
|
9 |
Fix:表单字段 XSS 过滤 |
引入新 sanitize lib + wrapper |
用现有 DOMPurify 包一层,问注入场景 ✓ |
目标驱动→写测试验证 |
|
10 |
Perf:列表页分页优化 |
加了 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 干净了多少。
更多推荐


所有评论(0)