Orchestrate multiple Claude Code sessions from a single terminal.
Why · Features · Getting Started · Usage · Architecture
┌──────────────────┬──────────────────┬──────────────[X]─┐
│ │ │ │
│ Pane 1 │ Pane 2 │ Pane 3 │ 80%
│ claude │ claude │ /bin/zsh │
│ │ │ │
├──────────────────┴──────────────────┴───────────────────┤
│ │
│ Orchestrator — Ctrl+R: voice 20% │
│ claude │
│ │
└─────────────────────────────────────────────────────────┘
AI-assisted development rarely fits in one terminal. You might want one Claude planning architecture while another writes tests, a third refactors a module, and a plain shell runs builds — all on the same codebase at the same time.
CDC gives you a single terminal that acts as a control plane: one orchestrator coordinates N panes, voice commands route tasks hands-free, and smart alerts surface permission requests before they block progress.
Multi-pane orchestration
- One orchestrator + N independent panes (Claude Code or plain terminal)
- 3-step pane creation: directory picker → Claude/Terminal mode → permission mode
- Fuzzy directory search with VS Code-style ↑↓/Tab picker
- Mouse click or
Ctrl+1–9to switch focus Ctrl+Zfullscreen toggle,[X]close button on each pane- Mouse drag text selection with clipboard copy
Full terminal emulation
- Complete VTE parser: SGR colors, cursor movement, scroll regions, DECAWM, alternate screen save/restore
- 10K-line scrollback buffer
- Korean/CJK wide-character and IME support
- 60 fps rendering via ratatui
Voice input and routing
Ctrl+Rtoggles local microphone recording- Transcribed by faster-whisper (ghost613/faster-whisper-large-v3-turbo-korean) — no audio leaves the machine
- Editable confirmation dialog before execution — fix STT errors, then Enter to send
- Speak "페인 1에게 테스트 작성해" to route commands to specific panes
- Correction detection: "아니 그거 말고 빌드해" extracts only the final intent
- Voice CDC commands: "새 페인 만들어" opens the pane creation dialog
Mic → cpal → faster-whisper (Korean) → editable confirm dialog
→ extract_last_intent() → parse_worker_route() → Pane N PTY
Session management
Ctrl+Ssaves layout and working directories to~/.cdc/sessions/cdc --restore <name>recreates the exact session- Sessions stored as JSON, archivable
Smart alerts
- Detects Claude permission prompts in any pane
- Pane border blinks red until resolved
- Voice state shown inline:
[REC] Ctrl+R: stop,[STT...] - Interactive confirm dialogs with mouse click and ↑↓/Enter
| Requirement | Install |
|---|---|
| Rust (edition 2024) | rustup.rs |
| Claude Code CLI | npm install -g @anthropic-ai/claude-code |
git clone https://github.com/UnripePlum/claude-development-cli
cd claude-development-cli
cargo build --releasepython3 -m venv .venv
source .venv/bin/activate
pip install faster-whisperThe Korean STT model (~2 GB) downloads automatically on first Ctrl+R use.
./target/release/cdc # start new session
./target/release/cdc --restore proj # restore saved session
./target/release/cdc --cwd ~/repo # start in specific directory
./target/release/cdc --setup # check environment| Key | Action |
|---|---|
Ctrl+N |
Add pane (3-step: directory → Claude/Terminal → permissions) |
Ctrl+W |
Close focused pane |
Ctrl+O |
Focus orchestrator |
Ctrl+1–9 |
Focus pane N |
Ctrl+Z |
Fullscreen toggle |
Ctrl+S |
Save session |
Ctrl+R |
Voice recording toggle |
Ctrl+Q |
Quit |
Shift+PgUp/Down |
Scrollback |
| Variable | Default | Description |
|---|---|---|
CDC_CMD |
claude |
Command spawned in Claude panes |
CDC_VOICE_LOG |
— | STT debug log path |
CDC_PTY_LOG |
— | Raw PTY byte log |
graph TD
subgraph Event Loop
TE[Terminal Events<br/>crossterm] --> ML[Main Loop<br/>app.rs]
PO[PTY Output<br/>background threads] --> ML
VE[Voice Events<br/>VoiceManager] --> ML
end
ML --> UI[UI Render<br/>ratatui]
ML --> PTY[PTY Write<br/>portable-pty]
subgraph Voice Pipeline
MIC[Mic<br/>cpal] --> WHI[faster-whisper<br/>Korean model]
WHI --> CONFIRM[Editable<br/>confirm dialog]
CONFIRM --> INTENT[Intent<br/>extraction]
INTENT --> ROUTE[Pane<br/>routing]
end
VE --> MIC
src/
├── main.rs # CLI entry, logo, setup wizard
├── app.rs # Event loop, intent extraction, pane routing
├── session.rs # JSON session save/load/archive
├── event.rs # ANSI key + SGR mouse encoding
├── pane/
│ ├── mod.rs # Pane: grid + vte parser
│ └── grid.rs # TerminalGrid: full VTE emulator
├── pty/
│ ├── mod.rs # PtyManager: spawn/write/resize/kill
│ └── reader.rs # Background PTY reader thread
├── ui/
│ ├── mod.rs # Layout, render, dialogs, alerts
│ └── pane_widget.rs # ratatui Widget for TerminalGrid
└── voice/
├── mod.rs # VoiceManager state machine
├── recorder.rs # cpal audio capture + 16kHz resampling
└── transcriber.rs # faster-whisper Python subprocess
scripts/
└── stt.py # faster-whisper STT backend
| Layer | Crate/Tool | Version |
|---|---|---|
| TUI | ratatui | 0.29 |
| Terminal I/O | crossterm | 0.28 |
| PTY | portable-pty | 0.8 |
| VTE parser | vte | 0.13 |
| Channels | crossbeam-channel | 0.5 |
| CLI | clap | 4 |
| Audio | cpal | 0.17 |
| STT | faster-whisper | Python |
| Serialization | serde + serde_json | 1 |
- Single PTY + VTE parser
- Multi-pane layout (orchestrator + N panes)
- Sessions, scrollback, DECAWM, alt screen save/restore
- Voice input with faster-whisper + pane routing
- Editable STT confirmation dialog
- Intent correction ("아니 그거 말고" detection)
- Voice CDC commands ("새 페인 만들어")
- Mouse drag text selection + clipboard
- 3-step pane creation (Claude/Terminal + permissions)
- Interactive dialogs (mouse click + keyboard)
- [X] close button on panes
- Pane drag resize
- Custom pane names