The kit. That is the whole download.
One folder with everything: five working examples, the complete
hairobo surface, the docs, and the mock that enforces every device
limit. Build by hand or hand the folder to a coding agent. It is written to be
read by either. There is nothing to install and no build step.
What is inside
hairobo-plugin-kit/
README.md start here: the five rules that are not obvious
SDK-OVERVIEW.md the tour, if you want it
CONTENT-POLICY.md what gets rejected at review
docs/ api.md character.md commands.md limits.md manifest.md permissions.md publishing.md
reference/ hairobo-sdk.js simulator-mock.js
examples/ starter hello breathe follow-me roll-call character cab
The docs are markdown, not this site's HTML, because that is what a model reads
best. reference/ is for reading only: the app and the simulator both
provide hairobo, so nothing in there is ever shipped inside a plugin.
Two ways to use it
With a coding agent
Unzip it, hand the whole folder to Claude or Codex, and say what you want
built. README.md is the brief it reads first, and it leads with
what a model gets wrong unprompted: that there is no network at all, that a
file missing from the manifest installs blank, and that the simulator will not
catch it.
By hand
Copy examples/starter/ and edit it. Read
docs/limits.md before you build (the no-network rule is the one
that trips people up), then keep docs/api.md open beside you.
Either way: drop the folder on the simulator to run it, try it on a real robot, then upload it.
The examples, in the kit
starter
The smallest thing that runs. Copy this one and start editing.
examples/starter/: index.html · manifest.json · plugin.js
hello
A runtime smoke test: speech and the dock ring.
examples/hello/: index.html · manifest.json · plugin.js
breathe
A guided breathing session. The ring swells as you inhale.
examples/breathe/: index.html · breathe.js · manifest.json
follow-me
Eyes that watch you and a head that turns to keep up.
examples/follow-me/: index.html · follow.js · manifest.json
roll-call
Multi-face and storage: a party game for a room of people. Counts everyone, picks one at random, turns to that seat and asks a question.
examples/roll-call/: index.html · manifest.json · rollcall.js
character
A face for the robot, not a screen inside it. Pip draws every state the built-in eyes draw, and asks for nothing at all.
examples/character/: index.html · character.js · manifest.json
cab
Owns a spoken phrase. Say "heading to the office" and the cab app opens with the office already set.
The open permission is narrower than it sounds: the plugin asks the app to open a cab, and never sees the address or where you are.
examples/cab/: index.html · cab.js · manifest.json
They do not share a shape, and they are not meant to: the script is called
plugin.js in two of them and something else in the others. Only
manifest.json and whatever you set as entry are fixed
names. Every file you add has to go in the manifest's files array, or
it is simply absent on the robot.
New to the API? Read the overview, then the sandbox. Both are in the kit too.