Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

139 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChatMux — every coding agent, one command deck: Codex, Claude, Gajae Code, Cursor, and OpenCode sessions multiplexed into one self-hosted interface

English · 한국어 · 日本語 · 简体中文

ChatMux is a self-hosted web interface for discovering, reading, and controlling
coding-agent sessions running in tmux — from your desktop or your phone.

GitHub release AGPL-3.0 license Supported Node versions tmux runtime

Install  ·  Browser  ·  Mobile  ·  Agent support  ·  Remote access  ·  Docs


You run coding agents — Gajae Code, Claude Code, Codex, Cursor CLI, OpenCode, Oh My Pi — inside tmux, like always. ChatMux finds them by itself and shows every session in one browser page:

No registration
Agents already running in tmux just appear in the sidebar. Nothing to wrap, wire, or restart.
One ordered sidebar
Every provider in a single drag-sortable list, with RUN, READY, and ERROR badges for live state.
Chat or terminal
Recognized transcripts read as conversations; everything else is a real attached terminal. Input only ever reaches a pane whose identity ChatMux has verified.
tmux stays the boss
Restart or remove ChatMux any time; your tmux sessions keep running untouched.

ChatMux does not bundle any AI subscription — install and log in to each agent CLI as the same OS user that runs ChatMux.

Install

Linux x86_64 (glibc 2.35+) with tmux, user-level systemd, and curl/tar/sha256sum:

curl -fsSL https://github.com/devswha/chatmux/releases/latest/download/install.sh | bash

install.sh output: download and verification, the local and Tailscale phone addresses, and a QR code to open ChatMux on the phone
One command: verified download, a user-level service, your addresses, and a QR for the phone.

The installer downloads the canonical release archive, verifies its SHA-256, starts a user-level service, and prints your addresses. chatmux status shows them again any time. Pinned versions, access modes, updates, rollback, and recovery are covered in the installation guide; source development is covered in Development.

Browser

Open the printed Local address — running tmux agents appear in the sidebar by themselves. Sessions with a recognized transcript render as a structured conversation with a composer:

ChatMux on desktop: the sidebar lists live tmux agent sessions across providers with RUN and READY badges, and the selected Codex session renders as a structured conversation with a composer
The conversation view: cross-provider sidebar on the left, structured transcript and composer on the right.

The CLI output tab of the same session is the real TUI running inside tmux, rendered in the browser — answer menu prompts, watch raw output, or take over with real keystrokes:

The CLI output tab of the same session: the real Codex TUI running inside tmux, rendered in the browser
The same session as a real terminal — because sometimes you need the actual TUI.

Mobile

Turn on Tailscale on the phone, scan the QR code from the install output, and use the in-app Install app button to keep ChatMux as a PWA:

Mobile sidebar: the full cross-provider session roster with activity badges and drag handles
The full session roster
Mobile conversation view of a Codex session with the chat composer
Conversation view
Mobile CLI output view typing into the real Codex TUI with the terminal key bar
Real TUI with a key bar

Agent support

"Chat view" below means the session renders as a readable conversation with a composer; otherwise ChatMux gives you an attached terminal. Both views can type into the real pane.

Agent Found automatically Chat view Send input Start new session
Gajae Code (GJC) Yes Yes Prompts and / commands Yes
Codex CLI Yes After its history is indexed Prompts and $ skills Yes
Claude Code Yes After its history is indexed Prompts and / skills Yes
Cursor CLI Yes After its history is indexed Prompts and / skills Yes
OpenCode Yes After its history is indexed Prompts and / skills Yes
Oh My Pi Yes After its history is indexed Prompts and /skill: skills Yes
SSH tmux Yes No — terminal only Terminal keystrokes No
Local shell Yes No — terminal only Terminal keystrokes No

Cursor sessions use the documented agent command; the legacy cursor-agent alias remains supported for older installations.

Remote access

With Tailscale logged in, the installer configures Tailscale Serve automatically: approved tailnet accounts use the private HTTPS address with no separate password, and everyone else is denied. Without Tailscale, installation enables password access on the LAN with a one-time owner password:

chatmux access password              # rotate/recover (signs out all sessions)
chatmux access enable tailscale     # switch modes after Tailscale is available

User allowlists, longer sessions, VPN mode, SSH tunnels, and public TLS options are covered in the remote access guide and the installation guide.

How it works

flowchart LR
  subgraph Host[Self-hosted machine]
    TMUX[tmux sessions]
    AGENTS[GJC · Claude · Codex · Cursor · OpenCode · Oh My Pi]
    SSH[Remote SSH panes]
    INDEX[Session discovery + transcript index]
    API[ChatMux API]

    TMUX --> AGENTS
    TMUX --> SSH
    AGENTS --> INDEX
    INDEX --> API
  end

  API --> WEB[Web / PWA]
  WEB -->|spawn · relay · resume · kill| API
Loading

ChatMux links tmux process ancestry to native transcript identifiers. A matching working directory alone is never enough to authorize a destructive action, and the tmux session identifier is rechecked before relay or termination.

Development

git clone https://github.com/devswha/chatmux.git
cd chatmux
npm ci
npm run dev

Open http://127.0.0.1:5173. Development requires Node.js 22.22.2+ on the 22.x line or 24.15.0+ on the 24.x line, npm, Git, tmux, and Rust 1.85.1. npm run verify runs the full release gate: audit, typecheck, Rust checks, tests, lint, identity checks, and a production build.

Security and data boundaries

  • The backend binds to loopback. Tailscale mode trusts Serve identity headers only from loopback on the expected HTTPS origin; the installer never enables Funnel or a public listener, and unapproved users fail closed.
  • Password mode uses HttpOnly, SameSite=Strict cookies with persistent logout revocation.
  • State and indexes live below ~/.chatmux. Back up ~/.chatmux/data before migration or upgrade.

Documentation

GNU AGPL v3 · built for people who live in tmux

About

ChatMux — provider-agnostic tmux chat web-terminal for coding agents (GJC/Codex/Claude/Cursor/OpenCode)

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages