Inspiration
When something breaks in a GitLab project — a security finding, a failed pipeline, a production deploy — you end up correlating data across the Security tab, CI/CD, Environments, and Merge Requests by hand. GitLab's built-in agents (Security Analyst, CI Expert) each help within their own lane, but none of them connects the dots across domains. I wanted a single query that traces any event back to the merge request behind it — and can act on what it finds.
What it does
Orbit Navigator is a GitLab Duo skill that uses GitLab Orbit's knowledge graph to answer cross-domain questions in one query, and then takes action:
- Which merge request shipped what's currently in production?
- Why did the pipeline fail, and which job?
- What breaks if I change this shared library (blast radius)?
- Who resolved these vulnerabilities?
/guardian --remediate --apply— finds vulnerable dependencies and opens a draft merge request that bumps them to fixed versions.
How we built it
It's a single skill file (skills/orbit-navigator/SKILL.md) — no backend, no vector database. The skill holds verified Orbit query recipes (the exact graph traversals), a strict operating procedure (check the live schema first, never guess relationships), and a /guardian action that uses GitLab's native tools (Create Commit, Create Merge Request) to open a draft fix. It runs through the GitLab Duo CLI with the Orbit MCP connected, so the agent calls query_graph directly on the live knowledge graph.
Challenges we ran into
Honestly, a lot:
- The query DSL has real gotchas. The
TRIGGEREDedge over-counts pipelines unless you filtersource=merge_request_event.VulnerabilityandPipelinelive in disconnected graph components — you simply can't trace "which pipeline detected this vulnerability." - Security findings are ephemeral in the beta.
Findingnodes get purged, so the "which pipeline detected this" trace returns empty. I pivoted to durableVulnerabilitynodes (accountability, risk surface) instead. - Custom agents don't get Orbit by default. It took real work to connect the Orbit MCP so the agent could call
query_graph. - A silent skill-name bug. The skill was named with an underscore, which the spec rejects — the agent silently fell back to guessing instead of loading the recipes, which caused a lot of churn until I caught it.
- An honest overstatement. The deployment query only returns MR-linked deployments, so it initially read as "the only deployment" when there were several. I tightened the recipe and the wording.
Accomplishments that we're proud of
/guardian --remediate --applydoesn't just report a problem — it opens a real draft merge request that fixes it. One graph query to a fix a human reviews.- Every query recipe is verified live against the actual graph, not just documented.
- The agent is honest: when the graph can't answer (the beta gaps), it says so instead of making things up.
What we learned
- The Orbit ontology's real shape differs from the docs in important ways — the live schema (
glab orbit remote schema) is the only source of truth. - There's a meaningful difference between durable nodes (
Vulnerability) and ephemeral ones (Finding) — queries have to target the durable ones to return data. - For custom agents, Orbit access comes through the MCP, not natively.
What's next for Orbit Navigator
- Expand remediation beyond dependency bumps — patch actual code for SAST and secret-detection findings.
- Richer blast-radius across more projects (the graph already supports it).
- More
/guardianactions — file issues, post review comments, link fixes to vulnerabilities. - Tighter time-to-resolve and remediation-velocity reporting.
Links (fill in before submitting)
- Demo video (YouTube/Vimeo): https://youtu.be/hln-UBt0shQ
- Source code: https://gitlab.com/gitlab-ai-hackathon/transcend/12108860
- AI Catalog agent: Orbit Navigator (published, public)
- Built with: GitLab Orbit · GitLab Duo Agent Platform · Model Context Protocol (Orbit MCP) · glab CLI
Built With
- agent
- duo
- gitlab
- mcp
Log in or sign up for Devpost to join the conversation.