tade — what it is

TADE

Run as many coding agents as you can land. Tade is where their work becomes merged work — and none of it is graded by the agent that did it.

see what it does

Free and open source. MIT.github.com/mujacica/tade ↗Not in tade-sh 0.2.1 yet: the desk, the forecast and the scorecards — the source rows under Install have them.

Tade in a terminal: a project with nothing running, a request typed to the orchestrator, the orchestrator calling its tools, an agent at work asking for approval, and then the landing desk — every finished piece of work in the order it is cheapest to trust.

Home01 / 46

What turns agent work into merged work

Plenty of things run agents in parallel. The work still has to be read, checked and merged before it counts — and that is where the day goes.

Landing it02 / 46

Every finished piece of work, cheapest to trust first

Green, small and unquestioned first; then what waits on you; then what waits on its agent — each with the one sentence why. Looking at it lands nothing, and Tade never merges.

Built, tested, on main — and not published yet: tade-sh 0.2.1 has none of the landing desk, the forecast, the scorecards, races, replays or mistakes turned into checks. Until a release does, they are the source rows at the foot of Install.

the-landing-deskpaneldrawn by Tade
the-landing-deskpaneldrawn by Tade
the-landing-deskpaneldrawn by Tade

Landing it03 / 46

Collisions, forecast before they happen

Live work that would collide wears ⇄ on both agents while either can still give way, and the orchestrator is told which should. It only ever tells — it never stops or holds anything.

work-that-would-collidebodydrawn by Tade
work-that-would-collidebodydrawn by Tade
work-that-would-collidesidebardrawn by Tade

Landing it04 / 46

Every file an agent touches

Marked the way git marks it, with the diff a click away.

diffpaneldrawn by Tade
diffpaneldrawn by Tade
diffpaneldrawn by Tade

Landing it05 / 46

The checks, before anybody else sees them

A push with nothing green behind it is held, with what is missing.

what-an-agent-has-donemaindrawn by Tade
what-an-agent-has-donemaindrawn by Tade
what-an-agent-has-donemaindrawn by Tade

Landing it06 / 46

What an agent does with work that is green

Three answers, per project, never until you say otherwise. What is pushed stays watched after the agent has stopped, and a commit that settles red gets an agent.

  • Nothing is pushed never, and the default: agents commit and stop, and nothing of theirs leaves the machine.
  • The branch it is on branch, once the checks are green. Agents that share a checkout share that branch, so a push carries every commit on it.
  • Its own branch, and a review on it branch-and-review, which wants a worktree each: agents sharing one checkout have no branch of their own, so Tade says so rather than pushing. It never merges what it opened.

Landing it07 / 46

Jev, a judge whose findings are answered

It reads each change once it stops moving, for what nobody has time to. The agent accounts for every finding; the verdict is yours or the orchestrator’s, never the agent’s.

what-jev-flaggedpaneldrawn by Tade
what-jev-flaggedpaneldrawn by Tade
what-jev-flaggedpaneldrawn by Tade

Landing it08 / 46

A mistake made twice becomes a check

Not another lesson in prose: something a machine runs, proposed the second time the same mistake is seen. The watch that looks for them, Mistakes made twice, is on wherever Jev is.

  • Twice, in one project One question confirmed real about two changes — or the orchestrator seeing the same correction twice in finished work.
  • Verdicts, not accounts On the judge’s side only verdicts somebody wrote are counted — never an agent’s account of its own work, or a probability.
  • Only what a machine could catch A line in the commit hook, a lint rule or a test. Whether a change did what it was asked has no lint rule, so it is never proposed.
  • Proposed, and parked It arrives as parked work, and picking it up is approving it. Nothing starts it but a person.

Landing it09 / 46

Scorecards nobody graded for themselves

Which harness, model, persona and template lands work, counted from what was recorded — counts first, and a rate only from five. Then your own landed tasks, replayed on a candidate.

evaluations-by-harnesspaneldrawn by Tade
evaluations-by-harnesspaneldrawn by Tade
evaluations-by-harnesspaneldrawn by Tade

Landing it10 / 46

One request, several agents, and you keep one

Two to four agents on different harnesses or models, side by side in the order the facts put them. That order is not a pick: nothing picks but you.

a-race-comparedpaneldrawn by Tade
a-race-comparedpaneldrawn by Tade
a-race-comparedpaneldrawn by Tade

What it tracks11 / 46

Every agent, every token, every dollar

What your models charged, to the agent. A subscription is not money, and is never totalled with it.

spendpaneldrawn by Tade
spendpaneldrawn by Tade
spendpaneldrawn by Tade

What it tracks12 / 46

Tade has to be light, and proves it

What Tade and everything it runs is using — by project, by kind and by agent.

resource-usagepaneldrawn by Tade
resource-usagepaneldrawn by Tade
resource-usagepaneldrawn by Tade

What it won't do13 / 46

What it won't do

Not limitations somebody is working on. The design.

  • Nothing merges anything unless you asked for exactly that. merge is never by default.
  • A judge answers, it never decides It may only ever add caution — never approves, merges, closes, unholds or shortens anything.
  • There is no tool that deletes a branch, a worktree or a folder and asking explicitly does not produce one: that is a person with git in a terminal.
  • Closing Tade never stops your agents Closing the window and stopping the work are two different acts.
  • There is no daemon Schedules run only while a window is open. What came due while it was closed is caught up once, or skipped.
  • No server unless you turn one on One terminal, no build step, and git pull is the upgrade. The away view is the only listener there is — off by default, on this machine alone, and gone when you close the window.
  • Being there is not being on An extension in the folder is listed and never imported until somebody turns it on.
  • Nothing installs anything behind your back The exact command is on the page before it runs.
  • Tade reports its own trouble, never your work What you said, what an agent wrote, task titles, prompts and notes are never in its telemetry. Paths are scrubbed to ~.
  • Tade never holds your sign-in Every harness signs in as itself. A key you do paste is written to ~/.tade/config.yaml, and any agent you run can read it — agents run as you, and nothing sandboxes them. Export its variable instead and it is never written down.

What it is14 / 46

The window

Agents left, the one you are watching in the middle, the orchestrator below. One terminal, no browser, no daemon.

watching-an-agentwindowdrawn by Tade
watching-an-agentwindowdrawn by Tade
watching-an-agentwindowdrawn by Tade

What it is15 / 46

An orchestrator you talk to

Every tool as it runs — including the ones that fail, with the reason.

orchestrator-at-workorchestratordrawn by Tade
orchestrator-at-workorchestratordrawn by Tade
orchestrator-at-workorchestratordrawn by Tade

What it is16 / 46

Every agent gets a lane

Working, idle, waiting on you, failed, finished — read back from git, never remembered. And three of them are three different programs.

harnesses3click one
an-agent-on-pibodydrawn by Tade
an-agent-on-pibodydrawn by Tade
an-agent-on-pisidebardrawn by Tade

What it is17 / 46

Approvals, on your terms

Off by default, and every command an agent runs is written down either way.

watching-an-agentmaindrawn by Tade
watching-an-agentmaindrawn by Tade
watching-an-agentmaindrawn by Tade

What it is18 / 46

Voice, first

Hold ctrl+space and talk. Speech stays on your machine.

talkingorchestratordrawn by Tade
talkingorchestratordrawn by Tade
talkingorchestratordrawn by Tade

How it works19 / 46

Status is a query, not a memory

Tade owns no state of its own, which is why closing it is harmless.

a-brief-on-demandorchestratordrawn by Tade
a-brief-on-demandorchestratordrawn by Tade
a-brief-on-demandorchestratordrawn by Tade

How it works20 / 46

Ask for five things at once

What can run now runs. Looking at queued work is never starting it.

a-chain-in-the-queuemaindrawn by Tade
a-chain-in-the-queuemaindrawn by Tade
a-chain-in-the-queuemaindrawn by Tade

How it works21 / 46

The whole plan, before any of it starts

A column per step, an arrow for every wait, and the reason under it.

the-planmaindrawn by Tade
the-planmaindrawn by Tade
the-planmaindrawn by Tade

How it works22 / 46

“Every Monday, update our dependencies”

A rule, an instruction, and a record of every run.

a-schedulemaindrawn by Tade
a-schedulemaindrawn by Tade
a-schedulemaindrawn by Tade

How it works23 / 46

A watch looks before it acts

A cheap check, and an agent on each new finding. It never starts, steers or stops one on its own.

a-watchmaindrawn by Tade
a-watchmaindrawn by Tade
a-watchmaindrawn by Tade

How it works25 / 46

The repository is right there

The file tree, the diffs, the branch, and a terminal in the same worktree.

editing-a-filepaneldrawn by Tade
editing-a-filepaneldrawn by Tade
editing-a-filepaneldrawn by Tade

How it works26 / 46

Extensions

Every one of them down the side, and the one you pick in full: its tools, its watches, its settings, and what it wants before it will run.

extensionspaneldrawn by Tade
extensionspaneldrawn by Tade
extensionspaneldrawn by Tade

How it works27 / 46

Already on, before anybody asks

Six of the seven that ship with Tade, each on unless you turn it off — the seventh, Intake, has a chapter of its own further down. Anything else is listed, readable and inert until you say otherwise.

  • Checks Reads what to run from the project’s own CI workflows and commit hook, one suite at a time per checkout, and records what ran against the commit it ran on.
  • Dependencies deps_check looks and changes nothing; deps_update moves versions on in the agent’s own worktree. Its daily watch asks OSV and starts an agent per vulnerable package — never a major on a clock.
  • Reviews One shared poll behind your open pull requests, what CI says and the comments nobody answered. merge is never, and its CI watch is the one thing on before you ask.
  • Sentry Turns an issue into an agent whose context already holds the stack trace, the trace and the logs. Its token sits in config.yaml, which any agent you run can read.
  • Jev The judge, with a chapter of its own under Landing it. Paste a key and it is on; with none, none of it runs and nothing else changes.
  • Resources One ps for the machine, shared by every reader and split by project, kind and agent — so watching it costs nothing.

How it works28 / 46

Every MCP server in one place

A server you turn on becomes an extension whose tools are its own, handed to pi, Claude Code and Codex alike — and every call comes back through the window.

mcp-serverspaneldrawn by Tade
mcp-serverspaneldrawn by Tade
mcp-serverspaneldrawn by Tade

How it works29 / 46

The one thing Tade is told rather than derives

Kept word for word, in a file you own.

a-note-read-wholepaneldrawn by Tade
a-note-read-wholepaneldrawn by Tade
a-note-read-wholepaneldrawn by Tade

How it works30 / 46

pi, Claude Code and Codex, side by side

One harness per agent. Each signs in as itself, and keeps its own accounts.

settings-accountspaneldrawn by Tade
settings-accountspaneldrawn by Tade
settings-accountspaneldrawn by Tade

Outside & away31 / 46

Somebody else asks, and you decide

A software factory with a person in the middle of it — and, once you turn the away view on, a remote control for what it makes. A rule you wrote lets a request in, and the task it makes is parked until you approve it; but a rule is not a watch, and there is no tade intake watch.

the request3press one
intake-one-requestpaneldrawn by Tade
intake-one-requestpaneldrawn by Tade
intake-one-requestpaneldrawn by Tade

Outside & away32 / 46

Four doors, and each of them shut

Each is a poll on Tade’s own clock, never a webhook, so a machine that was asleep missed nothing. Jira is not among them and there is no switch for it: a webhook wants a public address answering in seconds.

  • cli A line you type at this machine, into Tade’s own spool: no key, no endpoint, no account.
  • github One repository’s issues, polled every ten minutes. from is the logins whose labelling counts — and a label says nothing about who put it there.
  • slack @tade in one channel, polled every two minutes. Tade notices a mention; it does not answer one.
  • linear One team’s labelled issues, polled every ten minutes. Nothing is ever posted back: that watch implements no reply at all.

Outside & away33 / 46

They land in the window you already have open

Who asked, the door it came through, and how far each got — a refusal is a row like any other, and so is one Tade gave up on.

intake-handed-oversidebardrawn by Tade
intake-handed-oversidebardrawn by Tade
intake-handed-oversidebardrawn by Tade

Outside & away34 / 46

Six steps, and the middle step is yours

Outside work becomes a proposal, then tasks, then agents, then checks — each step a different party, and none of them does another’s job.

  • A look finds it A watch on Tade’s own clock, never a webhook. One finding per revision: an edit is news, a comment is not.
  • A rule in your own config allows it Never the requester’s role at the source: the key that matched goes into the work, so the record names the key to go and remove.
  • You approve it The default is propose: the task is made and parked. What intake automates is the typing.
  • It is stamped from a published version Resolved when it was accepted, immutable after — or one ordinary task, where the grant names no workflow.
  • The queue, the checks and a review The ordinary queue, the project’s own checks, and a review nobody here merges.
  • A status goes back, if you let it Seven fixed sentences, at most one per stage, never a word an agent wrote.

Outside & away35 / 46

A stored plan with holes in it

A list and a form, never a canvas: a step is told by a persona, its prompt is literal, and a published version cannot change once it is out.

workflow-editorpaneldrawn by Tade
workflow-editorpaneldrawn by Tade
workflow-editorpaneldrawn by Tade

Outside & away36 / 46

A page your own machine serves

Scan the code in the window and approve the device at the machine. A yes grants it everything, and what it should not have is a box you untick.

the panel3press one
away-pairingpaneldrawn by Tade
away-pairingpaneldrawn by Tade
away-pairingpaneldrawn by Tade

Outside & away37 / 46

What needs you is first, every time

Its own code, drawn over a made-up morning. Nothing is uploaded: your machine serves it, and a page opened while Tade is closed says it cannot reach it rather than drawing an empty room.

The away view’s overview on a laptop: the places down the left, five figures across the top — one needs you, three working, two queued, two checks red, $2.43 spent and how much of each plan’s limit is used — then the agent that wants approval with Allow, Deny, Done, Set aside and Tell on its card, and every project’s agents and queue down the right.The away view’s overview on a phone: the same five figures as two columns, the agent that needs you under them, and Overview, Agents, Tade and More along the bottom.

Outside & away38 / 46

Every press names the state it expects

The remote control, and it is off until somebody at the machine turns the away view on, then per device, then only from this machine or an https name you named — so a credential that crossed a network in the clear never buys an act. A device acts as a request, never as your own words.

One agent’s page in the away view: stripe-v15 wants approval to run Bash, with Allow Bash, Deny, Done and Set aside along the top, its checks red, three commits ahead and in no plan, then the last rows of its screen ending at `npm i stripe@15`, and a box to tell its agent something.The same agent’s page on a phone: Allow Bash, Deny and Done along the top, wants approval to run Bash, its checks red, three commits ahead and in no plan.

Outside & away39 / 46

Every plan, across every repository it spans

The window shows a plan beside the agent you have open. This is every one of them at once, read on a round rather than because an agent is in front of you.

Plans in the away view: two of six steps done as a ring, then each plan under way with its project, the workflow it is stamped from, what it has cost, a bar per step and the step working now.Plans on a phone: two of six steps done as a ring, and each plan under way with a bar per step and the step working now.

Outside & away40 / 46

What the morning cost, and what is left of each plan

Billed, priced at list and run on a plan are three figures, never one. What it cost is a grant: a device without spend sees the work and not the money.

Spend in the away view, for today: what was billed and what is priced at list kept apart, what ran on a plan and was not billed, the tokens and how many are unpriced, then each plan’s limits as gauges with when each resets.Spend on a phone, for today: billed and priced at list apart, what ran on a plan and was not billed, the tokens, and the first plan’s limits as gauges.

Outside & away41 / 46

The same floor, under a thumb

Tade is the middle of the tab bar, and what you say there reaches the conversation you type into at the machine — answered with its tools narrowed to that device’s own view.

Three phones: the overview with Overview, Agents, Tade and More along the bottom; the agent waiting on `npm i stripe@15` with Allow Bash and Deny; and the conversation with Tade, asked what needs me and answering with what it found.The conversation with Tade on a phone: you asked what needs me, it used a tool, and it answered that stripe-v15 wants to run `npm i stripe@15` — with a box to ask it something and Overview, Agents, Tade and More along the bottom.

Outside & away42 / 46

Every device, and a box per thing it may do

Taken back here, a box at a time — a device can never widen itself. A device granted nothing still answers what the away view is for: is anything waiting for me.

away-acting-grantedpaneldrawn by Tade
away-acting-grantedpaneldrawn by Tade
away-acting-grantedpaneldrawn by Tade

Outside & away43 / 46

Only the first switch is off, and it is the decision

Everything under it is on and still nothing to a device that was not granted it. tade web on writes the switch and takes effect the next time Tade starts; Settings in the window applies as you change it.

the switch3press one
settings-away-onpaneldrawn by Tade
settings-away-onpaneldrawn by Tade
settings-away-onpaneldrawn by Tade

Outside & away44 / 46

On this machine, or on the wifi

Two decisions, not one — and what anybody on the same network could read is said above the code. tade web says it whole, with the way out: tailscale serve, for HTTPS.

away-on-the-networkpaneldrawn by Tade
away-on-the-networkpaneldrawn by Tade
away-on-the-networkpaneldrawn by Tade

Outside & away45 / 46

Refused by absence, not by a flag

Six of them, and each is a mechanism rather than a promise. A sleeping laptop serves nothing, and the page never pretends otherwise.

  • Nothing is published, and no door is widened Publishing a workflow, turning a source on, granting an account, changing what a device may do, and any setting that widens what an agent may do or who may reach Tade have no route at all.
  • No agent is started from away steer is a message into a conversation already running, and reopen is never a new agent: nothing here starts one that never ran.
  • Nothing is pushed, merged or overruled Not a push, a merge, a check overruled or a command run, and no diff.
  • Nothing types into a lane An agent’s screen is its last rows as text, read while you look, with paths and keys taken out. What you tell it goes through steer or through Tade.
  • A sleeping laptop serves nothing No relay, no tunnel, no queue for later — and unreachable since 11:07 is never stopped: rows keep their state and their age freezes at the moment it was last true.
  • It is gone when the window closes The listener is in the window’s own process and dies with it.

Get it46 / 46

Install

One command, then tade.

Node≥ 22.19
gitany
tmuxoptional — agents that outlive the window
whisper.cpp, ffmpegoptional — speech
ghoptional — pull request state
ctrl+spacetalk
ctrl+ksearch
tabnext agent
ctrl+nnew agent
ctrl+tterminal
ctrl+/orchestrator