Inspiration
Life After Code asked what happens when generation is solved. The leftover work is the DevSecOps lifecycle: review, tests, scanners, packages, tags, config, health, and proof. Small teams after codegen still babysit those steps. Stagehand is the night crew that takes that shift.
What it does
Stagehand is a Path A, hands-off control room on GitLab. A human types one sentence on an issue and assigns Stagehand Nightshift. The flow walks the change through all nine GitLab stages: plan, create, verify, package, secure, release, configure, monitor, and govern.
Nightshift labels the issue, opens the branch and merge request, waits on a green pipeline (tests, SAST, secret detection, SBOM, Terraform, SCI gate), and files evidence. The only extra human click in our run was Merge, after GitLab returned 403 insufficient_scope and Nightshift refused to bypass that permission boundary. It then tagged v0.1.0 and recorded SCI 67.15 gCO2e against a 250 g budget.
Public project: https://gitlab.com/gitlab-ai-hackathon/transcend-october-2026/43585257/showcase
How we built it
- FastAPI Stagehand board plus nine-stage CI in
.gitlab-ci.yml - Custom Duo agents in
agents/(one per stage) and the Nightshift flow inflows/ - Triggers: mention, assign, assign reviewer
- MCP client
.gitlab/duo/mcp.json→python -m mcp_server.serverfor the board, SCI, and evidence - MIT license, DCO 1.1, GSF SCI in
docs/SCI.md
Challenges
GitLab Duo cloud sessions could not call our stdio MCP tools, so the board record lived in issue notes and pipeline artifacts instead. The merge API 403 was a real gate: we did not force-push around it. Cloud Run is in the repo (infra/terraform, release:cloud-run) but is not live, so we are not claiming the 0.2 Google Cloud bonus.
What's next
Keep Nightshift public through judging. If we add Cloud Run, it stays at min instances 0 so the house does not draw power between shows.
Log in or sign up for Devpost to join the conversation.