I usually have a handful of coding agents going at once: Claude Code in one terminal, Codex in another, a couple more on a server. They all run with permission prompts off (--dangerously-skip-permissions for Claude Code, --yolo for Codex), so they move fast.
The slow part was me, flipping through terminals to find which agent was waiting, which had finished, and which needed a decision.
Now the agents come to me. Every question, decision and "done" lands in one inbox on my desktop or phone, labeled with its agent and project. I answer, and the agent carries on.
handup in 34 seconds: the real app.
In my first ten days with handup, across 22 projects, my agents sent me about 1,700 requests (a few of them my own tests). That is 1,700 times I didn't have to go find the right terminal:
I get through them fast, from anywhere. On my phone I swipe each card: right to approve, left to deny. On the desktop it's Vim keys: j/ k to move, a to approve, d to deny, 1– 9 to pick an answer. Phone and desktop stay in sync, so whatever I answer on one is gone from the other.
Each request carries what I need to decide without opening anything else: the exact command, a diff, Markdown, images, video, audio, a PDF or a whole bundle of files. I can preview any of them right there, or open one in another app on either device. I pick a banner after seeing the banners, and approve a deploy after reading the command.
The answer goes straight back to the agent that asked, and it continues. When an update needs a follow-up, I type a reply under it ("looks good, now do the docs") and the agent picks it up as its next instruction.
When a lot is going on, I filter the inbox by agent or request type, or search by project, branch or session. Agents on other machines show up in the same list, each tagged with its computer's name.
Answering fast is only half of it. The real goal is to need fewer answers. Every decision is recorded, with my feedback, so the inbox doubles as a log of everything my agents couldn't figure out on their own.
AGENTS.md, so next time it decides alone. handup log) and suggest what to automate next.
The inbox is a feedback loop: each decision either unblocks an agent now or teaches it not to ask again. What's left over time is the stuff that really needs me.
handup gives each agent a few MCP tools: notify for updates and finished work, ask_question for choices only I can make, and request_approval before a consequential action. handup prompt prints a short instruction for your AGENTS.md or CLAUDE.md that tells the agent when to use which. Everything else, it just does.
handup setup # start handup and connect every detected agent
handup prompt # print the instruction for AGENTS.md or CLAUDE.md
handup pair # QR code to pair your phone
Your phone connects over Tailscale. If you keep permission prompts on, handup can answer Claude Code and Codex prompts from the same inbox too.
The agents were never the slow part. Finding them was, and answering the same questions twice.