Skip to main content
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.
Try the QuickstartExplore the source ↗
Conceptual robotics lab: a camera's data flows to a workstation, robotic arm, and mobile platform beside a humanoid.The same conceptual robotics lab at dusk, with the camera's data paths illuminated.

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

Meet us on DiscordGet unstuck. Share a run. Start contributing.