Skill 装得再多也组不起来?OpenSquilla 把编排收成可回放协议
本地已经写过不止一篇 Agent Skills 文:addyosmani/agent-skills 讲的是把工程习惯打成斜杠命令;agent-skills-complete-guide 讲的是 SKILL.md 怎么渐进式加载、怎么避免上下文爆炸;antigravity-awesome-skills 和 claude-code-skills 讲的是目录怎么挑、仓库怎么装。这些文回答的是同一类问题——单个技能怎么写、怎么发现、怎么装进 Claude Code / Cursor。
本文换一层。源微信页触发了验证码拦截,正文以 OpenSquilla 官方仓库(Apache-2.0,稳定版 0.5.4,约 6.6k Star)、MetaSkill 用户指南、编排写作规范 以及源文作者苍何在 WeSight 里接引擎的演示为准,不臆造未公开能力。它要解决的不是「再写一份 SKILL.md」,而是:原子技能已经堆到几十、几百个之后,谁来检索、筛选、按依赖拼成可审计、可回放的工作流。 这一层官方叫 MetaSkill。

一、Skills 文教你写卡片,OpenSquilla 管的是怎么组牌
把 Skill 当成扑克牌:渐进式披露解决的是「别一次把整副牌塞进上下文」;目录仓库解决的是「牌从哪来」;MetaSkill 解决的是「这一把该出哪几张、谁先谁后、失败谁顶上」。官方类比写得很直:Makefile 并不替换 shell 命令,它只规定命令怎么组合。MetaSkill 也不替换 Skill 或工具,它告诉运行时:这一类高价值工作该怎么理解、怎么拆步、怎么检查、怎么交付。
源文作者的痛点很具体:公众号写完要同步小红书,得重写标题、改文案、做封面,一套半小时。写死 n8n / Dify 节点图太僵;每次让 Agent 从零 trial-and-error 又贵又不稳定。他在 WeSight 里切到 OpenSquilla 引擎,只丢一句「把这篇公众号转成种草向小红书图文」加链接。运行时没有直接开写,而是先在技能面板里检索到三个原子能力:wechat-article-extractor、xiaohongshu-text-skill、xiaohongshu-cover-generator,再按依赖排成 DAG——先解析出 Markdown,再改写文案,最后出图。源文称全程大约 40 秒,工作流不是人事先拖好的节点,是现场组出来的。
这和我们本地已有的 Skills 文完全不抢题。那些文停在「卡片规范」;这篇停在「组牌协议」。技能社区一旦更新,硬编码脚本往往先废;MetaSkill 的承诺是:新解析器出现时,编排层可以把它纳入候选,而不必重写整条业务流程图。源文把这叫做「自进化」——工程上更准确的说法是:组合层可替换、运行记录可回放、重复协作可沉淀成提案。 真正改 SKILL.md 正文、打分、git 棘轮回滚的,是另一类项目(例如 darwin-skill);OpenSquilla 走的是 Harness 层:路由 + 编排 + 审计。
| 层级 | 代表产物 | 解决什么 | 本地已有文 |
|---|---|---|---|
| 原子 Skill | SKILL.md + scripts/ |
单任务怎么做、怎么按需加载 | Agent Skills 架构 / addyosmani 目录 |
| 技能目录 | awesome 仓库、斜杠命令包 | 从哪装、装哪些 | antigravity / claude-code-skills |
| 编排协议 | kind: meta + composition.steps |
多技能怎么组、怎么查、怎么回放 | 本文:OpenSquilla MetaSkill |
| 单文件进化 | 评估→改进→测试→revert | 把一份 SKILL.md 越改越好 | 非本文范围 |
二、MetaSkill 是任务协议,不是又一个「超级 Prompt」
OpenSquilla 自己是微内核 Agent 运行时:同一套回合循环同时服务 Web UI、CLI 和聊天频道;本地路由把简单回合丢给便宜模型,复杂回合再升级;技能与 MCP 按需加载。0.5.4 的产品叙事里,Harness 优化和 MetaSkill 是一条线,而不是两个互不相关的卖点。论文 Agentic Routing: The Harness-Native Data Flywheel 讲的是路由如何把日常流量变成数据飞轮;MetaSkill 则把「重复的高价值协作」收成可启动的协议。
一份 MetaSkill 仍然是 SKILL.md,但 frontmatter 必须带 kind: meta 和 composition。运行时由模型选择工作流(或你用 /meta <name> 显式点名),真正执行时由编排器强制:依赖顺序、模板渲染、风险元数据、递归守卫、工具门禁、暂停等人审、最终文本选取。模型可以「点菜」,不能在执行期把 DAG 改成环、也不能把未声明的高风险工具偷偷塞进去。
---
name: short-stable-name
kind: meta
description: One sentence that tells the model when this workflow applies.
triggers:
- short phrase users naturally type
meta_priority: 50
always: false
final_text_mode: auto
metadata:
opensquilla:
risk: low
capabilities: []
composition:
steps: []
---
默认启动模型是手动。Web 聊天和 CLI 网关 TUI 支持 /meta 列出工作流、/meta meta-paper-write 启动;频道表面通常只能列出,不能从随口一句话跑起来。若要把旧行为找回来,才在配置里打开自动触发:
[meta_skill]
auto_trigger = true
官方明确警告:自动触发只适合你故意让模型在普通对话里挑选工作流的场景。粘贴旧聊天记录、技能清单或测试材料时,历史文本里的触发词可能被当成当前意图。稳妥写法是先声明「以下是引用上下文,不要运行任何 skill」。全局也可以直接关掉模型可见的 MetaSkill:
[meta_skill]
enabled = false
关掉之后,库存和历史 run 仍可查,但 prompt 不再注入、meta_invoke 不再暴露,显式调用也会被拒。这和「把所有技能 description 都塞进系统提示」是相反的设计:编排层默认要人点名,而不是默默在后台自作主张。

三、内置目录很小:质量优先,不靠堆「元技能」充数
稳定捆绑的 MetaSkill 官方故意收得很窄。用户指南当前保留的高价值任务类大致是:
| MetaSkill | 定位 | 额外门槛 |
|---|---|---|
meta-paper-write |
论文骨架、引用计划、实验占位、LaTeX/PDF | 探测 xelatex / bibtex / CJK;可走托管 TinyTeX |
meta-short-drama |
短剧脚本、视觉提示、字幕、本地成片 | 探测 ffmpeg/ffprobe;付费媒体提交前要再确认 |
AwesomeWebpageMetaSkill |
本地多媒体网页包:检索、生成、校验 | 媒体调用走 OpenRouter 候选,无默认静默授权 |
meta-skill-creator |
把重复的多技能协作变成提案 | 默认预览;持久化必须明确要求 |
meta-kid-project-planner 已退役:定义还留着,只为升级后还能检查、恢复、回放进行中的 run,不再出现在 /meta,也不能新开或自动触发。官方态度很清楚:不成熟、重复、或只是给单个 Skill 套一层皮的 MetaSkill,不该留在捆绑目录里。
一次高质量请求要带四样东西:结果(要拿到什么)、上下文(材料、实体、时间、约束)、标准(怎样算好)、边界(不许发明、不许自动发布、哪些必须确认)。论文工作流的推荐口令类似:

/meta meta-paper-write
Outcome: produce a compact research paper and PDF.
Context: retrieval-augmented generation for customer-support knowledge bases.
Decision standard: source-grounded, concise, and explicit about missing experimental evidence.
Expected output: manuscript structure, verified citation plan, LaTeX, and PDF.
Constraints: keep unverified results as placeholders.
Do not: invent sources, measurements, or comparisons.
WebUI 顶部会有一条进度丝带:当前步骤高亮,成功 ✓、跳过 ↷、失败 ✗、on_failure 替换 ⇄。断线重连后网关会重放 announce → state → completed,丝带能回到最新状态。这就是「可审计」的产品形态:你看到的不是一段黑盒长回复,而是每一步的输入、输出和状态。
启动前还有一层 preflight。新 run 会在创建隐藏工作流状态、发出付费请求之前做就绪检查。缺本地工具链时,Web 聊天弹出安装卡片:写明能力、来源、版本、许可证和下载体积,等你确认才从代码所有的目录下载,校验大小和 SHA-256,解压到用户态 state/toolchains/v1,再跑真实能力冒烟。失败或取消不会偷偷降级成「假装已经写好了 PDF」。论文链路在 macOS 上固定下载大约 226 MB,Linux 165–172 MB,Windows 265 MB;短剧链路的 FFmpeg 包大约 76–87 MB。安装不改你的 shell PATH。
四、安装、盘点、回放:先把运行时握在手里
推荐终端安装走 uv,装的是发布 wheel,不需要系统 Python。0.5.4 的命令如下(国内若镜像失败,改用 GitHub Release 上的同名 wheel):
curl -LsSf https://astral.sh/uv/install.sh | sh
. "$HOME/.local/bin/env"
uv tool install --python 3.12 \
"opensquilla[recommended] @ https://github.com/TokenRhythm/opensquilla/releases/download/v0.5.4/opensquilla-0.5.4-py3-none-any.whl"
opensquilla onboard
opensquilla gateway run
recommended extra 会带上 SquillaRouter(ONNX Runtime、LightGBM、NumPy、tokenizers)。macOS 终端安装若报 libomp.dylib 缺失,需要 brew install libomp;Windows 可能要单独装 VC++ 运行库。路由器起不来时,OpenSquilla 仍可用直连单模型继续跑,只是 Harness 那层智能路由暂时旁路。桌面用户可直接下 OpenSquilla-0.5.4-mac-arm64.dmg / OpenSquilla-0.5.4-win-x64.exe。家庭服务器或 NAS 有预构建多架构镜像,文档给出的针定标签是 ghcr.io/tokenrhythm/opensquilla:v0.5.4,默认网关端口 18791,容器内管理 Web UI 要求 token 认证。
装好之后,先当运维把库存摸清,再谈「自组织」:
opensquilla skills list
opensquilla skills search meta
opensquilla skills inspect <meta-skill-name>
opensquilla skills meta runs list
opensquilla skills meta runs show <run-id>
opensquilla skills meta runs steps <run-id>
opensquilla skills meta runs failures --since 24h
opensquilla skills meta runs replay <run-id> --dry-run
inspect 看的是编译后的步骤形状,适合在依赖别人工作流之前先核对 DAG。replay --dry-run 只预览回放形态,不真正跑付费步骤。提案侧则是另一组命令:
opensquilla skills meta proposals list
opensquilla skills meta proposals show <proposal-id>
opensquilla skills meta proposals accept <proposal-id>
本地托管技能落在 ~/.opensquilla/skills/<skill-name>/SKILL.md;仓库捆绑技能在 src/opensquilla/skills/bundled/。接受提案后,运行时把它提升进托管目录并刷新加载器。配套练习目录 practice/ 放了一份教学用「公众号 → 小红书」MetaSkill 草稿,对应源文演示的三步 DAG,方便对照 YAML,而不是把 WeSight 面板截图当官方捆绑技能。
本文环境未拉起完整 gateway(wheel 体积和路由器模型资产较大),CLI 盘点命令以官方文档为准。你本机 opensquilla skills search meta 至少应能看到 meta-paper-write、meta-skill-creator 这类名字;若列表为空,先查 kind: meta 是否被解析、技能目录是否被加载、以及 meta_skill.enabled 是否被关掉。
五、自己写 composition:步骤类型、并行和失败替换
写作规范把步骤分成有限几种,禁止把 MetaSkill 做成「任意递归的超级 Agent」。常见 kind:
agent:挂一个普通 Skill 的子 Agent 回合,适合需要推理和综合的步骤。llm_chat:单次有界生成,不进工具循环,适合意图归一、短起草、审计。llm_classify:闭集单值分类,适合分流。user_input:暂停,按clarifyschema 收人填的结构化字段。tool_call:确定性直接调工具,必须tool_allowlist,能改状态就要标高风险。skill_exec:跑带entrypoint的子进程 Skill,适合文档转换这类确定性 CLI。
无 depends_on 的步骤可以并行。下面这份官方示例把代码审查和测试审查并行,再合并:
composition:
steps:
- id: inspect_code
kind: agent
skill: code-reviewer
with:
request: "{{ inputs.user_message | xml_escape | truncate(512) }}"
- id: inspect_tests
kind: agent
skill: test-engineer
with:
request: "{{ inputs.user_message | xml_escape | truncate(512) }}"
- id: merge
kind: agent
skill: summarize
depends_on: [inspect_code, inspect_tests]
with:
text: |
Code review:
{{ outputs.inspect_code | truncate(2000) }}
Test review:
{{ outputs.inspect_tests | truncate(2000) }}
图必须是 DAG:只能依赖同一份 composition 里声明过的 id,不能再嵌套另一份 MetaSkill。route 让后续 agent / skill_exec 按前序输出选 Skill;on_failure 只能指定一个替补步骤,替补自己不能再带依赖或再套 on_failure。final_text_mode 决定用户最终看到什么:auto 由编排器综述,raw 用最后非替补步骤原文,step:<id> 钉死某一个交付物。
模板按 Jinja 处理,用户输入和前序输出一律当不可信。规范要求先 xml_escape 或 slugify,再 truncate;禁止把 {{ inputs.user_message }} 或 {{ outputs.some_step }} 原样灌进下游。风险写在 metadata.opensquilla.risk(low / medium / high)和 capabilities(filesystem-write、network-write、credential-use、shell 等)。子技能缺风险元数据时,无人值守自动启用会按更保守的一侧处理。
源文那条「公众号转小红书」若用协议写下来,形状接近:解析(skill_exec 或 agent)→ 改写(agent)→ 出图(skill_exec,标 artifact-write)。真正的业务逻辑仍在三个原子 Skill 里;MetaSkill 只声明步骤、依赖和输入输出映射。社区里如果出现更好的解析器,替换发生在原子层,编排文件可以不动——这是源文「自进化」叙事里,唯一能和官方协议对上的工程含义。


六、所谓自进化,落点是提案,不是后台偷偷改生产技能
源文最容易被读成「Agent 自己改 Skill、自己替换解析器、自己上线」。官方 meta-skill-creator 的描述更冷:它只在用户明确要求创建/组合/提出一份编排多个现有技能的新元技能时使用;不用于普通独立 Skill、概念问答、粘贴技能清单、讨论已有 MetaSkill。默认模式是 preview,持久化必须说清楚。
捆绑工作流自己就是一份 kind: meta 的 DAG。开头几步很能说明产品哲学:clarify_intent 只根据当前请求判断 ROUTE: normal-skill | meta-skill,禁止去翻工作区、历史或记忆来「脑补」你想创建工作流;边界不清就走 user_input 表单,补齐目标、输出形态、触发词,避免生成过宽的触发面。后续还有触发词冲突检查、lint、冒烟/运行时闸门、预览,最后才可选地写入提案。接受提案是另一条人审命令,不是 creator 跑完就直接进生产加载器。
MetaSkill 把高价值工作变成可复用、可审计、可改进的协作协议。它并不取消审查、判断和问责。
这条官方免责声明值得当产品边界来读。输出是决策支持和草稿,不是法律/医疗/财务/学术终稿;发布、安装、付款、签字、改生产系统,必须有明确授权。依赖搜索、文档解析、LLM 判断或第三方工具时,结果会受来源质量、模型限制、工具是否在线、上下文是否完整影响。你要审事实、引用、假设和不可核实的断言。
所以「自进化」在 OpenSquilla 里更像三条受控回路,而不是无人看管的变异:
1. 运行时组合:面对新目标,检索已装原子技能,按协议拼 DAG(源文 WeSight 演示属于这一层)。
2. 协议沉淀:重复出现的多技能协作,经 meta-skill-creator 变成提案,人审后才提升为托管 MetaSkill。
3. Harness 路由:简单任务走便宜模型,复杂任务升级,缓存命中直接复用;源文提到 DeepSeek 系列按复杂度分流,和官方「本地路由器 + 多提供商」方向一致,具体模型名以你当前 0.5.4 配置为准,不要把演示截图里的型号当成 API 契约。
若你要的是「对单份 SKILL.md 打分、只保留涨分的 git commit」,那是 darwin-skill / SkillOpt 那条线,不要和 MetaSkill 混为一谈。两者可以前后衔接:先用 creator 组出可运行协议,再用进化器打磨原子 Skill 的正文质量。
七、排坑清单:组合灾难、误触发、以及它现在仍不稳的地方
源文借用 OpenSquilla 的说法,把技能从几十涨到上千之后「不知道哪几个能拼起来」叫做组合灾难。这不是修辞。约束如果只存在于某个人脑子里,或写死在一份三年没人敢动的脚本里,社区一更新你的流程图就废。MetaSkill 把约束外置到 YAML:依赖、路由、失败替换、风险、模板过滤器。代价是你必须维护这份 YAML,并且接受「MetaSkill 不能再组合 MetaSkill」这条硬限制——复杂系统要拆成原子 Skill + 一层编排,而不是元技能套元技能。
实践中最容易踩的坑:
1. 以为一句话就会自动跑工作流。 0.4/0.5 产品线默认要 /meta <name>。没开 auto_trigger 时,自然语言只是在聊天,不会替你挑协议。
2. 把历史记录当当前意图。 粘贴旧对话前加「只分析、不创建、不运行」。
3. 模板不过滤。 未截断的用户输入灌进子 Agent,等于把注入面交给下游 Skill。
4. 风险标低了。 出图、写文件、调外部 API 至少是 medium 加对应 capability;shell / 改生产是 high。
5. 用 MetaSkill 包一层单技能。 官方明确这是差候选,会污染 /meta 列表。
6. 把演示质量当成 SLA。 源文也承认复杂工作流编排还不够稳、依赖判断会不准。官方同样说:声称创建了文件但产物不存在、把工具失败藏成成功、忽略「不要发送/不要发布」,都应视为坏 run,该停、该换、该重跑。
适合做成 MetaSkill 的任务:重复发生、天然多步、输入相似但细节变、输出形态稳定、需要审计或确认。不适合的:一次性事实查询、单工具调用、没有稳定交付标准的头脑风暴、高风险动作却没有人审卡点。
和本地已有 Skills 文的分工可以写进团队约定:新来的同学先读架构文,学会写合格的原子 SKILL.md;技能荒的时候去目录文挑仓库;只有当「这件事每次都要串三个以上技能,且需要回放」时,才打开 OpenSquilla 写 kind: meta。 不要把所有 Prompt 都升级成 MetaSkill,那会制造第二种组合灾难——元技能目录本身不可读。
八、小结:下一层红利在 Harness,不在再造一张技能卡片
Agent 生态正在同时膨胀三样东西:模型、MCP、Skill。前两样决定「单步聪不聪明」;第三样决定「会不会干某一类活」。OpenSquilla 赌的是第四样:组织这些活的协议是否可检查。 源文用公众号转小红书证明「现场组 DAG」做得到;官方文档用 /meta、run 历史、提案门禁和风险元数据,把这件事从 Demo 收成可运维的产品。
如果你已经会写 SKILL.md,下一步不是再收藏一个 awesome 列表,而是问三个问题:这条流程本周会不会再跑一遍?失败了要不要知道卡在哪一步?社区换了一个更好的原子技能时,你的编排还能否不动?三个问题都是「要」,就把目标写成 MetaSkill,用 inspect 看编译结果,用 replay --dry-run 核对形状,用 creator 只产出提案而不是直接写进生产目录。
仓库与文档:
- GitHub:github.com/opensquilla/opensquilla
- 用户指南:
docs/features/meta-skill-user-guide.md - 写作规范:
docs/authoring/meta-skills.md - 教学草稿:practice/wechat-to-xhs.SKILL.md
模型会继续变强,卡片也会继续变多。真正拉开差距的,往往是你有没有一层不肯装糊涂的编排协议。
💻 配套实训环境与动手练习
本文涉及的相关技术指令、开发环境与工具链已内置在边学边练在线实验室中,无需繁琐安装配置,随时在浏览器中实践体验: