{"id":18134,"plugin_id":"plugins_6a8623a0fe288191833ee0ca3fa883e7","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:14:39.181Z","digest":"dbe9eb3e965c0c25b3f4ab620c6f74b1ab6fad2b6376c1d03d65822a3f368206","against":null,"payload":{"description":"Use when the user wants a bagel data pipeline — reducing a log to windows around events (\"keep 30s around every hard brake\"), recurring snippets/GIFs/exports, or any tasks-and-gates automation over robot data.","included_files":[],"name":"authoring-pipelines","skill_md_contents":"---\nname: authoring-pipelines\ndescription: Use when the user wants a bagel data pipeline — reducing a log to windows around events (\"keep 30s around every hard brake\"), recurring snippets/GIFs/exports, or any tasks-and-gates automation over robot data.\n---\n\n# Authoring bagel pipelines\n\nThe bagel MCP server owns the authoring workflow, including the\nreduce-vs-snippet decision, window/debounce extraction, and the\npreview-before-run rule. Do not write pipeline YAML from memory:\n\n1. Call `run_poml_capability` with `poml_path=\"./src/agent/compose/pipeline.poml\"`.\n2. Follow it exactly. In particular: always call `preview_pipeline` and show the\n   user the summary (events found, data kept) BEFORE running anything.\n3. Use `list_pipeline_capabilities` for the exact task/gate module paths and\n   arguments — never guess them.\n4. Execute the approved config through the MCP tools (`run_pipeline`, or\n   `run_pipeline_batch` for many sources). The capability also mentions a host\n   CLI (`run.py`); that path is for users at a terminal in the repo, not for\n   plugin sessions — do not shell out to it.\n\nIf the connection fails, the server container is not running — see\nreferences/formats.md.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}