DEV Community

Ark0N
Ark0N

Posted on

I built mission control for my AI coding agents

Codeman showing Subagents popping up

As a Poweruser you never run just one coding agent. You run several at once, spread across shells, windows, and machines, with no good way to keep track of them all or reach them from wherever you are, phone included. That's why I built Codeman!

So yes, this is, unavoidably, a promotion post. What it promotes is 100% free and Opensource: Codeman is self-hosted, MIT licensed, no telemetry, and everything below runs on your own hardware.
Been working on it for half a year now, about 1,500 commits and 13 contributors in, and it's the tool I use every day!

One box runs everything

Every session is a plain tmux session, nothing locks you in: you can still ssh into the box and attach from a terminal the way you always have. Codeman gives you that same live session in the browser instead, from any device. Close the browser tab, close the laptop, the agents keep working; open a browser later and you land back in the same conversations with full scrollback.

Codeman installs once on a machine that stays on: a Mac mini, Linux box, a Windows machine via WSL, or a VPS. That box becomes home base. It spawns each CLI (it supports Claude Code, OpenCode, Codex CLI, and Gemini CLI) inside a persistent tmux session and streams the real terminal to any browser with xterm.js over SSE. It can also create Dockers for each Case!

What you see in one place

Codeman dashboard: session tabs across cases, one-click parallel sessions, live plan-usage chip

The dashboard is dense on purpose:

  • Every agent is a tab, every project is a case. Each running agent is a tab named w1-myproject, w2-myproject... so everything running across every project sits in a single row, with live status per tab: working, waiting for input, idle, paused on a usage limit.
  • A blinking tab tells you where you're needed. When a session goes idle its tab starts blinking yellow; when it's stuck waiting on an answer it blinks red. One glance at the tab row replaces cycling through half a dozen terminal windows to find the agent that stopped.
  • Real terminals, not summaries. Each tab is the actual TUI, streamed live, scrollback included. What you'd see over SSH is what you see here.
  • Plan usage at a glance. A header chip shows how much of your 5-hour and weekly Claude plan windows you've burned, live, so you know whether you can afford to queue another big run tonight. The host's CPU and RAM sit next to it, which matters when one box is running five agents and a build.
  • Subagents become floating windows. When an agent fans out into subagents, each one pops up as a small floating window tethered to its parent session tab by a connector line. You can peek into any worker, drag the windows around, or minimize them back into the tab.
  • Files without leaving the browser. A built-in file browser and viewer shows what an agent just created: code, images, videos, PDFs, Office docs, previewed in place, and any of it downloads straight to the device in your hand. Checking a screenshot the agent generated no longer takes an SSH round trip.
  • An away digest. One click answers "what happened while I was gone": which sessions need attention, which finished, which are still running.

Here's the subagent fan-out live, each worker in its own window with per-agent token counts:

Subagents popping up as floating windows tethered to their parent session tab by connector lines

Better than any mobile SSH client

I'll say it plainly: checking on agents from Codeman on a phone is better than any SSH client I've tried, because it isn't general-purpose terminal access. It's tailored to AI coding agents like Claude Code:

Codeman on a phone: real terminal with the keyboard accessory bar

  • QR login. The desktop shows a single-use QR token (60-second TTL); scan it and the phone is in, so you never type a password on a touch keyboard.

  • Zero input lag. Over a tunnel, a keystroke normally takes a 200-300ms round trip before it appears. Codeman renders it instantly in a Mosh-inspired local echo overlay and hands off invisibly when the real echo arrives. (This was the hardest single feature: Claude Code's TUI repaints constantly and corrupts anything injected into the terminal buffer, so the overlay lives as a DOM layer on top of xterm.js. I published it as a standalone npm package, xterm-zerolag-input.)

  • Push notifications. The moments that need a human (a permission prompt, a question from the agent) buzz the phone; tap, land in the session, answer, done.

  • Swipe between sessions, voice input, and an accessory bar for keys phones don't have; destructive slash commands need a double-tap.

For access from outside the house I point Tailscale at the loopback bind; a bundled script can also open a Cloudflare quick tunnel.

It keeps working when you leave

Autonomy is where the always-on box pays off. Multi-layer idle detection (completion messages, output silence, token-count stability, an optional AI check for ambiguous cases) notices when a session has genuinely stopped and re-prompts it. Long runs poison themselves with bloated context, so around 110k tokens Codeman triggers /compact and around 140k it does a full /clear plus re-initialization. A circuit breaker watches for no-progress loops and trips instead of burning tokens all night. There's a built-in overnight-autonomous preset that tunes all of this for unattended runs.

And the real overnight killer has its own fix. On subscription plans, Claude Code halts mid-run with:

5-hour limit reached ∙ resets 8pm
Enter fullscreen mode Exit fullscreen mode

Codeman recognizes that message (every phrasing variant shipped so far), parses the reset time, waits it out with a safety buffer, then dismisses the dialog and continues the run. A session that hits the wall at 1am picks itself up at 3am instead of stalling until breakfast. Combined with the usage chip, you both see the limits coming and survive hitting them. It's opt-in per session, because auto-consuming your quota the moment it resets should be a deliberate choice.

Where the agents run

By default, in a case folder on the box. But a case can also run inside a hardened per-case Docker container (cap-drop ALL, no-new-privileges, non-root, no docker socket, credentials copied in at launch and never written back to the host), or on another machine entirely over SSH inside a durable remote tmux. Same tabs, same dashboard, different blast radius.

On security generally: a dashboard that drives coding agents deserves paranoia about who can reach it, so it's defense in depth: loopback-only bind by default, an always-on Host-header allowlist against DNS rebinding, an Origin/CSRF guard, rate-limited auth, and the QR login above. How much autonomy the agents themselves get (permission modes) is configurable in settings.

Powerusers first!

On the desktop, the dashboard is the Poweruser weapon: any agent is one keystroke away.

  • Launching is one action: pick a case in a searchable picker, hit Run, and the tab appears named and numbered. Need several agents on the same repo? Launch them back to back; the tabs number themselves.

  • Alt+1-9 jumps straight to a tab, Ctrl+Tab cycles, and every shortcut is rebindable (Ctrl+? shows the map).

  • Cross-session search digs through session names, run events, and files the agents touched.

  • Recurring work doesn't even need you: cron jobs can launch an agent on a schedule with a prompt, in any of the supported CLIs.

The speed I mean isn't benchmark speed; it's "glance at five agents, unblock two, queue one more, done in ninety seconds" speed.

Installation

Mac, Linux, and Windows via WSL: one command and your agent box is up.

curl -fsSL https://raw.githubusercontent.com/Ark0N/Codeman/master/install.sh | bash
codeman web   # open http://localhost:3000
Enter fullscreen mode Exit fullscreen mode

The installer prompts before every system change, and the server binds to loopback only by default.

Codeman is a power tool for people who run a lot of agents and want to be in Control!

Half a year in, it sits at 465 stars, and everything is at github.com/Ark0N/Codeman.

I think this gives great value for every Poweruser and is absolutely free! Try it out!

Top comments (1)

Collapse
 
hiper2d profile image
Aliaksei Zelianouski

The 5-hour auto-resume is the feature. But five sessions parked on the same plan all wake at the same reset and race each other - first one in eats the window, and you're arbitrating by hand again, just at 3am instead of at your desk. Any priority or queue across sessions, or is it a free-for-all?