Skip to content
uzi: an AI dark factory

uzi: an AI dark factory

23 min read
A dark factory corridor: a white-backlit uzi sign reading 'Specs in. Pull requests out.', a white humanoid robot labelled 'Lead' overseeing the floor with a tablet, and a conveyor of robotic arms assembling glowing amber code crates past a night skyline

A dark factory runs with the lights off: no human on the floor. Machines take the raw input, do the work, and hand back a finished part. I built one for software, called uzi (Uzinele Întunecate, “dark factories”), and it is open source.

Repo: github.com/vtmocanu/uzi ← don’t forget to star it! ⭐

TL;DR: Most AI coding still keeps you in the loop, passing context, code, and errors back and forth by hand. uzi is an open-source “AI dark factory” that takes you out of it: connect a GitLab, GitHub, or Forgejo project, label an issue uzi, and it plans the change, waits for your approval, runs an implement-and-review loop, and opens a pull request, never touching main. It watches CI and opens a fix when a pipeline turns red, and ships a catalogue of standing schedules (bug triage, test improvement, docs hygiene, and a weekly “feature bingo” that pitches its own next feature). You approve the plan and merge the PR; it does the rest.
☝️ Four tabs. You’re on What it is; Install & configure, Features, and TUI & Mobile are in the strip above.

You point it at a forge, label an issue uzi, and it plans the work, waits for your approval, writes the code under an implement-and-review loop, opens a pull request, and moves the issue to human review. When a pipeline goes red, it diagnoses the failure and opens a fix. The lights are off the whole time. You show up for two decisions: approve the plan, and merge the PR.

Not a fully dark factory, and on purpose: those two decisions stay human, and (unless you opt into autopilot) nothing is written until you sign off on the plan. The lights are off for the work, not for the call to ship.

The idea: issues in, PRs out

Even with today’s agents, “AI coding” keeps you in the driver’s seat of a single session. You open a terminal, kick off the agent, watch it work, nudge it when it drifts, and start the next task yourself when it finishes. The agent runs the code and reads its own errors now, but you are still the one holding the whole thing, one session at a time, in front of a screen you have to stay attached to. You are the conveyor belt.

uzi inverts that. The unit of work is an issue, not a message. You label an issue uzi on your forge (or assign it to uzi’s bot account, if you would rather trigger it that way), and it treats it as an order to fulfil: read the issue, plan the change, build it, review it, and open a pull request from a new branch. The forge is the source of truth the whole way through, so the work shows up where your team already looks: as issues, branches, and PRs. If the issue links a spec document, uzi picks it up automatically, but a full spec is not required to start.

What it runs on

The stack is a Go API, a React single-page app, and PostgreSQL. It runs on Kubernetes through a Helm chart, or locally with Docker Compose, with separate worker containers doing the agent work so you add capacity by starting more of them. It connects to a forge through a per-user bot account, and uses your own Anthropic token for the model calls. GitLab and GitHub are the paths I run day to day; Forgejo is supported too, but I have not tested it yet.

Running the work off your own machine is also a safety feature. Unattended is where an agent earns its keep, and it is also where it is most dangerous: point one at your laptop in auto mode and a single bad command can delete your home folder or push something it should not. A uzi worker runs in an isolated container that sees only the one repo checkout and the one run, so the worst a mistake can do is trash a throwaway branch, not your filesystem.

uzi ships both a light and a dark theme, and every screenshot in this post matches your theme. Flip the light/dark toggle, or your browser’s theme, and they switch with it.

The uzi dashboard: active runs, workers online, recent runs, and usageThe uzi dashboard: active runs, workers online, recent runs, and usage

The pipeline

Interactive: pan, zoom, toggle light/dark, or open it full screen.

The two human touchpoints are deliberate. Everything between them is the factory floor.

  1. Plan first. A worker claims the issue and produces a plan. The run pauses at an “awaiting approval” gate. You read the plan and approve it, or reject it with a reason and it re-plans. Nothing is written until you say go.
  2. Implement and review. On approval, the lead orchestrates the work: it dispatches a coder to implement, then fans out validators (reviewer, auditor, tester, fact-checker) to check the result, looping back to the coder until it holds up. You can watch each agent’s output stream live, and send a follow-up message mid-run if it needs steering.
  3. Branch and PR, never main. On completion, uzi opens a branch and a pull request, links them from the run and the card, and moves the issue to human review. main is never touched, by design, even under an adversarial prompt.

The uzi board: uzi-labeled issues as cards moving across columnsThe uzi board: uzi-labeled issues as cards moving across columns

Where it came from, and why it is open source

This blog is usually reserved for what I build outside of work. uzi is the exception, and it has quickly become my favourite project. It started a couple of months ago as an AI research initiative at Metaminds, and I have kept building it on both work and personal time since, burning a fair share of both token budgets to get this far. Metaminds takes open source seriously, so the green light to release it was easy, and I am grateful for it.

And the fun part: uzi builds uzi. A growing share of it is written by itself. I file the issues, it plans, implements, and opens the PRs, so the factory is quietly assembling its own next version while I review. A good chunk of the runs it has shipped are exactly that.

Treat it as alpha. Features land often, refactors happen often, and breaking changes are on the table. But it is not a toy: it is stable and it works well day to day, having already completed over 1,200 runs and spent over 20 billion tokens getting here. The upside of catching it this early is that you can help shape where it goes, so try it, file issues and feature requests, send PRs, and tell me what works and what does not. It is a helm install away, or a docker compose up on your laptop: github.com/vtmocanu/uzi.

One thing to set expectations on: uzi is very customisable, arguably more than you can take in on day one. That is on purpose, but the defaults are tuned to be right for roughly 90% of users, so you can leave nearly all of it alone to start. On the roadmap is a lite mode: a single toggle that keeps the knobs hidden behind opinionated defaults, which you flip off once uzi is familiar and you want to tune the parts that actually matter to you.

It is MIT licensed, so fork it, change it, sell it, do whatever you want with it. The one thing I would love back is a star, and an issue whenever something breaks or a feature is missing.

Not just me: the idea in the wild

I did not invent the term. “Dark factory” comes from manufacturing: a plant that runs with the lights off because there are no humans on the floor. If you want to see the same idea at company scale, this talk from Tessl on their dark software factory (called Kikimora) is a good watch.

Similar setup to mine, and the parallels are uncanny: an issue goes in, an autonomous agent solves it and opens a pull request, then babysits that PR through review until a human merges it. They even had their orchestrator improve itself over a weekend, and later triage its own issues, the same “the factory works on the factory” loop uzi runs on itself. And their hardest problem was not tooling but trust: can you sign your name to a PR you did not write? That is exactly why uzi keeps the plan gate and the merge in human hands.

If you want to go deeper, there is also a longer, roughly one-hour talk: Inside the Dark Factory: AI That Ships Code Solo.

And it is not just Tessl. A whole cluster of projects is converging on the same “issues in, reviewed pull requests out” idea, each from a different angle:

  • bottega, coding-agent orchestration for engineering teams, shipped as a spec plus a working reference implementation. This is the project that got me started.
  • Multica, an open-source platform for running mixed teams of humans and AI coding agents as one workforce (“your next 10 hires won’t be human”).
  • Helix, a control plane for fleets of coding agents in isolated sandboxes on your own infrastructure, with review gates and enterprise controls.
  • dot-agent-deck by Viktor Farcic, a terminal dashboard for monitoring and steering several agent sessions at once.

Four tabs above: What it is, Install & configure, Features, and TUI & Mobile. Scroll up to switch.

Use at your own risk. uzi is alpha software that runs autonomous AI agents: they read your code, run commands inside their workers, and open pull requests on your forge using your own model tokens. Run it against repositories and infrastructure you own or are allowed to change. You stay in control by design, review the plan before you approve it and the diff before you merge it: uzi opens pull requests but never merges them and never touches main, so nothing lands without you deciding to merge it. It ships as is, with no warranty; you are responsible for what you approve, merge, and deploy.
Last updated on