Wie man ein Dutzend laufender Claude-Code-Sitzungen in tmux organisiert
Wenn du Claude Code im Terminal für ein paar schnelle Bearbeitungen startest, sieht alles ordentlich aus. Befehl ausführen, Aufgabe geben, auf die Antwort warten, schließen. Probleme entstehen, wenn du vier oder fünf Projekte gleichzeitig offen hast. In einem Repository refaktorisiert der Agent Tests, in einem anderen schreibt er eine Datenbankmigration, und in einem dritten führt er einen Build durch.
Innerhalb einer halben Stunde wird das Terminal zum Labyrinth. Es ist unklar, wo der Agent auf Befehlsbestätigung wartet, wo er noch Skripte ausführt und wo er längst fertig ist und nur noch untätig dasitzt. Du musst manuell durch tmux-Fenster zykeln und Zeit damit verschwenden, Status zu überprüfen.
Tak Matsuyama, Autor des devas.life-Blogs und mehrerer beliebter Utilities für Neovim und tmux, hat eine Lösung für dieses Problem entwickelt. Sein Plugin tmux-claude-session-manager verwandelt verstreute Terminal-Fenster mit Agents in eine übersichtliche Liste mit schnellem Wechseln.
Was das Plugin macht
Im Grunde ist es ein Task-Manager für Claude Code innerhalb von tmux. Das Tool verbindet die fzf-Oberfläche, tmux' eingebauten Popup-Mechanismus und Claude Codes eigene interne API.
Du drückst eine Tastenkombination und siehst ein schwebendes Fenster mit einer Liste aller laufenden Sitzungen. Jeder Prozess zeigt sofort seinen Status:
- working (der Agent ist beschäftigt mit dem Generieren oder Ausführen von Befehlen);
- waiting (Benutzereingabe oder Bestätigung ist erforderlich);
- idle (die Sitzung ist untätig);
- Zeit seit der letzten Aktivität des Agents.
Agents, die deine Aufmerksamkeit benötigen, werden automatisch an den Anfang der Liste verschoben. Eine Live-Vorschau des Bildschirms über capture-pane wird daneben angezeigt. Du kannst sofort sehen, welche Frage den Assistant verwirrt hat, ohne überhaupt zur Sitzung zu wechseln.
Enter bringt dich direkt in den Kontext des gewünschten Fensters und öffnet die Sitzung in einem Popup-Frame. Dialog beendet oder der Agent hat seine Arbeit erledigt — drücke die Tastenkombination, um den Prozess zu entfernen, und die Sitzung wird sauber geschlossen.
Interessante Details unter der Haube
Es gibt hier keine benutzerdefinierten Daemons oder schweren bash-Hooks, die ps-Ausgabe parsen. Der Autor hat einen eleganteren Weg gewählt.
Claude Code Versionen 2.1.139 und höher können Informationen über ihre Agents über den eingebauten claude agents --json-Befehl bereitstellen. Jede laufende Instanz meldet ihren aktuellen Status an einen lokalen Supervisor. Das Plugin liest dieses JSON einfach über jq aus.
Die größte technische Herausforderung war das Zuordnen von Prozessen zu tmux-Panes. Auf macOS meldet ein Pane zum Beispiel oft die PID der übergeordneten Shell statt die des untergeordneten Programms. Innerhalb des Plugins verknüpft das agents.sh-Skript Bezeichner entlang einer Kette: pid -> tty -> tmux pane.
Dank dieser Bindung verfolgt das Plugin Prozesse statt Sitzungen. Wenn du drei verschiedene Agents in einem Projekt gestartet oder Claude in einem normalen benachbarten Pane ohne das Plugin geöffnet hast, findet das Tool trotzdem jeden Prozess und zeigt ihn als separate Zeile an. Die gesamte Abfrage dauert nur drei Systemaufrufe, sodass die Oberfläche ohne Verzögerungen funktioniert.
Ein weiteres nettes Detail: Wenn du das Auswahlmenü (prefix + u) öffnest, während du dich bereits in einem Claude-Popup befindest, löst das Plugin zuerst das aktuelle Popup und erweitert dann das Auswahlfenster auf die volle Größe des äußeren Terminals. Keine verschachtelten Matrjoschka-Puppen mit schrumpfenden Frames.
Installation und grundlegende Einrichtung
Du brauchst tmux Version 3.2 oder höher mit Popup-Unterstützung, fzf installiert, das jq-Utility und eine aktuelle Claude-Code-Version.
Wenn du den TPM-Plugin-Manager verwendest, füge diese Zeile zu deiner ~/.tmux.conf-Konfigurationsdatei hinzu:
set -g @plugin 'craftzdog/tmux-claude-session-manager'
Danach drücke prefix + I zum Laden.
Standardmäßig verwendet das Plugin zwei Tastenkombinationen:
prefix+ystartet eine neue Claude-Sitzung im aktuellen Verzeichnis in einem Popup-Fenster (oder verbindet sich mit einer bestehenden);prefix+uöffnet den fzf-Selektor mit allen aktiven Agents.
Im Listenfenster funktionieren Standardpfeile und Textfilterung. Enter wechselt zur ausgewählten Sitzung, und Ctrl-x beendet den Prozess gewaltsam.
Parameter lassen sich leicht überschreiben. Du kannst zum Beispiel Launch-Flags für Claude selbst setzen oder die Fensterabmessungen ändern:
set -g @claude_popup_width '85%'
set -g @claude_popup_height '85%'
set -g @claude_args '--dangerously-skip-permissions'
Für Fans modaler Steuerung gibt es im README ein großartiges Beispiel für die Integration mit vim-artigem Layout. Du kannst fzf so konfigurieren, dass die Liste im Navigationsmodus über j/k geöffnet wird und der Wechsel in den Suchmodus mit den Tasten i oder a erfolgt:
set -g @claude_fzf_options "\
--prompt 'nav> ' \
--bind 'j:down' \
--bind 'k:up' \
--bind 'q:abort' \
--bind 'x:execute-silent(kill {3})+reload(sleep 0.3; \$CLAUDE_PICKER --list)' \
--bind 'i:unbind(j,k,q,i,a,x)+change-prompt(filter> )' \
--bind 'a:unbind(j,k,q,i,a,x)+change-prompt(filter> )' \
--bind 'esc:rebind(j,k,q,i,a,x)+change-prompt(nav> )'"
Lohnt sich die Installation
Wenn du Claude Code einmal pro Woche für ein paar Zeilen Code verwendest, kommst du problemlos ohne das Plugin aus. Ein normaler Terminal-Tab ist völlig ausreichend.
Das Tool ist nützlich für alle, die den Agent-Ansatz im Terminal aktiv nutzen und Aufgaben über verschiedene Branches oder Teilprojekte parallelisieren. Das Plugin eliminiert die Mühe, den richtigen Tab zu finden, und konsolidiert die Überwachung von Hintergrundaufgaben auf einem klaren Bildschirm. Die Einrichtung dauert ein paar Minuten, und der Quellcode des Skripts ist kompakt und transparent, ohne unnötige Magie.
Ähnliche Projekte
