tmux MCP, built in TypeScript
tmux terminal control for AI agents, built on libtmux for TypeScript and MCP TypeScript SDK. This server maps tmux's object hierarchy — sessions, windows, panes — into MCP tools grouped by the operation they request. The server enforces the selected groups at the MCP tool boundary.
Install
Choose your client and configuration scope, then run the command or paste the configuration.
$ claude mcp add tmux -- npx -y @libtmux/mcp
Config file: ~/.claude.json (this project)
$ claude mcp add tmux -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.claude.json (this project)
$ claude mcp add tmux -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ~/.claude.json (this project)
$ claude mcp add tmux --scope user -- npx -y @libtmux/mcp
Config file: ~/.claude.json (all projects)
$ claude mcp add tmux --scope user -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.claude.json (all projects)
$ claude mcp add tmux --scope user -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ~/.claude.json (all projects)
$ claude mcp add tmux --scope project -- npx -y @libtmux/mcp
Config file: .mcp.json (in repo, version-controlled)
$ claude mcp add tmux --scope project -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: .mcp.json (in repo, version-controlled)
$ claude mcp add tmux --scope project -- npx -y --min-release-age=0 @libtmux/mcp
Config file: .mcp.json (in repo, version-controlled)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ claude mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (this project)
Build or install the server first:
Then register:
$ claude mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (this project)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ claude mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (this project)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ claude mcp add tmux --scope user -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (all projects)
Build or install the server first:
Then register:
$ claude mcp add tmux --scope user -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (all projects)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ claude mcp add tmux --scope user -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.claude.json (all projects)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ claude mcp add tmux --scope project -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .mcp.json (in repo, version-controlled)
Build or install the server first:
Then register:
$ claude mcp add tmux --scope project -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .mcp.json (in repo, version-controlled)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ claude mcp add tmux --scope project -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .mcp.json (in repo, version-controlled)
Config file: claude_desktop_config.json
npx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: claude_desktop_config.json
Config file: claude_desktop_config.json
Build or install the server first:
$ npm install --global @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: claude_desktop_config.json
Build or install the server first:
Then use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: claude_desktop_config.json
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: claude_desktop_config.json
$ codex mcp add tmux -- npx -y @libtmux/mcp
Config file: ~/.codex/config.toml
$ codex mcp add tmux -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.codex/config.toml
$ codex mcp add tmux -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ~/.codex/config.toml
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
Config file: .codex/config.toml (in repo)
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
npx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: .codex/config.toml (in repo)
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
Config file: .codex/config.toml (in repo)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ codex mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.codex/config.toml
Build or install the server first:
Then register:
$ codex mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.codex/config.toml
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ codex mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.codex/config.toml
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .codex/config.toml (in repo)
Build or install the server first:
Then register:
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .codex/config.toml (in repo)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
Codex's CLI doesn't support project scope yet — paste this into .codex/config.toml at the repo root.
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .codex/config.toml (in repo)
$ gemini mcp add --scope user tmux npx -- -y @libtmux/mcp
Config file: ~/.gemini/settings.json
$ gemini mcp add --scope user tmux npx -- -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.gemini/settings.json
$ gemini mcp add --scope user tmux npx -- -y --min-release-age=0 @libtmux/mcp
Config file: ~/.gemini/settings.json
$ gemini mcp add --scope project tmux npx -- -y @libtmux/mcp
Config file: .gemini/settings.json (in repo)
$ gemini mcp add --scope project tmux npx -- -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: .gemini/settings.json (in repo)
$ gemini mcp add --scope project tmux npx -- -y --min-release-age=0 @libtmux/mcp
Config file: .gemini/settings.json (in repo)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ gemini mcp add --scope user tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/settings.json
Build or install the server first:
Then register:
$ gemini mcp add --scope user tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/settings.json
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ gemini mcp add --scope user tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/settings.json
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ gemini mcp add --scope project tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .gemini/settings.json (in repo)
Build or install the server first:
Then register:
$ gemini mcp add --scope project tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .gemini/settings.json (in repo)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ gemini mcp add --scope project tmux libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .gemini/settings.json (in repo)
Config file: .cursor/mcp.json (in repo)
npx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: .cursor/mcp.json (in repo)
Config file: .cursor/mcp.json (in repo)
Config file: ~/.cursor/mcp.json
npx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.cursor/mcp.json
Config file: ~/.cursor/mcp.json
Build or install the server first:
$ npm install --global @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .cursor/mcp.json (in repo)
Build or install the server first:
Then use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .cursor/mcp.json (in repo)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: .cursor/mcp.json (in repo)
Build or install the server first:
$ npm install --global @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.cursor/mcp.json
Build or install the server first:
Then use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.cursor/mcp.json
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.cursor/mcp.json
$ grok mcp add --scope user tmux -- npx -y @libtmux/mcp
Config file: ~/.grok/config.toml
$ grok mcp add --scope user tmux -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.grok/config.toml
$ grok mcp add --scope user tmux -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ~/.grok/config.toml
$ grok mcp add --scope project tmux -- npx -y @libtmux/mcp
Config file: ./.grok/config.toml (in repo)
$ grok mcp add --scope project tmux -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ./.grok/config.toml (in repo)
$ grok mcp add --scope project tmux -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ./.grok/config.toml (in repo)
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ grok mcp add --scope user tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.grok/config.toml
Build or install the server first:
Then register:
$ grok mcp add --scope user tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.grok/config.toml
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ grok mcp add --scope user tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.grok/config.toml
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ grok mcp add --scope project tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ./.grok/config.toml (in repo)
Build or install the server first:
Then register:
$ grok mcp add --scope project tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ./.grok/config.toml (in repo)
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ grok mcp add --scope project tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ./.grok/config.toml (in repo)
Config file: ~/.gemini/config/mcp_config.json
npx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.gemini/config/mcp_config.json
Config file: ~/.gemini/config/mcp_config.json
Build or install the server first:
$ npm install --global @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/config/mcp_config.json
Build or install the server first:
Then use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/config/mcp_config.json
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen use this config:
The package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.gemini/config/mcp_config.json
$ opencode mcp add tmux -- npx -y @libtmux/mcp
Config file: ~/.config/opencode/opencode.jsonc
$ opencode mcp add tmux -- npx -y @libtmux/mcpnpx ignores --min-release-age-exclude, so a cooldown here would also hold back the release it runs; this runs without one. The Global install tab applies a cooldown to the server's dependencies.
Config file: ~/.config/opencode/opencode.jsonc
$ opencode mcp add tmux -- npx -y --min-release-age=0 @libtmux/mcp
Config file: ~/.config/opencode/opencode.jsonc
Build or install the server first:
$ npm install --global @libtmux/mcpThen register:
$ opencode mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.config/opencode/opencode.jsonc
Build or install the server first:
Then register:
$ opencode mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.config/opencode/opencode.jsonc
Build or install the server first:
$ npm install --global --min-release-age=0 @libtmux/mcpThen register:
$ opencode mcp add tmux -- libtmux-mcpThe package installs a `libtmux-mcp` binary. Requires Node 22 or newer, or Bun 1.3.14 or newer.
Config file: ~/.config/opencode/opencode.jsonc
Dependency cooldowns
Use the Configure cooldowns checkbox above to enable or disable. These settings choose how cooldown behaves once enabled.
What are cooldowns?
Cooldowns delay picking up newly uploaded packages so the community has time to spot supply-chain attacks before you install. Most package managers don't apply one by default — you opt in via a global setting in your tool's config.
Learn more at cooldowns.dev · Datadog Security Labs writeup .
@libtmux/mcp exposes tmux through an MCP stdio server and an embeddable
TypeScript factory. Clients can inspect topology, capture output, run framed
shell commands, and create or arrange panes.
The package requires Node 22 or newer, or Bun 1.3.14 or newer, plus tmux 3.3a or newer. Real tmux operation is supported on Linux; the package’s macOS artifact checks do not establish runtime support.
Start here¶
- Install points an MCP client at this server.
- Tools lists the MCP operations, arguments, and results.
- Guides install and connect a client.
- Topics explain toolsets, socket provenance, and waiting.
- Examples call a tool, then explore server internals.
- Language API documents embedding and implementation types.
The server exposes a static tmux://capabilities resource. It does not
register workflow prompts or dynamic hierarchy resources.
Use Workspace Manager to load and apply declarative configurations in application code. MCP clients create topology through individual tools; there is no workspace-file tool.
Tools by tier
The TypeScript server groups its tools by what they request. A tier badge tells you how far a call reaches before you approve it. Set LIBTMUX_TOOLSETS to a comma-separated list of tiers, such as inspect,manage, to offer only those tools.
Inspect
Request tmux state and terminal output.
-
call_read_tools_batchInspect Invoke a serial batch of at most 16 inspect tools. -
capture_paneInspect The text a pane is showing, or its scrollback. -
capture_sinceInspect What a pane has printed since you last looked. -
find_pane_by_positionInspect Find the pane occupying a named corner of a window. -
get_pane_infoInspect One pane's metadata: what it runs, where, how big, and whether it is yours or watched. -
get_server_infoInspect The tmux server this process drives: its socket, version, daemon pid, and totals. -
get_session_infoInspect Return metadata for one session without listing every session. -
get_tmux_variablesInspect Resolve validated tmux variable names without accepting raw format syntax. -
get_window_infoInspect Return metadata and placements for one window. -
list_panesInspect Panes on this server, with the command each is running and its directory. -
list_sessionsInspect Every session on this server with its id, name, window count, and whether anyone is attached. -
list_windowsInspect Windows on this server, optionally restricted to one session by id or name. -
search_panesInspect Find which panes are showing something. -
show_environmentInspect Read the tmux environment. -
show_hooksInspect Read the hooks a server or session runs. -
show_optionInspect Read one named tmux option at server, session, window, or pane scope. -
snapshot_paneInspect Return bounded terminal content and pane metadata in one MCP response. -
wait_for_textInspect Wait until a pane prints something, streaming tmux's notifications rather than polling.
Manage
Change tmux structure or presentation.
-
move_windowManage Move a window to another index, or into another session. -
rename_sessionManage Rename a session. -
rename_windowManage Rename a window. -
resize_paneManage Resize a pane, either to a size or by an amount in a direction. -
resize_windowManage Set a window's size in cells. -
select_layoutManage Rearrange a window's panes. -
select_paneManage Make a pane the active one in its window. -
select_windowManage Make a window the current one in its session. -
set_history_limitManage Set the default retained scrollback line limit through a bounded integer. -
set_mouse_enabledManage Set the global tmux mouse option through a closed boolean schema. -
set_pane_titleManage Give a pane a title. -
signal_channelManage Signal a tmux wait-for channel. -
swap_paneManage Exchange two panes' positions. -
wait_for_channelManage Wait until a tmux wait-for channel is signalled.
Execute
Start or drive pane processes, or store state that can control later execution.
-
create_sessionExecute Create a detached session and return it with its first window and pane, so you can start working without listing anything first. -
create_windowExecute Add a window to a session and return it with its pane. -
paste_textExecute Put text into a pane without tmux interpreting any of it as key names. -
respawn_paneExecute Restart a pane's command in place, keeping the pane and its id. -
run_shell_commandExecute Run a shell command in a pane with your user's permissions. -
send_keysExecute Send keystrokes to a pane. -
send_keys_batchExecute Send an ordered batch of pane-input operations, resolving and checking each row's configured cohort immediately before input. -
set_synchronize_panesExecute Set the window default for synchronized pane input. -
split_windowExecute Split a pane and return the new one.
Teardown
Delete tmux objects or retained scrollback. Not reversible.
-
clear_pane_scrollbackTeardown Discard the retained scrollback history for one pane. -
kill_paneTeardown Close a pane and the process in it. -
kill_sessionTeardown Remove a session. -
kill_windowTeardown Close a window and every pane in it.
Browse every tool, with its arguments, result and protocol data.
Worked example
Given this prompt, an agent connected to the TypeScript server makes these calls and gets these results.
Before the first call.
After create_session.
Panes, sizes not read yet
- %0
- %1 sh
After split_window.
list_windows read the windows; tmux itself is unchanged.
$ pytest -q .. [100%] 2 passed in 0.00s
After run_shell_command.
$ pytest -q .. [100%] 2 passed in 0.00s
$ cat checks.log 2026-01-01 checks started 2026-01-01 checks finished
After run_shell_command.
After kill_session.
Create a tmux session called checks, split its window into two panes, run pytest -q in one and show checks.log in the other, show me the results, then remove the session.
agentCreate the session.
Result
{ "paneId": "%0", "session": { "attachedClients": 0, "humanAttachedClients": 0, "id": "$0", "metadataComplete": true, "name": "checks", "omittedMetadataBytes": 0, "windows": 1 }, "windowId": "@0"}agentSplit the pane the create result returned (%0) in two.
Result
{ "pane": { "active": false, "command": "sh", "cwd": "/home/user/project", "dead": false, "height": 24, "id": "%1", "index": 1, "isAttended": false, "isCallerPane": false, "metadataComplete": true, "omittedMetadataBytes": 0, "title": "host", "…": "6 more" }}agentRead the window's layout.
Result
{ "complete": true, "omittedEntries": 0, "windows": [ { "id": "@0", "layout": "{\"V\":2,\"L\":{\"t\":\"h\",\"w\":80,\"h\":24,\"x\":0,\"y\":0,\"c\":[{\"t\":\"p\",\"w\":40,\"h\":24,\"x\":0,\"y\":0,\"a\":true,\"i\":0,\"I\":\"%0\"},{\"t\":\"p\",\"w\":39,\"h\":24,\"x\":41,\"y\":0,\"i\":1,\"I\":\"%1\"}]}}", "metadataComplete": true, "name": "sh", "omittedMetadataBytes": 0, "panes": 2, "zoomed": false, "omittedPlacements": 0, "placements": [ { "active": true, "index": 0, "sessionId": "$0", "sessionName": "checks" } ], "placementsComplete": true } ]}agentRun the tests in the pane the create result returned (%0).
Result
{ "effectiveTimeoutMs": 30000, "exitStatus": 0, "foreignOutputSuspected": false, "droppedLines": 0, "missedBytes": 0, "omittedBytes": 0, "outcome": "completed", "output": ".. [100%]\n2 passed in 0.00s", "outputComplete": true, "paneId": "%0", "returnedBytes": 57, "stillRunning": false}agentShow the log in the new pane the split returned (%1).
Result
{ "effectiveTimeoutMs": 30000, "exitStatus": 0, "foreignOutputSuspected": false, "droppedLines": 0, "missedBytes": 0, "omittedBytes": 0, "outcome": "completed", "output": "2026-01-01 checks started\n2026-01-01 checks finished", "outputComplete": true, "paneId": "%1", "returnedBytes": 52, "stillRunning": false}agentRemove the session once the result is read.
Result
{ "killed": "$0"}agent in %0 it printed 2 passed in 0.00s
; in %1 it printed 2026-01-01 checks finished
.
Calls and results are recorded against libtmux/libtmux-ts
at ecc3eaca0, on a private tmux 3.8a server, running pytest 9.2.0. The preview draws only what those results state.
The agent's narration is illustrative.
Long values in a result are shortened here; the recording keeps them. The sandbox's project directory is shown as /home/user/project.