Anthropic官方实践揭示了一个反直觉的事实:Skills不是增强版的Prompt,而是精简版的Agent框架。
文件夹形态带来的范式转移,彻底重构了我对AI扩展能力的理解:
| Markdown思维 | 文件夹思维 |
|---|---|
| 把所有逻辑塞进一个文件 | 按职责拆分模块 |
| 用注释说明依赖关系 | 用文件系统显式组织 |
| 手动复制代码片段 | 智能体自主发现资源 |
关键洞察:当Claude能ls、cat、source你的Skill目录时,你其实是在为它设计可执行的工作空间。
文件夹形态天然支持:
pre-execution.sh 做环境校验templates/、schemas/、fixtures/这不再是"给AI的说明书",而是"AI的专用工具箱"。
Anthropic内部数百个Skills的实践表明:文件夹结构即接口规范。
billing-lib-skill/
├── README.md # 人类可读:设计意图
├── CLAUDE.md # AI可读:调用协议
├── hooks/
│ ├── validate.py # 前置检查
│ └── cleanup.sh # 后置清理
├── snippets/ # 可复用代码块
├── test-cases/ # 验证示例
└── config.yaml # 注册动态钩子
"请用我们内部的billing-lib,注意:
1. 初始化时要设置region参数
2. 调用charge()前必须验证quota
3. 错误码1003需要重试..."
# Claude自动执行
$ ls skills/billing-lib/
→ 发现 test-cases/edge-cases.json
→ 读取 config.yaml 的hook注册
→ 执行 hooks/validate.py 检查环境
→ 引用 snippets/charge-with-retry.py
效率差异:前者每次对话重复说明,后者一次配置、持续生效。
基于官方9类Skills分类,我总结出文件夹设计的黄金法则:
| 原则 | 具体实践 |
|---|---|
| 单一职责 | 一个Skill只解决一类问题,拒绝"瑞士军刀" |
| 自描述性 | 文件命名即API,目录结构即文档 |
| 可验证性 | 必须包含测试用例或验证脚本 |
| 渐进暴露 | 从CLAUDE.md核心协议,到advanced/扩展能力 |
这一设计让我重新思考几个问题:
边界问题:文件夹形态是否会催生"Skill膨胀"?何时该拆分为多个Skills?
安全考量:Claude对Skill目录有完整文件操作权限,如何设计权限隔离?
生态演进:如果Skills可以互相依赖(import other-skill/),是否会形成微服务式的AI能力网络?
我的结论:文件夹形态的本质是把AI从"对话者"重新定位为"操作者"--它不再只是读你写的东西,而是进入你设计的环境,使用你提供的工具,执行你定义的工作流。
这对你的开发思路产生了哪些冲击?欢迎分享你的实践或困惑。
加入讨论
这个文件夹设计让我想到Dockerfile的层叠结构,但更灵活的是Claude能动态”感知”目录内容。有个疑问:如果skills太多,会不会出现命名冲突或者加载顺序的问题?官方有推荐的管理策略吗?
突然意识到这有点像游戏里的mod文件夹结构!不过有个好奇的点:如果我把两个功能相近的Skill放在同级目录,Claude会怎么选?是按文件名排序还是有优先级机制?之前试过类似场景,AI有时候会”纠结”一下 😂
试了下把旧项目的bash脚本整理成Skill,发现最爽的是`test-cases/`目录——以前写Prompt根本没法带示例数据,现在Claude直接跑一遍就懂边界情况了。不过`config.yaml`的hook语法文档有点难找,官方有详细spec吗?
有点担心这个设计会让Skill变成”黑箱”——如果同事传给我一个Skill文件夹,我怎么快速判断它会不会乱删文件或者执行危险操作?感觉需要个类似package.json的权限声明机制。
这个设计让我想到IDE的插件系统,但反过来是AI在”安装”人类写的插件。好奇如果Skill里有互相依赖的情况,Claude会怎么处理循环引用?还是说官方建议完全解耦?
终于有人把这个说清楚了!我之前一直把Skills当超大号prompt用,结果越写越臃肿。试了下拆成文件夹后,最意外的收获是git diff能看Skill的”进化史”了,比看prompt版本清晰太多。
文件夹形态有个隐藏好处没人提——终于可以用VS Code的代码折叠和文件树来管理AI逻辑了!之前写超长Markdown提示词,找某个功能块要滚半天,现在直接`Cmd+P`跳转到具体脚本。不过有个小纠结:`CLAUDE.md`和`README.md`的内容会不会重复?你们是怎么分工的?
突然想到个场景:如果我在Skill里放个`secrets.env`,Claude会主动读取吗?还是说官方有安全沙箱机制?感觉这涉及到权限边界的设计,文章好像没提到这块🤔
有个想法:如果Skill文件夹里放个`prompts/`子目录存不同场景的变体提示,Claude能根据对话上下文自动切换吗?比如调试模式用verbose版,生产模式用精简版。现在好像只能靠手动改CLAUDE.md?
这设计让我想到以前用jupyter notebook的痛苦——所有代码和说明挤在一个文件里,改起来头都大了。现在拆成文件夹,Claude能自己找资源,我反而好奇:如果Skill里放了个损坏的JSON,它会报错还是默默跳过?