gitlab-simulation
gitlab-simulation is a Claude Code plugin, published under the GitLab.com Public Sector group, that provisions ephemeral self-managed GitLab instances on Google Compute Engine for LLM-mediated work.
I built gitlab-simulation to do LLM-mediated work against real GitLab instances, the way an LLM found a year-old kernel deadlock in a single session: hear a signal, build a reproducer, and land the change into the product with as little friction as possible. That takes several simulation streams running at once, and I don’t want my laptop carrying them, so each simulation is a disposable cloud VM rather than a local checkout. The self-managed cases that never surface on SaaS, airgapped networks, Duo Agent Platform flow execution, Ultimate and other license-gated behavior, two-site Geo failover, are exactly the ones a bench like that is for. It is the environment half of a pair: its sibling gitlab-contribution, the workflow half, routes GDK-shaped needs here.
The laptop stays control plane only: a just recipe routes through justfile into simulation.sh, which shells out to gcloud to create, configure, and destroy the VM. up stands one of three bases, caproni, omnibus, or dev: caproni alone reaches airgap and Duo Agent Platform work, omnibus is fastest to a working instance and the base Geo clusters in pairs, and dev runs GitLab source against a build container. Airgap is enforced at the GCP firewall, not by the cluster’s own claims, and verified with a negative control: an external pull that must fail beside an internal one that must succeed. multiplexer.py bridges the laptop to a playwright-mcp server inside the VM for UI and OAuth verification, so the browser sees real DNS, ingress, and certificates rather than a mock. Every VM auto-deletes after four hours, eight for a Geo pair, as a crash safety net on top of an explicit just down teardown that stays mandatory regardless.