Build a custom machine
Routes and tools
For your AI: the Ownbox's connector
Your AI reaches the Ownbox through its connector. The owner's Developers page shows the line, with the Ownbox's own address, to the owner only. The line signs in as the owner, so the AI that holds it reads what the owner reads: the owner hands it only to a developer they trust.
claude mcp add --transport http --scope user ownbox https://<the Ownbox>/mcp| Tool | Does | Acts? |
|---|---|---|
core.dev_reference | Reads this guide whole, with a build's file limits. | No |
core.propose_dev_build | Asks the owner to build from your files, each between === FILE: <name> === and === END ===; while a build waits for fixed files, sends them to it. A malformed set is refused before the owner is asked. | A proposal only |
core.dev_build | Where a build is, in words, and its next step. With no id, the build going now. | No |
core.dev_builds | The last 10 builds: name, status, progress. | No |
Pages on the Ownbox
| Address | Who opens it | Is |
|---|---|---|
/my/<slug> and below | Anyone signed in | The machine's own pages. |
/settings/machines/<slug>/keys | The owner | Its Keys page: the keys it named, and each key's monthly limit. |
/approvals | The owner | Builds, review cards and the machine's proposals. |
/add-machine/developers | Anyone signed in | Developers. The owner also sees the connector line and building from a description. |
/add-machine/developers/sdk | Anyone signed in | The SDK reference. |
/add-machine/build/<id> | The owner | One build: its progress, its dry runs' log, its review card. |
HTTP routes
The Ownbox's own pages call these; each is for the owner only (a member gets 403 owner_only). An error answers
400 bad_request, 404 not_found, or 409 (busy, not_now, changed) with the build attached.
| Method | Path | Body | Does |
|---|---|---|---|
GET | /machines/build | — | The build going now, and the last 10. |
POST | /machines/build | {description} or {files, does?} | Starts a build; 202. |
GET | /machines/build/<id> | — | One build. |
POST | /machines/build/<id>/files | {files} | New files for a build that waits for them (the owner's own; your AI uses core.propose_dev_build). |
POST | /machines/build/<id>/tap | {hosts, max} | The hosts for the fetch run, and how many fetches. |
POST | /machines/build/<id>/more | — | More turns and dry runs for a failed build. |
POST | /machines/build/<id>/cancel | — | Cancels it. |
POST | /machines/build/<id>/approve | {version, sha256, grants} | Approves exactly what the card showed. |
POST | /machines/build/<id>/resend | — | Sends a partner Ownbox's approved build to Ownbox again. |
POST | /machines/rollback/<slug> | {version} | Returns to the version before. |
POST | /machines/remove/<slug> | {confirm} | Removes it; confirm is its name as shown. |
Names the Ownbox gives a machine
Every name a custom machine takes on the Ownbox starts my_, so it never collides with a machine that ships with the
Ownbox. Its key is my_ and its slug with - as _: quote-follow-up is my_quote_follow_up.
| What | Name | Example |
|---|---|---|
| Its pages | /my/<slug> | /my/quote-follow-up |
| A tool for the owner's AI | <key>.<name> | my_quote_follow_up.open_quotes |
| Its tools' capability | read:<key> | read:my_quote_follow_up |
| Its pages, read by the owner's AI | <key>.screen | my_quote_follow_up.screen |
| A proposal's kind | <key>.<kind> | my_quote_follow_up.send_quote |
| Its unit's user | aiosm-<slug> | aiosm-quote-follow-up |