omux

omux = orchestrate × tmux  ·  formerly cliclaw

Run your coding agents unattended, in parallel, at scale.

omux is a meta-agent that drives Claude Code, Codex — any CLI coding agent — through tmux. It spawns them in panes, reads their terminals, answers their prompts, and loops until the job is verifiably done. You walk away.

npm install -g @happenmass/omux

MITNode 20+tmuxyour model, your keys

tmux — omux-session
omux · chat
claude-code · ~/api
codex · review
[omux-session] 0:chat1:claude*2:codex state: idle
0:problem

Great at writing code. Bad at being left alone.

Do you want to allow this? ❯ 1. Yes

They can't run without you

CLI agents pause on every confirmation, every choice between two approaches. Step away for coffee and the run is exactly where you left it. omux answers the prompts and keeps the loop moving.

$ tmux attach -t agent2  # again

One terminal per agent, and you're the router

Backend agent in one window, frontend in another — and you babysitting both. omux runs the fleet in tmux panes, routes callbacks, and fans out independent work in parallel.

— session ended, context lost —

Every run starts amnesiac

Decisions, conventions, gotchas — gone between sessions. omux keeps two-tier memory (about you, and about each codebase) plus resume ids, so agents pick up where they left off.

1:how

A loop, not a prompt box

"I don't prompt Claude anymore. I have loops running that prompt Claude and figure out what to do. My job is to write loops."

— Boris Cherny, creator of Claude Code

omux is that loop, pre-built. You state the goal in plain language; it writes the prompts, reads the panes, decides the next move, and keeps going until the success criteria are verifiably met.

1 · you state the goal

"Fix the flaky auth test and cover token expiry." That's the whole prompt you write.

2 · omux plans & spawns

Picks the right agent per task, briefs it with repo context and memory, launches it in a tmux pane.

3 · the fleet executes

Agents implement test-first. omux reads their terminals, answers confirmations, interrupts wrong turns.

4 · verified done

A failing test is a continue signal, not a stop. It hands back only when tests pass — or a human is truly needed.

Pane-native state detection. Per-agent regex classifies waiting / active / done / error; an LLM pass settles ambiguous frames — biased toward "still working", so busy agents never get cut off.
Zero tokens while you wait. Waiting is push-based: while sub-agents grind, the MainAgent parks and spends nothing until a callback wakes it. No polling loop burning money.
Cross-vendor execute-then-review. Claude Code implements; a separate Codex agent independently reviews the diff — different vendor, different blind spots. Roles are swappable.
Memory that survives sessions. Hybrid search (vector + BM25) over markdown files; a global tier for you, a project tier per codebase. Kill an agent, keep its resume id, revive it later.

real session, real time — one goal in, verified diff out

2:features

Built for the parts around the coding

Tool-agnostic adapters

Claude Code and Codex today; a new agent is one adapter file — launch command, four regexes, confirm keys. The orchestration layer never changes.

Per-agent MCP scoping

Each agent gets only the tools it needs. A docs agent never sees your Postgres MCP: smaller prompts, no name collisions, sharper decisions.

Take over anytime

Grab any agent's live terminal from the web UI, type keystrokes yourself, release it back. The orchestrator keeps its hands off while you drive.

Survives crashes

Agents live in tmux, not in the server process. omux restarts, re-adopts running sessions, restores conversation state from SQLite, repairs interrupted tool calls.

Thin token bill

Context compaction rides the same prompt cache as normal turns; mutable prompt sections are ordered to keep the cache prefix stable. The orchestrator's own cost stays small.

Your language, their language

Chat with omux in Chinese while it briefs coding agents in English — or any combination. zh-CN and en-US built in.

3:compare

The honest landscape

omuxClaude Code subagentsOpenHandsCursor Composer
Run multiple agents in parallellimitedpartial
Tool-agnostic (Claude Code, Codex, …)Claude onlyown runtimeown runtime
Native TUI — watch agents reason live
Drives confirmations / interactive flowsn/a
Remote-friendly (SSH, detach, resume)
Per-agent MCP scoping

landscape as of mid-2026 — these tools move fast; corrections welcome

4:install

Two commands to a running fleet

# requires Node 20+ and tmux (brew install tmux)
$ npm install -g @happenmass/omux
$ omux
→ open http://localhost:3120 — pair once, then chat

Runs on your machine, with your keys — one for omux's reasoning, and whatever your coding agents already use. On a laptop it's LAN-discoverable by default so you can drive it from your phone; on shared networks, lock it down with omux --host 127.0.0.1 --no-mdns or an SSH tunnel.

5:faq

Questions people actually ask

Why tmux instead of wrapping the APIs?

Because the experience of Claude Code and Codex is not in their APIs — it's in their TUIs: the step-by-step reasoning, the previews, the confirmations. Wrapping the API throws that away. Driving the terminal keeps it, and makes omux compatible with any CLI agent that ever ships.

Does omux pick which agent handles a task?

Within the adapters you've enabled, yes — Codex for gnarly single-point reasoning, Claude Code for broad multi-file loops, then the other one reviews. Roles are heuristics, not hard-wiring; override per task. It never reaches for a tool you didn't enable.

Can I run it on a remote server?

That's the main mode the author uses: SSH in, start omux, detach, come back hours later. Agents keep working in tmux the whole time. Prefer an SSH tunnel over exposing the port on untrusted networks.

Why "omux"?

orchestrate × tmux — the orchestrator that lives where your agents live. omux is the new name of cliclaw; same project, sharper name.