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

Architecture

The layered cake

Each layer is its own repo, its own release cadence, its own clear concern. The order matters — the protocol is the deepest because everything above it depends on it being stable. Surfaces are the 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  (MCP server)             │
                 │  + robot-md-dispatcher  (Agent SDK,     │
                 │     remote dispatch, 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.

Surfaces

Where humans and agents drive the robot

Manifest

The single self-describing file every layer depends on

Protocol

Wire-level robot communication semantics

Registry

Public compliance and identity layer — "like ICANN for the internet's domain names, but for physical machines"

Reference runtime

The original framework, still a first-class peer RCAN 3.x runtime against a single ROBOT.md

Method

Built with Claude Code

The point isn't that an LLM helped me write code. The point is that a one-person team — me — was able to ship and maintain a multi-repo ecosystem because Claude Code's long-context behavior made the cascade tractable. Spec change in rcan-spec ripples through rcan-py and rcan-ts; manifest schema change ripples through robot-md, robot-md-mcp, and every consumer. Claude Code holds the context that would otherwise be split across a team.

The Anthropic-native bias of the surfaces (MCP server, Claude Code plugin marketplace, Agent SDK on the pendant and dispatcher, Claude as the exclusive eval model) is on purpose: every Anthropic primitive gets a first-class surface here. Other vendors get the same primitives, in their own paradigms, in their own focused weeks. Google is up next.

By the numbers

1,083 Commits across the ecosystem in April 2026
67 GitHub releases shipped in the last 30 days
11 Active ecosystem repos across two GitHub orgs
1,100 Tests in robot-md alone (current main)
881 Tests across rcan-py + rcan-ts (288 + 593)
5 EU AI Act-aligned registry endpoints live
1 bob — SO-ARM101 arm, registered as RRN-000000000001

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. A few of the load-bearing details from the spec:

Three signing profiles

Classical Ed25519, post-quantum pqc-v1, and hybrid pqc-hybrid-v1 — XOR of both, requires breaking both channels. Shipped in rcan-spec v2.3.0.

Three transport tiers

RCAN-HTTP (64 KB), RCAN-Compact (CBOR, 512 B), RCAN-Minimal (fixed 32 B binary). The 32-byte ESTOP frame fits in a single LoRa SF12 packet — ~1 s transmit at the lowest spread factor.

Hardware-token identity

FIDO2 / WebAuthn binding for human identity — Levels of Assurance 1, 2, 3. P66 manifest carries min_loa_for_control; safety scope can require LoA ≥ 3.

Replay-attack prevention

30-second sliding-window dedup on every signed envelope. Robot identity revocation broadcast as ROBOT_REVOCATION with a 1-hour TTL cache. (rcan-spec v1.5.)

Bounded delegation

Command delegation chains capped at 4 hops, every link Ed25519-signed. Consent wire protocol: CONSENT_REQUEST / GRANT / DENY.

ESTOP-priority QoS + offline mode

Exactly-once ESTOP delivery semantics. 300-second offline grace window, but ESTOP is always permitted — even when the robot can't reach the registry.

Every fact above lives in the canonical spec at continuonai/rcan-spec — see CHANGELOG entries for v1.5, v1.6, v2.3.

Compliance

Five RCAN spec sections, five live endpoints

The Robot Registry Foundation implements EU AI Act-aligned compliance blocks defined in the RCAN spec. Each block has a canonical schema (the rcan-*-v1 family), a deterministic canonical-JSON serialization, and Ed25519 signing — so submissions are verifiable end-to-end.

RCAN § Endpoint Schema
§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. Art. 49 registration is per-model, not per-robot.
RRN URI
Resolvable form: rrn://owner/category/model/id

A real ROBOT.md

bob, the SO-ARM101 on my desk

Excerpt from site/examples/bob.ROBOT.md in the robot-md repo. This file is the single source of truth — every layer above (CLI, MCP server, dispatcher, Claude Code plugin, registry) consumes it.

bob.ROBOT.md view full file →
---
rcan_version: "3.0"
schema: https://robotmd.dev/schema/v1/robot.schema.json

metadata:
  robot_name: bob
  rrn: RRN-000000000001
  rrn_uri: rrn://craigm26/robot/opencastor-rpi5-hailo-soarm101/bob-001
  ruri: rcan://robot.local:8001/bob
  manufacturer: craigm26
  model: opencastor-rpi5-hailo-soarm101
  license: Apache-2.0

physics:
  type: arm+camera
  dof: 6
  kinematics:
    - id: shoulder_pan
      axis: z
      limits_deg: [-180, 180]
    - id: shoulder_lift
      axis: y
      limits_deg: [-90, 90]
    - id: elbow_flex
      axis: y
      limits_deg: [-90, 90]
    - id: wrist_flex
      axis: y
      limits_deg: [-90, 90]
    - id: wrist_roll
      axis: x
      limits_deg: [-180, 180]
    - id: gripper
      axis: y
      limits_deg: [0, 90]

drivers:
  - id: arm_servos
    protocol: feetech
    port: /dev/ttyUSB0
    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

10 of the 67 releases shipped between 2026-04-01 and 2026-04-29 — the ones with the most consequential changes.

Date Repo Tag What shipped
2026-04-29 robot-md-autoresearch v1.0 foundation — Karpathy-style 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.5 EU-register endpoint URL routing + RMN required
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-24 rcan-py v3.3.0 Python SDK — whole-float canonical fix
2026-04-17 rcan-py v2.0.0 major: from_manifest() ROBOT.md cross-link
2026-04-02 rcan-spec v2.3.1 Robot Memory Schema
2026-04-01 rcan-spec v2.3.0 PQC Profiles (pqc-v1, pqc-hybrid-v1)

Data pulled from the GitHub Releases API as of 2026-04-29. The full list (all 67) lives in each repo's /releases tab.

Consumer UX

Three-tier on-ramp, repeated everywhere

The first nine months were about getting the architecture right. The last two have been about the on-ramp — because it doesn't matter how good the schema is if a hobbyist gives up before their first successful tool call.

Tier 1

Zero-friction default

--yes gets you running with sensible defaults. No questions. First run prints any one-time secret exactly once and never persists it.

robot-md init --yes
Tier 2

Guided

An init that explains every knob as it asks. For first-time setup or anyone who wants to understand what they're choosing.

robot-md init
Tier 3

From inside the agent

A slash command from inside Claude Code that does the setup without printing secrets into the conversation. For operators who shouldn't be editing YAML.

/enable-dispatch

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
# OR
robot-md init              # guided

Then point any MCP-aware client at robot-md-mcp and start asking it questions about your robot.

If you don't have a robot but want to read the spec