The ecosystem
One ROBOT.md file. Any model. Real hardware.
OpenCastor is an open-source ecosystem for declaratively describing and operating physical robots — a single manifest at the root of the robot’s project, language-agnostic runtimes, an MCP server so any LLM can drive it, and a public registry implementing the first five EU AI Act-aligned endpoints. Built almost entirely with Claude Code.
Proof
Watch it run
Bob — a SO-ARM101 arm and a depth camera on a Raspberry Pi 5 — running an autonomous vision pick-and-place: it finds a red brick by camera, plans the grasp, and places it in the bowl. No teleoperation, no hand-coded coordinates.
Architecture
The layered cake
Each layer is its own repo, its own release cadence, its own clear concern. The protocol sits deepest because everything above it depends on it being stable; surfaces are shallowest because they’re the easiest to add and the most likely to change.
┌──────────────────────────────────────────┐
│ Surfaces (Claude Code, Claude Desktop, │
│ Gemini CLI, Codex CLI, voice pendant…) │
└──────────────────────────────────────────┘
│
┌──────────────────────────────────────────┐
│ robot-md-mcp + robot-md-dispatcher │
│ (MCP server · Agent SDK · BYOK billing) │
└──────────────────────────────────────────┘
│
┌──────────────────────────────────────────┐
│ robot-md (manifest spec + CLI) │
└──────────────────────────────────────────┘
│
┌──────────────────────────────────────────┐
│ RCAN (rcan-spec, rcan-py, rcan-ts) │
└──────────────────────────────────────────┘
│
┌──────────────────────────────────────────┐
│ Robot │
└──────────────────────────────────────────┘
Off to the side:
┌──────────────────────────────────────────┐
│ Robot Registry Foundation │
│ (FRIA, safety benchmarks, IFU, │
│ incident reports, EU register) │
└──────────────────────────────────────────┘Repositories
What lives in each layer
Eleven active repos across two GitHub orgs. Every one is open source.
MCP server — exposes ROBOT.md to Claude Desktop, Claude Code, Cursor, Zed, Gemini CLI.
Claude Code plugin marketplace. Hosts the robot-md plugin and the using-robot-md Agent Skill.
Touchscreen + voice pendant — ESP32-S3 AMOLED + Pi running the Claude Agent SDK.
BYOK Claude Agent SDK dispatcher — remote tasks over HTTPS, agent runs on the robot host.
Nightly eval harness for ROBOT.md templates, with Claude as the eval model.
Multi-vendor expansion — Google, OpenAI, Microsoft, Amazon adapters.
Method
Built with Claude Code
The point isn’t that an LLM helped me write code. The point is that a one-person team was able to ship and maintain a multi-repo ecosystem because Claude Code’s long-context behavior made the cascade tractable.
A spec change in rcan-spec ripples through rcan-py and rcan-ts; a manifest change ripples through robot-md and every consumer. Claude Code holds the context that would otherwise be split across a team.
By the numbers
Safety & cryptography
Protocol-level guarantees, not just glue code
RCAN is designed for environments where authentication, replay, and revocation matter — drone swarms, manipulator arms, mobile robots talking over LoRa.
Three signing profiles
Classical Ed25519, post-quantum pqc-v1, and hybrid pqc-hybrid-v1 — XOR of both, requiring an attacker to break both channels.
Three transport tiers
RCAN-HTTP (64 KB), RCAN-Compact (CBOR, 512 B), and RCAN-Minimal — a fixed 32-byte ESTOP frame that fits in a single LoRa packet.
ESTOP-priority QoS
Exactly-once ESTOP delivery. A 300-second offline grace window, but ESTOP is always permitted — even when the robot can’t reach the registry.
Compliance
Five RCAN spec sections, five live endpoints
Each block has a canonical schema, a deterministic JSON serialization, and Ed25519 signing — so submissions are verifiable end-to-end.
| RCAN § | Endpoint | Schema |
|---|---|---|
| §22 | FRIA — Fundamental Rights Impact Assessment | rcan-fria-v1 |
| §23 | Safety Benchmark Protocol | rcan-safety-benchmark-v1 |
| §24 | Instructions for Use (IFU) | rcan-ifu-v1 |
| §25 | Post-Market Monitoring / Incidents | rcan-incidents-v1 |
| §26 | EU Register Submission (Art. 49) | rcan-eu-register-v1 |
- RRN
- Robot Registration Number — per-instance identity. bob is
RRN-000000000001. - RMN
- Robot Model Number — per-model identity, used in §26 EU Register submissions.
- RRN URI
- Resolvable form:
rrn://owner/category/model/id
A real ROBOT.md
bob, the SO-ARM101 on my desk
Excerpt from the robot-md repo. This file is the single source of truth — every layer above it consumes it.
---
rcan_version: "3.0"
metadata:
robot_name: bob
rrn: RRN-000000000001
manufacturer: craigm26
model: opencastor-rpi5-hailo-soarm101
license: Apache-2.0
physics:
type: arm+camera
dof: 6
drivers:
- id: arm_servos
protocol: feetech
model: STS3215
count: 6
- id: camera
protocol: depthai
model: OAK-D
brain:
planning:
provider: anthropic
model: claude-opus-4-7
confidence_gate: 0.60
--- Shipped recently
A month of named releases
Seven of the 67 releases shipped in April 2026 — the ones with the most consequential changes.
| Date | Repo | Tag | What shipped |
|---|---|---|---|
| 2026-04-29 | robot-md-autoresearch | v1.0 | Nightly eval harness for ROBOT.md templates |
| 2026-04-29 | rcan-ts | v3.4.2 | TypeScript SDK release — 593 tests |
| 2026-04-28 | robot-md | v1.2.4 | PyPI release — 1,100 tests |
| 2026-04-25 | robot-md-dispatcher | v0.2.0 | init wizard — pure OIDC trusted publishing |
| 2026-04-24 | robot-md-mcp | v0.3.0 | MCP server release |
| 2026-04-17 | rcan-py | v2.0.0 | from_manifest() ROBOT.md cross-link |
| 2026-04-01 | rcan-spec | v2.3.0 | PQC profiles (pqc-v1, pqc-hybrid-v1) |
Where to start
If you have a robot on your desk
pip install robot-md robot-md-mcp robot-md init --yes # one-shot, defaults robot-md init # guided
If you’d rather just read the spec
- → robotmd.dev — the manifest’s own dev site
- → continuonai/rcan-spec — the wire protocol
- → robotregistryfoundation.org — the public registry