# 技能形态与自检清单(无业务) 开发前先选定形态,避免把「编排、存储、浏览器」混在一个脚本里难以测试。 ## 类型 A:无状态工具型 - **特征**:不持久化用户数据,或只读配置文件;输入输出主要在 stdin/stdout。 - **数据目录**:通常不需要 `CLAW_DATA_ROOT` 下的专属库;若需要缓存,仍建议放在契约目录下。 - **自检**:离线可跑;`health` 不访问网络也可成功。 ## 类型 B:本地持久化型 - **特征**:使用 SQLite、本地文件等保存用户数据。 - **数据目录**:必须使用 `{CLAW_DATA_ROOT}/{CLAW_USER_ID}/{skill_slug}/`。 - **自检**:首次运行自动建库/建表;文档中说明库文件路径与备份方式。 ## 类型 C:编排型(调用其它技能或外部 CLI) - **特征**:自身逻辑薄,主要 `subprocess` 或 HTTP 调用其它组件。 - **依赖**:在 `SKILL.md` 中明确写出**先决条件**(兄弟技能已安装、某 CLI 在 PATH 等)。 - **自检**:`health` 可检查兄弟可执行文件是否存在;缺失时打印清晰错误。 ## 类型 D:混合型 - **特征**:既有本地存储,又调用外部能力。 - **建议**:拆模块(存储 / 编排 / 领域逻辑),入口脚本只做参数解析与调度。 ## 发布前通用自检 - [ ] `SKILL.md` 中触发条件与示例命令与实际入口一致 - [ ] 未注入 `CLAW_DATA_ROOT` / `CLAW_USER_ID` 时行为已文档化 - [ ] 不向仓库提交用户数据、密钥、大型二进制 - [ ] 错误信息包含「如何修复」(缺什么环境变量、缺哪个依赖)