A desktop app that runs AI coding agents in real terminals on one infinite canvas, lets them send prompts to each other directly, and streams any session live to a phone or another machine.
Marshal is for developers who run several AI coding agents at once and end up passing context between them by hand, usually through a shared markdown file one agent writes and another reads. Each agent gets a real terminal on a canvas, a marshal command on its PATH, and a local server that delivers its messages — but only between terminals the user has connected with a drawn line, so the canvas itself is the permission model. I set the rules and made the calls — what counted as done, which security trade-offs to take, when a feature had to be shown working live before we could say it worked — and Claude Code wrote nearly all of the implementation: the terminal layer, the messaging server, a WebSocket server and client written from scratch, and the phone viewer. We ran several Claude sessions in parallel with distinct roles (one building, one verifying, one coordinating), so the tool was managing the sessions that were building it. The remote layer streams a session straight from the owner's laptop through a tunnel, gated by a six-character pairing code on top of the link, with remote control off unless the owner switches it on.
Mirroring the terminal screen to phones failed for a reason we didn't expect: coding agents draw their interface in the terminal's alternate screen buffer, which has no scrollback, so the mirror showed the current frame and no history. We switched to parsing the agent's own transcript log and rendering it as a chat, which reads better on a phone than a faithful mirror would have.
I wrote each task as a short spec with acceptance criteria and an explicit scope fence, and the standing rule was to stop and ask when the spec contradicted itself rather than guess. Nothing counted as done from reading code - every feature had to be exercised live with the output seen. Finished work then went to a second session prompted to attack it, which caught real bugs the building session had missed.