▸ self-hosted ticket loop

Your backlog, plowed.

Trau pulls your next ready ticket and drives it build → verify → PR → merge — every phase in its own cold, isolated agent.

One static Go binary. Point it at a repo and let it graze.

  • Cold verify:every phase runs fresh, so the verifier never inherits the build agent's blind spots.
  • Runs on your existing Claude Code / Codex / Kimi plan. Interactive, never headless.
  • Self-hosted, local-first. No SaaS, no control plane, no vendor API key for Trau to hold.

runs on your existing subscription · interactive, never headless · one static Go binary · Apache-2.0 · trau.sh

~ $ trau --graze
Trau the low-poly water buffalo mascot

move your cursor to plow the field 🐃

▸ the loop

One ticket. Seven phases. Each one cold.

Trau pulls the next ready ticket and plows it from build to merge — every phase in its own fresh, isolated agent process.

No --continue. No --resume. Each phase starts a brand-new agent that inherits only what it needs: a durable handoff brief and the code on disk. The build agent's reasoning — and its blind spots — never carry forward.

trau — live pipeline
COD-512— in progress
build
handoff
verify
commit
PR
CI
merge
  1. build

    Writes the code against the ticket, its acceptance criteria, and its non-goals.

  2. handoff

    Distills what changed and why into a brief the next agent can act on cold.

  3. verify⚠ cold · adversarial

    A fresh, skeptical pass. Sees only the brief and the diff, grades it, and waits on your existing CI checks. Disagreement triggers cold repair.

  4. commit

    Stages the verified diff with a clean message.

  5. PR

    Opens the pull request against your branch.

  6. CI

    Hands off to your existing checks and watches them land.

  7. merge

    Green and verified, it merges and picks the next ticket. Epic PRs stay human-merged.

Seven phases. One binary. No mercy at verify.

build · handoff · verify · commit · PR · CI · merge · fresh process per phase — no --continue, no --resume

⚠ the differentiator

Let a rival check your homework.

Cold verify. No mercy.

Most loops let the author grade their own work. Trau doesn't. Every phase runs in its own fresh, isolated agent — so verify is a cold, adversarial pass that sees nothing but the handoff brief and the code on disk. No shared reasoning. No shared blind spots.

Build agent

Writes the code. Knows every shortcut it took, every assumption it made, every corner it cut.

never meet

Verify agent

A fresh, skeptical process. Sees only the brief and the diff. Cold. It cannot inherit the build agent's blind spots.

When verify fails, the merge is blocked and a fresh repair agent gets spawned, then it re-verifies — bounded, then quarantine. The build agent knew every shortcut it took. The verifier doesn't, and doesn't trust the diff.

fail → merge blocked → cold repair → re-verify

⊙ execution model

Runs on the plan you already pay for.

Interactive, never headless. Trau drives the agent CLI you already use — not metered one-shot API calls.

Most autonomous loops shell out to agent -p: one-shot, headless, billed against a metered API key. The bill climbs with every phase, and the moment a run hits a prompt it can't answer, it stalls.

Trau drives the normal interactive CLI you already use — Claude Code, Codex, or Kimi — and handles the prompts and interruptions that would otherwise stall an unattended session. So the loop runs on the subscription you already pay for, subject to each CLI's own terms.

Headless

agent -p

One-shot, metered, blind to prompts. The bill climbs with every phase, and a single interactive prompt three phases deep stalls the whole run.

Trau

interactive CLI

Drives the interactive CLI you already use and handles the prompts that would stall it. No metered API key for Trau to hold — just your existing subscription, running unattended.

runs on your existing subscription · interactive, never headless

◇ routing & effort

A brain per phase. The effort to match.

Pick a provider, model, and reasoning effort for every phase — and dial the thinking up or down to fit the work.

Boilerplate doesn't need a deep thinker. The cold verify does. Each phase runs in its own fresh, isolated agent — so each one gets its own brain. Route the build to one provider, hand verify to another, and set the reasoning effort per phase: cheap for the scaffold, max for the gnarly verify that gates the merge.

  • Route per phase — build, handoff, verify, commit, PR all addressable.
  • Effort per phase — low for the easy furrow, high where the diff has to hold up.
  • You draw the line. Trau plows it the same either way.

effort: low → max

  • buildlow
  • handoffmedium
  • verifymax
  • commitlow
  • PRlow

effort tuning: Claude & Codex · Kimi effort = N/A

trau.toml
# trau.toml — a brain per phase, the effort to match
 
[phase.build]
provider = "claude" effort = "low" # scaffold, cheap
 
[phase.verify]
provider = "codex" effort = "max" # the diff has to hold up
 
[phase.handoff]
provider = "claude" effort = "medium"
 
# one seam underneath — swapping a brain is a config change, not a rewrite

One seam, swap freely. Cheap effort for boilerplate. Max effort for the gnarly verify.

⟳ task detection

It reads the shape of your task.

Parent ticket or single ticket — Trau picks the right pass before it starts plowing. You don't configure it; Trau reads it.

Loop mode

has sub-items
implement auth4 sub-items
  • auth: hash + salt passwordsready-for-agent~40m
  • auth: session cookiesready-for-agent~25m
  • auth: rate-limit loginneeds-designskipped
  • auth: logout endpointready-for-agent~15m

Runs each child tagged ready-for-agent in sequence, leaving the rest untouched.

Solo mode

no sub-items
fix flaky timezone testready-for-agent~20m

No children to walk — Trau picks it up and runs it as a single unit, start to finish.

One task in, one task done. No orchestration overhead.

Tracked in human time, not wall-clock

Time reads in human terms, not machine seconds. The number you plan around is the work replaced, not the runtime spent — so a chore that took the agent 90 seconds might read as the ~2 hours of human work it stood in for.

illustrative example — not a measured speedup

machine

90s

human-like

~2h

▸ everything below ships in the binary

The whole loop, in the open.

A summary of what's confirmed in the tree today. Tap a card to dive into the section that covers it.

Cold, isolated phases

Every phase runs in its own fresh process. Verify never sees the build agent's reasoning — or its blind spots.

Self-heal

A failed verify spawns a fresh repair agent, then re-verifies. Bounded, then quarantine.

Crash-proof resume

Re-run the same command and it picks up mid-flight from a durable per-ticket checkpoint.

A brain per phase

Pick provider, model, and reasoning effort per phase. Claude is the exercised path; Codex and Kimi are wired.

Interactive, never headless

Drives the agent CLI you already use, not metered one-shot calls. Runs on the subscription you already pay for.

Bounded by design

Capped iterations and repairs, a per-agent timeout, and quarantine-on-failure. AFK, not unaccountable.

Cost in the open

Normalized per-phase token and cost accounting, summed every run. No black box to reconcile later.

Any tracker

Linear, Jira, or GitHub Issues. Tracker access is MCP-only — no tracker API keys for Trau to hold.

Epics handled

Parent tickets fan out onto a shared long-lived branch. The epic PR stays human-merged.

Waits on your CI

Won't merge until your existing CI checks (EXPECTED_CHECKS) come back green.

Branded TUI

A keyboard-driven Bubble Tea dashboard with a live phase-stepper.

Batteries included

brew install, guided onboarding, and a system readiness check. All in one static Go binary.

Apache-2.0 · one static binary · Claude · Codex · Kimi

⊞ any tracker

Any tracker. Same loop.

Linear, Jira, or GitHub Issues. Point Trau at the one your tickets already live in.

LinearJiraGitHub Issues
tracker access: MCP-only · no tracker API keys held

Trau reads your backlog through one typed seam, so the loop doesn't care where the tickets live. Pick your backend — Linear, Jira, or GitHub Issues — and Trau pulls the next ready ticket from there: same cold verify, same furrow.

Multi-project from the start. The onboarding wizard lists the teams, projects, and repos you can see and lets you pick — no hand-edited config to get going. Epics carry over too: parent tickets fan out onto a shared long-lived branch, and the epic PR stays human-merged.

Linear · Jira · GitHub Issues · multi-project · epic PR stays human-merged · (Linear can optionally use a personal API key)

⚠ is this safe?

is this safe?

Opt-in and explicit. You decide what it touches.

Nothing runs by accident. Real work is opt-in and explicit; --dry-run previews every phase and changes nothing on disk.

Trau runs on host machine-trust — point it at a checkout you control and let it graze. It's bounded, too: capped iterations and repairs, a per-agent timeout, and quarantine-on-failure mean a stuck ticket gets parked, not pushed.

--dry-runpreviews everything, changes nothingdefault: host machine-trusthalts and quarantines on failure

◇ providers

Three brains. One seam.

Claude, Codex, Kimi — bring your own. Provider and model are a per-phase choice, not a global one. Same seam underneath, so swapping a brain is a config change, not a rewrite.

claude
exercised path
codex
wired
kimi
wired

Status: Claude is the exercised path. Codex and Kimi are wired but not yet battle-tested — they get sharper with every run. Trau is a young project, and the copy says so.

status: Claude exercised · Codex / Kimi wired · bring your own — one seam, swap freely

$ get started

Build it. Point it. Walk away.

One command to install. One command to run. The onboarding wizard checks your machine, wires up your tracker and brain, then the buffalo takes the field.

# macOS / Linux
$brew install --cask RomkaLTU/trau/trau
$trau --version
# from source (Go 1.24+)
$git clone https://github.com/RomkaLTU/trau && cd trau
$make build# -> bin/trau
1Install

One command, macOS or Linux. The whole loop ships in one static binary — no SaaS, no control plane, no vendor API key for Trau to hold.

2Run

trauin your repo opens a guided onboarding wizard. A readiness check probes your machine — git, gh, your agent CLI, and tracker access over MCP — and won't let you past until at least one brain and one ticket system come back ready.

3Walk away

Pick your tracker, label a ticket ready-for-agent, and let it graze. Preview the next ticket, run one, or turn the whole loop loose. AFK from here.

Still a young project: the Claude path is the most exercised; Codex and Kimi are wired.

◔ the horizon

More field past the fence.

The roadmap keeps running. Deliberately teased, nothing promised.

Shipped since the last site

  • brew cask install
  • guided onboarding + the readiness check
  • three trackers (Linear / Jira / GitHub)
  • auto-merge on green CI
  • self-heal via bounded repairs
  • per-phase token + cost accounting
  • --dry-run

What we're turning toward next — exploratory, not committed, not yet built.

Cross-vendor verify panel

soon

Verify as 2–3 fresh agents, optionally from different vendors, each grading the diff independently — disagreement blocks the merge under a configurable policy.

Budget ceilings

soon

Per-ticket and per-day USD or token ceilings that halt and quarantine on breach.

Parallel tickets in local worktrees

soon

Drain a whole herd at once, locally — no cloud rented.

Pluggable verify checks + rubrics

soon

Author named checks in .trau/checks with severity gating; grade against per-ticket acceptance criteria and non-goals.

Execution sandbox + egress allowlist

soon

Box agents in for overnight AFK runs.

the next furrow · exploratory · not committed · no dates, no pre-orders