Inspiration
Code generation is solved. What slows teams down is everything after it: reviews, red pipelines, merge conflicts, security checks, risky rollouts and 2 am incidents. I wanted to see how much of that a small team of Duo agents could own, so I built a real app where the only thing a human writes is an issue.
What it does
Pocket Notes is a Notion-style markdown notebook: nested pages, slash commands, callouts, templates, tasks with due dates, a table view, export/backup, focus mode and more. It's live on Firebase Hosting with Cloud Firestore on Google Cloud. The repo started as a bare create/edit skeleton. Duo agents built every feature after that: 40+ merged MRs in one day.
The real product is the pipeline around it. Six custom GitLab Duo Agent Platform flows, plus Duo Code Review, take an issue all the way to production:
- Issue to MR: plans, writes the feature and its tests, opens the MR
- Pipeline Doctor: fires on a failed pipeline, reads the logs and pushes a fix (max 2 tries, then a human)
- Rules Guardian: security review of Firestore rules and auth changes, posts PASS or BLOCK with a label
- Conflict Resolver: fires when an MR hits a merge conflict, merges main and keeps both sides
- Flag Rollout: GO/NO-GO report before a feature flag ramps
- Incident Responder: correlates an incident with recent MRs and deploys and proposes a revert
- Duo Code Review on every MR
A GitOps progressive-delivery controller closes the loop. rollout.json declares intent, and every 15 minutes a CI job ramps a GitLab Feature Flag 5 → 25 → 50 → 100%. It compares the error rates of flag-on and flag-off users from in-app telemetry, rolls back automatically on a spike, opens an incident and hands it to the Incident Responder. Every decision streams to GitLab Observability over OTLP.
How I built it
GitLab Duo Agent Platform custom flows (AI Catalog), with triggers on issue created, pipeline failed, MR ready, merge conflict and mentions. GitLab CI with SAST, Secret Detection, 195 unit tests, per-MR review apps and keyless OIDC to Google Cloud Workload Identity Federation. GitLab Feature Flags (Unleash), GitLab Observability, Firebase Hosting and Cloud Firestore.
Stages covered
Plan, Create, Verify, Package, Secure, Release, Configure, Monitor, Govern: all nine.
Challenges I ran into
I filed 20 issues at once. Duo turned them into green MRs within about six minutes, but merging them in parallel set off a conflict storm, since every merge invalidated the others. I added the Conflict Resolver agent and serialized merges (resolve, green, merge, next). All 23 landed at about three minutes each. Separately, a design-system MR rewrote the stylesheet and broke mobile. It was reverted, and the redo is now forced to edit in place behind a selector-preservation test. Long branch names also pushed the OIDC subject past Google's 127-byte limit, so the WIF subject is now mapped to project and job IDs.
What I learned
Agents parallelize building beautifully. Merging, rollout and blast radius still need structure: queues, guardrails and cohort-based metrics. With those in place, a human only has to state intent and approve outcomes.
Autonomy level
Supervised. Agents carry every change to a reviewed, green, conflict-free MR and run the rollout. I approve the merge and the rollout intent.
Additional Context
Repo README has judge steps and a "Known limitations and security notes" section. All six Duo flows are in .gitlab/duo/flows/. Every app feature was built by the Issue to MR agent from an issue. I wrote the specs and the plumbing (CI, keyless WIF deploy, rollout controller) and approved merges.
Built With
- cloud-firestore
- firebase
- gitlab
- gitlab-ci
- gitlab-duo
- gitlab-feature-flags
- gitlab-observability
- google-cloud
- javascript
- node.js
- opentelemetry

Log in or sign up for Devpost to join the conversation.