blog /
Tade Away: the control room, on a phone you paired
Agents run for hours, and nobody should have to sit with them. Tade Away puts the control room on a phone you paired, served by the Tade window itself.
An agent that runs for three hours spends most of them not needing you, and
then one minute needing you badly: it wants to run npm i stripe@15, and it
waits. That minute is the reason people stay at the laptop, and it is a poor
reason.
Tade Away is the control room above your agents, from a phone or another machine you paired at it. The window on your own machine serves it, to devices you let in one at a time, and to nobody else. Inside Tade it is called the away view, which is what the panels below say.
It is on Tade’s main and not in tade-sh 0.1.1, which is what npm installs
today and was packed on 2 October. Until a release carries it, the way to it is
the source rows at the foot of Install.
Why it exists
A run that takes the afternoon is ordinary now, and what it needs from a person is small and badly timed: an approval, a sentence of direction, a yes to work that arrived from outside. None of it needs a keyboard. Until now, all of it needed you at one.
The usual answers are both worse than the problem. Leaving the lid open and walking back to look is a person polling. An SSH session and tmux on a phone put ANSI rows on a 390-pixel screen, and that is a terminal you can type anything into, from anywhere, as you.
So Tade Away is a page and not a terminal, and it is built round one question: is anything waiting for me. Nothing on it types into an agent. What you say goes through Tade, and what you do is one of a short list of acts the page names.
What it is
It opens on every project at once: what needs you, what is working, what is queued, how the checks stand, what the morning cost and the plan limit that runs out first. Under that is the work that wants somebody, with the presses that device was granted right on the card — Allow, Deny, Done, Set aside, Tell. Down the side is each project’s agents and its queue, hung as a tree of what waits on what, and Tade is docked at the foot. An agent’s page opens on what it is doing now, with its checks, branch, spend and plan beside it. On a phone the same pages sit behind a tab bar, and the middle of the bar raises the conversation with Tade.
The picture is not a screenshot. Tade draws it the way it draws its own window: the page’s own code, run over a made-up morning, with the page’s own stylesheets, laid out by the browser you are reading this in.
What it is not is a cloud dashboard. There is no account, no relay and no tunnel. The listener is in the window’s own process, so close Tade and nothing is listening, and a bookmark tapped then is the browser’s own connection error rather than an empty control room. A sleeping laptop serves nothing either, and the page says so instead of going blank:
Unreachable since 11:07. The machine may be asleep, or Tade may be closed. What is below is the last thing this device was told — not what is happening now.
How it works
A device is let in at the machine
a and d that answer a tool call.The window draws a code. The phone scans it, names itself and asks, and the
answer is a keypress at the machine — a or d, the same keys that allow or
deny what an agent asks. The code carries a ticket that lasts ninety seconds
and is spent the moment it is presented, so a replay finds nothing; the ticket
is in the code’s fragment, so a typed address cannot pair at all. On a
computer, the link under the code does what scanning does.
The line at the foot of that panel is the one nobody wants to write: an agent on this machine could pair itself. Agents run as you and nothing sandboxes them. What stands against it is that the panel lists every device there is, every act is journalled under the device that took it, and Disconnect everything needs no network.
What each device may do is decided per device
A yes is full access, and the card says so before you press it: every project, everything the page can read and everything it can do. Each row then takes back what you did not mean, a box at a time — answer and steer, stop agents, close projects, talk to Tade, change settings, see screens, read settings — and full access turns the lot on or off at once. Two devices are two decisions: the kitchen screen can read names and counts while your phone answers agents.
With every box empty a device still reads the names of your projects, the names and states of their tasks, the counts, and how fresh it all is. That is enough to answer the question the page exists for, which is the test of whether it is the right floor.
Granted, a device can answer what an agent is waiting on, tell a running agent something, hold, release or reorder queued work, set a task aside or pick it back up, write a note, add a line to what a task’s agent is told, mark work finished with two presses, and approve a request a rule here already allowed. With boxes of their own it can stop or reopen an agent — never start a new one — and close or reopen a project. That is twelve acts, each naming its target and the state it expects, and the window checks that state again at the moment of acting.
What no device can do in any configuration: change who can reach Tade or what a device may do, read a credential, run a command, start an agent that never ran, push, merge, overrule a check or publish a workflow. Those are not switches that happen to be off. There is no route for any of them.
The live view
The page is live: one stream from the window, advanced on its own beat of about
two seconds, and the header says live · as of 14:00:04 so nobody has to guess
how old a number is. With nobody looking, the beat builds nothing.
An agent’s screen is its own grant — see screens — and it is the last lines of that agent’s terminal, read only while somebody has the page open. Machine paths, the keys Tade holds and anything shaped like a credential are taken out of it. Anything else an agent printed is not, which is why the box is there.
Talking to Tade
A device granted it can talk to Tade from the same page, and the window says what that means in one paragraph rather than leaving it to be guessed:
A message from a paired device reaches the same conversation you type into, and is never your own words: it cannot authorise a setting change, however it is phrased, and nothing it says reaches a line you said.
While Tade answers one, its tools are narrowed in code to reading that device’s own view of your work plus the few acts it was granted, and every other tool it holds is refused — including the harness’s own shell. A closed list is what makes free text to a model safe, and a paragraph asking the model to behave is not. The device’s words stay in the transcript at the machine, marked as that device’s.
Notifications
Put on a phone’s home screen, the page can be told when something wants you. Every notification goes through the push service that phone’s browser chose — Apple’s, Google’s, Mozilla’s — which sees that something was sent, when and how big, and cannot read it: it is encrypted to a key the browser keeps.
One thing wanting you is named, as in api-v2 wants your answer, when the device may read titles and Get work names in them is on, which it is by default. Several are a count and never a list of names. Turn that setting off and every notification is a count. They are sent by the window on its own beat, so a closed window or a sleeping machine sends nothing, and nothing is caught up: a window that comes back says what is true now rather than six things about last night.
The protocol is tested against a stand-in for the push service. Delivery to a real phone is a manual check, and nothing in the repository records it being done yet.
The security model, in plain words
- Nothing is served unless you turn it on. The switch is off until you press it, and off means no listener at all. On, the listener lives in the window and answers this machine alone until you choose otherwise.
- A session belongs to the host it was made on. The address a device paired at is compared byte for byte, so the same machine under another name, or on another port, is a new pairing rather than a session that wandered over.
- Acting needs this machine or an https name you trusted. That is asked again at every act. A plain-HTTP address on your wifi reads and nothing more, whatever was granted — a phone granted everything and carried onto somebody else’s network does nothing until it is back. No forwarded header is ever read: a proxy is trusted by being named, never by what it writes.
- Every act is journalled under its device. The refused ones too, and every turn of a conversation, so who did this always has an answer that is not the owner.
How to try it
Turn it on. Settings › Away view › Serve the away view. It applies as you
press it, and the code appears under the switch. The strip at the foot of the
window says remote off until then and remote 1 once a device has a page
open, and pressing it brings you back to this switch.
tade web on writes the same setting from a shell, and says it takes effect
the next time Tade starts — the window does not watch its config file, so the
switch is the quicker of the two. The rest of the shell’s half reads:
tade web # what is on, where it listens, who is paired
tade web devices # every device, and what it may read
tade web revoke --all # disconnect every one of them; needs no network
Scan the code. Name the device on its own screen, then press a at the
machine. On this machine, open the link under the code instead. At home,
Who can reach it: lan puts the page on your wifi — in plain HTTP, which
anybody on that wifi can read, and so read-only whatever else is on.
Take it with you over Tailscale. This is the way to reach it from
somewhere else, and it is a smaller surface than lan:
tailscale serve localhost:7654
That gives the phone https on your tailnet while Tade keeps listening on this machine alone. Put the tailnet name in Settings › Away view › Trusted hostnames — Tade answers only its own addresses and the names listed there, and an https name listed there is the only origin off this machine that may act. The code then points at that name, so scan it again and the phone pairs there, with a session bound to the address it will keep using.
What moved since the switches post
The away view, and the switches in front of it is the long version of every setting, and it is true as of 12 October. Three things have moved since. A yes at pairing grants everything and the rows take it back, where it used to grant reading and nothing else. The switches under the first are on and apply as they change, each still nothing to a device until that device is granted it. And there are twelve acts, not eight: stopping and reopening an agent and closing and reopening a project each arrived with a box of their own.
What has not moved is the shape. The window serves it, a person at the machine lets each device in, and the list of what a device may do is a closed one.