A replay of Vago's TUI on acme-shop, an example Project made up for this page. Nothing here is running.
Or drive it yourself: click the screen and use its keys, or tap these.
One screen for every Goal
A replay of Vago's TUI on acme-shop, an example Project made up for this page. Nothing here is running. Scroll, and it shows you each part.
Goals
Every Goal in the Project with its progress and cost, and what it's doing right now.
Tickets
Open a Goal and its Tickets run top to bottom, one at a time. Here 03 is the one running.
Ticket
What the running Ticket asks for, and the Steps your Workflow takes it through.
Runs
Every time a Step runs is a Run, with its time and cost. A retry is one more Run.
Run activity
The live Run as it happens. You see each file the agent writes and each test it runs.
Stop babysitting your agents
You already know how agents should work on your code. You've got the skills, the prompts and the checks.
What's left is the sitting: correcting a session, rebriefing the next one when the context fills up,
fixing small things by hand.
Vago builds itself. Most of its own repo came out of Goals run through it.
Here's gift-cards, one Goal in acme-shop, from the file you write to the PR you
merge. Scroll, and the TUI follows along.
You write the Goal
What you want and why, what's in scope and what isn't, the way you'd brief a colleague. It's a Markdown file in your repo, and its header names the Workflow that runs it.
.vago-goals/gift-cards/goal.md
+++workflow = "small"created = 2026-10-21T12:45:00.000Z+++# Customers can pay with a gift card## Problem StatementCustomers ask for gift cards every December and the shop has nothing to sell them. Staff work around it with discount codes, which can't hold a balance, so a code is either used up in one order or shared around. Nobody can say how much credit is still out there.## Solution…
You split it into Tickets
Write them yourself, or plan them with an agent in the TUI and accept what it proposes. A Ticket can wait on another: 03 starts once 01 is done.
.vago-goals/gift-cards/tickets/
✓ 01-gift-card-codes.md✓ 02-redeem-at-checkout.md after 01● 03-balance-page.md after 01○ 04-staff-issue-cards.md after 01○ 05-refunds-to-card.md after 02
Each Ticket runs your Workflow
A Workflow is a short TOML file of Steps. An agent Step runs on Claude Code or Codex with the prompt you wrote. A shell Step runs a command: a branch, your checks, a merge.
Each time a Step runs is a Run. The TUI streams what the agent reads, edits and runs. In your terminal, vago run prints a line as each Step starts and ends, with what it took and cost.
vago run gift-cards
03-balance-page 2026-10-21T14:20:00Z New branch started 2026-10-21T14:20:00Z 0.1s New branch ok 2026-10-21T14:20:00Z Build started 2026-10-21T14:29:12Z 9m12s $0.86 Build ok 2026-10-21T14:29:12Z Checks started 2026-10-21T14:30:50Z 1m38s Checks ok 2026-10-21T14:30:51Z Review started 2026-10-21T14:34:25Z 3m34s $0.31 Review ok 2026-10-21T14:34:25Z Goal review skipped 2026-10-21T14:34:25Z Squash merge started 2026-10-21T14:34:32Z 6.7s Squash merge ok
One Ticket, one commit
Each Ticket is built on its own branch. Once its Steps pass, the Workflow's merge Step squashes it onto the Goal's branch as one commit, and the next Ticket starts.
git log --oneline vago/gift-cards
4e0c2d8 03 balance page9679a1b 02 redeem at checkoutbd49572 01 gift card codes
One Goal, one PR
The first merge opens the Goal's PR. After the last Ticket, two Goal Steps write its description from the Goal's report and mark it ready for review. Reviewing and merging it is yours. Here's low-stock-email, a Goal of acme-shop that's finished.
The PR goes through gh, so it needs a GitHub repo.
acme-example/acme-shop #34
Owners get an email before stock runs outvago/low-stock-email into main · Ready for reviewRunsWorkflow: smallTicket Runs Took Cost01-threshold-setting 5 11m58s $1.0002-daily-check 5 16m04s $0.7503-email-template 6 12m51s $1.40after_all 2 46.2s $0.14Total 18 41m41s $3.30
When a Step keeps failing
An agent Step that fails resumes its own session and tries again, three times. Then the Ticket is stuck and waits for you. Fix what it needs, run vago run again, and it picks up at that Step on the same branch.
vago run order-export
2026-10-19T09:47:43Z Build started 2026-10-19T09:49:52Z 2m09s $0.21 Build exit 102-date-range-filter is stuck after Build: exit 1 log: .vago-goals/order-export/logs/02-implement-5.jsonl resume: claude --resume 301ac8cf-44a8-4da8-a21b-67f46b3ce090 again: vago run order-export reset: vago ticket reset order-export 02
vago ~/code/acme-shopclick it, then use its keys
acme-shop 4 done · 1 ready · 1 running · 1 stuck, lost or broken ·$18.93 spent
4e0c2d8 03 balance page9679a1b 02 redeem at checkoutbd49572 01 gift card codes
PR
Yours to review and merge.
vago/gift-cardsWorkflow small2 of 5 Tickets3 of 5 Tickets27m 34s, $2.0142m 5s, $3.18
One Ticket at a time, for now. Goals can run side by side; the Tickets of one Goal can't.
Your Workflow is a short file
Vago has opinions about how a Workflow runs and none about what it is. That part is yours, per Project,
in .vago/workflows/.
Vago takes care of
A worktree per Goal, so your checkout stays yours
Retries that resume the agent's own session
Ticket and Run state in plain files in your repo
Picking up a stuck Ticket, or a crashed run, where it stopped
You decide
The Steps and their order
Every prompt an agent Step gets
Which agent and model, per Step
The scripts that branch, check and merge
It ships two to start from. A solo project can merge straight to main, a work repo can wait
for reviews and checks, and an open source contribution can follow that project's rules without anything
personal landing in its repo. Each is a change to the file and its scripts.
.vago/workflows/small.toml. For small Tickets that are already clear. One agent builds, a fresh one reviews.
.vago/workflows/try-hard.toml. For Tickets that need thinking first: design, product and architecture passes before anything is built. The TUI runs small.toml, so nothing lights up here.
acme-shop 4 done · 1 ready · 1 running · 1 stuck, lost or broken ·$18.93 spent
● gift-cards Customers can pay with a gift card
RUNNING32m 10s run time 3.3M tokens $2.01 Workflow small Goal 1 of 8
2/5 Tickets
Tickets3/6Ticket 032 Runs · 4m 36s · $0.00
✓01 A gift card is a code with a balanceCustomers can check a card's balance
✓02 Checkout takes a gift card codeafter 01
●03 Build Customers can check a card's ba…
○ 04 Staff issue gift cards from the admin✓ New branch ● Build · Checks · Review · Goal review
○ 05 A refund on a gift card order goes bac…· Squash merge
○ after_all Goal Steps
What to build
A page at `/gift-cards/balance` where anyone types a code and sees
its balance and its last five uses. It doesn't need an account. Five
wrong codes from one address in ten minutes slow the next try down.
Runs of Ticket 03
1 New branch ✓ ok 0s Acceptance criteria
2 Build ● live 4m 36s
Run 2 · 03 Build● live 4m 36s · 1.2M tokens · $0.34
limiter instead of writing another one.
Write test/gift-card-balance.test.ts (17 lines)
Execute Run the new tests, expecting them to fail
✗ test/gift-card-balance.test.ts:
⁘Four failing tests, as expected. Now the lookup: it reads the card by code and its last five uses in one query.
⁘ working
↑↓ Move←→ Run Tab Pane PgUp PgDn Scroll s Start t r Full screen G Follow e d Diff Esc Goals ? Help
Ticket 03 · Build
A replay of Vago's TUI on an example Project. The TUI drew every frame itself, from acme-shop,
a Project invented for this page, so nothing here is running.
Try it on a small Goal
Pick something you'd finish in an afternoon. Write the Goal, split it into two or three Tickets and run it
with the small Workflow.
Install
$ brew install julianbonomini/tap/vago$ cd ~/code/your-project && vago init
Without Homebrew, download the binary for your machine from the
latest release. init copies the starter
Workflows, prompts and scripts into .vago/.
First Goal
$ vago goal new search --workflow small --body-file goal.md$ vago ticket add search index --body-file index.md$ vago run search
Then run vago on its own to watch it, and go do something else.
It's an Alpha. When the retries run out, it's your turn.
You need Claude Code or Codex for agent Steps, and gh for the PR. macOS and Linux only.
The starter Workflows are the ones I use. Change them, or write your own. MIT licensed.