Skip to main content

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)         │
        └──────────────────────────────────────────┘

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

1,083Commits across the ecosystem · April 2026
67GitHub releases shipped in the last 30 days
11Active ecosystem repos across two GitHub orgs
1,100Tests in robot-md alone (current main)
881Tests across rcan-py + rcan-ts
5EU AI Act-aligned registry endpoints live

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 §EndpointSchema
§22FRIA — Fundamental Rights Impact Assessmentrcan-fria-v1
§23Safety Benchmark Protocolrcan-safety-benchmark-v1
§24Instructions for Use (IFU)rcan-ifu-v1
§25Post-Market Monitoring / Incidentsrcan-incidents-v1
§26EU Register Submission (Art. 49)rcan-eu-register-v1
Identifier conventions
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.

bob.ROBOT.mdview full file ↗
---
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.

DateRepoTagWhat shipped
2026-04-29robot-md-autoresearchv1.0Nightly eval harness for ROBOT.md templates
2026-04-29rcan-tsv3.4.2TypeScript SDK release — 593 tests
2026-04-28robot-mdv1.2.4PyPI release — 1,100 tests
2026-04-25robot-md-dispatcherv0.2.0init wizard — pure OIDC trusted publishing
2026-04-24robot-md-mcpv0.3.0MCP server release
2026-04-17rcan-pyv2.0.0from_manifest() ROBOT.md cross-link
2026-04-01rcan-specv2.3.0PQC profiles (pqc-v1, pqc-hybrid-v1)

Where to start

If you have a robot on your desk

your terminal
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