buenomini

vago

Builds a goal in your repo while you're away, ticket by ticket, and hands back one pull request.

CLI and TUI
status
In development, private repo
agents
Claude Code or Codex
built with
TypeScript on Bun, compiled to one binary
runs on
macOS and Linux
The planning exchange is staged. The rest is the real TUI.

You grill the plan with an agent, write the goal, split it into tickets and walk away. vago run then takes each ticket through a workflow you wrote yourself: a list of steps, some run by a coding agent (Claude Code or Codex for now, Pi is coming) and some by plain shell commands, with your own checks in between. Each ticket ends as one commit on the goal's branch, and the goal ends as one pull request for you to review and merge.

vago has opinions about how a workflow gets executed and leaves the workflow itself to you. I think the bottleneck now is human attention, and vago is my way of spending less of it. Vago means lazy in Spanish (it also reads as "various agents go", which I'll take).

It built itself that way, running a frozen build of itself: 15 goals, 88 tickets and 575 agent runs. The repo is private for now.

# Decisions

TypeScript on Bun, driving the agent CLIs

ADR 0001
chose
TypeScript on Bun, shipped as one binary with bun build --compile. It drives claude -p and codex exec headless, with no agent SDK.
rejected
Go, the early favourite for its single binary. I struggle to follow idiomatic concurrent Go, and code that vago writes about itself has to stay readable to me.
cost
Bun doesn't type-check, so the checks are strict tsc --noEmit, Biome and bun test. And vago's changes to itself only land after a rebuild and reinstall.

One worktree and branch per goal

ADR 0004
chose
The kernel owns a git worktree and one branch per goal. Ticket branches, commits, merges, pushes and PRs all belong to the workflow.
rejected
Running steps in my own checkout with a kernel that knows no git (ADR 0002, now superseded). I couldn't touch the checkout while a goal ran, and two goals couldn't run at once.
cost
Some git in the kernel: a git worktree add per goal and a few reads.

The TUI only reads

ADR 0005
chose
Runs live in their own vago run processes. The TUI reads goals, tickets and logs, and its one action on a goal is starting it.
rejected
A TUI that owns the runs. Closing it would kill or orphan goals, and there's no daemon to hand them to.
cost
The TUI can't stop or reset a goal yet. Those need their own decision.