Skip to content
τ-mux logo — a glowing cyan tau on a dark background

τ-mux

A hybrid terminal where xterm.js coexists with floating canvases, a 1 Hz process observer, and a scriptable CLI.
a love letter, not a product

I liked cmux. I love vibe coding.

So I tried to make a vibe-coded clone —
as professional as vibe coding can get.

”Just a personal project.”

τ-mux is a desktop terminal emulator that keeps the PTY text layer untouched while layering floating canvases, live process telemetry, and structured channels for scripts on top of it. It is keyboard-driven, mouse-friendly, and entirely scriptable from the shell via the ht CLI.

τ-mux running with a Pi Agent pane, Claude Code split, agent plan panel in the sidebar, file tree, and live status keys at the bottom.

Terminal multiplexer

Workspaces, tiling splits, draggable dividers, drag-and-drop panes, workspace colors. xterm.js with Bun.spawn PTYs — no node-pty.

Canvas panels

Floating SVG, HTML, image, and canvas2d overlays driven by extra file descriptors (fd 3/4/5). Independent DOM elements — draggable, resizable, interactive.

Live process metadata

A 1 Hz observer built on libSystem (sysctl + proc_pidinfo, ~2 ms/tick) surfaces cwd, ports, CPU%, RSS, and full argv for every descendant of every shell — falling back to ps/lsof if the kernel ABI ever shifts. Chips, sidebar, and CLI all feed from one pipeline.

`ht` CLI

Spawn panes, send keys, manipulate layouts, open ports in a browser, send signals, inspect trees. Ships as a standalone binary inside the .app.

Built-in browser

WebKit panes alongside terminals with ⌘⇧L. Address bar, smart URL detection, and 40+ scriptable commands via ht browser.

Web mirror

The entire native UI mirrored over WebSocket to anything on the LAN. Token auth, origin checks, resume-on-reconnect.

Claude Code, deeply integrated

Live session phase, cost, context and rate limits in the sidebar; permission prompts answered from a modal, from Telegram, or automatically; the native task list mirrored into the plan panel; and a first-class Claude Code pane.

Coding-agent panes

The pi agent and Claude Code run as real panes — amber identity, streamed transcripts, tool cards, approvals — beside your shells.

Extension apps

A Bun backend plus a Vite frontend in an iframe, driving every τ-mux control surface through a typed SDK. Fully trusted code — install what you would pipe to a shell.

Telegram bridge

A chat pane, notification forwarding, and answer-from-your-phone ask-user prompts, with a SQLite log and a fail-closed allowlist.

Editor & file explorer

CodeMirror editor panes and an inline file tree on the workspace card.

  • Runtime — Bun 1.3+
  • Framework — Electrobun 1.16+
  • Terminal — xterm.js 5.3
  • PTY — Bun.spawn with terminal option (no node-pty)
  • Process metadata — libSystem FFI, ps + lsof fallback (no tmux, no shell integration)
  • Default theme — Obsidian (10 built-in presets)

License: MIT.