用AI Agent来做开发,这几个月下来,发现一个挺扎心的规律。
Agent写代码那叫一个快,三分钟交作业。但你仔细一看,两眼一黑:测试没写,错误处理糊弄了一下,安全检查连想都没想过。更要命的是,它还特别自信。你问一句"确定没问题吗?"它底气十足地回一句"seems right"。
我一度以为是模型能力的问题,后来才意识到,不是它不会,是它压根没有"纪律"。
这就像一个聪明但没经过工程训练的实习生,能力是有的,但啥时候该写测试、啥时候该停下来想想、啥时候该问一嘴,这些事儿它完全不知道。
直到在GitHub上刷到一个项目:48.5k stars,5400 forks。
谁做了这件事
作者是Addy Osmani。对做前端开发的人来说,这个名字多半不陌生。他是Google Chrome团队的工程负责人,写过《Learning Ja vaScript Design Patterns》《Beyond Vibe Coding》,主导过Lighthouse性能检测工具。在前端工程圈,这是个提起来就觉得"靠谱"的人。
他做这个项目的出发点非常直接:AI编码Agent默认走最短路径,跳过spec、跳过测试、跳过安全审查,跳过所有让软件变得"可靠"而不是仅仅"能跑"的步骤。
他的解法是把资深工程师脑子里那套工作纪律,变成AI Agent能直接执行的结构化Skill。项目叫Agent Skills,MIT协议开源。
一句话概括功能:23个覆盖软件开发全生命周期的工程Skill,从"想清楚要做什么"到"安全上线",每个阶段都有对应的约束。不是那种让Agent"读读就好"的参考文档,而是可执行的工作流,有步骤、有检查点、有退出标准。
它怎么工作
装好之后,你在编码工具里敲斜杠命令就行。
想开始一个新功能?/spec先写需求。需求拆任务?/plan把它分解成原子级的小任务。开始写代码?/build让Agent按增量方式一步步来,而不是一口气吐出500行。写完了?/test要求它用测试证明代码能跑。合并前?/review让它做一轮代码审查。
说起来,一共7个命令,对应开发生命周期的7个阶段。背后的逻辑是——你敲一个命令,它自动激活对应阶段的Skill。
更聪明的一点是,很多Skill会根据上下文自动触发。你在写API?那就把api-and-interface-design自动拉起。你要做前端?那就把frontend-ui-engineering就位。不用你手动去选。
几个让人眼前一亮的设计
23个Skill翻了一遍,有几个设计让我觉得Addy真正思考过问题,而不是在做一份"看起来很全面"的清单。
第一个叫Doubt-Driven Development,怀疑驱动开发。核心理念是:一个自信的回答不等于一个正确的回答。
AI在长对话里特别容易把自己的假设当成事实。越聊越深,它对自己的判断越笃定,但这份笃定可能完全建立在一个错误的前提上。Addy的处方是:每个非平凡决策,都要拉一个「全新上下文的审查者」来对抗——这个审查者不知道你前面聊了什么,不会被你的推理链带跑,它唯一的任务就是找出你哪里错了。
Skill里甚至把审查者的提示词写好了:"假设作者过度自信。找出未陈述的假设、未处理的边界情况、隐藏的耦合。不要验证。不要总结。找问题。"这,才是这套项目的核心理念所在。
不是代码审查。代码审查是事后的。这是在你"觉得差不多了"的那一刻,主动怀疑自己。
第二个叫Interview Me。Addy在这个Skill的开头写了一句话,我觉得是整个项目里最精准的洞察。人们说"做个dashboard",不是因为dashboard能解决他们的问题,是因为"做dashboard"是约定俗成的说法。但不同的人,说的dashboard,从来不是一回事。内容创作者的工作台,和开发者的工作台,天差地别。
这个Skill让Agent在动手之前,先做一轮一对一的需求访谈。每次只问一个问题,每个问题附带一个猜测:"我猜你是想要X,理由是Y。"用户看到一个具体的猜测,纠正起来比自己从头描述快得多。
停止条件也有意思:Agent对用户意图的置信度到了95%才停止提问。这解决了一个真实痛点:Agent要么不问直接干,要么问个没完让人崩溃。
第三个是Context Engineering,上下文工程。Addy把Agent的上下文分成5个层级,从"永久加载的规则文件"到"按迭代加载的错误输出",层层递进。核心观点是:上下文太少,Agent幻觉;上下文太多,Agent失焦。关键不是"给更多信息",而是在正确的时间给正确的信息。
这个Skill甚至把各家编码工具的规则文件都列全了,不管是CLAUDE.md、.cursorrules,还是AGENTS.md、.github/copilot-instructions.md。然后手把手教你每个文件里该写什么。做过AI编码配置的人看到这段,大概会有种"瞌睡来了递枕头"的感觉。
最硬核的设计:反驳型人格
每个Skill都有一张"Anti-Rationalization Table","反合理化表",换个说法就是给它配了个"反驳型人格"。
Addy显然被AI Agent的花式借口折磨过,所以直接把借口堵死了。拿TDD(测试驱动开发)Skill举例:Agent说"这个改动太小了,不用写测试",反驳自动弹出——"小改动也会破坏现有行为。不要找借口,必须写测试。"Agent说"我先把功能做完再补测试",不行,现在就做。因为"'稍后'从来不会到来。"Agent说"这段代码很明显是对的",跳出来反驳——"如果这么明显,那测试应该30秒就写完了。给我写!"
每个Skill都是这样。不仅告诉Agent该做什么,还预判了它想偷懒的方式,然后堵上。这种"我知道你会找什么借口"的设计思路,是工程经验的浓缩。Addy在Google带团队这么多年,新人偷懒的花样他全见过,只不过现在偷懒的对象从实习生变成了AI。解法是一样的:规则写死,不留空间。
怎么装
支持几乎所有主流的AI编码工具。Claude Code最简单,两行:
/plugin marketplace add addyosmani/agent-skills/plugin install agent-skills@addy-agent-skills
Cursor把Skill文件复制到.cursor/rules/就行。Gemini CLI也支持原生安装。Windsurf、Copilot、Kiro、OpenCode都有对应的文档。
说到底,Skill就是结构化的Markdown文件——只要你的AI编码工具支持规则文件或系统提示词,就能用。这也是Addy的设计哲学之一:不绑定平台,不搞vendor lock-in。
写在最后
用了半年AI Agent,一个深刻的体会是:大模型的能力确实上来了,但提升准确率和效率的方式,不能只靠大模型本身。大模型增强的永远是通用能力。可在真实的人类世界,不是什么都是通用的,不同的领域有不同的需求,对Agent的能力要求也各不相同。普通人用AI Agent,最需要的就是这些优秀的开发流程Skill,这些工程纪律是真的能提升特定能力的魔法。
一代模型一代强,但"强"跟"可靠"之间,隔着一整套工程实践。Addy Osmani这套Agent Skills做的事情,就是把这套实践编码化了。
这有点像给一个天赋极高但没上过工程课的天才程序员配了个严格的tech lead。不是限制它,而是让它在发挥能力的同时不出篓子。
如果你也在用AI写代码,不管是Claude Code、Cursor还是Copilot,建议试试这套Skill。不一定每个都用,但翻一遍那些"反合理化表"你就会发现:AI偷懒的方式,跟人其实一模一样。
