Documentation
Everything needed to go from clone to first answer. Bagel's documentation lives beside the code in the repository, so you can consult the tag or commit matching your installed version.
Choose a task
Installation
Bagel ships one container per ecosystem. Requirements: Docker Desktop, Python 3.10+ if running natively, and an MCP-enabled client.
To give Bagel access to your recordings, uncomment and edit the volumes section under your chosen service in compose.yaml.
git clone https://github.com/Extelligence-ai/bagel.git && cd bagel
docker compose run --service-ports ros2-kilted
# then, in a new terminal
claude mcp add --transport sse bagel http://localhost:8000/sse
# The 0.0.0.0 in that log is the container's listen address. Connect using localhost.Compose services
ros2-kiltedROS 2 Kilted (latest)ros2-jazzyROS 2 Jazzyros2-ironROS 2 Ironros2-humbleROS 2 Humbleros1-noeticROS 1 Noeticros1-noetic-cvROS 1 Noetic + CVpx4PX4 flight logsardupilotArduPilot flight logsbetaflightBetaflight flight logsiotIoT / MQTT (live)Client setup
Using something else? Open a ticket.
Guides and runbooks
Cadence, gates and tasks. Preview, run, save, batch, then leave it standing at the edge.
Detect events, keep windows around them as snippets or one reduced bag, batch across fleets.
Step-by-step tutorial for querying a running robot rather than a recording.
Inspect errors and warnings in ~/.ros/log. Tracebacks stay attached.
Live IoT topics, Sparkplug B decoding and edge recording.
Every table becomes a topic, so joins and correlations are one question.
Every measurement becomes a topic.
Channel groups and DBC messages are topics; units ride along with the signal.
Extending Bagel
Capabilities are declared in POML files: a structured set of instructions describing a task and its output format. Drop one in src/agent/, then ask Bagel to run it against any data source.
This is the lowest-friction way to contribute: no Python required, and the capability works across every supported format.
<poml>
<task>
Count the topics in the data source.
If the count is odd, say "woof", else say "meow".
</task>
<output-format>
Return the sound and the topic count. Nothing else.
</output-format>
</poml>Run the POML capability "./src/agent/examples/woof.poml"
on the ROS2 bag "./data/sample/ros2/mcap".Integrations
Missing an integration? Open a ticket.
