claudeers.

🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?

Claim this page →
// DevOps & CI/CD

tmux-claude-session-manager

Run many Claude Code sessions across your projects, each in its own tmux session — then list them, see which are done vs. still working, and jump to one from…

// DevOps & CI/CD[ cli ][ api ][ claude ]#claude#claude-code#tmux#devopsMIT$open-sourceupdated 7 days ago
Actively maintained
100/100
last commit about 1 hour ago
last release about 1 hour ago
releases 3
open issues 0
// install
git clone https://github.com/craftzdog/tmux-claude-session-manager

tmux-claude-session-manager

screenshot

Run many Claude Code sessions across your projects, each in its own tmux session — then list them, see which are done vs. still working, and jump to one from a single popup.

If you launch Claude per-directory (one nested session per project), you quickly end up with a dozen of them and no way to tell which are finished without opening each one. This plugin gives you:

  • 🔢 A central picker (prefix + u) listing every running Claude session.
  • 🟢 Live status per session — working / waiting / idle — driven by Claude Code hooks, so you instantly see which need you.
  • 👁️ A live preview of each session's screen right in the picker.
  • 🎯 Smart jump — selecting a session switches your client to the window it was launched from, then resumes it in a popup over it.
  • 🚀 A launcher (prefix + y) that opens/attaches a Claude session for the current directory.
  • Quick kill (ctrl-x) of finished sessions from the picker.

Status is optional: without the hooks the picker still lists, previews, jumps, and kills — sessions just show ? instead of a color.

Prerequisites

  • tmux ≥ 3.2 (for display-popup)
  • fzf — the picker UI
  • Claude Code CLI (the claude command)
  • bash; macOS or Linux

Install (tpm)

Add to ~/.tmux.conf (or ~/.config/tmux/tmux.conf):

set -g @plugin 'craftzdog/tmux-claude-session-manager'

Then hit prefix + I to install.

Keybinding note: by default the plugin binds prefix + y (launch) and prefix + u (list). If your config binds those elsewhere, either change the options below, or make sure the plugin loads after your own bindings (put run '~/.tmux/plugins/tpm/tpm' after them) so the one you want wins.

Manual install

git clone https://github.com/craftzdog/tmux-claude-session-manager ~/clone/path

Add to ~/.tmux.conf, then reload (prefix + r or tmux source ~/.tmux.conf):

run-shell ~/clone/path/claude_session_manager.tmux

Usage

KeyAction
prefix + yLaunch (or re-attach to) a Claude session for the current directory, in a popup
prefix + uOpen the session picker

Inside the picker:

KeyAction
enterJump to the session (switches to its origin window, resumes in the popup)
ctrl-xKill the highlighted session
/ , type to filterfzf navigation

Sessions needing your attention (waiting, idle) sort to the top.

Status comes from Claude Code hooks that stamp each session's state onto its tmux session. Add the following to your Claude Code settings (~/.claude/settings.json), merging into any existing hooks block. Adjust the path if your plugins live elsewhere (e.g. ~/.tmux/plugins/...):

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "$HOME/.config/tmux/plugins/tmux-claude-session-manager/scripts/state.sh working"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "$HOME/.config/tmux/plugins/tmux-claude-session-manager/scripts/state.sh waiting"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          {
            "type": "command",
            "command": "$HOME/.config/tmux/plugins/tmux-claude-session-manager/scripts/state.sh waiting"
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "$HOME/.config/tmux/plugins/tmux-claude-session-manager/scripts/state.sh idle"
          }
        ]
      }
    ]
  }
}

The state machine:

EventStateMeaning
UserPromptSubmit🔴 workingBusy — leave it
Notification (permission)🟡 waitingNeeds permission
PreToolUse (AskUserQuestion)🟡 waitingAsking you a question
Stop🟢 idleTurn finished — your move

Claude Code reloads hooks dynamically — no restart needed. Sessions that are already running start reporting status on their next event once the hooks are added.

Options

Set any of these before the plugin loads (defaults shown):

set -g @claude_launch_key     'y'        # prefix key: launch/open for current dir
set -g @claude_list_key       'u'        # prefix key: open the picker
set -g @claude_command        'claude'   # command run in new sessions
set -g @claude_args           ''         # extra args appended to the command
set -g @claude_session_prefix 'claude-'  # tmux session name prefix
set -g @claude_popup_width     '90%'     # popup width
set -g @claude_popup_height    '90%'     # popup height

For example, to skip permission prompts in launched sessions:

set -g @claude_args '--dangerously-skip-permissions'

How it works

  • The launcher creates a detached claude-<hash-of-dir> tmux session running claude, records the window it came from in @claude_origin, and attaches to it in a popup.
  • The hooks set @claude_state / @claude_state_at on each session as Claude works.
  • The picker lists sessions matching the prefix, reads their state and a live capture-pane preview, and on selection moves your client to the session's origin window before resuming it in the popup.
  • Pressing prefix + u from inside a session popup detaches that popup first (closing it), then reopens the picker full-size on the outer host client — so you never end up with a cramped popup-in-popup.

License

MIT © Takuya Matsuyama

// compatibility

Platformscli, api
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguageShell

// faq

What is tmux-claude-session-manager?

Run many Claude Code sessions across your projects, each in its own tmux session — then list them, see which are done vs. still working, and jump to one from a single popup.. It is open-source on GitHub.

Is tmux-claude-session-manager free to use?

tmux-claude-session-manager is open-source under the MIT license, so it is free to use.

What category does tmux-claude-session-manager belong to?

tmux-claude-session-manager is listed under devops in the Claudeers registry of Claude-compatible tools.

0 views
253 stars
unclaimed
updated 7 days ago

// embed badge

tmux-claude-session-manager on Claudeers
[![Claudeers](https://claudeers.com/api/badge/tmux-claude-session-manager.svg)](https://claudeers.com/tmux-claude-session-manager)

// retro hit counter

tmux-claude-session-manager hit counter
[![Hits](https://claudeers.com/api/counter/tmux-claude-session-manager.svg)](https://claudeers.com/tmux-claude-session-manager)

// reviews

// guestbook

0/500

// related in DevOps & CI/CD

🔓

⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI…

// devopssansan0/Python60,216GPL-3.0[ claude ]
🔓

Use Claude Code as the foundation for coding infrastructure, allowing you to decide how to interact with the model while enjoying updates from Anthropic.

// devopsmusistudio/TypeScript35,590MIT[ claude ]
🔓

Professional Antigravity Account Manager & Switcher. One-click seamless account switching for Antigravity Tools. Built with Tauri v2 + React (Rust).专业的 Antig…

// devopslbjlaq/Rust30,028NOASSERTION[ claude ]
→ see how tmux-claude-session-manager connects across the ecosystem