Building OpenCastor
Declarative robotics
starts with
a manifest.
ROBOT.md is to a robot what CLAUDE.md is to a codebase.
One file — YAML frontmatter + markdown prose — so Claude Code, Claude Desktop, Cursor, Zed, Gemini CLI, or any MCP-aware
agent can safely operate the robot. I'm a one-person team building the spec, the runtimes, the surfaces, and the public
registry — almost entirely with Claude Code.
Try it on your robot
pip install robot-md robot-md-mcp
robot-md init --yes
The Ecosystem
Eleven repos. One stack.
A protocol at the bottom (RCAN), a manifest in the middle (robot-md), MCP and Agent SDK surfaces on top, a public registry on the side. Each layer is its own repo, its own release cadence, its own clear concern.
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.
A spec change in rcan-spec ripples through
rcan-py and
rcan-ts; a manifest schema change ripples through
robot-md, every consumer, and the registry. 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 in autoresearch — is on purpose. Every Anthropic primitive gets a first-class surface.
By the numbers
April 2026 · single-person team
Hardware in the loop: a SO-ARM101 arm called bob, registered as RRN-000000000001.
Every shipped feature is exercised against real servos before merge.
Earlier work
Before robot-md
Computer vision, accessibility, and edge AI projects that informed the choices in OpenCastor.
LiveCaptionsXR
Spatial captions for XR collaboration. On-device speech recognition with anchored transcripts so deaf/HoH participants can follow conversations inside headsets.
Project page →BicycleRadar
Predictive collision avoidance for cyclists. Sensor fusion + ML produced 3.2-second warning windows at 96% prediction accuracy.
Project page →Dronevade
Edge computer-vision platform for drone detection. Custom YOLO models, RF + thermal fusion, designed for wildfire responders and utilities.
Project page →HeatCompass
Personal heat-stress monitoring for outdoor workers and athletes. Edge inference on a wrist-worn device.
Project page →Latest writing
From the build log
Building Chapter 7 — a sandbox and a live NWS panel that share one set of formulas
How heat-metrics-lab Chapter 7 got two interactive surfaces — manual sliders and a live api.weather.gov fetch — wired to the same drift-gated metrics.js. Covers the playground skill's single-state-object pattern, the CSP-respecting ZIP-to-lat/lng pivot, a two-stage NWS fetch, and a solar-elevation estimator built from first principles.
Heat Metrics Lab is live — air temperature, heat index, WBGT, and why three numbers matter
Heat Metrics Lab is now public — nine chapters of scrollytelling about air temperature, heat index, and WBGT, each anchored on primary sources, with a JS↔Python drift gate holding 56× tolerance headroom, no analytics, deployed to Cloudflare Pages. The Anthropic-tooling counterweight to heat-protein-lab.
Same brief, two toolchains — heat-metrics-lab vs heat-protein-lab
Two days after heat-protein-lab shipped on Google's stack (Antigravity 2.0, Stitch MCP, DeepMind Science Skills), I built the same class of artifact on the Anthropic stack (Claude Code, advisor, tufte-viz, subagent-driven-development, session-report). Both produced a 9-chapter scrollytelling explainer deployed to Cloudflare Pages. The session-report telemetry shows heat-metrics-lab cost 2.7× fewer tokens. The Anthropic side caught two pre-ship bugs that the Google side had no equivalent gate for. The Google side still has the clearest single advantage — Science Skills' structured domain data — and no Anthropic counterpart today.