DEV Community

wong2 kim
wong2 kim

Posted on

wmux: Run Claude Code, Codex, and Gemini CLI Side by Side on Windows

TL;DR

If you're coding on Windows and juggling multiple AI CLI agents in a single terminal window — stop. wmux is a native Windows terminal multiplexer that lets you run Claude Code, Codex, and Gemini CLI side by side, with built-in browser automation, an MCP server, and real session persistence. No WSL required.

winget install openwong2kim.wmux
Enter fullscreen mode Exit fullscreen mode

That's it. 30 seconds and you're done.

The problem

macOS devs have had cmux — a tmux-based terminal multiplexer tuned for AI agents — for a while now. Windows devs? We've been stuck with a single terminal tab, Alt+Tabbing between agents, spamming "are you done yet?" into the void.

You could use WSL, sure. But then your PowerShell scripts, Windows-native toolchains, and ConPTY-aware TUIs (hi, Claude Code) start to feel awkward.

wmux fills that gap. It's a native Windows multiplexer built on ConPTY, xterm.js with WebGL rendering, and Electron. No VM, no Linux emulation, no weird path translation.

What it actually feels like

Picture this layout on one screen:

  • Left pane: Claude Code writing your backend
  • Right pane: Codex scaffolding the frontend
  • Bottom pane: Gemini CLI running the test suite
  • Floating pane: A Quake-style dropdown terminal for quick git status checks

Ctrl+D splits right. Ctrl+Shift+D splits down. Ctrl+N opens a new workspace. Ctrl+1~9 jumps between them. Ctrl+click stitches multiple workspaces into a multiview grid. If you're a tmux person, Ctrl+B gives you a prefix mode with 13 rebindable actions.

The part that actually sold me: browser control

Tell Claude Code "search Google for wmux" and it actually does it. Not via shelling out to curl. Not by pretending. wmux exposes a built-in browser panel connected over the Chrome DevTools Protocol, and the MCP server exposes tools like:

What Claude does MCP tool
Open browser browser_open
Read page structure browser_snapshot
Click element browser_click
Fill form browser_fill / browser_type
Press key browser_press_key
Run JS browser_evaluate
Screenshot browser_screenshot

So a prompt like "search for wmux on Google" becomes:

browser_open → browser_snapshot → browser_fill(ref=13, "wmux") → browser_press_key("Enter")
Enter fullscreen mode Exit fullscreen mode

And it works. Even with React controlled inputs and CJK text — both of which love to break naive automation.

Every browser tool accepts a surfaceId, so each Claude Code session drives its own browser. Run three agents, get three browsers, zero cross-talk.

Agent-to-agent messaging

This is the fun one. wmux exposes a2a_send, a2a_broadcast, a2a_task_send, and friends. Your Claude Code instance on the left can literally ping your Codex instance on the right:

"Hey, I changed the API response shape, regenerate the TypeScript types."

That's not a demo — that's Tuesday.

Stop babysitting your agents

wmux watches terminal output throughput (not brittle pattern matching) and fires desktop notifications + taskbar flashes when:

  • A task finishes
  • A process exits abnormally
  • A dangerous command shows up (git push --force, rm -rf, DROP TABLE…)

Go make coffee. wmux will tell you when to come back.

Session persistence that actually persists

Close wmux. Reopen it. Your sessions are still there, 999K lines of scrollback intact, in the right working directory.

Reboot your machine. Same thing. A background daemon keeps PTY processes alive, dumps scrollback to disk, and auto-starts on login.

This is the part tmux users have been quietly missing on Windows for years.

Security I didn't have to ask for

  • Token auth on every IPC pipe
  • SSRF protection (blocks private IPs, file://, javascript:)
  • PTY input sanitization
  • Randomized CDP port (no fixed --remote-debugging-port=9222 for anyone to hijack)
  • Memory pressure watchdog (reaps dead sessions at 750MB, blocks new ones at 1GB)
  • Electron Fuses locked down (RunAsNode disabled, cookie encryption on)

For a tool that hands AI agents a browser and a shell, this is the bare minimum — and wmux actually does it.

The rest of the goodies

  • xterm.js + WebGL GPU rendering
  • Unicode 11 width tables (CJK/emoji actually render correctly in TUIs)
  • Shell integration via OSC 133 — terminal_read_events gives agents semantic command boundaries, not raw bytes
  • Regex search (Ctrl+F), Vi copy mode (Ctrl+Shift+X), scroll bookmarks (Ctrl+M)
  • Smart right-click: selection → copy, empty area → paste, link → Open/Copy menu
  • Layout templates you can save and restore from the command palette
  • Themes: Catppuccin Mocha, Monochrome, Sandstone
  • i18n: English, Korean, Japanese, Chinese
  • Auto-update via GitHub Releases

Agent detection covers Claude Code, Cursor, Aider, Codex CLI, Gemini CLI, OpenCode, and GitHub Copilot CLI out of the box.

Install

Pick your poison:

# winget (recommended)
winget install openwong2kim.wmux

# Chocolatey
choco install wmux

# PowerShell one-liner
irm https://raw.githubusercontent.com/openwong2kim/wmux/main/install.ps1 | iex
Enter fullscreen mode Exit fullscreen mode

Or grab wmux Setup.exe from the releases page.

Final thought

Windows devs have been the second-class citizens of the AI coding agent world for a minute. wmux doesn't fix everything — but running three agents on one screen, each with its own browser, talking to each other, surviving reboots? That's a genuinely different workflow.

Repo: github.com/openwong2kim/wmux — MIT licensed.

If you try it, I'd love to hear which layout you end up with. Mine is Claude-left / Codex-right / Gemini-bottom, and a floating terminal for git. What's yours?

Top comments (0)