← All work

Tutti

A local coordinator for multiple coding agents, using GitHub Issues as the workflow surface.

Status
Working
Year
2026
Role
Solo project
Built with
TypeScript, GitHub API, SQLite, LLM agents

The problem

Running one coding agent is easy. Running several is not. The moment you have more than one, the hard part stops being the model and becomes coordination: which agent runs next, in what order, what work blocks what, and when a human needs to step in before something risky lands.

The approach

Tutti is a local coordinator that makes one deliberate choice: it does not invent a new control plane. Every unit of work is a GitHub Issue, and the state lives in labels (state:*, role:*, type:*, priority:*, override:*). The coordinator polls, reads the labels, and dispatches the right agent. A Dispatcher classifies fresh issues, then specialised roles take turns: researcher, PM, engineer, QA, and a merger that lands the PR.

A GitHub issues list for a project, with epics and tasks each carrying a state:done label, after Tutti has run the whole thing to completion.
A real project's board after Tutti ran it. Every epic and task is an issue, and the state:* labels are the workflow.

Technical challenges

  • Safe handoffs. Each role writes something durable and flips labels to pass work on, so the workflow is a state machine whose state I can actually see.
  • Knowing when to stop. Dependency gates hold work until blockers clear, human-verification pauses wait for a person at the risky points, and retry and loop detection catch agents that get stuck spinning.
  • Forcing past gates safely. Operator overrides are explicit labels, so bypassing a gate is always a deliberate, visible act.
A GitHub issue thread where Tutti's coordinator posts a role run result and an epic-complete summary, then moves the tracking issue to state:done.
The coordinator posts each role run back to the issue and walks it through the state machine. The full logs stay local; only the outcome lands on GitHub.

Outcome

A working coordinator where the agents and I look at the same board. When something goes wrong I am debugging in GitHub, a tool I already know, instead of a bespoke dashboard I would otherwise have to build and maintain.

What I’d do differently

Generalise the issue backend earlier. It started GitHub-specific, and pulling the workflow logic away from the backing service is cleaner as an adapter from day one.