Skills

Write once. Run on hardware invented after you shipped.

A skill declares what a body must be able to do — hands, reach, precision, endurance, whether it can manage stairs or a lift. It never names a manufacturer. That single rule is the difference between an ecosystem and a pile of plugins.

Simulation
Fleet body
7/16 runnable on mobile manipulatorexample- publishers, install counts and success rates are illustrative. The compatibility rule is the real one.

Change the fleet body and the catalogue changes with it. Incompatible skills are shown greyed with the failing check rather than hidden — “your body has one hand and this needs two” is the answer a publisher and a buyer both actually want.

The rules

Four things the registry enforces, and one it refuses to.

Morphology, never a brand

A manifest naming a robot model or a policy model is rejected at publish time. Not linted — rejected. The first one accepted turns the registry into a pile of vendor plugins, and the portability claim dies quietly.

No checkable postcondition, no publish

If nothing can verify a skill ran, its work can never count as autonomous. A registry full of unverifiable skills is a liability, not an asset.

A failed invocation is not billed

Charging for failure would pay publishers to ship skills that run rather than skills that work. And the same evidence that decides billing ranks them in search — so improving a success rate earns twice.

Evidence outranks marketing

Search ranks on measured field success on this body class. A skill that has never worked here does not outrank one that always has, whatever its description says.

What it refuses to enforce is taste. We do not curate, feature or editorialise — ranking is measured success on the asking body, and nothing else is for sale.

Publishing

Two commands.

Validation runs the same rules the server enforces, locally — so you find out you named a robot brand before you push, not after.

Skills are signed. The registry ships third-party code to machines that move and apply force; an unsigned bundle must never reach one.

Publishing reference →

terminal
$ ro-skill validate ./skills/inspect-panel
  OK      inspect-panel@1.8.0
          4 intents, requires wheeled+dexterous

$ ro-skill publish ./skills/inspect-panel
  bundle  sha256=9f2a41c8e7b03d5a…
  PUBLISHED inspect-panel@1.8.0

# rejected, for reference:
  ERROR   requires.extensions.robot
          names a vendor ("figure"). Skills declare what a
          BODY must do, never who made it.