Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
Back to tool/Back to issues
#3706·HelloGitHub

[Open Source] MulmoTerminal: colour and sound show which AI agent needs you

Author: isamuCreated Sep 15, 2026Updated Sep 15, 2026

Project URL

https://github.com/receptron/mulmoterminal

Category

JS

Project Title

Colour and sound show which AI agent needs you

Project Description

Run Claude Code, Codex, Antigravity, Grok, Muse and plain shells side by side in one browser grid. Colour plus a per-event sound means the session waiting on YOU is the one you notice, not the one printing the most. Local, tmux-backed.

Highlights

  1. It drives the CLI you already installed, rather than replacing it. MulmoTerminal is not an agent and has no model of its own: it starts the claude, codex, agy, grok or muse binary you already have, with your existing login and your existing subscription. There is no account to make, no API key to paste, and no proxy in the middle — the conversation goes from your machine to the vendor exactly as it does when you run the CLI by hand.

  2. Colour AND sound, from the agent's own hooks rather than from watching its output. Claude Code emits PreToolUse, Stop and Notification; MulmoTerminal reads those and shows working / needs you / done as three different colours. This matters because the two states that cost you the most look identical in a terminal: a session blocked on a permission prompt and a session still thinking have both simply stopped printing. Scraping the scrollback cannot tell them apart; the hook can. (Codex does not report blocked-on-input — its approval prompt is drawn in its TUI and never reaches the rollout file — so for Codex the grid shows working / done only. The tool says so rather than pretending otherwise.)

  3. Sound is the half that works when you are not looking at the screen. Colour only helps the eye that is already on the grid, which is exactly the eye you do not have when you are reading code in another window. So there are seven separate moments that can ring, and each one can carry its own sound file: finished (the turn ended), waiting (blocked on input), command-done / command-failed (a Run cell's exit code), session-exited (a PTY ended), worker-failed (a hidden background worker died — the only kind raised for a session with no cell on screen), and pr-ci-failed (a directory's PR went red). Give waiting one chime and finished another and you stop looking at the grid at all: you learn the difference between "come now" and "when you get a moment" by ear. Two of them — finished and waiting — also go to your phone as a Web Push, so the grid does not have to be open anywhere.

  4. Real PTYs behind tmux, so closing the browser is not closing the work. Every cell is a real pseudo-terminal in a tmux session. Close the tab, reboot the browser, come back — the sessions are still there with their scrollback. Because the UI is a web page rather than a desktop app, the same URL on your phone over the LAN is the same grid: you can approve a prompt from the sofa without installing anything on the phone.

  5. A cell does not have to be an agent. Claude Code, Codex, Antigravity, Grok and Muse all sit in the same grid, and so does a plain shell — so the place you watch your agents is also the place you run git log and npm test. Each cell can get its own git worktree, so several agents work on separate branches of one repository without stepping on each other.

  6. MIT, and it starts in one command. npx mulmoterminal@latest — Node 22.12+, and at least one agent CLI already on your PATH. Nothing is uploaded, nothing is installed globally.

Example Code

# Node 22.12+, with at least one agent CLI (claude / codex / agy / grok / muse) installed
npx mulmoterminal@latest
# opens http://localhost:34567 — up to 9 live sessions per page

A repository can carry its own look in a .mulmoterminal.json at its root, so each project is recognisable at a glance in the grid. This is the one MulmoTerminal itself ships:

{
  "badgeColor": "#1a1d75",
  "headerColor": "#2c30a5",
  "headerTextColor": "#ffffff",
  "cellColor": "#f2f2fb",
  "cellBorderColor": "#5156d6",
  "dotColor": "#5156d6",
  "buttonColor": "#cfd0f7"
}

Screenshots or Demo Videos

https://www.mulmoterminal.com/

Guide (Japanese): https://zenn.dev/singularity/articles/mulmoterminal-guide-ja

Source: 521xueweihan/HelloGitHub

View original on GitHubView discussion on GitHub