Skip to main content

TUI dashboard for managing Claude Code, Codex, and shell sessions via tmux

Project description

Claude Code Terminal (CCT)

Version PyPI Python License: MIT README EN README ZH README FR

TUI dashboard for managing Claude Code, Codex, and shell sessions via tmux.

image

Languages

✨ Features

  • Built-in Claude Code / Codex / Shell session support
  • In-dashboard permission handling
  • Vim-style modal operation
  • Working / Idle / Waiting / Stopped / Auto / Shell state display
  • High-performance line-level rendered preview (TerminalView) with Strip caching
  • Interactive cursor overlay in snapshot preview
  • Raw-stdin interactive input path with Shift+Enter / Alt+Enter newline compatibility
  • Preview cache and single-flight refresh to reduce repeated preview work
  • Typing-aware smart refresh: suppresses preview updates during rapid input
  • Preview truncation hint when pane history exceeds the current 1000-line preview window
  • WAITING auto-focus with FIFO queue processing
  • Per-session Auto Pilot
  • Home page, session panel toggle, and smoother session deletion flow
  • Read-only diagnostics for cursor stability and live-session latency profiling
  • macOS notifications

🚀 Installation

Quick Install (recommended)

curl -fsSL https://raw.githubusercontent.com/phinease/claude-code-terminal/main/install.sh | sh

Via pipx

pipx install claude-code-terminal

Via pip

pip install claude-code-terminal

Upgrade

pipx upgrade claude-code-terminal

or:

pip install -U claude-code-terminal

Prerequisites

  • Python >= 3.11
  • tmux (brew install tmux / apt install tmux)

▶️ Usage

cct

⌨️ Keybindings

Normal Mode

Key Action
/ Navigate sessions
n New session
r Rename session
i Enter Interactive mode
a / d Approve / Deny permission request
1-9 Select numbered permission option
p Toggle Auto Pilot
c Select mode (text copy)
Ctrl+\ Toggle session panel
Ctrl+x Delete session
q Quit

Interactive Mode

All keystrokes pass through directly to the selected agent session.

Key Action
Ctrl-] Exit to Normal mode
Ctrl+\ Toggle session panel
Shift+Enter Newline (kitty protocol terminals)
Alt+Enter Newline (legacy terminals)
Mouse click on session list Switch session

🪟 Preview Behavior

  • Normal and interactive preview both keep a bounded 1000-line window.
  • When older content is omitted from the preview window, CCT shows a truncation banner below the preview.
  • Waiting detection and Auto Pilot still use plain capture-pane, independent of preview truncation.

Environment variables:

  • CCT_PREVIEW_HISTORY_LINES Current implementation clamps this to at least 1000.
  • CCT_INTERACTIVE_PREVIEW_HISTORY_LINES Current implementation also clamps this to at least 1000.
  • CCT_USE_LEGACY_INTERACTIVE_VIEW=1 Disables the interactive cursor overlay path and falls back to the legacy interactive preview behavior.
  • CCT_OUTPUT_DEBOUNCE_MS Drain output debounce interval in ms (default 16, ≈60fps).
  • CCT_TYPING_SUPPRESS_MS During interactive mode, suppress preview refreshes while the user is typing faster than this threshold (default 80).

🧪 Diagnostics

  • python tests/e2e_cursor_scope.py Verifies cursor position and mixed ASCII / Chinese input stability.
  • python tests/e2e_latency_scope_existing_sessions.py Reuses current live tmux sessions in read-only mode to profile preview, list, and polling costs.
  • python tests/e2e_interactive_latency.py Measures interactive mode latency: drain debounce, capture, parse, render, and end-to-end refresh cycle.

🖥️ Interface

+----------------------------------------------------------------+
| Vibe · Agent Dashboard                                         |
+----------------------------------------------------------------+
| Sessions           | Preview: frontend-refactor (claude)        |
|--------------------|---------------------------------------------|
| * frontend-refactor| > Analyzing src/components/Header.tsx...    |
|   proj/frontend    |                                             |
| * api-fix          |   I'll update the Header component to       |
|   proj/backend     |   use the new theme variables.              |
| ! test-fix         |---------------------------------------------|
|   proj/tests       | ! Permission: execute `npm test`            |
| o data-migration   |   [a:Allow] [d:Deny]                        |
|   proj/migration   |                                             |
+--------------------+---------------------------------------------+
| NORMAL — i:Interactive  n:New  a/d:Allow/Deny  p:Pilot         |
+----------------------------------------------------------------+

Status icons: * Working  ! Waiting  o Idle  x Stopped

📝 Notes

  • The current interactive preview is still tmux snapshot based, not a full terminal-buffer renderer.
  • v0.2.2 replaced RichLog with a line-level TerminalView (ScrollView + render_line), reducing preview render cost by ~61%. Combined with drain debounce reduction and typing-aware smart refresh, end-to-end interactive latency dropped from ~145ms to ~65ms.

🛣️ Roadmap

Version Goal
v0.2 (current) Claude Code / Codex / Shell sessions, Auto Pilot, bounded preview, TerminalView performance, diagnostics
v0.3 More tools (Aider/Open Claw), session groups, fuzzy search
v0.4 Web version (textual-web), diff view, Docker isolation

📄 License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_code_terminal-0.2.3.tar.gz (152.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_code_terminal-0.2.3-py3-none-any.whl (51.3 kB view details)

Uploaded Python 3

File details

Details for the file claude_code_terminal-0.2.3.tar.gz.

File metadata

  • Download URL: claude_code_terminal-0.2.3.tar.gz
  • Upload date:
  • Size: 152.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for claude_code_terminal-0.2.3.tar.gz
Algorithm Hash digest
SHA256 7b80f12d8c1cdd3070749f377abe1ef002af171d654a620d8099ea023b489f07
MD5 6124a0ace2bb3546aaf3fef0583f2692
BLAKE2b-256 14b4e2f66f77bb0edc9df268d73b4950b1f225bbf5130edafb3aaba76fe5e28e

See more details on using hashes here.

File details

Details for the file claude_code_terminal-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for claude_code_terminal-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d5017ded9cc5c4033cf28833652e204b36654d6982e497e1f58400f82e06aae3
MD5 7cd5fa71d99d76de969395862ca3d3bc
BLAKE2b-256 8f25aec2abf267dffa9db9ab21aa41b5c22136f6d8a9f98db4beab1988e2d045

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page