Inspiration
AI writes the diff. Nothing ships until AfterLoop says so.
AI can now write code at the speed of imagination — but who says the change is safe, tested, and ready for a human's users? AfterLoop is a post-code DevSecOps loop built on the GitLab Duo Agent Platform. Three custom agents carry a change from merge request to a governed release, and production only moves when the evidence record is complete and one human approves.
What it does
AfterLoop is a supervised autonomy lifecycle for every merge request:
- afterloop-reviewer — merge request review, test-gap analysis, and CI failure diagnosis.
- afterloop-distrust — SAST and secret triage, typosquat dependency hunting, and the localisation gate.
- afterloop-release-captain — assembles the evidence record, runs staging, and requests the one human approval production requires.
The signature piece is Bhasha-Lint, a gate that blocks a release when Hindi localisation breaks — for example when missing keys would silently fall back to English, or when mixed-script hazards appear. A missing Hindi string blocks with the same severity as a leaked secret, because for the user staring at a half-English government form, it is one.
The live run (all evidence public in the project)
The demo app, Yojana Check — a bilingual Hindi/English scheme-eligibility checker — was seeded with five defects.
- MR !1 fixed the Sukanya eligibility rule (minimum age 0 → 10). Verify went green, and the loop refused three more times:
secret_scan(a committed API key inapp.py),dependency_scan(the typosquat packagerequets), and the Bhasha-Lint gate (two missing Hindi keys). - The built-in GitLab Duo code review ran on the MR, and afterloop-distrust interrogated it across three sessions. It blocked for lack of evidence, ruled that an empty findings API is not a pass, and then — given the job logs — issued a finding-level verdict with severities and SLAs: the MR may not proceed to staging or production.
- The three remediations landed one gate at a time and MR !1 merged. Main ran green through verify, secure, Docker package and staging deploy, with
deploy_productionwaiting at manual. - An audit found the fifth defect, a reflected XSS via an autoescape bypass, had never been catchable: the SAST job ran a Python-only scanner that cannot read templates, in a mode that could not fail. The gate was strengthened in public, main went red on SAST alone, and MR !2 remediated the template. Main is green end to end again, with a SAST gate that can actually bite.
How we built it (how GitLab Duo agents were used)
- afterloop-reviewer (AI Catalog 1017879): MR review, test gaps, CI failure diagnosis.
- afterloop-distrust (AI Catalog 1017880): SAST and secret triage, typosquat hunting, Bhasha-Lint gate.
- afterloop-release-captain (AI Catalog 1017881): evidence record, staging, production approval request.
Pipelines, scans, agent verdicts and the approval record all live in the public GitLab project below.
What we learned (platform findings, verified live Oct 2026)
- Repo YAML under
.gitlab/duo/does not register agents or flows. Custom agents must be created in the AI Catalog and enabled per project; the YAML files remain the source of their prompts. - Triggers cannot target custom agents (foundational flows and external agents only), so the agents are invoked through Duo Chat and the built-in review flow.
- Agent tool grants in the catalog UI are coarse. Distrust cannot read job logs or post MR comments, so its verdicts are carried to the MR by the operator. Its evidence discipline is the point: no log, no finding.
Honest limits
- Deploy jobs in the pipeline are labeled echo simulations in the repo and described as simulations here. The gates, scans, agent verdicts, pipelines and approval record are real and public; no real production infrastructure is deployed.
- Autonomy is Supervised by design: agents run the lifecycle, a human approves production.
Links
- Public repo: GitLab Showcase project 87500143 — https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/40405299/showcase
- Track: Path A, autonomy: Supervised
Log in or sign up for Devpost to join the conversation.