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
Heat Protein Lab is live — what eight Antigravity sessions taught me about scientific UI
Heat Protein Lab is now public — eight chapters of scrollytelling about what heat does to human proteins, each anchored on a real protein with a real structure file, citations back-linked to PubMed, tissue claims sourced from the Human Protein Atlas, no analytics, no medical claims. This is the full ship retrospective: the chapters table, the phase-by-phase build log, what shipped vs what was cut, page weight, the Celsius/Fahrenheit toggle that landed two hours before publish, and what I would do differently if I started over.
Three Google products, one project — what worked, what didn't, what I'd change
Heat Protein Lab was a deliberate composability test — build a citation-grounded scientific explainer using Antigravity 2.0, Google DeepMind's Science Skills bundle, and Stitch in concert, by one indie developer at a kitchen table, in a small number of sessions. This is the post-mortem on the tools: what worked, what didn't, the agy --print CLI stall, the API-key-in-scratch hazard, three upstream science-skills bugs filed, and two docs-PRs I would open next if I had the time.
Visualizing what heat does to a protein, without running molecular dynamics
Chapter 4 of heat-protein-lab is the visual centerpiece — a real human enzyme (aldolase A, PDB 6XMH) that falls apart on the page as the reader scrolls. It is also the chapter most likely to mislead. This post is about how I drew the line in code between educational visualization and fake science: three discrete 3Dmol style stages (cartoon → ribbon → wireframe), atoms that never move, a VISUALIZATION-NOT-MOLECULAR-DYNAMICS badge pinned above the heading, and a readout panel with deliberately fuzzy quantities.