DEV Community

Cover image for Your Skill Has a Ceiling You Don't Know About
Rotifer Protocol
Rotifer Protocol

Posted on • Originally published at rotifer.dev

Your Skill Has a Ceiling You Don't Know About

You've built a Skill. It runs. It works. Your users like it.

But here's a question you probably haven't been able to answer: how good is it, really?

Not "does it complete the task" — you already know that. But compared to every other approach to the same problem, where does your Skill actually land? Is it in the top 10%? The bottom half? Would a different implementation handle edge cases better?

Without a competitive evaluation system, you genuinely don't know. Your Skill has a ceiling — and you can't see it.

That's exactly the gap Rotifer's Gene + Arena system is built to close.

From Skill to Gene in Three Commands

A Gene is a Skill that has been compiled to WebAssembly IR, given a machine-readable phenotype manifest, and registered in the Rotifer ecosystem. The process takes about five minutes.

Install the Rotifer CLI — it's a single npm package:

npm install -g @rotifer/playground
Enter fullscreen mode Exit fullscreen mode

Wrap an existing ClawHub Skill into a Gene scaffold with one command:

rotifer wrap --from-clawhub <your-skill-name>
Enter fullscreen mode Exit fullscreen mode

This creates a local Gene directory with your Skill's code and a generated phenotype.json describing its inputs, outputs, and declared domain. Review it — the domain tag matters for Arena matchmaking.

Compile the Gene source to WebAssembly IR:

rotifer compile ./genes/<your-skill-name>/
Enter fullscreen mode Exit fullscreen mode

The compiler validates your phenotype and emits a portable WASM binary:

✓ Validated phenotype.json
✓ Compiled to WASM IR (42.3 KB)
✓ Content hash: a7f3c2...
  → ./genes/<your-skill-name>/dist/gene.wasm
Enter fullscreen mode Exit fullscreen mode

If compilation fails, the error is almost always a missing dependency declaration in phenotype.json or a function signature the WASM compiler can't handle. The error message tells you exactly which line.

Submitting to Arena

Submit the compiled Gene to Arena for competitive evaluation:

rotifer arena submit ./genes/<your-skill-name>/dist/gene.wasm
Enter fullscreen mode Exit fullscreen mode

Arena runs your Gene against standardized task scenarios in its declared domain, scores it on fitness F(g), and assigns an Elo rating based on head-to-head performance against other Genes.

Check where you landed:

rotifer arena list --domain <your-domain>
Enter fullscreen mode Exit fullscreen mode
RANK  GENE                     ELO    F(g)   FIDELITY
 1    contract-analyzer-v2     1847   0.91   Native
 2    file-desensitizer        1782   0.87   Native
 3    your-skill-name          1651   0.74   Wrapped   ← you
 4    law-site-crawler         1598   0.71   Hybrid
Enter fullscreen mode Exit fullscreen mode

Now you know. Your Skill is good — 0.74 fitness, rank 3 in its domain. But you can also see exactly what rank 1 is doing differently, and F(g) = 0.91 is a concrete target to beat.

What the Score Actually Means

The fitness score F(g) is not a rating someone gave your Skill. It's computed from real task execution: correctness on held-out scenarios, robustness under edge inputs, resource efficiency. No subjectivity.

This changes how you think about improvement. Instead of guessing what to optimize, you can:

  1. Look at which task scenarios your Gene failed
  2. Compare your phenotype against the top-ranked Gene in your domain
  3. Make a targeted change, recompile, resubmit
  4. Watch F(g) move

Iteration with a fitness signal is fundamentally different from iteration without one. You stop guessing and start engineering.

Fidelity: The Next Level

You'll notice rank 1 and 2 are Native fidelity — compiled directly to WASM with no API wrapper. Your wrapped Skill is Wrapped fidelity, which means there's a layer of overhead and potential failure points between the Gene interface and your actual logic.

If you want to close the gap, the path is rotifer wrap → optimize → rotifer compile → resubmit. The Rotifer CLI has a migration guide for Wrapped → Native if you want to go all the way.

But you don't have to. A well-tuned Wrapped Gene at 0.85 fitness beats a poorly implemented Native Gene at 0.72 every time.

Try It Yourself

The whole flow — wrap, compile, submit, check — takes under ten minutes for a Skill you've already built.

npm install -g @rotifer/playground
rotifer wrap --from-clawhub <your-skill-name>
rotifer compile ./genes/<your-skill-name>/
rotifer arena submit ./genes/<your-skill-name>/dist/gene.wasm
rotifer arena list
Enter fullscreen mode Exit fullscreen mode

If you share your Arena screenshot — your Gene name, domain, and ranking — we want to see it. The ecosystem is only as interesting as the Genes in it.

Your Skill has a ceiling. Now you have the tools to find it.

Top comments (0)