Tmux AI Control Tower — A terminal dashboard for monitoring and managing multiple AI coding sessions running in tmux panes.
I wanted to accept/reject my AI assistant's work without leaving one window in tmux.
I also wanted notifications when my input was needed. So I built this.
Just run tact in a window within tmux and it will detect other panes/windows running Claude Code or other coding agent.
- Switch easily between AI coding sessions like Claude Code, Codex, Opencode and Kiro-cli in tmux
- Accept/Reject your agent's work
- Automatically detects session states (idle, working, needs attention, disconnected)
- See context window utilization at a glance
- Get alerts when sessions need attention
- Create and manage project-level todos synced across sessions
- Rename sessions in the TUI without affecting their project todo grouping
- Preview pane output without switching panes
- Wrap session navigation cyclically when moving past the first or last item
- Switch between three built-in TUI themes and three distinct layout styles, and keep your choices across launches
curl -sSL https://raw.githubusercontent.com/Fabio-RibeiroB/tact/main/go/install.sh | bashgit clone https://github.com/Fabio-RibeiroB/tact.git
cd tact/go
make install- Go 1.22 or later
- tmux 3.0+
Run tact within any window/pane to auto detect your AI coding sessions.
tact| Key | Action |
|---|---|
j/k or ↑/↓ |
Navigate sessions/todos |
Tab |
Switch focus panel |
Enter |
Switch to selected pane |
r |
Refresh session discovery |
R |
Rename selected session |
n |
Toggle notifications |
T |
Cycle theme |
S |
Cycle style |
i |
Enter insert mode in Sessions tab |
Esc |
Exit insert mode |
q / Ctrl+C |
Quit |
| Key | Action |
|---|---|
y |
Confirm/continue |
t |
Kiro trust/approve option |
a |
Auto-approve tool use |
! |
Cancel current operation (sends Escape) |
| Key | Action |
|---|---|
i |
Add new todo |
Enter |
Mark todo as done |
d / x |
Delete todo |
Esc |
Exit insert mode |
# Manage todos from command line
tact todo list
tact todo add "Implement feature X" -p myproject -t feature,backend
tact todo done abc12345
tact todo start abc12345
tact todo rm abc12345tact/
├── go/
│ ├── cmd/tact/ # CLI entry point
│ ├── internal/
│ │ ├── model/ # Domain types (SessionInfo, TodoItem, etc.)
│ │ ├── parser/ # JSONL parsing, status detection
│ │ ├── tmux/ # Tmux pane discovery and capture
│ │ ├── notify/ # Desktop notifications
│ │ ├── todo/ # Shared todo store with sync
│ │ └── tui/ # Bubble Tea terminal UI
│ ├── go.mod
│ └── Makefile
└── docs/
└── imgs/ # Screenshots and diagrams
Tact stores its state under ~/.tact/:
config.json— persisted theme and style choicedata/session-names.json— custom session rename overridesdata/todos/<project-slug>.json— project-specific todo lists
This project is licensed under the MIT License - see the LICENSE file for details.
- Bubble Tea — Terminal UI framework
- Lip Gloss — Style definitions
- Cobra — CLI framework
