Run multiple coding-agent sessions in parallel — and see which one needs you.
$ npx -y skills add receptron/mulmoterminal --agent claude-code
English · 日本語 · 简体中文 · 繁體中文 · 한국어
Run multiple coding-agent sessions in parallel — and see which one needs you.
A browser terminal for parallel AI coding agents: several sessions side by side, each in its own cell, with the one that needs you marked in colour. Claude Code is the default and six more CLIs are first-class — Codex, Antigravity, Grok, Muse, GitHub Copilot CLI and Cursor CLI. Vibe coding with a single agent needs nothing but a shell — this is for when you run several and lose track of which is waiting. Sessions survive a reload (tmux), work isolates in git worktrees, and a phone push reaches you when a turn finishes.
Every cell is a real pty. htop, lazygit, a dev server and Claude Code are the same kind
of object here — which is why the one-session-per-worktree limit applies to agents only, and
a shell or a yarn dev launcher can sit in the same worktree an agent is working in.

The grid, live — each cell coloured working, done or needs you.
https://github.com/user-attachments/assets/0b8dd582-6c0d-4be3-b0b4-3740ad0bdba6
90 seconds, with sound: one agent, then a grid of them. Zoom into one and the roster still holds what every other session asked, answered and did, so you go to whichever is lit and lose nothing catching up.
When you ran one coding agent, the slowest thing in the room was the agent.
Now that you run five, the slowest thing in the room is probably you.
One of them is always stopped. A permission prompt. A question. Until you notice, it does nothing at all.
MulmoTerminal puts every session on one screen. Blue is working. Green is done. Amber is waiting on you.
You stop hunting. You go where the light is.
The other kind of slow is: what did I even ask this one? The roster keeps one line per session — what you asked, and what came back. Nothing left to remember.
When one is done, you don't go looking for its window. Click its row — the next order goes in right there.
Then you pick the next one from whatever is lit. Click, answer, move on. You never go looking — the roster tells you.
We built MulmoTerminal for exactly that: not to watch agents, but to triage them.
That is the whole install.
The complete guide, Parts 1-5 — getting started, making it your workspace, agents that hand you a screen, power features (seven agents at once, several subscriptions, shortcuts), and going further into cells that talk to each other, git worktrees and the command palette. Chaptered, so you can jump to the part you need.
MulmoTerminal turns Claude Code — and six other agent CLIs —
into a parallel, observable workspace: many agent sessions at once in a grid, each one
color-coded so you see at a glance which are working, which need you, and which are
done — plus rich GUI output, git worktrees with one-click PRs, cost readouts, and a
ping to your phone when a task finishes. One npx command, no Electron, no config.
npx mulmoterminal@latest # starts on http://localhost:34567 and opens your browser
Requires Node ≥ 22.12, and by default the claude CLI —
on your PATH or named by CLAUDE_BIN, already logged in. Declare a different default agent
(--agent codex, or "defaultAgent" in ~/.mulmoterminal/config.json) and start-up checks that
one instead. npx mulmoterminal@latest init reports what it can't find. On an older Node it stops
before starting the server, with a banner and the upgrade commands for however that Node was
installed.
Running agents in parallel was never the hard part — tmux does that fine. What gets lost is which of them is waiting for you. A pane is opaque: working, finished and blocked-on-a-permission all look the same until you read it. Here every cell reports its state back to one grid — working (blue), done (green), needs you (amber) — with a chime when one goes amber off-screen, and a cockpit roster of one line per session so you can answer one without losing your place in the other four. It runs on tmux when you have it, for persistence across restarts.
Built by receptron — Satoshi Nakajima, software architect for Windows 95 at Microsoft, and Isamu Arimoto; the same two behind GraphAI. More ↓
tmux, every session survives a server crash,
restart, or node --watch reload — a mid-turn agent, a long build, a dev server all keep
running and reattach when you come back. A crashed server is restarted for you, so the
tab you left open finds it again.prod in red,
staging in amber), a configurable header (buttons + info chips), custom attention sounds,
and Run / Skill / Mulmo menus to launch a project's scripts, .claude/skills and decks right
inside a cell.
The grid is a cockpit for parallel agents — here, four live Claude sessions, each in its own color-coded project. Every cell's header carries what you need to triage at a glance: model · context %, token counts (⇡in ⇣out), the git branch / changes chip, and an AI summary of what the agent is doing. A cell's border color signals state — working (blue), done (green), needs-you (amber — e.g. waiting on a permission), idle — with an attention chime so a stuck cell off-screen still pulls you back. Supervise many; only step in where you're called.

Zoomed in, the cockpit roster replaces thumbnails with information: every session as a text row — directory, AI summary, your last prompt, the agent's latest reply, a status word, and the branch's PR phase badge. A row whose agent is waiting on you rings amber and blinks; one that has merely finished rings green and stays still (Settings → Waiting rows turns the movement off). Click a row to swap the enlarged terminal.
Each session runs as a real PTY on the server (the agent CLI in a pseudo-terminal) and is streamed to an xterm.js terminal in the browser over a WebSocket. The cockpit roster lists every session and reflects, in real time, which are working (the agent is thinking, a spinner), which are waiting on you (a permission prompt or a question — an amber dot; nothing proceeds until you answer) and which are finished with output you haven't seen (a green dot) — driven by the activity each agent reports; claude's hooks are injected per spawn. The horizontal tab bar carries the same two dots.

To focus on one agent, zoom its cell: it takes the window, and the GUI panel ("Canvas") opens beside it, where that agent's tool calls render as documents, forms, charts, images, and HTML rather than printed text. The app opens on the grid (/, settling on /terminals), which is the only view; 3.x had a separate single view at /chat and 4.0.0 removed it, so that URL now lands on the grid like any other.
Inserting a file path — like a native terminal, you can put a file's absolute path into the prompt: drag a file onto the terminal, or click the file button in the terminal header, which asks the local server to open the OS file dialog and inserts the chosen path. The path is inserted at the cursor — it is not submitted, so you can review it first.
A drag inserts the file's own path where the browser exposes one via file://
(Firefox/Safari), so editing it afterwards edits the file you dropped. Where the browser
withholds it — Chrome, and every browser when MulmoTerminal is open from another
machine, where a local path would name nothing on the host — the file's bytes are sent
instead, saved to a private per-session directory under the OS temp dir, and that path is
inserted. The session is granted that directory at launch (Claude Code's --add-dir), so the agent reads it without a permission prompt; the copies are removed
when the session ends, and any left by a crash are swept at the next start. Up to 110 MiB per
file — the same ceiling as a phone attachment. A session already running when you upgrade
was launched without that grant, so drops into it still prompt; new sessions don't.
Pasting a screenshot — take a screenshot and paste it straight into the terminal
(Cmd/Ctrl+V). The image is saved to the session's own drop directory — the same place a
dropped file goes, with the same grant, the same 110 MiB ceiling and the same cleanup when the
session ends — and its absolute path is inserted at the cursor, so the agent can read it.
Unlike a drop, this does not need the browser to expose a path — the bytes are on the
clipboard — so it also covers Chrome, where dropping a file cannot insert a path. It works
wherever the browser puts the image on the clipboard as image/png, image/jpeg,
image/gif, or image/webp. Anything else is left to the terminal's own paste handling,
mulmoterminal is a Claude Code plugin with 74 hand-picked skills, indexed on Flowy in the Agent Orchestration category. Install it with the command on its page. It includes apply, survey, answer. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it