打开网易新闻 查看精彩图片

Claude Code的重度用户有个隐秘的痛点:每天打开对话框,都像面对一个失忆的实习生。

你昨天刚教它别用any推断API响应,今天它照犯。你上周反复强调的React状态管理原则,新对话里归零。作者花了数月纠正这些模式,最终算了一笔账——同样的错误,同样的解释,同样的时间黑洞

然后他做了件反直觉的事:没打包成npm模块,而是写了4000行文档。

4000行不是代码,是"决策支持系统"

4000行不是代码,是"决策支持系统"

这个叫typescript-react-patterns的Agent Skill,结构很朴素:1个总纲、11条规则模块、3份调试手册。但设计逻辑和常见的代码片段库完全不同。

多数技能给AI看的是"这是什么",他给的是"选哪个"。

SKILL.md开篇就逼Agent做选择题:数据来自外部API吗?→用TanStack Query,禁止useState。需要运行时验证吗?→必须上Zod。Next.js什么版本?→15以上params是Promise,别直接解构。

每条规则带标签:[HARD RULE]违反即出bug,[DEFAULT]除非有文档理由否则照做,[SITUATIONAL]仅限特定场景。没有模糊地带。

他纠错的三个典型场景

他纠错的三个典型场景

场景一:TypeScript的"虚假安全感"。

const user: User = await res.json()——编译器通过,运行时爆炸。API改结构?生产环境静默失败。他的解法:强制Zod解析,type User = z.infer,让类型和运行时同步。

场景二:React状态的"不可能组合"。

三个独立的useState能拼出isLoading: truedata已存在,或error已设但加载状态未清。这些状态在业务逻辑里不该共存,代码却允许它们共存。

场景三:'use client'的滥用。

整页组件被打上客户端标记,原本能服务端渲染的部分全变成浏览器负担。Agent图省事,用户付性能代价。

为什么不是npm包?

为什么不是npm包?

作者试过。几个月里他不断粘贴教程、重复解释、从零开始纠偏。问题核心在于:Agent没有记忆,或者说,它的记忆不跨会话

npm包是运行时依赖,Agent Skill是编译时约束——在代码生成前就介入决策流程。4000行文档的价值不在于信息量,而在于结构化到能被自动检索

Claude Code、Cursor、Codex都能读取SKILL.md。Agent在生成代码前会先扫描这些规则,相当于每次对话都带上一份"入职手册",而不是每次都重新培训。

一个值得玩味的细节

一个值得玩味的细节

作者在规则里埋了条冷幽默:调试手册的某份checklist,结尾写着"如果以上都检查过仍有问题,考虑AI是否理解错了需求描述——重新用更精确的英语写一遍prompt"。

这4000行文档目前托管在GitHub,Star数还没破千。但有个数据点挺有意思:作者自己的Claude Code会话里,重复纠正同类错误的频率,从每周数次降到了每月一两次。

如果Agent技能的本质是"把人类经验编码成机器可读的决策树",那这套4000行的规则集,算是一种新型的基础设施吗?还是说,我们只是在给不会学习的实习生写更厚的操作手册?