$git clone https://github.com/Extelligence-ai/bagelUnlike cat videos, most data are trapped in the physical world. Bagel unlocks them and lets you chat with your physical data—just like you do with ChatGPT. For example:
| 1 | <p align="center"> |
| 2 | <picture> |
| 3 | <source media="(prefers-color-scheme: dark)" srcset="./doc/assets/bagel_logo_dark_mode.png"> |
| 4 | <img src="./doc/assets/bagel_logo_light_mode.png" width="400"> |
| 5 | </picture> |
| 6 | </p> |
| 7 | |
| 8 | <h1 align="center"> |
| 9 | <a href="https://github.com/Extelligence-ai/bagel/blob/main/LICENSE"> |
| 10 | <img src="https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square"> |
| 11 | </a> |
| 12 | <a> |
| 13 | <img src="https://img.shields.io/badge/python-3.10%2B-blue?style=flat-square"> |
| 14 | </a> |
| 15 | <a href="https://github.com/Extelligence-ai/bagel/actions/workflows/publish.yaml"> |
| 16 | <img src="https://img.shields.io/github/actions/workflow/status/Extelligence-ai/bagel/publish.yaml?branch=main&label=publish&style=flat-square"> |
| 17 | </a> |
| 18 | <a href="https://discord.gg/QJDwuDGJsH"> |
| 19 | <img src="https://img.shields.io/discord/1392632504908906506?label=Discord&style=flat-square"> |
| 20 | </a> |
| 21 | </h1> |
| 22 | |
| 23 | <p align="center"> |
| 24 | <picture> |
| 25 | <source media="(prefers-color-scheme: dark)" srcset="./doc/assets/hero_dark_mode.png"> |
| 26 | <img src="./doc/assets/hero_light_mode.png" width="100%"> |
| 27 | </picture> |
| 28 | </p> |
| 29 | |
| 30 | Unlike cat videos, most data are trapped in the physical world. Bagel unlocks them and |
| 31 | **lets you chat with your physical data**—just like you do with ChatGPT. For example: |
| 32 | |
| 33 | > Is my IMU sensor overheating? |
| 34 | |
| 35 | Can’t wait to try it out? 👉 Check out the [Quickstart](#️-quickstart). |
| 36 | |
| 37 | ### 🥯 Key Features |
| 38 | |
| 39 | - **Ask in plain language**: No deep domain expertise needed. |
| 40 | - **Transparent calculations**: Deterministic SQL queries. No black-box LLM math. |
| 41 | - **Natural-language pipelines**: "Keep 10s around every hard brake, drop the rest" — |
| 42 | one sentence becomes an auditable [pipeline](./doc/runbooks/pipelines.md): previewed |
| 43 | before a byte is written, then run once, across a fleet, or standing at the edge. |
| 44 | - **Broad LLM support**: Claude Code, Gemini, Cursor, Codex, and more. |
| 45 | - **Dockerized environments**: No local dependencies required. |
| 46 | - **Extensible capabilities**: Bagel can learn [new tricks](#-teach-bagel-a-new-trick). |
| 47 | - **Wide format coverage**: Missing your data format? [Open a ticket](https://github.com/Extelligence-ai/bagel/issues). |
| 48 | |
| 49 | ### ✅ Supported Data Formats |
| 50 | |
| 51 | | Industry | Formats | |
| 52 | | ------------ | ------------------------------ | |
| 53 | | **Robotics** | ROS1, ROS2, MCAP (any profile), ROS text logs (`~/.ros/log`) | |
| 54 | | **Drones** | PX4, ArduPilot, Betaflight | |
| 55 | | **Automotive** | ASAM MDF4 (`.mf4`), CAN captures (`.blf`/`.asc` + DBC) — *beta* | |
| 56 | | **IoT** | MQTT (live, Sparkplug B), PostgreSQL / TimescaleDB, InfluxDB 3 | |
| 57 | |
| 58 | ## 🆚 Bagel vs. the Tools You Already Use |
| 59 | |
| 60 | You already have `ros2 *`, PlotJuggler, and grep. Bagel doesn't replace them — it |
| 61 | answers the questions they make you work for, then hands off to them: |
| 62 | |
| 63 | | You do this today | Ask Bagel instead | |
| 64 | | --- | --- | |
| 65 | | `ros2 bag info` for metadata | *"Summarize this bag"* — same prompt works on PX4, ArduPilot, MCAP, MQTT, Postgres | |
| 66 | | `ros2 topic echo /imu` and eyeball raw values | *"What's the peak z-deceleration in /imu? Running average over 5 s?"* — real SQL underneath: peaks, running averages, percentiles, cross-topic correlations | |
| 67 | | Scrub PlotJuggler timelines hunting for the event | *"Find every deceleration under −10 m/s² and cut ±30 s snippets"* — then open the result in PlotJuggler with a [pre-framed layout](./doc/runbooks/plotjuggler.md) | |
| 68 | | `rqt_console`, or grep `~/.ros/log` | *"Read the ERRORs from ~/.ros/log and tell me what went wrong"* — tracebacks included, [no bag needed](./doc/runbooks/ros_text_logs.md) | |
| 69 | | Echo two topics in two terminals, correlate in a spreadsheet | *"What's the correlation between current and voltage?"* — topics live in one SQL relation, so joins and `corr()` are one question | |
| 70 | | `ros2 bag record -a` and babysit the disk | A [standing edge pipeline](./doc/runbooks/data_reduction.md): record continuously, keep only event windows, drop the rest | |
| 71 | | A bash loop over 200 bags | *"Run this pipeline on every bag in the folder"* — [one pi |