TmuxCC
AI Agent Dashboard for tmux - Monitor and manage multiple AI coding agents from a single terminal interface.
TmuxCC is a TUI (Terminal User Interface) application that provides centralized monitoring and control of AI coding assistants running in tmux panes. It supports Claude Code, OpenCode, Codex CLI, and Gemini CLI.
Screenshot
+------------------------------------------------------------------+
| TmuxCC - AI Agent Dashboard Agents: 3 Active: 1|
+------------------------------------------------------------------+
| main (Session) | Preview: main:0.0 |
| +-- 0: code | |
| | +-- ~/project1 | Claude Code wants to edit: |
| | | * Claude Code ! [Edit] | src/main.rs |
| | | +-- > Explore (Running) | |
| | +-- ~/project2 | - fn main() { |
| | o OpenCode @ Processing | + fn main() -> Result<()> { |
| +-- 1: shell | |
| +-- ~/tools | Do you want to allow this |
| o Codex CLI * Idle | edit? [y/n] |
+------------------------------------------------------------------+
| [Y] Approve [N] Reject [A] All | [1-9] Choice | [Space] Select |
+------------------------------------------------------------------+
Replace with actual screenshot
Features
- Multi-Agent Monitoring: Track multiple AI agents across all tmux sessions and windows
- Real-time Status: See agent states at a glance (Idle, Processing, Awaiting Approval, Error)
- Approval Management: Approve or reject pending requests with single keystrokes
- Batch Operations: Select multiple agents and approve/reject all at once
- Hierarchical View: Tree display organized by Session/Window/Pane
- Subagent Tracking: Monitor spawned subagents (Task tool) with their status
- Context Awareness: View remaining context percentage when available
- Pane Preview: See live content from selected agent's tmux pane
- Focus Integration: Jump directly to any agent's pane in tmux
- Customizable: Configure polling interval, capture lines, and custom agent patterns
Supported AI Agents
| Agent |
Detection Method |
Approval Keys |
| Claude Code |
claude command, version numbers, window title with icon |
y / n |
| OpenCode |
opencode command |
y / n |
| Codex CLI |
codex command |
y / n |
| Gemini CLI |
gemini command |
y / n |
Installation
From crates.io
cargo install tmuxcc
From Source
git clone https://github.com/nyanko3141592/tmuxcc.git
cd tmuxcc
cargo build --release
cargo install --path .
Requirements
- tmux (must be running with at least one session)
- Rust 1.70+ (for building from source)
Usage
Quick Start
- Start tmux and run AI agents in different panes
- Launch TmuxCC from any terminal:
tmuxcc
Command Line Options
tmuxcc [OPTIONS]
Options:
-p, --poll-interval <MS> Polling interval in milliseconds [default: 500]
-l, --capture-lines <LINES> Lines to capture from each pane [default: 100]
-f, --config <FILE> Path to config file
-d, --debug Enable debug logging to tmuxcc.log
--show-config-path Show config file path and exit
--init-config Create default config file and exit
-h, --help Print help
-V, --version Print version
Examples
# Run with default settings
tmuxcc
# Set polling interval to 1 second
tmuxcc -p 1000
# Capture more lines for better context
tmuxcc -l 200
# Use custom config file
tmuxcc -f ~/.config/tmuxcc/custom.toml
# Enable debug logging
tmuxcc --debug
# Initialize default config file
tmuxcc --init-config
Key Bindings
Navigation
| Key |
Action |
j / Down |
Next agent |
k / Up |
Previous agent |
Tab |
Cycle through agents |
Selection
| Key |
Action |
Space |
Toggle selection of current agent |
Ctrl+a |
Select all agents |
Esc |
Clear selection / Close popup |
Actions
| Key |
Action |
y / Y |
Approve pending request(s) |
n / N |
Reject pending request(s) |
a / A |
Approve ALL pending requests |
1-9 |
Send numbered choice to agent |
f / F |
Focus on selected pane in tmux |
Left / Right |
Switch focus (Sidebar / Input) |
View
| Key |
Action |
s / S |
Toggle subagent log |
r |
Refresh agent list |
h / ? |
Show help |
q |
Quit |
Configuration
TmuxCC uses a TOML configuration file.
Initialize Config
# Create default config file
tmuxcc --init-config
# Show config file location
tmuxcc --show-config-path
Config File Location
| OS |
Path |
| Linux |
~/.config/tmuxcc/config.toml |
| macOS |
~/Library/Application Support/tmuxcc/config.toml |
| Windows |
%APPDATA%\tmuxcc\config.toml |
Configuration Options
# Polling interval in milliseconds
poll_interval_ms = 500
# Number of lines to capture from each pane
capture_lines = 100
# Custom agent patterns (optional)
# Add patterns to detect additional AI agents
[[agent_patterns]]
pattern = "my-custom-agent"
agent_type = "CustomAgent"
Status Indicators
| Icon |
Status |
! [Edit] |
File edit approval pending |
! [Shell] |
Shell command approval pending |
! [Question] |
User question awaiting response |
@ |
Processing |
* |
Idle |
? |
Unknown |
How It Works
- Discovery: TmuxCC scans all tmux sessions, windows, and panes
- Detection: Identifies AI agents by process name, window title, and command line
- Parsing: Agent-specific parsers analyze pane content for status and approvals
- Monitoring: Continuously polls panes at configurable intervals
- Actions: Sends keystrokes to panes for approvals/rejections
Project Structure
tmuxcc/
├── src/
│ ├── main.rs # Entry point
│ ├── lib.rs # Library root
│ ├── agents/ # Agent type definitions
│ │ ├── types.rs # AgentType, AgentStatus, MonitoredAgent
│ │ └── subagent.rs # Subagent, SubagentType, SubagentStatus
│ ├── app/ # Application logic
│ │ ├── state.rs # AppState, AgentTree, InputMode
│ │ ├── actions.rs # Action enum
│ │ └── config.rs # Configuration
│ ├── monitor/ # Monitoring
│ │ └── task.rs # Async monitoring task
│ ├── parsers/ # Agent output parsers
│ │ ├── mod.rs # AgentParser trait
│ │ ├── claude_code.rs
│ │ ├── opencode.rs
│ │ ├── codex_cli.rs
│ │ └── gemini_cli.rs
│ ├── tmux/ # tmux integration
│ │ ├── client.rs # TmuxClient
│ │ └── pane.rs # PaneInfo, process detection
│ └── ui/ # UI implementation
│ ├── app.rs # Main loop
│ ├── layout.rs # Layout definitions
│ └── components/ # UI components
└── Cargo.toml
Tech Stack
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Here's how you can help:
Getting Started
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature)
- Make your changes
- Run tests (
cargo test)
- Run clippy (
cargo clippy)
- Format code (
cargo fmt)
- Commit your changes (
git commit -m 'Add amazing feature')
- Push to the branch (
git push origin feature/amazing-feature)
- Open a Pull Request
Areas for Contribution
- New Agent Support: Add parsers for other AI coding assistants
- UI Improvements: Enhance the terminal interface
- Performance: Optimize polling and parsing
- Documentation: Improve docs and examples
- Bug Fixes: Report and fix issues
- Tests: Improve test coverage
Code Style
- Follow Rust conventions and idioms
- Run
cargo fmt before committing
- Ensure
cargo clippy passes without warnings
- Add tests for new functionality
Related Projects