🧭 I Don't Want a New Terminal
0:00The internet is flooded with projects claiming to be "the new terminal for agents" — people shipping literal terminals, forking Ghostty, or building their own multiplexer from scratch. Some are great, some are junk, and some catch on fast enough that prominent developers are on them within a week. But omerxx's wishlist is simpler: tmux, with a sprinkle of agent control — plus worktrees, and a way to know when things are ready.
He's covered projects that do one or the other, but never all his wishes simultaneously. Then a colleague showed him workmux, and it delivered: no leaving tmux, a dashboard, a small control plane, worktrees as first-class citizens, and full visibility into everything running. The kicker is the session support — it works with his beloved tmux session managers, so he can fuzzy-find and jump between worktree sessions without breaking his flow.
🔨 What Is workmux?
1:29workmux, in omerxx's words, is "if tmux and worktrunk had a love child" — but there's more than that: it can sandbox, delegate, and coordinate. Written by Raine Virta, an assistant software engineer out of Helsinki, Finland, it's a "giga opinionated, zero-friction workflow tool" for managing git worktrees and tmux windows as isolated development environments — perfect for running multiple AI agents in parallel without conflict.
Once installed (Homebrew or Cargo), you give it a quick wm alias and start working. The most-used subcommand is add — but init comes first on a fresh project.
🚀 wm init & wm add: The Setup
2:17wm init does three things: makes sure you can see the Nerd Font glyphs workmux relies on, detects the installed agents so it can track their status, and installs the skills needed for merge, rebase, opening PRs, and the like. It also drops a config: a dotfile under the project with an include file so ignored git files get copied around to new worktrees, plus a global config directory under your config path.
Then wm add <name> does the magic. It creates a new worktree in a sibling directory (e.g. project-worktrees/), renames the tmux window with a branch icon, and — as omerxx notes — defaults to a vertical split whose purpose he doesn't fully grasp (fixed later). The boilerplate config includes a special mode, window placements, and pane configurations.
wm init # first-run: fonts, agent detection, skills
wm add feature-x # worktree + matching tmux window
wm add -p "prompt" -a pi # prompt straight from the command
🌳 Git Worktrees: The Primer
4:02The 30-second worktree explainer: it's "the better — way better — hidden git option" for branches. Forget stashing and popping changes; work simultaneously on different changes using different snapshots. The huge problem is that it's a fantastic git feature with terrible UX. The fix is wrappers — omerxx previously covered worktrunk, which makes it "almost perfect," but workmux, in his opinion, solves all the problems while giving you a lot more.
Naturally, the first thing he does with any new branch or worktree is fire up his agent — and there are the new skills: opening a PR, merging, committing. Each skill is a very short instruction. One detail he flags: git --porcelain is an optional switch that gives you parseable output, which the commit skill leans on, followed by a quiet rebase and then a merge.
📊 The Dashboard & Agent Visibility
5:00Once a task is running, you want visibility. wm list gives you all the worktrees with their age, path, merged state, and whether an agent is running inside. But the star is the dashboard: fired from the CLI, it shows the currently-running agents with time, title, worktree, and project — plus a live preview of the window where each agent runs.
There's also a hidden Tab tab most people miss: it lists all current worktrees under the path with their git statuses, metadata, and a log — and whether workmux is even responsible for them — rather than just the live preview. That's where cleanup really starts.
⚡ Prompt Injection & Skills
6:31Sometimes you want to set-and-forget an agent: have it fix a simple bug while you get on with other work. The "parallel AI workflow" — omerxx prefers to call it the "frictionless AI launchpad" — is wm add -p, which sends a prompt straight from the firing command. You do have to provide an agent: -a pi picks the Pi agent, which then runs with the prompt in a fresh worktree.
That annoying default vertical split is fixed in the config: wm add panes (or the dashboard's ? help menu) lets you define the pane layout so the main pane runs the agent on its own. The docs, in omerxx's words, are "one of the nicest, easiest to go through I've seen recently" — searchable enough that the split config was found in seconds.
📟 Sidebar & Session Mode
9:48One thing still nagged him: he'd recently covered Herdr, whose biggest selling point was a sidebar telling you what's going on while you work — and "having lots of stuff running without visibility ain't doing much." workmux's answer is wm sidebar: a sidebar in a tmux pane, right next to your workspace, showing everything you need to know. It's still tmux, so you can kill, resize, and rearrange it with ordinary tmux motions; preferences go in the config YAML or via flags (e.g. top placement).
The biggest workflow feature for omerxx is session mode: wm --session opens the splits with the agent and — more importantly — a new session that shows up in his beloved tmux session managers (sessionx and its rival sesh). He can preview and jump into workmux-launched sessions from inside his own plugin, no sidebar or dashboard required. Multiple sessions become available immediately, and you can keep configuring them — adding panes, windows, or a test tab that runs make.
🧹 merge, Sandboxing & the Verdict
11:02What do you actually do when something's ready? If you merge a PR on GitHub, it's now misaligned with your local environment. wm merge handles the full lifecycle in one command: merge the branch, delete the worktree, close the tmux window, remove the local branch — "you need to clean up after" is the philosophy, and one command does it.
On sandboxing: workmux supports running agents in containers (Docker/Podman/Lima), and can send "YOLO mode" agents into a sandbox. omerxx notes that the reason he picked the Pi agent in the first place was its author's YOLO-by-default approach — he's happy to know sandboxing is there if needed, even if he doesn't use it as a daily component.
✅ Key Takeaways
- workmux is glue, not a replacement. It builds on tmux (or Zellij/kitty/WezTerm), git worktrees, and your existing agent — no new terminal to learn.
- One command per worktree.
wm addcreates a git worktree plus a matching tmux window in a single step, with config files symlinked/copied in automatically. - It's agent-aware.
wm initdetects installed agents, installs merge/rebase/PR skills, and tracks agent status in tmux window names (busy/question/done). - The dashboard is a control plane. Live previews, an interactive portal (I) into any agent's window, diff (D), removal (R), and a sweep cleaner (Shift+R).
- Prompt injection from the CLI.
wm add -p "prompt" -a <agent>launches an agent on a task without breaking your flow. - Session mode plays nice with session managers. workmux sessions appear in sessionx/sesh, so you jump in from your own plugin.
wm mergehandles the whole lifecycle. Merge branch, delete worktree, close tmux window, remove local branch — one command.- Sandboxing is built in. Docker/Podman/Lima support for running YOLO-mode agents safely.
🔗 Resources & Links
- 📦 workmux on GitHub
- 📖 workmux documentation
- 📝 Introduction to workmux — Raine Virta's blog post
- 🌳 git worktree docs
- 🗂️ worktrunk — the worktree wrapper workmux improves on
- 📟 Herdr — the agent multiplexer whose sidebar prompted workmux's
- 💾 tmux-sessionx and sesh — the session managers workmux integrates with
- ▶️ DevOps Toolbox — the channel
Facts verified against the workmux README and docs (author Raine Virta, Rust, backends, features) and the primary repos of the referenced tools. The caption track mangles names ("Workmix/Workmax" → workmux, "Rain Vera" → Raine Virta, "Herder" → Herdr, "session X" → tmux-sessionx, "Rush" → Rust).