你写了一个 Skill。能跑,能用,用户也满意。
但有一个问题你可能一直没法回答:它到底有多好?
不是"能完成任务"——这个你已经知道了。而是跟所有处理同类问题的方案比,你的 Skill 排在哪里?前 10%?后半段?换一种实现方式,边缘情况会不会处理得更好?
没有一套竞争性评估体系,你其实不知道答案。你的 Skill 有一个上限——你只是看不见它。
这正是 Rotifer Gene + Arena 体系想解决的问题。
三条命令,Skill 变 Gene
Gene 是经过 WebAssembly IR 编译、带有机器可读 phenotype 清单、并注册到 Rotifer 生态的 Skill。整个过程大概五分钟。
安装 Rotifer CLI,一个 npm 包搞定:
npm install -g @rotifer/playground一条命令把 ClawHub Skill 包装成 Gene 脚手架:
rotifer wrap --from-clawhub <你的-skill-名>这会在本地生成一个 Gene 目录,包含你的代码和自动生成的 phenotype.json——里面描述了输入、输出和声明的领域。建议检查一下,领域标签会影响 Arena 的对手匹配。
编译 Gene 源码为 WebAssembly IR:
rotifer compile ./genes/<你的-skill-名>/编译器验证 phenotype 并输出可移植 WASM 二进制:
✓ 验证 phenotype.json
✓ 编译为 WASM IR(42.3 KB)
✓ 内容哈希:a7f3c2...
→ ./genes/<你的-skill-名>/dist/gene.wasm如果编译报错,99% 是 phenotype.json 里缺少依赖声明,或者有函数签名 WASM 编译器处理不了。报错信息会精确到哪一行。
提交 Arena
提交编译好的 Gene 到 Arena 参与竞争评估:
rotifer arena submit ./genes/<你的-skill-名>/dist/gene.wasmArena 在你声明的领域内跑标准化任务场景,按适应度 F(g) 打分,并根据对抗表现分配 Elo 评级。
查看排名:
rotifer arena list --domain <你的领域>排名 GENE ELO F(g) 保真度
1 contract-analyzer-v2 1847 0.91 Native
2 file-desensitizer 1782 0.87 Native
3 your-skill-name 1651 0.74 Wrapped ← 你
4 law-site-crawler 1598 0.71 Hybrid现在你知道了。你的 Skill 不错——适应度 0.74,领域第三。但你也能看到第一名在哪里拉开差距,F(g) = 0.91 是一个具体的目标。
分数是怎么来的
F(g) 不是谁给你打的主观分。它来自真实的任务执行:在保留测试场景上的正确率、对边缘输入的鲁棒性、资源效率。没有主观判断。
这会改变你优化的方式。不再靠猜,而是:
- 看你的 Gene 在哪些任务场景上失败了
- 对比领域第一名的 phenotype 声明
- 做针对性修改、重新编译、重新提交
- 看
F(g)变化
有适应度信号的迭代,和没有的,是本质上不同的两种工程体验。
保真度:下一个台阶
你会注意到排名第一、第二的是 Native 保真度——直接编译成 WASM,没有 API 包装层。你的 Wrapped Gene 之间多了一层开销和潜在故障点。
如果想缩小差距,路径是:rotifer wrap → 优化 → rotifer compile → 重新提交。CLI 里有 Wrapped → Native 的迁移指引,如果你想彻底走到底的话。
但不是必须的。一个调得好的 Wrapped Gene 在 0.85 适应度,胜过一个没调好的 Native Gene 在 0.72——每次都是。
动手试试
整个流程——包装、编译、提交、查看——对你已有的 Skill 来说不超过十分钟。
npm install -g @rotifer/playground
rotifer wrap --from-clawhub <你的-skill-名>
rotifer compile ./genes/<你的-skill-名>/
rotifer arena submit ./genes/<你的-skill-名>/dist/gene.wasm
rotifer arena list如果你截了 Arena 结果截图——Gene 名字、领域、排名——欢迎分享出来。生态的质量取决于其中的 Gene。
你的 Skill 有一个上限。现在你有工具找到它了。