ccmux v0.1.15
inter-agent chat (menu-safe pane delivery + one-way Telegram mirror) + isolated dev instance
- Isolated dev instance: run a full second ccmux (daemon + sessions + chat) beside prod on one
machine, fully isolated — atmuxSocketconfig scopes every tmux call to its own server (-L),
CCMUX_HOMEoverridable for its own app/log/boot-state,remoteControl:falsekeeps its sessions
out of the claude.ai app. tmux doesn't propagate env into panes, sonew-session -epins the
instance'sCCMUX_HOME/CONFIG/SESSIONS, and the injected prompt teaches the instance's own cli
(not the prod shim) whenCCMUX_HOMEis non-default. Scaffold + teardown viascripts/dev-instance.sh. - Inter-agent chat, sender identity: the sender is automatic and unspoofable — an agent sends as its
own session, a command-line invocation ascli; there is no--from.owneris a reserved
recipient (the human — Telegram-only, no pane); the injected prompt frames[chat from owner|cli]
as the human side (user-level trust) vs[chat from <peer>]as a fellow agent. - Dev daemon hot-reload:
bun daemon:watch(=bun --watch src/cli.ts daemon) restarts the
process on any source change — fresh timers each time, unlike--hot, which re-runs the entry
WITHOUT tearing down the oldensure/chat loops (they'd accumulate; proven with aBun.sleep
probe). The boot-loop guard is now skipped when running from live source (IS_DEV): it protects
the auto-updated prod bundle (revert to.bak), has no bundle to revert in dev, and would only
churn false "boot-loop" errors under rapid--watchrestarts. - Telegram chat mirror: the routing header (
from → to, or📩 for you — from …for a message to
the human) is now bold (HTML parse_mode) so who-is-talking-to-whom reads at a glance; the message
body is HTML-escaped so</>/&render verbatim and never trip a 400 that would drop the message. - Inter-agent chat: opt-in messaging between managed sessions.
ccmux msg <to> "..."/
ccmux inbox/ccmux chat log|on|off, with a per-sessionchatEnabledflag (default off).
The daemon push-delivers into the recipient's pane on a fast cadence, tagged[chat from X]
(framed to the agent as a peer, not the user), gated so it never injects at a selection menu
(would auto-pick an option — proven live) or while a human is attached; a busy recipient just
gets it queued at its next turn boundary. In-order per recipient, no double-push across daemon
bounces; loop/rate guards cap a runaway A→B→A. An append-only ledger (~/.ccmux-chat.jsonl) is
the source of truth; multi-line bodies deliver via bracketed paste. Optional one-way Telegram
mirror (telegramin machine.json → group/DM/topic; fail-soft, outbound only).