Ccmux banner
max-listov max-listov

Ccmux

Development community

Description

Persistent, self-healing Claude Code sessions in tmux — deterministic resume, fleet self-update.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

ccmux

**Persistent, self-healing Claude Code and Codex sessions in tmux — across a fleet of machines.**

A single daemon per machine keeps a fleet of long-running agent sessions alive in tmux: it heals crashed ones, brings them back on reboot, and resumes the *same* conversation by a pinned uuid. Sessions are full interactive provider CLI processes (`claude` or `codex`) — ccmux supervises them, it does not reimplement them. Provider-specific features remain provider-specific: for example Claude has Remote Control/statusline, while managed Codex pane chat is not yet enabled.

┌─ daemon (launchd/systemd) ─ heals every 30s, self-updates ─┐
│   tmux: cc-api   cc-web   cc-infra   …   (each = `ccmux _run` → claude|codex, auto-restart)
└────────────────────────────────────────────────────────────┘
        ▲ ccmux list / new / attach / send / restart …          ▲ interactive TUI (bare `ccmux`)

Install

One command — installs `bun` if missing, downloads the latest verified bundle, drops a `ccmux` shim on your `PATH`, and starts a self-updating daemon:

curl -fsSL https://github.com/max-listov/ccmux/releases/latest/download/install.sh | bash

Set the RC prefix with `CCMUX_RC_PREFIX=prod` (default `local`) — **on a new machine only**. A machine that already has a `machine.json` keeps its identity: the installer reads the prefix rather than re-declaring it, and refuses a rename outright, because the prefix is the machine's fleet name and changing it renames every session's Remote Control identity.

That is what makes this the **repair** command as well as the install command. Every step converges: the bundle is fetched only when the bytes on disk differ from the manifest, the shim and boot unit are written only when they say the wrong thing, and nothing restarts unless something actually changed. On a healthy machine it prints *nothing to do* and writes no files. Point it at a machine whose bundle was deleted and it comes back whole.

Requires macOS (