{"id":31443779,"url":"https://github.com/extelligence-ai/bagel","last_synced_at":"2025-09-30T20:02:59.291Z","repository":{"id":304203457,"uuid":"1009904154","full_name":"Extelligence-ai/bagel","owner":"Extelligence-ai","description":"Chat with your robotics, drone, and IoT data — ChatGPT for the physical world.","archived":false,"fork":false,"pushed_at":"2025-09-30T14:52:14.000Z","size":87652,"stargazers_count":338,"open_issues_count":10,"forks_count":22,"subscribers_count":10,"default_branch":"stage","last_synced_at":"2025-09-30T16:31:22.149Z","etag":null,"topics":["ardupilot","betaflight","drone","mcp","px4-autopilot","robotics","ros2"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Extelligence-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-27T23:40:24.000Z","updated_at":"2025-09-29T14:08:59.000Z","dependencies_parsed_at":"2025-09-23T01:16:37.590Z","dependency_job_id":null,"html_url":"https://github.com/Extelligence-ai/bagel","commit_stats":null,"previous_names":["shouhengyi/bagel","extelligence-ai/bagel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Extelligence-ai/bagel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Extelligence-ai%2Fbagel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Extelligence-ai%2Fbagel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Extelligence-ai%2Fbagel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Extelligence-ai%2Fbagel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Extelligence-ai","download_url":"https://codeload.github.com/Extelligence-ai/bagel/tar.gz/refs/heads/stage","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Extelligence-ai%2Fbagel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277746985,"owners_count":25870067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-30T02:00:09.208Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ardupilot","betaflight","drone","mcp","px4-autopilot","robotics","ros2"],"created_at":"2025-09-30T20:01:51.451Z","updated_at":"2025-09-30T20:02:59.286Z","avatar_url":"https://github.com/Extelligence-ai.png","language":"Python","funding_links":[],"categories":["Chatbots"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./doc/assets/bagel_logo_dark_mode.png\"\u003e\n    \u003cimg src=\"./doc/assets/bagel_logo_light_mode.png\" width=\"400\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Extelligence-ai/bagel/blob/stage/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca\u003e\n    \u003cimg src=\"https://img.shields.io/badge/python-3.10%2B-blue?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/Extelligence-ai/bagel/actions/workflows/publish.yaml\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/Extelligence-ai/bagel/publish.yaml?branch=stage\u0026label=publish\u0026style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/QJDwuDGJsH\"\u003e\n    \u003cimg src=\"https://img.shields.io/discord/1392632504908906506?label=Discord\u0026style=flat-square\"\u003e\n  \u003c/a\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./doc/assets/hero_dark_mode.png\"\u003e\n    \u003cimg src=\"./doc/assets/hero_light_mode.png\" width=\"100%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\nUnlike cat videos, most data are trapped in the physical world. Bagel unlocks them and\n**lets you chat with your physical data**—just like you do with ChatGPT. For example:\n\n\u003e Is my IMU sensor overheating?\n\nCan’t wait to try it out? 👉 Check out the [Quickstart](#️-quickstart).\n\n### 🥯 Key Features\n\n- **Ask in plain language**: No deep domain expertise needed.\n- **Transparent calculations**: Deterministic SQL queries. No black-box LLM math.\n- **Broad LLM support**: Claude Code, Gemini, Cursor, Codex, and more.\n- **Dockerized environments**: No local dependencies required.\n- **Extensible capabilities**: Bagel can learn [new tricks](#-teach-bagel-a-new-trick).\n- **Wide format coverage**: Missing your data format? [Open a ticket](https://github.com/Extelligence-ai/bagel/issues).\n\n### ✅ Supported Data Formats\n\n| Industry     | Formats                    |\n| ------------ | -------------------------- |\n| **Robotics** | ROS1, ROS2                 |\n| **Drones**   | PX4, ArduPilot, Betaflight |\n| **IoT**      | Coming soon...             |\n\n## 💬 What Can I Prompt?\n\nYou can ask Bagel almost anything. For example:\n\n\u003e What’s the correlation between current and voltage in the `/spot/status/battery_states` topic?\n\n\u003e I think the robot hit a pothole. Can you check for sudden deceleration on the z-axis to confirm?\n\n\u003e Can you help me tune the PID of my drone?\n\nTime to put Bagel to the test: can it catch a drone doing barrel rolls? Spoiler: 🎉 It totally can.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg src=\"./doc/assets/drone_rolls.gif\" width=\"80%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n## 💡 How Bagel Works\n\nWhen you ask a question, Bagel analyzes your data source’s **metadata** and **topics** to\nbuild a high-level understanding.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./doc/assets/high_level_dark_mode.png\"\u003e\n    \u003cimg src=\"./doc/assets/high_level_light_mode.png\" width=\"80%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\nBased on your prompt, if further inspection is needed, Bagel identifies the most relevant topics\nand **interprets their meaning and structure**. Bagel then writes the relevant topic messages\nto an **Apache Arrow file** and uses **DuckDB** to generate and execute queries against it.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./doc/assets/llm_math_dark_mode.png\"\u003e\n    \u003cimg src=\"./doc/assets/llm_math_light_mode.png\" width=\"80%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\nThis process is repeated as needed, running new queries until Bagel finds the best answer\nto your question.\n\nLLMs excel at language but struggle with math. Bagel overcomes this by generating **deterministic**\nDuckDB SQL queries. These queries are displayed for you to **audit**, and you can guide Bagel to\ncorrect any errors.\n\n## ⚡️ Quickstart\n\n#### 📋 Prerequisites\n\nInstall [Docker Desktop](https://docs.docker.com/get-started/get-docker/), then clone this repo:\n\n```bash\ngit clone https://github.com/Extelligence-ai/bagel.git; cd bagel\n```\n\n#### 🐳 Run with Docker\n\nOpen [compose.yaml](./compose.yaml) and pick a service based on your need (e.g., `ros2-kilted`).\n\n```bash\ndocker compose run --service-ports ros2-kilted\n```\n\n\u003e [!TIP]\n\u003e To give Bagel access to your local files, edit `compose.yaml` before starting Docker:\n\u003e uncomment and update the `volumes` section under your chosen service.\n\nYour terminal should show output similar to:\n\n```\nINFO:     Started server process [86]\nINFO:     Waiting for application startup.\nINFO:     Application startup complete.\nINFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)\n```\n\n#### 🔗 Connect to an LLM\n\nOnce the Bagel MCP server is running, connect it to your preferred LLM.\nBagel should work with any MCP-enabled LLM, though some setup may be required.\nWe’ve tested several LLMs—expand the runbooks below for setup instructions.\n\n\u003cdetails\u003e\n  \u003csummary\u003e📚 Setup runbooks for tested LLMs\u003c/summary\u003e\n\n- [Claude Code](./doc/runbooks/setup/claude_code.md)\n- [Gemini CLI](./doc/runbooks/setup/gemini_cli.md)\n- [Codex](./doc/runbooks/setup/codex.md)\n- [Cursor](./doc/runbooks/setup/cursor.md)\n- [Copilot](./doc/runbooks/setup/copilot.md)\n\n\u003c/details\u003e\n\nCan't find your favorite LLM? [Open a ticket](https://github.com/Extelligence-ai/bagel/issues),\nand we’ll create a runbook for it.\n\n#### 🚀 Launch and Prompt\n\nNow you're ready to launch your LLM and begin prompting. For example:\n\n\u003e Summarize the metadata of the ROS2 bag \"./data/sample/ros2/mcap\".\n\n## 🐶 Teach Bagel a New Trick\n\nBagel learns new capabilities through [POML](https://microsoft.github.io/poml/latest/)\nfiles—a structured set of instructions that describe a “trick,”\nsuch as [computing latency statistics](./src/agent/diagnose/latency.poml).\n\n#### ✍️ Create a .poml file\n\nFor example, let’s define `./src/agent/examples/woof.poml`.\n\n```poml\n\u003cpoml\u003e\n    \u003ctask\u003e\n        Count the topics in the data source.\n        If the count is odd, say \"woof\", else say \"meow\".\n    \u003c/task\u003e\n\n    \u003coutput-format\u003e\n        Return the sound, the topic count, and a few cute emojis. Nothing else.\n    \u003c/output-format\u003e\n\u003c/poml\u003e\n```\n\n#### 🗣️ Use the capability\n\nPrompt Bagel:\n\n\u003e Run the POML capability \"./src/agent/examples/woof.poml\" on the ROS2 bag \"./data/sample/ros2/mcap\".\n\nResult:\n\n```\nmeow 🐱 4 topics 🐱💤🎯\n```\n\n## 🫶 Contributing\n\nWe’d love your help! The easiest way to support the project is by giving it a ⭐ on GitHub.\n\nOther great ways to contribute:\n\n- Request new features\n- Report bugs\n- Improve documentation\n- Add new capabilities\n\nBefore contributing, please review the [guidelines](./CONTRIBUTING.md).\n\nJoin the conversation in our [Discord server](https://discord.com/invite/QJDwuDGJsH) —\nwe hang out there regularly.\n\n## 📄 License\n\nBagel is open source under the [Apache License 2.0](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextelligence-ai%2Fbagel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextelligence-ai%2Fbagel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextelligence-ai%2Fbagel/lists"}