loading…
Search for a command to run...
loading…
Lets Claude manage tmux sessions on Linux — start long-running ML training jobs, check their output, send keystrokes, and kill them.
Lets Claude manage tmux sessions on Linux — start long-running ML training jobs, check their output, send keystrokes, and kill them.
Lets Claude Desktop on Linux start, monitor, and control long-running jobs inside tmux sessions. Designed for ML training, data pipelines, and anything else you want to survive beyond a single conversation.
Claude can start a detached training run, check on it an hour later by capturing the last N lines of its pane, send keystrokes (including Ctrl+C), and kill the session when done. You can tmux attach -t <name> from any real terminal to watch the same session live — Claude and a human can observe simultaneously.
tmux installed:sudo apt install tmux
Sessions.mcpb from the Releases page..mcpb.| Tool | Annotation | What it does |
|---|---|---|
list_sessions |
read-only | All tmux sessions with name, windows, created/activity timestamps, attached flag |
has_session |
read-only | Exact-match check for a session name |
list_windows |
read-only | Windows within a session (index, name, active, pane count) |
capture_pane |
read-only | Last N lines of the session's active pane (default 100, max 10000) |
new_session |
destructive | Start a detached session; optionally run an initial shell command |
send_keys |
destructive | Send key combos or text to the active pane (Enter appended by default) |
kill_session |
destructive | Terminate a session (sends SIGHUP to all processes inside) |
Start a training run:
"Start training run
b8-c1: activate myrdna4-trainvenv and run train.py."
new_session name=b8-c1 command="source ~/.venvs/rdna4-train/bin/activate && python /media/luke/Storage\ Device\ 1/NeuroForge/train.py b8-c1"
Check on it later:
"Is training
b8-c1still going? Show me the last 50 lines."
capture_pane name=b8-c1 lines=50
Interrupt a hung run:
"The training is stuck — send Ctrl+C."
send_keys name=b8-c1 keys="C-c" enter=false
Wrap up:
"Kill the session."
kill_session name=b8-c1
send_keys accepts either literal text (sent as keystrokes) or tmux key names. Common ones:
| Keys | Effect |
|---|---|
C-c |
Ctrl+C (interrupt) |
C-d |
Ctrl+D (EOF / logout) |
Escape |
Escape key |
Up, Down, Left, Right |
Arrow keys |
Enter |
Enter (also appended automatically when enter is true) |
Space |
Space |
Pass enter: false when sending raw combos so you don't get an extra Enter after.
This extension runs entirely on your local machine and shells out only to the tmux binary. No data leaves your machine. No network I/O. No sockets. No files written outside of tmux's own per-user server socket (default /tmp/tmux-$UID/default).
The information visible to Claude includes session names, pane contents (the text you or your programs have printed), and session metadata (created/activity timestamps, window/pane counts). send_keys and kill_session can affect any process running inside a managed session, so treat it with the same trust level you'd give to a user typing into your terminal.
"tmux is not installed" — run sudo apt install tmux.
"can't find pane" errors — generally means the named session was killed mid-operation. Call has_session first, or use list_sessions to see what's actually running.
Session name restrictions — names cannot contain ., :, |, or whitespace. The . and : are tmux target separators; | is this server's field delimiter; whitespace is rejected on principle.
Session doesn't survive my initial command — by design, new_session always starts a shell; the command argument is sent as keystrokes into that shell. That's what keeps the session alive after the command finishes. If you passed command directly to tmux new-session it would exit when the command did.
Single ~300-line Node.js script, zero npm dependencies. Rebuild the .mcpb:
cd bundle-source
zip -j ../Sessions.mcpb manifest.json package.json server.js README.md LICENSE icon.png glama.json
MIT. See LICENSE.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"claude-sessions-mcp": {
"command": "npx",
"args": []
}
}
}