Agent Tmux Monitor (ATM)
⚠️ Warning: This software was vibe coded by Claude while the author nodded along approvingly. It works surprisingly well, but if it summons a daemon (the other kind), you're on your own.
Real-time monitoring for Claude Code agents across tmux sessions.
Know what your AI agents are doing, before they hit limits.

Overview
Agent Tmux Monitor provides a centralized, real-time dashboard for monitoring multiple Claude Code sessions. If you're running several Claude Code agents across tmux windows, ATM gives you instant visibility into:
- Context usage - See which sessions are approaching context limits
- Agent status - Know when agents are thinking, waiting for permission, or idle
- Cost tracking - Monitor spending across all sessions
- Session navigation - Jump directly to any tmux session with a keypress
Features
- Real-time updates - Status refreshes every ~300ms via Claude Code hooks
- Keyboard-driven interface - Familiar TUI with vim-style navigation
- Split-pane layout - Overview panel + detailed session view
- Context progress bars - Visual indicators for context window usage
- Tmux integration - Press Enter to jump directly to any session
- Zero impact - Non-blocking hooks that never slow down Claude Code
- Graceful degradation - Works even when daemon is temporarily unavailable
Installation
Quick Install (Recommended)
|
This downloads pre-built binaries, installs them to ~/.local/bin, and configures Claude Code hooks automatically.
Using Cargo
If you have Rust installed:
# From source
# Or with pre-built binaries (faster)
Then configure the hooks:
Manual Installation
-
Download the latest release for your platform from GitHub Releases
-
Extract and install:
-
Configure Claude Code hooks:
Verify Installation
# Check binaries are installed
# Check daemon status
Quick Start
-
Launch ATM:
(The daemon starts automatically if it's not already running)
-
Start using Claude Code - sessions will automatically appear as you work.
Usage
Keyboard Controls
| Key | Action |
|---|---|
j / ↓ |
Move selection down |
k / ↑ |
Move selection up |
Enter |
Jump to selected tmux session |
Tab |
Toggle between panels |
q |
Quit |
? |
Show help |
Daemon Commands
# Start daemon in background
# Start daemon in foreground (for debugging)
# Check daemon status
# Stop daemon
TUI Options
# Launch with default settings
# Pick mode - select a session and exit (useful for scripting)
# Show version
# Show help
Tmux Popup Integration
Run ATM in a tmux popup for quick session switching without leaving your current window:
# Add this to your ~/.tmux.conf
Now press <prefix>-a to pop up ATM, select a session, and jump directly to it. The popup closes automatically after selection.
Tip: Adjust -w (width) and -h (height) percentages to your preference.
Configuration
Claude Code Hooks
ATM integrates with Claude Code via hooks. The atm setup command automatically adds these to ~/.claude/settings.json:
Daemon Socket
The daemon listens on a Unix socket at /tmp/atm.sock. This can be customized via environment variable:
ATM_SOCKET=/path/to/custom.sock
Architecture
ATM consists of three components:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude Code │────▶│ atmd │◀────│ atm │
│ (+ hooks) │ │ (daemon) │ │ (TUI) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ atm-hook script │ Unix socket │ Real-time
│ reports events │ /tmp/atm.sock │ display
▼ ▼ ▼
- atm-hook - Shell script that reports Claude Code events to the daemon
- atmd - Background daemon that maintains session registry and broadcasts updates
- atm - Terminal UI that connects to daemon and displays session status
Session Lifecycle
- Claude Code starts →
atm-hooksends registration to daemon - Status updates every ~300ms via StatusLine hook
- Tool usage reported via PreToolUse/PostToolUse hooks
- Session marked stale after 90s of inactivity
- Stale sessions cleaned up automatically
Requirements
System Requirements
- OS: Linux or macOS (Windows not currently supported)
- Terminal: Any terminal with 256-color support
- tmux: Required for session jump functionality
Runtime Dependencies
socat- For Unix socket communication (install via package manager)jq- For JSON parsing in hook scripts (install via package manager)
Install on Ubuntu/Debian:
Install on macOS:
Install on Arch Linux:
Troubleshooting
Daemon won't start
Check if another instance is running:
# If stuck, manually remove socket
Sessions not appearing
-
Verify hooks are configured:
| -
Check that
atm-hookis in PATH: -
Test hook manually:
|
TUI shows "Daemon Disconnected"
Start or restart the daemon:
High CPU usage
This shouldn't happen with normal usage. If it does:
- Check number of active sessions (
atmd status) - Restart daemon (
atmd stop && atmd start -d) - File a bug report with logs from
~/.local/state/atm/atm.log
Uninstalling
# Stop daemon
# Remove hooks and binaries
# Or manually:
# Remove hooks from ~/.claude/settings.json
Contributing
Contributions are welcome!
Building from Source
# Clone repository
# Build
# Run tests
# Binaries are in target/release/
Project Structure
agent-tmux-monitor/
├── Cargo.toml # Workspace root, defines both binaries
├── crates/
│ ├── atm-core/ # Shared domain types and logic
│ ├── atm-protocol/ # Wire protocol definitions
│ ├── atm/ # TUI application
│ └── atmd/ # Daemon server
├── scripts/
│ ├── install.sh # Installation script
│ └── atm-hook # Claude Code hook script
└── docs/ # Documentation
License
MIT License - see LICENSE for details.