Inspiration
Sentinel is an AI deployment-safety agent for GitLab — "an agent that knows when not to ship." The hackathon theme of "reason, plan, and execute under your oversight" made literal.
What it does
Sentinel guards a GitLab project's deploy pipeline:
Detects risk on a live pipeline — production target, pipeline state, and a sharp test-coverage drop — and computes an aggregate 0–1 risk score.
Diagnoses blast radius with Gemini 3 (gemini-3.1-pro-preview on Vertex AI), reasoning over the real pipeline metadata pulled through GitLab's MCP server.
Proposes a destructive action when warranted — e.g. cancel_pipeline.
Gates that action behind explicit human approval. The gate is enforced inside the agent loop via an ADK before_tool_callback: a destructive tool call is intercepted before it can run.
Executes only on sign-off — the real GitLab pipeline is cancelled through the MCP server — and appends every decision (Approve and Deny) to an append-only audit log.
The gate is the differentiator. Most AI agents act autonomously. Sentinel deliberately stops and asks a human before doing anything destructive.
How I built it
The agent's brain is a Google ADK LlmAgent running Gemini 3 on Vertex AI. Its tools are the real GitLab MCP server (pipelines, merge requests) plus a risk_scan function tool. Every destructive tool call is routed through the human risk-gate by an ADK before_tool_callback — return a value to HOLD, return None to proceed — so the gate lives in the agent loop, not bolted on beside it. Approve and Deny both write to one append-only JSON audit trail.
The same gated flow is exposed two ways: a Rich CLI and a dependency-free web UI (stdlib http.server) whose centerpiece is the approval moment — change under review → Gemini 3 reasoning → Approve/Deny → executed action + audit entry. The web UI is deployed to Cloud Run and authenticates to Vertex via the runtime service account (no key material in the image).
Verified live, end-to-end against GitLab.com: Gemini 3 read a real running pipeline through MCP, proposed cancel_pipeline, the gate held it until a human approved, and the pipeline was then cancelled for real — with the deny path leaving the pipeline running, both logged.
Tech stack: Python 3.12, Google ADK, Gemini 3 (Vertex AI), GitLab MCP, Cloud Run.
Challenges
Building on a fast-moving stack. ADK and the Gemini 3 model IDs shifted; we verified every import and confirmed the live model (gemini-3.1-pro-preview serves on the Vertex global endpoint) against the running API rather than guessing — and kept the gate-callback logic unit-tested without ADK installed.
Designing the gate to be safe by default. It must never let a destructive action through by accident: non-interactive contexts fail-safe to deny, with an explicit opt-in for unattended recordings.
A real partner integration, not a mock. The destructive action cancels a real GitLab pipeline through the MCP server. (The official GitLab MCP server needs paid Duo; we use the PAT-based GitLab MCP so any account can run it.)
Accomplishments that I'm proud of
The human risk-gate, enforced inside a real ADK + Gemini 3 agent, acting on real GitLab infrastructure through MCP. An agent that halts itself, explains its reasoning (what, why, risk score, alternatives), waits for a human, logs the decision permanently, and only then acts is more trustworthy in production than one that executes autonomously. Fully working end-to-end, hosted on Cloud Run, with tests and an audit trail.
What I learned
A small, well-placed human checkpoint changes the trust profile of an agent far more than additional autonomy does.
Putting the gate inside the agent loop (ADK before_tool_callback) rather than beside it means no tool — present or future — can bypass it.
Fail-safe defaults belong at the gate boundary, not in the caller.
What's next for Sentinel
Slack / webhook approval transport for the gate (not just CLI/web).
Multi-provider CI support (GitHub Actions, CircleCI) behind the same interface.
A dashboard to visualize the audit log and risk trends over time.
Built With
- claude-code
- gemini-(vertex-ai)
- gitlab-mcp-server
- google-adk
- google-cloud-run
- google-cloud-vertex-ai
- mcp
- python
- python-3.12
- rich
Log in or sign up for Devpost to join the conversation.