你让AI修一个bug,回头一看diff,它顺手重构了半个文件;你让它加个参数校验,它给你交付了一整套"校验框架";需求含糊时它也从不问你,闷头就猜。
用过Claude Code、Cursor的人都懂这种憋屈:模型不是不会写代码,是没规矩。
AI大神Karpathy——OpenAI创始成员、前特斯拉AI总监——也看不下去了,在X上公开吐槽过大模型写代码的通病。模型会替你做错误假设然后不假思索地执行,该澄清时不澄清,该反驳时不反驳;100行能搞定的事,非要堆成1000行的臃肿架构;有时还会改动甚至删掉它根本没看懂的代码和注释,哪怕跟当前任务毫无关系。知乎GitHub微博

这段吐槽戳中了全网程序员。今年1月底,开发者Forrest Chang把Karpathy的观察编译成一份CLAUDE.md约束文件,放上GitHub,项目名叫andrej-karpathy-skills。到10月中旬,Star数已突破22万。知乎微博

有意思的是,这项目没有一行可执行代码,核心就是一份65行、2.4KB的"家规",一共四条。
第一条,编码前先想。不确定就问,别猜。需求有多种理解,摆出来让人选,不许默默挑一个;有更简单的方案要直说。宁可动手前多问一嘴,不许写完再翻车。
第二条,简单优先。用最少代码解决问题:不加没要求的功能,不给一次性代码套抽象层,不为想象中的未来需求预留"灵活性"。原文更狠——如果200行能压成50行,重写。
第三条,外科手术式修改。只碰必须碰的。不顺手重构相邻代码,不顺手改注释格式,跟随项目现有风格;发现无关的历史死代码,可以提一嘴,不许删;只有自己的改动产生的废弃导入和变量,才可以顺手清掉。标准就一句话:每一行变更都能追溯到用户的需求。
第四条,目标驱动执行。这条最Karpathy。他说过,LLM最擅长"循环执行直到达成目标",所以别告诉它做什么,给它成功标准。于是"修这个bug"被翻译成"先写一个能复现bug的测试,再让它通过";“加校验"被翻译成"为非法输入写测试,然后全部跑绿”。GitHub

上手门槛几乎为零。Claude Code用户两条命令装成全局插件:先`/plugin marketplace add forrestchang/andrej-karpathy-skills`,再`/plugin install andrej-karpathy-skills@karpathy-skills`。或者更省事,把这份CLAUDE.md直接丢进项目根目录。Cursor也有配套规则文件,不用换工具。知乎

不过先泼盆冷水:它本质是文本约束,不是保险。模型遵不遵守不是确定性的,受任务复杂度、上下文长度、其他指令和模型能力影响。仓库也没提供能证明这些规则稳定提升代码质量的系统性Benchmark,而且规则本身就写明了"偏向谨慎、牺牲速度",一行小改动也走全套流程会嫌啰嗦——小事请自行放行。知乎GitHub
判断它有没有效,看三点就够:diff里无关改动变少了,AI动手前提问了,PR变干净了。GitHub
这项目最大的价值,可能不在那65行字。“别过度设计、别乱碰无关代码、需求不清先确认、改完要验证”——全是老工程师早就懂的道理。真正扎心的是:人类默认遵守的工程纪律,AI需要你白纸黑字写出来,它才会照做。
AI编程的效率,未必总靠更强的模型,有时只是先把规矩立清楚。