← Projects

project

wmux

wmux is an open-source terminal multiplexer for Windows that shows you what your Claude Code agents are actually doing. I have six merged pull requests in it and two issue reports that turned into fixes, spread across releases 0.27 through 0.40.

View source
source
amirlehmam/wmux
built with
TypeScript · Electron · React · xterm.js · node-pty · Vitest · Windows
wmux in use

Everything below is my work, in the order it shipped. The full list is on my pull requests.

Orchestration runs that counted forever (issue #99, PR #101, shipped in 0.27.0)

In degraded mode the orchestration hooks marked finished agents, waves and runs as completed, a word that does not exist in the app's status vocabulary. The app counts exited for agents and complete for waves and runs, so the cockpit sat at 0/N forever even though every agent had finished. I fixed both the shell hook and the JSON tool to write the canonical vocabulary, and added end-to-end coverage typed against the OrchAgentStatus / OrchWaveStatus / OrchRunStatus unions so the bash and TypeScript layers cannot drift apart silently again.

Dead pollers (issue #100, shipped in 0.27.0)

GitPoller and PrPoller were constructed and torn down on every launch but never started, and their updates would have been dropped by the renderer anyway because they carried an empty surface id. Reporting it took about 170 lines of code out of the tree that looked load-bearing and was not.

A CLI that was 250x slower to return than it needed to be (PR #109, shipped in 0.28.0)

Every wmux command lingered around five seconds waiting out a timeout that never needed to fire. The reply came back over the named pipe immediately; nothing resolved on it. wmux ping went from 4.99s to 0.02s.

system.identify reporting a version that was never true (PR #110, shipped in 0.28.0)

The pipe's identify method returned a hardcoded 0.5.0, roughly 22 releases stale, so anything integrating over the pipe was gating on a number that had stopped being accurate a long time ago.

Configurable dev-server ports (PR #115, shipped in 0.33.0)

wmux points its browser panel at a dev server when it sees one start, but the port set was hardcoded, so Streamlit on 8501 or Astro on 4321 got nothing. Ports are now declared in ~/.wmux/config.toml and merged with the built-in defaults, and auto-navigation can be switched off entirely. The same change fixed the selection logic that picked the wrong server when several were listening.

The test suite on the only platform wmux ships for (PR #130, shipped in 0.40.0)

Five orchestrator tests failed on a clean checkout on native Windows, because a Windows path handed to bash lost its separators to escape parsing. wmux is Windows-only, so the suite was red for anybody who cloned it and ran it the intended way.

A sidebar drag at 60 relayouts a second (PR #131, shipped in 0.40.0)

Dragging the sidebar edge fired a width update per mouse event, around 60 a second, and each one relaid out every terminal and made ConPTY re-emit its whole screen. Coalescing to one update per frame made the drag smooth without changing what it does.