Sandbox
@howardpen9/tmux-bridge-mcp

MCP server for cross-pane tmux communication

tmux-bridge-mcp lets one agent read another pane’s output, send it a message, and press keys in tmux. The server exposes tmux actions as MCP tools, so agents like Claude Code, Codex, and Gemini CLI can coordinate without copy-paste.

99 stars11 forksTypeScriptUpdated 2mo ago
Who it's for

Builders who keep multiple AI agents open in tmux and want them to share context across panes.

What it delivers

You can run separate agents side by side and pass work between them without acting as the middleman.

What it does

Cross-pane read and write

Exposes tools such as `tmux_read`, `tmux_message`, `tmux_type`, and `tmux_keys` for talking to other panes.

Pane discovery and labeling

Includes `tmux_list`, `tmux_id`, `tmux_name`, and `tmux_resolve` so you can find and label panes by role.

Read-before-write guard

Requires a pane read before typing or sending keys, which helps avoid blind messages and out-of-order handoffs.

Direct tmux integration

Talks to tmux APIs like `capture-pane`, `send-keys`, and `list-panes` with no extra transport layer.

Agent setup helper

The `setup` command auto-detects supported agents and writes the right MCP config for them.

Kimi CLI path

Supports native Kimi MCP setup and a legacy `kimi-tmux` wrapper for older versions.

How to get it

  1. 1One command to configure all your agents
    npx tmux-bridge-mcp setup
  2. 2Verify it works
    npx tmux-bridge-mcp --help
  3. 3See it in action
    npx tmux-bridge-mcp demo
  4. 41. Install tmux
    brew install tmux    # macOS
    apt install tmux     # Linux
  5. 5Run
    codebuddy mcp add -s user tmux-bridge -- npx -y tmux-bridge-mcp
  6. 6Run
    copilot mcp add tmux-bridge -- npx -y tmux-bridge-mcp

README

tmux-bridge-mcp

English | 简体中文

tmux-bridge-mcp

A standalone MCP server that lets AI agents (Claude Code, Gemini CLI, Codex, Kimi CLI) communicate with each other through tmux panes. It talks directly to tmux -- no external dependencies beyond tmux itself.

🖥️ What is tmux?

tmux is a terminal multiplexer -- it lets you split one terminal window into multiple panes, each running its own process independently. Think of it as "tabs on steroids" for your terminal.

What is tmux

+-------------------------------+
|  Pane 1       |  Pane 2       |
|  Claude Code  |  Codex        |
|  writing code |  reviewing    |
|               |               |
+---------------+---------------+
|  Pane 3       |  Pane 4       |
|  Gemini CLI   |  tail -f logs |
|  researching  |  monitoring   |
+-------------------------------+

Each pane is a full terminal. You can have Claude Code running in one, Codex in another, Gemini in a third -- all visible at the same time, all on the same machine.

The problem: these panes can't talk to each other. An agent in Pane 1 has no idea what's happening in Pane 2.

The Problem

tmux-bridge fixes this. It gives every agent the ability to read, type, and send messages into any other pane.

The Solution

⚡ What can you do with tmux-bridge?

Once installed, your AI agents can:

ActionHowExample
See what another agent is doingtmux_readRead the last 20 lines of Codex's pane
Send a task to another agenttmux_message + tmux_keysTell Claude to review a file
Coordinate multi-agent workflowsChain tool callsGemini researches -> Claude implements -> Codex reviews
Monitor processestmux_read on a shell paneWatch build logs, test output, server status
Label panes by roletmux_nameName panes "claude", "codex", "gemini" for easy targeting

All of this happens through standard MCP tool calls -- your agent doesn't need to learn any new syntax. If it supports MCP, it already knows how.

🤖 Supported Agents

Supported Agents

Tested and documented

AgentConnectionSetup path
Claude CodeNative MCP (stdio)claude mcp add -s user / ~/.claude.json
Codex CLINative MCP (stdio)codex mcp add
OpenCodeNative MCP (stdio)~/.config/opencode/opencode.json(c) (mcp key)
CodeBuddyNative MCP (stdio)codebuddy mcp add -s user / ~/.codebuddy/.mcp.json
GitHub Copilot CLINative MCP (stdio)copilot mcp add / ~/.copilot/mcp-config.json
Grok BuildNative MCP (stdio)grok mcp add -s user / ~/.grok/config.toml
Gemini CLINative MCP (stdio)~/.gemini/settings.json
Kimi CLI v1.26+Native MCP (kimi mcp add)kimi mcp add
Kimi CLI olderLegacy wrapper (kimi-tmux)wrapper binary

Should work (any MCP-compatible agent)

AgentNotes
CursorSupports MCP servers in settings
Windsurf (Codeium)MCP server support
AiderCommunity MCP support
Continue.devMCP server support
ClineVS Code extension with MCP
Roo CodeFork of Cline with MCP
Any shell script or processRead pane output with tmux_read, no MCP needed

tmux-bridge works with any agent that supports MCP over stdio. If your agent isn't listed, try adding the MCP config -- it will likely just work.

💡 Why

When you run multiple AI agents in separate terminals, they work in isolation. You end up copy-pasting context between them, manually relaying questions and answers, or losing track of what each agent is doing.

tmux-bridge solves this by giving every agent the ability to read, type, and send messages into any other terminal pane -- programmatically, through standard MCP tool calls.

Use cases:

  • Code review pipeline -- Claude Code writes code in one pane, Codex reviews it in another, results flow back automatically
  • Multi-model reasoning -- ask Gemini for research, feed the findings to Claude, let Codex verify the implementation
  • Parallel workflows -- multiple Claude Code instances each handling a different part of a large task, coordinating through pane messages
  • Monitoring -- an agent reads log output from a tail -f pane and reacts to errors in real time

What you need:

RequirementWhy
tmuxThe terminal multiplexer that hosts your panes -- this is the communication channel
Node.js 18+Runs the MCP server
At least one MCP-compatible agentClaude Code, Codex, OpenCode, CodeBuddy, Copilot CLI, Grok Build, Gemini CLI, or Kimi CLI v1.26+

If you already use tmux to run multiple agents side by side, tmux-bridge just makes them aware of each other.

😩 Without tmux-bridge

You're running Claude Code in one pane, Codex in another. Claude finishes writing a function and you want Codex to review it. Here's what actually happens:

  1. You read Claude's output. Scroll up. Copy the relevant part.
  2. Switch to Codex's pane. Paste it in. Type "review this code."
  3. Codex gives feedback. You copy that.
  4. Switch back to Claude. Paste Codex's feedback. "Fix these issues."
  5. Repeat for every round of review.

You are the message bus. Every interaction flows through your clipboard. You're not writing code anymore -- you're routing context between agents. With 3+ agents running, this becomes unmanageable within minutes.

🤔 Why not LangChain / CrewAI / A2A?

ApproachWhat it asks you to dotmux-bridge difference
LangChain / CrewAI / AutoGenRewrite your workflow inside their framework. Your agents must be Python objects in their orchestration layer.You keep using Claude Code, Codex, Gemini CLI as-is. No framework, no SDK, no rewrite.
Google A2A ProtocolWait for agents to adopt a new protocol spec. Designed for distributed, networked agents.Works today with any MCP agent. No protocol adoption needed.
Custom WebSocket / HTTP glueBuild and maintain your own IPC layer. Handle serialization, discovery, error handling.Zero infrastructure. tmux is the transport -- it's already running.
Shared files / pipesRoll your own convention. Each agent needs custom tooling to read/write.Standard MCP tools. Any agent that speaks MCP gets cross-pane superpowers instantly.

The key insight: you don't need a multi-agent framework. You need your existing agents to see each other. tmux-bridge adds exactly that -- a thin MCP layer over tmux -- and nothing more.

🚀 Quick Start

Prerequisites: tmux 3.2+ and Node.js 18+ must be installed.

One command to configure all your agents:

npx tmux-bridge-mcp setup

This auto-detects Claude Code, Codex, OpenCode, CodeBuddy, Copilot CLI, Grok Build, Gemini CLI, and Kimi CLI on your machine, then writes the correct MCP config for each one. Done in seconds.

Verify it works:

npx tmux-bridge-mcp --help

You should see the version and available commands. Restart your AI agent to activate the new tools.

See it in action:

npx tmux-bridge-mcp demo

Opens a 3-pane tmux session and runs a live cross-pane communication demo.

Manual setup (if you prefer)

1. Install tmux

brew install tmux    # macOS
apt install tmux     # Linux

2. Add to your agent's MCP config

{
  "mcpServers": {
    "tmux-bridge": {
      "command": "npx",
      "args": ["-y", "tmux-bridge-mcp"]
    }
  }
}

Restart your agent. It now has 9 MCP tools for cross-pane communication.

🔄 Updating

# If installed globally
npm update -g tmux-bridge-mcp

# If using npx (auto-updates, but to force latest)
npx tmux-bridge-mcp@latest

# Check your current version
npx tmux-bridge-mcp --version

After updating, restart your agents to pick up the new version. If you use npx in your MCP config, it caches the package — run npx --yes tmux-bridge-mcp@latest once to pull the latest, then your agents will use it on next startup.

🏗️ How It Works

Layered Architecture

tmux-bridge runs as an MCP server over stdio. It calls tmux directly (capture-pane, send-keys, list-panes, etc.) -- no intermediate CLI layer.

MCP path (Gemini, Claude Code, Codex, any MCP client):
+--------------+  MCP/stdio  +---------------+  tmux API  +--------------+
|  MCP Agent   |<----------->|  tmux-bridge  |<---------->|  tmux panes  |
+--------------+             |  MCP server   |            +--------------+
                             +---------------+

CLI path (Kimi):
+--------------+  --print    +---------------+  tmux API  +--------------+
|  Kimi CLI    |<----------->|  kimi-tmux    |<---------->|  tmux panes  |
+--------------+  tool parse |  adapter      |            +--------------+
                             +---------------+

Architecture

All cross-pane interactions follow the read-act-read workflow:

Read-Act-Read Workflow

StepActionPurpose
1tmux_readRead target pane (satisfies read guard)
2tmux_message / tmux_typeType your message or command
3tmux_readVerify text landed correctly
4tmux_keysPress Enter to submit
--STOPDon't poll. The other agent replies directly into your pane.

The read guard is enforced at the MCP layer: tmux_type, tmux_message, and tmux_keys will fail unless you call tmux_read on the target pane first.

⚙️ Setup Per Agent

Gemini CLI (native MCP)

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "tmux-bridge": {
      "command": "npx",
      "args": ["tmux-bridge-mcp"]
    }
  }
}

Claude Code (native MCP)

Add to your project's .mcp.json or global MCP config:

{
  "mcpServers": {
    "tmux-bridge": {
      "command": "npx",
      "args": ["tmux-bridge-mcp"]
    }
  }
}

Codex (native MCP)

Add to your MCP config following the Codex MCP setup docs:

{
  "mcpServers": {
    "tmux-bridge": {
      "command": "npx",
      "args": ["tmux-bridge-mcp"]
    }
  }
}

OpenCode

opencode mcp add is interactive. tmux-bridge-mcp setup writes directly to ~/.config/opencode/opencode.json (or .jsonc):

{
  "mcp": {
    "tmux-bridge": {
      "type": "local",
      "command": ["npx", "-y", "tmux-bridge-mcp"],
      "enabled": true
    }
  }
}

CodeBuddy (Tencent)

codebuddy mcp add -s user tmux-bridge -- npx -y tmux-bridge-mcp

Fallback config path: ~/.codebuddy/.mcp.json (standard mcpServers JSON).

GitHub Copilot CLI

copilot mcp add tmux-bridge -- npx -y tmux-bridge-mcp

Fallback config path: ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "tmux-bridge": {
      "type": "local",
      "command": "npx",
      "args": ["-y", "tmux-bridge-mcp"],
      "tools": ["*"]
    }
  }
}

Grok Build

grok mcp add -s user tmux-bridge -- npx -y tmux-bridge-mcp

Fallback TOML in ~/.grok/config.toml:

[mcp_servers.tmux-bridge]
command = "npx"
args = [
    "-y",
    "tmux-bridge-mcp",
]
enabled = true

Kimi CLI

# Check your Kimi version
kimi --version
# v1.26+ → use native MCP (recommended)
# older  → use kimi-tmux wrapper

Native MCP (recommended, v1.26+):

kimi mcp add tmux-bridge -- npx tmux-bridge-mcp

Once added, Kimi uses all tmux-bridge tools directly -- no adapter needed.

Legacy wrapper (older versions):

For Kimi CLI versions without native MCP, kimi-tmux bridges the gap by injecting the system instruction as a prompt, running Kimi in --print mode, parsing tool-call blocks from output, and executing them via tmux.

kimi-tmux "list all tmux panes"
kimi-tmux "ask the agent in codex pane to review src/auth.ts"
kimi-tmux "read what claude is working on"
kimi-tmux --rounds 3 "send a message to gemini and wait for the result"

Kimi CLI Bridging

🔧 Tools Reference

ToolDescription
tmux_listList all panes with target ID, process, label, and working directory
tmux_readRead last N lines from a pane (satisfies read guard)
tmux_typeType text into a pane without pressing Enter (requires prior read)
tmux_messageSend message with auto-prepended sender info (requires prior read)
tmux_keysSend special keys -- Enter, Escape, C-c, etc. (requires prior read)
tmux_nameLabel a pane for easy targeting (e.g., "claude", "gemini")
tmux_resolveLook up pane ID by label
tmux_idPrint current pane's tmux ID
tmux_doctorDiagnose tmux connectivity issues

Targets can be a pane ID (%0), session:window.pane (main:0.1), or a label (claude).

📖 Examples

Ask Claude to review a file (from Gemini)

tmux_list()
tmux_read(target="claude", lines=20)
tmux_message(target="claude", text="Please review src/auth.ts for security issues")
tmux_read(target="claude", lines=5)
tmux_keys(target="claude", keys=["Enter"])

Multi-agent coordination (from Kimi)

kimi-tmux "tell the claude pane to run the test suite"
kimi-tmux "ask gemini to summarize the test results in claude's pane"

Multi-agent layout

+-----------------------------------------------------------+
| tmux session                                              |
|                                                           |
| +------------+ +------------+ +----------+ +-----------+  |
| | Claude Code | |   Codex    | | Gemini   | |   Kimi    | |
| |  (MCP)     | |  (MCP)     | |  (MCP)   | |(kimi-tmux)| |
| |            | |            | |          | |           |  |
| | label:     | | label:     | | label:   | | label:    |  |
| | claude     | | codex      | | gemini   | | kimi      |  |
| +-----+------+ +-----+------+ +----+-----+ +-----+-----+ |
|       +---------------+-----------+--------------+        |
|           tmux-bridge (direct tmux IPC, no deps)          |
+-----------------------------------------------------------+

🌐 Environment Variables

VariableDescriptionDefault
TMUX_BRIDGE_SOCKETOverride tmux server socket pathAuto-detected from $TMUX
KIMI_PATHPath to kimi binary (kimi-tmux only)kimi (in PATH)

🔒 Security Model

tmux-bridge is designed for local development on a single machine. It assumes all connected MCP agents are trusted:

  • Any agent can read from or write to any pane in the tmux server — there is no per-pane access control.
  • The read guard (must tmux_read before tmux_type/tmux_keys) is a sequencing aid to prevent blind typing. It is not a security boundary.
  • Pane labels set via tmux_name are not authenticated — any agent can label or relabel any pane.
  • There is no encryption or authentication between agents. Communication happens through tmux's own IPC (Unix socket).

Do not use tmux-bridge in multi-tenant environments or expose the tmux socket over a network. It is built for the common case: one developer running multiple AI agents side by side on their own machine.

📝 System Instruction

For agents that support custom system prompts, use system-instruction/smux-skill.md. It teaches the read-act-read workflow and documents all available MCP tools.

🔗 Related Projects

ProjectApproachFocus
smuxtmux skill + bash CLIAgent-agnostic tmux setup
agent-bridgeWebSocket daemon + MCP pluginClaude Code <-> Codex
tmux-bridge-mcp (this)Standalone MCP server + direct tmuxAny agent, zero deps beyond tmux

smux vs tmux-bridge-mcp

Dimensionsmuxtmux-bridge-mcp (this)
🔌 How agents connectAgent runs bash commands (tmux-bridge read/type/keys)Agent uses MCP tool calls (tmux_read/tmux_type/tmux_keys)
🚀 Agent onboardingInstall skill or inject system prompt to teach bash commandsAdd MCP config JSON -- agent auto-discovers 9 tools
📦 Prerequisitescurl | bash installs tmux + tmux.conf + CLI scriptJust tmux + Node.js, npx to run
⚙️ tmux configurationShips full tmux.conf (keybindings, mouse, status bar)Doesn't touch tmux.conf -- no config conflicts
🛡️ Read guardBash CLI layer (/tmp file lock)MCP server layer (/tmp file lock, same concept)
💻 LanguageBash (~300 LOC)TypeScript (~600 LOC)
📥 Installcurl | bash, writes to ~/.smux/npm install -g or npx
🤝 Agent compatibilityAny agent that can run bash (needs skill/prompt)Any agent with MCP support (standard protocol)

👉 When to use smux: You want a complete tmux setup (keybindings, mouse support, status bar) and your agents support the skills system or you're comfortable injecting system prompts.

👉 When to use tmux-bridge-mcp: You want a drop-in MCP server that works with any MCP-compatible agent out of the box, without touching your tmux configuration.

tmux-bridge (/tmb) vs Claude Code Native (subagent + /codex + /gemini)

Dimensiontmux-bridgeClaude Code Native
Context isolationEach pane has its own full conversation context, persists across interactionssubagent spawns fresh each time, gone when it finishes
PersistencePane stays alive, accumulates conversation historyFire-and-forget, must re-provide context next time
ParallelismTruly independent processes, no interferenceAgent tool can parallelize, but shares billing/rate limits
Model diversityEach pane can run a different CLI (Codex, Gemini, Kimi)/codex /gemini can do this too -- not a real differentiator
Communication overheadGoes through tmux read/send, has latency, messages may get truncatedNative tool calls, structured returns, high reliability
Result integrationYou must read pane output, parse, and synthesize manuallysubagent returns structured results directly, ready to use
Operational complexityExtra layer of tmux management (labels, pane IDs)One tool call, done
CostEach pane consumes its own token budget independentlysubagent shares the same session's token pool

Verdict

tmux-bridge's real advantage comes down to one thing: persistent context. If you need an agent that remembers the last 30 turns of conversation and keeps following up on the same task, a tmux pane can do that -- a subagent cannot.

But for most tasks, native is better:

  • Communication is more reliable (no tmux buffer truncation)
  • Results are structured -- no need to parse terminal output
  • Simpler to operate, one less layer of abstraction

Practical guidance:

  • Short-lived, one-off tasks → native subagent / /codex / /gemini
  • Long-running sessions that need accumulated context (e.g., a reviewer continuously following the same PR) → tmux-bridge adds real value
  • A multi-pane multi-role layout only pays off if each role genuinely needs cross-conversation state -- otherwise the overhead outweighs the benefit

📄 License

MIT

Files in the repo

Repository payload11 top-level entries
  • .github
  • docs
  • scripts
  • src
  • system-instruction
  • .gitignore
  • package-lock.json
  • package.json
  • README.md
  • README.zh-CN.md
  • tsconfig.json

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k
t8y2/dbxConnectors

20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。

19k