README
ΒΆ
Agent Deck
Terminal session manager for AI agents
Features β’ Installation β’ Usage β’ Documentation β’ Contributing

Why Agent Deck?
Running multiple AI coding agents across projects gets messy fast. Agent Deck gives you a unified dashboard to manage all your sessionsβClaude Code, Gemini CLI, Aider, Codex, or any terminal tool.
- π Universal β Works with any terminal program, not locked to one AI
- β‘ Fast β Instant session creation, no forced program startup
- π Organized β Project-based hierarchy with collapsible groups
- π Searchable β Find any session instantly with fuzzy search
- π― Smart Status β Knows when your agent is busy vs. waiting for input
- πͺ¨ Rock Solid β Built on tmux, battle-tested for 20+ years
Features
π Claude Code Deep Integration
Agent Deck offers first-class Claude Code integration with powerful session forking:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Parent Session β Forked Sessions β
β βββββββββββββββββββ β βββββββββββββββββββ β
β β "Build auth" βββββ Fork βββββΊβ β "Try JWT" β β
β β claude session β β βββββββββββββββββββ β
β β βββββ Fork βββββΊβ βββββββββββββββββββ β
β β β β β "Try OAuth" β β
β βββββββββββββββββββ β βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Fork a conversation to explore multiple approaches in parallel:
- Press
fto quick-fork any Claude session - Press
Fto fork with custom name/group - Each fork inherits full conversation context from parent
- Forks get their own session IDβcan be forked again!
Use cases:
- π Branching explorations β Try different implementation approaches from the same context
- π§ͺ Experiment safely β Fork before risky changes, keep original intact
- π₯ Parallel work β Multiple Claude instances working from same knowledge base
- π Learning β Fork to ask "what if" questions without derailing main session
Automatic session detection:
- Detects Claude session ID from
.jsonlfiles - Tracks sessions across restarts
- Handles multiple Claude sessions in same project
- Works with custom Claude profiles (
CLAUDE_CONFIG_DIR)
Intelligent Status Detection
Agent Deck automatically detects what your AI agent is doing:
| Status | Symbol | Meaning |
|---|---|---|
| Running | β green |
Agent is actively working |
| Waiting | β yellow |
Prompt detected, needs your input |
| Idle | β gray |
Session ready, nothing happening |
| Error | β red |
Session has an error |
Works out-of-the-box with Claude Code, Gemini CLI, Aider, and Codexβdetecting busy indicators, permission prompts, and input requests.
Supported Tools
| Icon | Tool | Status Detection |
|---|---|---|
| π€ | Claude Code | Busy indicators, permission dialogs, prompts |
| β¨ | Gemini CLI | Activity detection, prompts |
| π§ | Aider | Y/N prompts, input detection |
| π» | Codex | Prompts, continuation requests |
| π | Any Shell | Standard shell prompts |
Installation
Works on: macOS β’ Linux β’ Windows (WSL)
curl -fsSL https://raw.githubusercontent.com/asheshgoplani/agent-deck/main/install.sh | bash
That's it! The installer automatically handles tmux if needed.
Then run: agent-deck
Windows: Install WSL first, then run the command above.
Other install methods
Homebrew
brew install asheshgoplani/tap/agent-deck
Go
go install github.com/asheshgoplani/agent-deck/cmd/agent-deck@latest
From Source
git clone https://github.com/asheshgoplani/agent-deck.git && cd agent-deck && make install
Usage
Launch the TUI
agent-deck
CLI Commands
# Add a session
agent-deck add . # Current directory
agent-deck add ~/projects/myapp # Specific path
agent-deck add . -t "My App" -g work # With title and group
agent-deck add . -c claude # With command (claude, gemini, aider, codex)
# List sessions
agent-deck list # Table format
agent-deck list --json # JSON for scripting
# Remove a session
agent-deck remove <id|title> # By ID or title
Keyboard Shortcuts
Navigation
| Key | Action |
|---|---|
j / β |
Move down |
k / β |
Move up |
h / β |
Collapse group |
l / β / Tab |
Expand group |
Enter |
Attach to session |
Session Management
| Key | Action |
|---|---|
n |
New session |
g |
New group |
R |
Rename session/group |
m |
Move session to group |
d |
Delete |
K / J |
Reorder up/down |
Claude Code Integration
| Key | Action |
|---|---|
f |
Quick fork Claude session (inherits conversation context) |
F |
Fork with custom name/group |
Fork requires an active Claude Code session with a valid session ID.
Search & Import
| Key | Action |
|---|---|
/ |
Search sessions |
i |
Import existing tmux sessions |
r |
Refresh |
While Attached
| Key | Action |
|---|---|
Ctrl+Q |
Detach (session keeps running) |
Documentation
Project Organization
Sessions are organized in a hierarchical folder structure:
βΌ Projects (5)
ββ frontend β
ββ backend β
ββ βΌ devops (2)
ββ deploy β
ββ monitor β
βΌ Personal (2)
ββ blog β
- Groups can be nested to any depth
- Sessions inherit their parent group
- Empty groups persist until deleted
- Order is preserved and customizable
Session Preview
The preview pane shows:
- Live terminal output (last lines)
- Session metadata (path, tool, group)
- Current status
Import Existing Sessions
Press i to discover tmux sessions not created by Agent Deck. It will:
- Find all tmux sessions
- Auto-detect the tool from session name
- Auto-group by project directory
- Add to Agent Deck for unified management
Configuration
Data is stored in ~/.agent-deck/:
~/.agent-deck/
βββ sessions.json # Sessions, groups, state
βββ config.toml # User configuration (optional)
βββ hooks/ # Hook scripts (optional)
Recommended tmux Configuration
For optimal experience with mouse copy, scroll, and clipboard integration, use this config in ~/.tmux.conf:
macOS
# ============================================
# Minimal tmux Configuration for macOS
# Mouse copy, scroll, and clipboard - just works
# ============================================
# ----- Terminal -----
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",*256col*:Tc"
# ----- Performance -----
set -sg escape-time 0
set -g history-limit 50000
# ----- Mouse (enables scroll + drag-to-copy) -----
set -g mouse on
# ----- Clipboard -----
set -s set-clipboard external
# Mouse drag automatically copies to system clipboard
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
# Double-click selects word, triple-click selects line (auto-copies)
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "pbcopy"
Linux (X11 with xclip)
# ============================================
# Minimal tmux Configuration for Linux
# Mouse copy, scroll, and clipboard - just works
# ============================================
# ----- Terminal -----
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",*256col*:Tc"
# ----- Performance -----
set -sg escape-time 0
set -g history-limit 50000
# ----- Mouse (enables scroll + drag-to-copy) -----
set -g mouse on
# ----- Clipboard -----
set -s set-clipboard external
# Mouse drag automatically copies to system clipboard
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
# Double-click selects word, triple-click selects line (auto-copies)
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
For Wayland, replace xclip -in -selection clipboard with wl-copy.
After adding, reload:
tmux source-file ~/.tmux.conf
What this config does:
| Feature | How it works |
|---|---|
| Drag to copy | Click and drag β auto-copies to clipboard |
| Double-click | Selects word β auto-copies |
| Triple-click | Selects line β auto-copies |
| Mouse scroll | Just scroll with mouse wheel |
| Paste | Cmd+V (macOS) or Ctrl+Shift+V (Linux) |
Why these settings:
| Setting | Purpose |
|---|---|
escape-time 0 |
No delay on ESC key (fixes sluggishness) |
history-limit 50000 |
AI agents produce lots of output (default is 2000) |
set-clipboard external |
Secure clipboard (apps inside tmux can't hijack it) |
MouseDragEnd1Pane |
Auto-copy on mouse release |
Tip: Hold Shift while selecting to bypass tmux and use native terminal selection.
Claude Code Profile (Optional)
If you use a custom Claude profile directory (e.g., dual account setup), configure it in ~/.agent-deck/config.toml:
[claude]
config_dir = "~/.claude-work"
This tells Agent Deck where to find Claude session data for:
- Session ID detection
- Fork functionality
- Session tracking across restarts
Hook Integration (Optional)
For instant status updates without polling, configure hooks in your AI tool:
Claude Code (~/.claude/settings.json):
{
"hooks": {
"Stop": [{"hooks": [{"type": "command", "command": "~/.agent-deck/hooks/claude-code.sh"}]}]
}
}
Development
make build # Build binary
make test # Run tests
make dev # Run with auto-reload (requires 'air')
make fmt # Format code
make lint # Lint code (requires 'golangci-lint')
make release # Cross-platform builds
make clean # Clean build artifacts
Project Structure
agent-deck/
βββ cmd/agent-deck/ # CLI entry point
βββ internal/
β βββ ui/ # TUI components (Bubble Tea)
β βββ session/ # Session & group management
β βββ tmux/ # tmux integration, status detection
βββ Makefile
βββ go.mod
βββ README.md
Debug Mode
AGENTDECK_DEBUG=1 agent-deck
Logs status transitions to stderr for troubleshooting.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Comparison
| Feature | Agent Deck | Alternatives |
|---|---|---|
| Universal (any tool) | β | Often tool-specific |
| Claude Code fork | β Context inheritance | β Not available |
| Fast session creation | β Instant | Slow startup |
| Project hierarchy | β Nested groups | Flat lists |
| Session search | β Fuzzy search | Limited |
| Import existing | β tmux discovery | Manual only |
| Smart status | β Per-tool detection | Basic |
| Memory footprint | ~20MB | Higher |
License
MIT License - see LICENSE for details.
Acknowledgments
Built with:
- Bubble Tea β Terminal UI framework
- Lip Gloss β Style definitions
- tmux β Terminal multiplexer