用途
create-skill 用一段自然语言描述(${var})生成一个完整、可直接用于生产的技能,并在通过校验后以 PR 形式发布,而不是直接提交到 main。典型输入示例包括“监控 Hacker News 上的 AI 论文并发送摘要”或“追踪以太坊 gas 价格并在低于 10 gwei 时告警”。如果 ${var} 为空,它会通知并中止(CREATE_SKILL_NO_VAR)。
主要能力
- 需求解析:从 ${var} 中抽取核心动作动词(monitor、fetch、generate、analyze、alert、track、scan 等)、数据源(API、网站、RSS、链上、GitHub 等)、输出格式、新技能自身 ${var} 可配置参数、建议频率,并保存一段结构化请求摘要用于 PR 正文。
- 深度重复检测:不只做文件名比对,而是从描述中提取关键词后检索 skills/*/SKILL.md,通读前三个候选并判断是否已能覆盖该需求。若近乎重复则以 CREATE_SKILL_DUPLICATE 退出并建议“改用已有 {skill} 配合 var={...}”;若功能相邻,则设计为互补的新技能(不同角度/频率/输出)并在 PR 正文记录边界。
- 数据源调研:对每个 API 或数据源做 WebSearch 获取当前文档,尽量用二手来源交叉验证端点是否已弃用,再用 WebFetch 获取规范文档 URL,记录到 SKILL.md 注释和 PR 的“Sources researched”部分,识别精确端点、必需请求头、认证方式、响应结构与速率限制,列出所需环境变量/API 密钥,并为可选密钥设计回退策略。调研门槛为至少一个可确认的来源 URL 或范例;达不到时不硬性中止,而是记录 CREATE_SKILL_INSUFFICIENT_RESEARCH、通过 ./notify 说明尝试与失败原因后停止,等待操作者重新派发。
- 新密钥守卫:只读取已配置 GitHub secrets 的名称(不读取值),与新技能所需环境变量交叉核对;缺失的记为 NEW_SECRET_REQUIRED,要求生成的技能在密钥缺席时优雅降级或跳过,并在 PR 正文加入 ### Required secrets 段落列出操作者需先添加的内容。若某个密钥没有优雅回退,新技能第 1 步必须检测变量为空时通知并正常退出。
- 技能设计:确定技能名(小写、连字符、最多 2-3 个词,且不与 skills/ 下已有条目冲突)、单句描述(以动词开头,≤90 字符)、标签(从 content、crypto、dev、meta、news、research、social 中最多选 3 个)、变量行为、4-8 个编号步骤(读取上下文 → 抓取/搜索 → 处理/分析 → 写输出 → 记录 → 通知)、调度建议(读取 aeon.yml 现有调度,避免与重负载技能同分钟,必要时用 :30 偏移)、模型(默认 claude-sonnet-5-5;高频聚合/消化可选 claude-haiku-5-5 降低成本;需要最强推理时选 claude-opus-5-5,并在 PR 正文说明理由)、分类(只能是 core、evolution、basics、dev、crypto、productivity 之一,由 scripts/check-skill-categories.sh 强制,否则 CI 失败)。
- SKILL.md 撰写:按固定结构写入 skills/{skill-name}/SKILL.md,包含 frontmatter(name、description、metadata 下的 title/category/var/tags)、说明 ${var} 的引用行与空值行为、任务描述和编号步骤。硬性要求包括:完整的 curl 命令与正确请求头及 URL 编码(禁用伪代码)、JSON API 用 jq 解析、显式声明通知字符上限(总计低于 4000 字符)、每个链接可点击(完整 URL)、每个可选密钥都有回退行为、只使用 ${var} 和 ${today} 两个模板变量、无 TODO/FIXME/占位符,且必须有准确的 ## Network note 段落。
- 质量强制(自编辑):按六个维度给草稿打 1-5 分——frontmatter 完整、变量文档、API 调用完整、回退行为、输出规格、Network note。任一维度低于 4 分就重写该段一次;重写后仍低于 4 分则以 CREATE_SKILL_VALIDATION_FAILED 退出并通知失败维度,不发布低质量技能。
- 写入后校验:从磁盘重新读取 SKILL.md,校验 frontmatter YAML 可解析且必需键齐全,正文不含 TODO、FIXME、XXX、placeholder、fill in、lorem、<your-、your_api_key_here、example.com 等子串,所有 ${...} 只能解析为 ${var} 或 ${today},至少包含一次 ./notify 调用和一次对 memory/logs/${today}.md 的写入,且存在 ## Network note 段落。任一失败都删除部分文件、以 CREATE_SKILL_VALIDATION_FAILED 退出。
- 注册与门禁:在 aeon.yml 中按格式 {skill-name}: { enabled: false, schedule: "{cron}" } 插入新技能(必要时加 model、var 和注释),始终 enabled: false 由操作者决定启用,编辑后验证 YAML 可解析否则回滚。PR 前执行 dry-run 门禁(scripts/dry-run.sh),读取 output/.dry-run/$name.json,passed 或 skipped 为真才继续,false 则删除并回滚,以 CREATE_SKILL_DRYRUN_FAILED 退出且不开 PR;无论结果如何都将 verdict JSON 放入 PR 正文的 ## Dry-run 段。此外新技能会触发四个 CI 门禁:check-skill-categories.sh 通过、用生成脚本重新生成 catalog/skills.json 与 catalog/packs.json(在 SKILL.md 提交后的单独提交中)、为新技能添加 eyebrowlock.json 条目(否则 ci-skill-integrity 硬失败)、validate-readme-catalog.mjs 通过。若某步无法执行(如缺少 eyebrow 二进制),在 PR 正文的 ## Before merge 标题下列出缺失步骤,而不是静默跳过。
使用方式
以技能调用方式传入 ${var},内容为要创建的技能的自然语言描述。技能会解析需求、查重、调研数据源、检查密钥、设计并写出 SKILL.md、执行质量评分与写入后校验、更新 aeon.yml、跑 dry-run 门禁、在分支 create-skill/$name 上提交并通过 gh pr create 开启 PR,PR 正文包含技能信息、请求摘要、调研来源、所需密钥、质量评分表以及手动触发方式(workflow dispatch,skill={skill-name} 与 var={example-var})。最后追加日志到 memory/logs/${today}.md 并通过 ./notify 发送通知。
退出码
CREATE_SKILL_OK(已创建、校验并开启 PR)、CREATE_SKILL_NEW_SECRET_REQUIRED(同上,另需操作者添加新密钥)、CREATE_SKILL_NO_VAR(${var} 为空)、CREATE_SKILL_DUPLICATE(已有技能覆盖该需求)、CREATE_SKILL_INSUFFICIENT_RESEARCH(无法确认至少一个可用数据源)、CREATE_SKILL_VALIDATION_FAILED(质量强制或写入后校验失败)、CREATE_SKILL_DRYRUN_FAILED(dry-run 门禁 passed: false)。
限制
- 绝不将生成的技能直接提交到 main,始终开 PR;绝不在 aeon.yml 中启用生成的技能(始终 enabled: false)。
- 绝不向工作流添加原本不存在的 API 密钥/密钥,缺失时以 NEW_SECRET_REQUIRED 呈现并写入 PR 正文。
- 绝不发布未通过校验的技能,干净中止优于发布损坏内容。
- 绝不覆盖已有的 skills/{name}/SKILL.md,名称冲突为阻断性错误。
- 网络方面没有沙箱;需要认证的 API 通过 ./secretcurl 并使用 {ENV_NAME} 占位(密钥经技能的 requires: 注入),GitHub 用 gh api,公开 GET 研究时可用 WebFetch 回退;不可逆副作用(邮件、消费、链上写入、部署)以 ./secretcurl 作为技能最后一次 fail-closed 动作在运行内执行,没有延迟/后处理步骤,也不延迟读取。
- 分类只能从 core、evolution、basics、dev、crypto、productivity 中选一个。
- 其他如具体收费、价格、平台数量等资料未提供。