local-first · no account · shipping now

Every agent. One canvas. Now on every device.

Marshal is an infinite canvas where your coding agents work together — and the first one you can share live, across machines and people, down to the phone in your pocket.

macOS · Windows · LinuxMIT open sourcelocal-first
~16k
lines of TypeScript
570
test assertions · 35 files
3
operating systems, CI green
0
uses of "as any"
01The new bottleneck0x01·WHY

Agents outgrew the terminal tab.
Then they outgrew your desk.

One agent was a tab. Five are a pile — alt-tab archaeology, lost context, no shared picture of who is doing what, or why. A canvas fixes that, and tools like Maestri proved people want one.

But the moment work is agentic, it is also remote. The agent hits a question at 11pm and you're on a train. A teammate could unblock it in seconds — from another machine, another OS, another city. Every canvas today stops at the edge of one machine.

✕ Without Marshal

  • 01 Nine terminal tabs and a memory of which is which
  • 02 Agents can't reach each other — you are the message bus
  • 03 Two agents edit the same file and nobody notices
  • 04 Leave your desk and the work stops with you

→ With Marshal

  • 01 Every agent visible at once, spatially, on one canvas
  • 02 Agents message each other over a real protocol, not your clipboard
  • 03 File collisions surface the moment they happen
  • 04 Hand the session to a phone, a teammate, another OS — live
02Unified module grid0x02·MOD-GRID

A canvas that actually
runs the agents.

Real PTYs, real processes, real output. Not a dashboard about your agents — the place they live.

MOD-01

Terminal

A real PTY per node, running any CLI agent — Claude Code, Codex, Gemini, opencode, or a plain shell.

MOD-02

Note

A shared scratchpad any agent can read and write with marshal note.

MOD-03

Board

A kanban the agents move their own cards on, so the plan stays where the work is.

MOD-04

Sketch

Pencil and eraser on the canvas. Connections route around obstacles instead of through them.

MOD-05

Portal

An embedded browser pane, sandboxed away from the OS, pinned beside the agent that needs it.

MOD-06

Chief

The overseer. Watches the swarm, verifies a real clash, and acts under a server-enforced autonomy mode.

Shipped

Agents that talk to each other.

Each terminal gets a marshal command on its PATH and a private line to a loopback server. One agent delegates to another by name — no API keys, no glue, no piping raw terminal output between processes. Connections gate who may talk.

$ marshal ask "reviewer" "check the diff in src/auth" → delivered to reviewer
ask — send a prompt into another agent's terminal, by name
Shipped

An overseer that can't talk its way past its permissions.

Chief's autonomy mode is enforced on the server, keyed to its terminal id, never to its prompt. Flip it live — and an agent cannot argue its way around it.

chief: requesting approval — dismiss scout-2? [y/N]
Shipped

Cross-platform, by construction.

Electron, not Mac-only. Every push builds and packages an installer on all three operating systems. The incumbents in this space are Mac-native. That is the whole reason this exists.

WIN

NSIS

ConPTY

MAC

DMG

arm64 + x64

LINUX

AppImage

x64

03The floor above0x03·PLATFORM

Share a live session.
Anywhere.

Scan a code and your agent session opens on another device — live, over any network, on someone else's OS. This is the part nobody else has.

marshal · build floor
Cchief
Read(src/relay/session.ts) └ 214 lines ✳ waiting on the phone…
Sscout-2
23 passed · 3.1s $ git diff --stat src/relay/quic.ts 41 ++++
chief → scout-2
SAY ALOUD481 · 227
1 scan the code 2 read the pairing code 3 live
chief · orchestrator
shared floor · owner on Windows
Edit(src/relay/session.ts) · +41 −12
Reconnect backoff is in. The handshake still runs over a raw DataChannel — want me to port it to QUIC before I merge?
Which transport should I target?
Reply to chief…
Shipped

Not read-only. Actually interactive.

Send messages, answer the agent's multiple-choice prompts as tappable buttons, hit Ctrl-C, and spawn a new terminal that runs on the owner's machine. From a phone, on cellular.

Shipped

Your agents, as a chat.

On mobile a session opens as a readable conversation — turns and tool calls — instead of a cramped 80-column terminal mirror you have to pinch around.

In progress

Your whole workspace, in your pocket.

Workspace → Floor → terminals, notes, browsers, boards. Two devices hold one workspace, each keeping its own floor. Multi-floor is landing now.

Shipped

The owner stays sovereign.

Sharing is consent-gated and off by default. Two factors guard every session — an unguessable link plus a pairing code you read aloud — and wrong codes lock the door. Permissions are enforced on the owner's device, not the viewer's. Stop sharing and every paired viewer is signed out at once. The OS of each floor is always visible, because a macOS command is not a Windows command.

04Trust infrastructure0x04·TRUST

Who did what.
And on whose machine.

Agent-activity monitoring surfaces risky actions as findings pinned to the exact node that caused them, with a forensic timeline per session.

Cchief
Edit(src/relay/session.ts) └ +41 −12 · 14:02:11
Sscout-2
Edit(src/relay/session.ts) └ uncommitted · 14:02:19
⚠ collision · src/relay/session.ts
14:02:11Edit(src/relay/session.ts) — chiefShipped
14:02:19Edit(src/relay/session.ts) — scout-2
14:02:19finding raised · same file, 8s apartNumbat — integrating
Integrating

Findings on the node

Secret reads and unexpected network egress surface where they happened — not in a log you'll never open.

Integrating

A forensic timeline

Every session keeps an ordered record of what the agent actually did, so a finding can be traced back to its cause.

Integrating

Built on Numbat

Perplexity's open-source agent-security engine, Apache-2.0. We're wiring it in — it is not shipped yet, and we'd rather say so.

05End-to-end pipeline0x05·PIPELINE

One event stream
per session.

The design decision everything else hangs off: agents never pipe raw terminal output into each other. Every session emits one ordered stream — raw bytes plus structured turns — and everything downstream is a subscriber.

The stream

Raw PTY bytes for fidelity, structured turns for readability. One sequence, durably recorded on your machine, so a viewer joining late catches up without a gap.

Permissions at the owner

Gating happens on the machine that owns the process — keyed to identity, never to a prompt. A viewer cannot grant themselves anything the owner didn't.

Transport ladder — free first, always
direct — two devices, one network, zero middlemen

Local-first. Your sessions live on your machine. We host nothing, and there is no account to create.

06Program0x06·PROGRAM

Honest about
what isn't built.

Three things we're building toward. None of them ship today, and none of them are on the page pretending otherwise.

NEXT
Planned

Cross-user workspaces

Contribute a floor to someone else's workspace and keep ownership of your own machine's processes.

LATER
Planned

Continue in the cloud

A session keeps running when your laptop sleeps. Credit-metered — and this is the business model, stated plainly.

LATER
Planned

Agent-to-agent context pull

Hand one agent another agent's accumulated understanding, instead of re-explaining the codebase from scratch.

07Receipts0x07·RECEIPTS

No testimonials.
The repo is the proof.

marshal · receipts — every push

Every line above is checkable by cloning. MIT — go read it.

MIT · built in the open

Your agents already work everywhere.
Now you can be everywhere too.