wezbridge
Serves as a backup notification channel for Telegram remote control, providing push notifications for session events.
Supports Codex CLI sessions alongside Claude, enabling cross-LLM swarms with peer-to-peer messaging and session orchestration.
Enables remote control of Claude Code sessions via Telegram, with per-pane forum topics, inbound DMs, voice/media forwarding, and ntfy backup.
Provides MCP tools for managing WezTerm panes: spawn, split, send keys, set tab titles, kill sessions, and snapshot-based crash recovery.
wezbridge
MCP bridge for controlling Claude Code / Codex sessions inside WezTerm panes, with optional Telegram remote control and simple text-based A2A messaging.
Run a swarm of long-lived AI coding sessions in parallel — one per WezTerm pane — and let any of them spawn, prompt, and read the others through mcp__wezbridge__* tool calls. Drive the whole thing from your phone via Telegram by designating one pane as your "OmniClaude" controller. No browser dashboard, no UI on the PC — the daemon on :4200 is a headless backend; the control surface is Claude Code itself.
Three layers
The repo ships in three opt-in tiers — install the core, add the others if you want them:
Layer | What it gives you | Status |
Core |
| Stable. This is the product. |
Telegram remote (optional) | Per-pane forum-topic streaming, inbound DMs to your OmniClaude pane via the official channel plugin, voice/media forwarding, ntfy backup, diff reporter | Stable, opt-in. Set up |
Multi-agent layer (experimental) | A2A envelope protocol, agency mode (persona spawning), PRD-driven team bootstrap, auto-handoff at Ctx threshold, MA-backfill modules (rubric grader, A2A heartbeat, sidecar audit pane) | Experimental. Useful but evolving. Default OFF. |
Your phone (Telegram)
│ DM to bot forum topics (1 per worker)
│ ▲
▼ │ outbound stream
┌─────────────────────────────────────────────┐
│ WezTerm │
│ │
│ pane-1: OmniClaude ◀─── inbound DMs ──── channel plugin
│ │ │
│ │ mcp__wezbridge__send_prompt │
│ ▼ │
│ pane-2 worker, pane-3 worker, ... ────▶ telegram-streamer.cjs
│ │
└─────────────────────────────────────────────┘
│
▼
dashboard-server.cjs @ :4200
(REST/SSE backend for the wezbridge MCP — no UI served)For the full step-by-step on the Telegram pattern, see docs/SETUP-omniclaude-telegram.md.

Why use this
Bot-centric Telegram-Claude bridges | wezbridge | |
Coordinator | Node bot monolith | A real Claude Code session as orchestrator |
Message passing | Bot → session, one direction | Peer ↔ peer via wezbridge MCP + A2A envelopes |
Multi-LLM | Single provider | Claude + Codex in the same swarm |
Crash isolation | Bot crash = total outage | One pane dies, peers and orchestrator survive |
State durability | In-memory |
|
Session lifecycle | Manual reset when ctx fills |
|
Related MCP server: session-coord-mcp
Quick start
One command (recommended)
git clone https://github.com/wolverin0/wezbridge.git && cd wezbridge
node scripts/install.cjs # or: npm run setupThat's the whole install. The script auto-detects your AI CLIs and:
registers the
wezbridgeMCP on Claude Code (--scope user) and Codex (if present),sets the Windows crash-prevention env var,
starts the
:4200daemon and sets it to auto-launch on login,verifies the daemon is responding.
It's idempotent (safe to re-run). Flags: --dry-run (preview, change nothing), --install-wezterm, --no-codex, --no-daemon, --help.
Prereqs: Node 20+ and at least one AI CLI (claude and/or codex). The installer can install WezTerm for you with --install-wezterm (winget on Windows, brew on macOS), or grab it from wezfurlong.org/wezterm.
The install is 6 steps: WezTerm → AI CLI → clone → register MCP on Claude → register MCP on Codex → launch daemon.
1. Install WezTerm
Download from wezfurlong.org/wezterm. The mux server is built in. Verify with wezterm cli list — if it prints a header row, the mux is reachable.
2. Install your AI CLI(s)
You need at least one. wezbridge works with both side-by-side.
# Claude Code
npm install -g @anthropic-ai/claude-code
# Codex CLI (optional, for cross-LLM swarms)
npm install -g @openai/codexYou'll also need Node.js 20+.
3. Clone
git clone https://github.com/wolverin0/wezbridge.git
cd wezbridgeNo npm install needed — wezbridge has zero npm dependencies (uses only Node built-ins).
4. Register wezbridge MCP on Claude Code
claude mcp add wezbridge --scope user -- node "$(pwd)/src/mcp-server.cjs"--scope user makes it available in every Claude Code session you ever start. Verify with claude mcp list.
5. Register wezbridge MCP on Codex CLI
Codex uses TOML at ~/.codex/config.toml (create the file if it doesn't exist):
[mcp_servers.wezbridge]
command = "node"
args = ["/absolute/path/to/wezbridge/src/mcp-server.cjs"]Restart any running Codex sessions.
6. Crash-prevention env var (Windows only)
WezTerm's internal 10054 mux-disconnect error category accumulates to MB-sized log files under sustained MCP load. Silence it:
[Environment]::SetEnvironmentVariable('WEZTERM_LOG','wezterm_mux_server_impl::local=off','User')Restart WezTerm so the new instance inherits it. macOS / Linux can skip.
7. Launch the daemon
npm run dashboardThis is a headless backend, not a UI. It serves /api/panes, /api/events (SSE), /api/grades, etc. The core MCP tools do NOT need it — they drive the WezTerm CLI directly. Only auto_handoff and the background services (SSE, telegram-streamer, session-snapshot crash-restore, grades) require it. It binds 127.0.0.1 only; opening http://127.0.0.1:4200 in a browser returns 404 — that's intentional. Verify it's up with curl http://127.0.0.1:4200/api/panes, or call the bridge_health MCP tool from any session. To expose it on a LAN set WEZBRIDGE_BIND=0.0.0.0 — a WEZBRIDGE_API_TOKEN then becomes mandatory or the daemon refuses to start.
8. (Optional) Telegram + OmniClaude pattern
If you want phone control, follow docs/SETUP-omniclaude-telegram.md.
Quick pointer:
Bot token + group ID at
~/.claude/channels/telegram/.envPer-project topic mapping at
~/.omniclaude/telegram-topics.jsonStreamer (outbound):
npm run start-streamerOmniClaude pane (inbound):
claude --channels plugin:telegram@claude-plugins-official
9. (Optional) v3.2 safety modules
All opt-in via env vars; default behavior unchanged.
node scripts/install-hooks.cjs # pre-push hook
export WEZBRIDGE_GUARD_SHIMS=1 # PATH-based command guard
export PATH="$(pwd)/bin/guard-shims:$PATH"
export WEZBRIDGE_MM_INBOX=1 # MemoryMaster Dreams inbox
export WEZBRIDGE_GRADER_BACKEND=claude # outcome-grader backendBypass-once override env vars: WEZBRIDGE_GUARD_OVERRIDE, WEZBRIDGE_SAFETY_OVERRIDE, WEZBRIDGE_PREPUSH_OVERRIDE. See docs/USAGE-guard.md.
Network exposure: the daemon binds 127.0.0.1 by default. Set WEZBRIDGE_BIND=0.0.0.0 (or a specific interface) to reach it from another machine — a WEZBRIDGE_API_TOKEN is then required or startup aborts, since the pane-control API can type into (and spawn) sessions.
10. Session snapshot + crash recovery (default ON)
Captures every AI pane's launch state (cwd + cmdline + flags) on a 60s timer. After a WezTerm crash, recover with zero clicks — see step 11 for the wezterm-native UX.
Default ON since v3.4.1. Dashboard daemon arms the watcher automatically. Opt OUT with WEZBRIDGE_SESSION_SNAPSHOT=0.
npm run dashboard # snapshot watcher arms automatically
npm run install-autostart # one-time: dashboard auto-launches on user login (Windows)
# Manual restore from CLI (fallback if you skip step 11):
npm run restore-sessionOnly claude.exe and codex.exe panes are captured. Snapshots land at vault/_wezbridge/session-snapshot.jsonl.
11. (Recommended) Wezterm Lua plugin — zero-click recovery + launcher
Add the wezbridge.wezterm Lua plugin to your wezterm config for automatic crash recovery (no commands, no clicks) plus a fuzzy launcher menu for AI sessions with preset flag combos.
After a crash: just reopen wezterm. AI panes come back automatically if the snapshot is < 30 min old. Done.
Drop this into your ~/.wezterm.lua (C:\Users\<you>\.wezterm.lua on Windows):
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
local wezbridge_dir = '/abs/path/to/your/wezbridge/clone'
package.path = package.path .. ';' .. wezbridge_dir .. '/wezterm/?.lua'
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 2000 }
local wezbridge = require 'wezbridge'
wezbridge.apply(config, {
wezbridge_dir = wezbridge_dir,
auto_restore = true, -- silent auto-restore on cold boot
restore_keybind = { mods = 'LEADER', key = 'r' }, -- LEADER+R: pick a snapshot manually
launcher_keybind = { mods = 'LEADER', key = 'l' },-- LEADER+L: launcher menu (preset AI launches)
})
return configSee wezterm/example-wezterm.lua in this repo for a fuller example.
A2A protocol
Every peer-to-peer message uses an envelope, parseable by regex, threadable by corr:
[A2A from pane-<N> to pane-<M> | corr=<id> | type=request|ack|progress|result|error]
<body>Hard rules for any agent using these tools:
Prefer
a2a_send— envelope + send + VERIFIED submission in one call. With rawsend_prompt(v3.5+), check the returnedsubmittedfield and only sendsend_key("enter")if it reportsstuck. (Pre-v3.5 servers verify nothing — there, always follow withsend_key("enter").)Never send bash via
send_promptinto a running TUI. Your text becomes a user prompt, not a shell command. (spawn_sessionwithagent: "shell"gives you a real shell pane.)Every responder MUST push
type=progressevery ~3 min during long work andtype=resulton completion. Codex cannot subscribe viaMonitor; Claude can — Codex requesters should poll cheaply withread_outputdelta mode (with_cursor→since).Before spawning a peer, declare your coordinator role —
parallel-worker/qa-verifier/pre-stager/monitor-only. "parallel" ≠ "delegated"; if you'll be idle while the peer runs, do the work in-session instead.
Full spec in docs/a2a-protocol.md.
Three orchestration layers
When picking how to dispatch work:
Layer | Cost | Lifetime | Use for |
Subagent (in-process) | cheap | dies with parent | tight loop, one-turn fan-out |
Peer pane (same project) | medium | survives parent | long work, cross-LLM, resilience |
Peer pane (cross-project) | medium | survives | ask another project's specialist |
Core pieces
File | What it does |
| MCP server exposing |
| Wrapper around |
| Claude/Codex pane detection, status classification (idle / working / permission / stuck), Ctx% + persona + model extraction |
| Headless REST/SSE backend on :4200 (thin shim over |
| Outbound: streams each pane's live text to a Telegram forum topic. Inbound polling is deliberately disabled (the channel plugin owns DM ingestion). |
| Watches |
| 5-rule action gate wired into MCP + dashboard handlers (no-self-kill, no-destructive-prompt-injection, worktree-outside-dotworktrees, broadcast-too-wide, send-key-ctrl-c-to-self) |
| Paired audit-pane spawner that watches a coder mid-response |
| v3.2 Managed-Agents-backfill modules |
| argv-token destructive-op gate at the shell layer |
| Standalone persistent streamer launcher (Windows) |
| Supervisor that keeps streamer + OmniClaude session aligned |
| Installs the wezbridge git pre-push guard hook |
License
MIT — see LICENSE.
Contributing
See CONTRIBUTING.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceTerminal multiplexer MCP server for orchestrating parallel AI agents. Manages workspaces, panes, surfaces with send_input/read_screen/spawn_agent/stop_agent tools. Supports Claude Code, Codex, Gemini, Cursor CLI agents with lifecycle management, browser automation, and agent status push via Claude --channels.Last updated2017Apache 2.0
- Alicense-qualityDmaintenanceA local-first MCP server for coordinating parallel AI coding sessions with tools like Claude Code and Codex in a single repository.Last updated2MIT
- Alicense-qualityBmaintenanceAn MCP server that gives orchestrator agents fine-grained control over interactive Claude Code sessions running inside tmux, enabling mid-session steering, interruption, and token-efficient result extraction.Last updatedMIT
- Flicense-qualityDmaintenanceAn MCP server for coordinating multiple Claude Code sessions across related projects.Last updated
Related MCP Connectors
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wolverin0/wezbridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server