Discover MCPs & agents
Loading MCPs and agents…
Loading MCPs and agents…
Mission control for parallel Claude Code & Codex sessions — a live grid of coding agents that glow when they need you, across multiple accounts, resumed after restart.
From the repo.
Humans and Agents Code. Run many Claude Code sessions at once in a live grid — each cell glows the moment its agent needs you, across multiple accounts, and the whole board resumes after a restart.
🔥 v0.5.0 — A macOS build that actually opens. The
.dmgis now ad-hoc signed, so it launches after you clear quarantine instead of dying with a "damaged" error. Plus: sessions from all your Claude accounts show up in resume, each tagged with the account that owns it and the swap journey it took. Download · Release notes🧭 Built for Claude Code today, designed for more. The vision is to make agentic coding — Claude Code, Codex, any harness — dramatically more productive by giving you one place to command a whole fleet of agents. Claude Code is the first fully supported harness.
When you run more than one or two coding agents, the terminal stops scaling. You lose track of which session is waiting on you, which is mid-task, and which folder each one belongs to — and closing the window loses the lot.
HNA-Code is a desktop app that turns that chaos into a board. Every cell is a real terminal running claude, laid out in a grid you choose. A cell glows the instant its agent finishes a turn or needs a permission — so you tend the ones that need you and let the rest work.
The board is stateful. Close the window — or restart your whole machine — and reopening loads every session back, in the same order, each resumed exactly where it left off in its own folder, with its name and glow intact. You move fast with a dozen agents and never lose your place; a reboot costs you nothing.
And because heavy users run more than one Claude subscription, HNA-Code makes accounts first-class: it auto-detects your Claude config directories (your work sub, your personal sub — add more anytime), shows which one each cell is running as, and lets you port a live session to another subscription with one click — so when one account hits its usage limit mid-task, you carry the whole conversation over and keep going.
Glow when a session needs you. In the board above, a cell glows amber the moment its agent finishes and is waiting on you, and jumps to the top of the needs-you sidebar. Breathing blue means it's blocked on a permission. Type into a cell and its glow clears.
Broadcast types once and sends to every cell (Ctrl+Shift+B). Kick off the same task in every agent, or clear a prompt like Claude's "trust this folder?" across the whole board at once — no clicking through twelve windows.
Landscape layouts (2×4, 3×4, 4×4) for a normal monitor, portrait layouts (6×2, 8×2, 4×2, 6×1) for a vertical one. Shrinking the grid never kills a session — orphaned ones fold into tabs.
Every window is stateful and scoped to its folder. Close one — or restart your machine — and reopening loads all its sessions back, in the same order, each resumed where it left off. Track and reopen windows per folder from the dropdown. You move fast with a dozen agents and never lose your place.
HNA-Code auto-detects your Claude subscriptions — a work login, a personal one — and you add more here. Each cell badges the account it runs as; click the badge to port a live session to another subscription when one hits its usage limit, and keep going where you left off. Settings is also where you enable glow, attach a sound to "done" / "needs permission" (so you hear which board to return to), pick a theme, and turn on the performance view to spot heavy sessions.
Recolour the whole app — graphite, Claude, midnight, or light — and flip on per-cell CPU / RAM to see which sessions are working hardest.
Agentic coding is fast, but a single agent leaves you waiting on it. The obvious move is to run several at once — and that's exactly where the plain terminal falls apart:
claude --resume, in each session's own folder.It's not a headless orchestrator that runs agents for you — it's the command surface that keeps you in the loop over many agents at once.
Grab a build from the Releases page: macOS .dmg (Apple Silicon), Windows .exe, Linux .AppImage.
You'll also need Claude Code installed and on your PATH (claude).
If a download won't run, or you'd rather not touch the OS warnings below, skip them and run from source:
npm install && npm start. It's the same app.
The builds aren't notarized (this is a free, open-source project with no paid signing certificate), so your OS warns on first launch:
xattr -dr com.apple.quarantine /Applications/HNA-Code.app
That command only removes the "downloaded from the internet" tag Apple adds; it doesn't modify the app. Not comfortable running it? Run from source instead. Intel Macs aren't covered by the DMG yet, so run from source there too..exe: click More info, then Run anyway. Prefer not to? Run from source.npm install
npm start
Works on any platform (Apple Silicon or Intel Mac, Windows, Linux) with no OS warnings, since you're building it yourself. Glow and resume work out of the box: the app installs its Claude Code hooks on startup and learns each session id as it starts.
claude --resume in its own folder, with its name and glow. Your progress is never lost.claude. Landscape layouts (2×4, 3×4, 4×4) for normal screens and portrait layouts (6×2, 8×2, 4×2, 6×1) for a vertical monitor. Shrinking the grid folds orphaned sessions into tabs instead of killing them.Ctrl+Shift+B) — kick off the same task everywhere, or answer a prompt like "trust this folder?" across the whole board in one keystroke.CLAUDE_CONFIG_DIR profiles (work + personal), badges each cell with the account it runs as, and ports a live session to another subscription on click — your escape hatch when one hits its usage limit. Add or hide directories and set per-account colours in Settings.settings.json; only HNA-Code's entries are touched, and you can disconnect. Electron main each cell
- one PTY per cell (runs claude) <shell> -> claude --resume <id>
- 127.0.0.1 signal server (+ per-run token) |
- per-window state (layout, names, glow, | hook POSTs {cell, session_id, kind}
sessions, account binding) v
Renderer signal.sh / signal.ps1
- xterm.js grid, glow, sidebar, settings (SessionStart / Stop / idle / permission)
CC_CELL_ID, the signal server's port + token, and — for a profile-bound cell — its account's CLAUDE_CONFIG_DIR.src/hooks/signal.sh, or signal.ps1 on Windows) posts {cell, session_id, kind} back to the app on SessionStart, Stop, idle, and permission. That's how the app learns each cell's session id race-free and knows when to glow.See docs/ARCHITECTURE.md for the full design.
2.1.x. Glow and resume rely on the hook schema (SessionStart, the Notification matchers idle_prompt / permission_prompt, Stop, and claude --resume). If a future release changes them, glow degrades gracefully rather than breaking. PRs that widen the tested range are very welcome.npm test
Every feature is verified by driving the real app with Playwright (screenshots plus terminal-buffer assertions).
| Test | Covers |
|---|---|
test/hooks.cjs | settings.json merge preserves your own hooks; idempotent; clean uninstall |
test/smoke.mjs · test/grid.mjs | live terminals, real PTY round trip, layout switching |
test/signal.mjs · test/glow.mjs | hook round trip, cell correlation; done→amber, permission→blue, keystroke clears |
test/persist.mjs · test/settings.mjs | autosave/resume of names, glow, sessions, cwd; settings survive restart |
test/multiwindow.mjs · test/tabs.mjs · test/workspaces.mjs | multi-window, tab stacking, per-folder windows |
test/sidebar.mjs · test/home.mjs | needs-you-first sidebar; first-run home page and recents |
test/import.mjs · test/import-manual.mjs | one-click import and the cross-folder Settings importer |
test/accounts.mjs | multi-account: discovery, switch, source-of-truth/dedupe, empty-cell handling |
test/overflow.mjs | staggered bulk resume and the overflow prompt |
npm run pack:mac # macOS: dist/HNA-Code-<version>.dmg + .zip (run on a Mac)
npm run pack:portable # Windows: single-file portable .exe
npm run pack:linux # Linux: .AppImage
Each OS builds only its own installers, so cross-building happens in CI: pushing a vX.Y.Z tag runs .github/workflows/release.yml, which builds unsigned artifacts on macOS, Windows and Linux runners and attaches them to the GitHub Release — free, no store fees. Code-signing (to remove the first-launch OS warning) is optional electron-builder config, not required for a personal or OSS build.
Issues and pull requests welcome. Good first areas: widening the tested Claude Code version range, more layouts, packaging, and support for additional agent harnesses.
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.