Open-source robot runtime
Cerulion gives AI agents a harness to control real robots.
Our open-source runtime and harness give any AI agent a physical body, inside safety limits the robot enforces, and tools to autonomously debug recorded robot failures. It’s ROS 2 compatible.

What Cerulion is
Cerulion is an open-source Rust runtime for robots and real-time systems. You compose your application as a graph of nodes that pass messages over zero-copy shared memory, and you build, wire, and run the whole thing through one CLI:cerulion.
It gives you the latency of raw shared memory with the ergonomics of a typed,
macro-driven node API. Runs are recordable to standard MCAP bags and
re-executable byte-for-byte, robots are viewable across the network by default,
and a live graph renders in Cerulion Studio as soon as you check a topic.
The CLI and runtime are open source
under AGPL-3.0. Install the CLI and run the quickstart
today.
Agent control (next release)
The harness an agent uses to drive a robot is the Robot Context Protocol server,cerulion-rcpd. It is in the next release, not in v1.0.0, so today you build it
from source with cargo build --release -p cerulion_rcpd. It is AGPL-3.0, like
the runtime.
cerulion-rcpd is an MCP server on the robot. An agent reads live state and
calls only the tools the operator declares in rcp.yaml. The daemon checks each
argument against its schema, applies the tool’s safety class, holds an e-stop
latch, and writes hash-chained receipts. The limits are the ones you write in
the manifest and in your node code; there is no built-in velocity, force, or
workspace limit.
It is shown on a simulated arm,
examples/aspire_arm,
whose recording replays with no agent. The agent that drives it in the demo is
not yet published. Read the
Robot Context Protocol docs.
Why teams use it
Zero-copy pub/sub
Nodes exchange messages over iceoryx2 shared memory. Reads and writes go
straight to the payload, with no serialization on the local hot path.
Record and re-execute
Record any run to a standard MCAP bag, then re-run your nodes against it and
verify the result matches the robot byte-for-byte.
Trigger policies
Decide when each node fires (periodic, data-triggered, synchronized, or
external) with per-node tick deadlines that warn loudly when missed.
Ergonomic node API
Define a node as a Rust struct with
#[cerulion_node]. Field attributes
declare ports; the macro rewrites self.<port> access into zero-copy
shared-memory reads and writes for you.Fault isolation by default
A live graph runs as one process per group in lockstep, so a crashed node
takes down its own group instead of the robot, with identical execution.
Works with ROS 2
254 built-in ROS 2 message types.
rmw_cerulion runs ROS 2 Jazzy nodes on
Cerulion’s transport, and cerulion ros2 attach bridges an existing DDS
robot’s topics into a Cerulion graph.Start here
Installation
Set up the Rust toolchain, get the
cerulion CLI, and verify it works.Quickstart
Build and run a complete two-node graph, then watch its messages with
topic echo.Concepts
Learn the mental model: workspaces, nodes, graphs, topics, and schemas.
Studio, Hindsight, and the hosted MCP server
The runtime is open source. Cerulion Studio, Hindsight, and the hosted MCP server are not. They are closed source and in early access: book 30 minutes with us to get access.Cerulion Studio
Early access. The desktop app you watch your robot in: live topics on a
stage, the running graph, and an agent dock.
Hindsight
Early access. Point it at a recording and find the moment the run went
sideways, with every claim cited to a topic and timestamp.
Build with the community
