Context
CCC currently runs as a standalone TUI. When used inside Zellij or cmux, there's an opportunity to integrate directly into the multiplexer's native UI rather than occupying a separate pane.
Zellij: Pane Bezel Integration
Zellij supports per-pane title customization via WASM plugins and the pipe IPC system. A small Rust plugin could show live session status in each pane's border.
Architecture
CCC Daemon → zellij pipe "ccc-status" → WASM Plugin → rename_terminal_pane()
Pane border would show:
┌─ Claude [YOLO] [PR #42 passing] ──────────────┐
Implementation
- Rust WASM plugin (~100 lines) — listens on
ccc-status pipe, calls rename_terminal_pane(pane_id, title) for each Claude pane
- Daemon side — detect
$ZELLIJ env var, send JSON updates via zellij pipe CLI when session state changes
- Pane mapping — use
$ZELLIJ_PANE_ID (available inside each pane) to map Claude sessions to Zellij panes
Plugin permissions needed
ReadApplicationState — track pane state
ChangeApplicationState — rename panes
Prior art
- zellij-load — daemon + WASM plugin over pipes (proven pattern)
- zjstatus — custom status bar plugin
cmux: Socket API Integration
cmux is a native macOS terminal (built on libghostty) purpose-built for AI workflows. It already has:
- Notification rings around panes (green/yellow/red)
- Sidebar with git branch, linked PR status, working directory
- Socket API for scripting/automation
- OSC escape sequence support for notifications
Investigation needed
- Socket API — what commands are available? Can we push session state (autopilot mode, PR status, pending tools) to cmux's sidebar?
- Notification rings — can the daemon trigger the ring color changes (green=running, yellow=waiting, red=failing)?
- PR linking — cmux sidebar already shows linked PRs. Can CCC feed PR data to cmux instead of duplicating it?
- OSC sequences — CCC already uses Ghostty shaders. Can it use OSC escape codes to trigger cmux-native notifications instead of macOS notifications?
Key question
Does CCC need its own TUI at all inside cmux, or should it feed data to cmux's native UI and let cmux handle display?
Scope
Context
CCC currently runs as a standalone TUI. When used inside Zellij or cmux, there's an opportunity to integrate directly into the multiplexer's native UI rather than occupying a separate pane.
Zellij: Pane Bezel Integration
Zellij supports per-pane title customization via WASM plugins and the pipe IPC system. A small Rust plugin could show live session status in each pane's border.
Architecture
Pane border would show:
Implementation
ccc-statuspipe, callsrename_terminal_pane(pane_id, title)for each Claude pane$ZELLIJenv var, send JSON updates viazellij pipeCLI when session state changes$ZELLIJ_PANE_ID(available inside each pane) to map Claude sessions to Zellij panesPlugin permissions needed
ReadApplicationState— track pane stateChangeApplicationState— rename panesPrior art
cmux: Socket API Integration
cmux is a native macOS terminal (built on libghostty) purpose-built for AI workflows. It already has:
Investigation needed
Key question
Does CCC need its own TUI at all inside cmux, or should it feed data to cmux's native UI and let cmux handle display?
Scope
$ZELLIJand sends pipe updates