Skip to main content

Mesh network for AI coding agents - enables Claude Code, Codex, Gemini, and OpenCode sessions to communicate

Project description

Repowire Logo

Repowire

Mesh network for AI coding agents — enables Claude Code, Codex, Gemini, and OpenCode sessions to communicate.

PyPI CI Python License Ask DeepWiki

Why?

AI coding agents work great in a single repo, but multi-repo projects need a context breakout — a way to get information from other codebases. Most solutions are async context breakouts: memory banks, docs, persisted context. Repowire is a sync context breakout: live agents talking to each other about current code. Your frontend agent can ask backend about API shapes and get a real answer from the actual codebase.

Read more: the context breakout problem and the idea behind Repowire.

How does repowire compare?
Project Type How it works Best for
Repowire Sync Live agent-to-agent queries Cross-repo collaboration, 5-10 peers
Gastown Async Work orchestration with persistent mail Coordinated fleets, 20-30 agents
Claude Squad Isolated Session management with worktrees Multiple independent sessions
Memory Bank Async Structured markdown files Persistent project knowledge

Repowire is a phone call (real-time, ephemeral). Gastown is email + project manager (async, persistent). For 5-10 agents, emergence works. For 20-30 grinding through backlogs, you probably need structure.

https://github.com/user-attachments/assets/e356ce7c-9454-4e41-93af-3991c6f391b9

Installation

Requirements: macOS or Linux, Python 3.10+, tmux

# One-liner (detects uv/pipx/pip, runs interactive setup)
curl -sSf https://raw.githubusercontent.com/prassanna-ravishankar/repowire/main/install.sh | sh

# Or install manually
uv tool install repowire    # or: pipx install repowire / pip install repowire

Quick Start

# One-time setup — installs hooks, MCP server, and daemon service
repowire setup

# Verify everything is running
repowire status

Spawn two peers:

repowire peer new ~/projects/frontend --circle dev
repowire peer new ~/projects/backend --circle dev

The sessions auto-discover each other. In any agent:

"Ask backend what API endpoints they expose"

The agent uses the ask_peer tool, backend responds, and you get the answer back.

How It Works

All peers connect to a central daemon via WebSocket. The daemon routes addressed messages between peers — no pub/sub, no topics. Messages go from peer A to peer B by name.

┌──────────────┐          ┌──────────────┐          ┌──────────────┐
│  Claude Code │  hooks   │              │  hooks   │    Codex     │
│  frontend    │◄────────►│              │◄────────►│    api       │
└──────────────┘   (MCP)  │    Daemon    │   (MCP)  └──────────────┘
                          │    :8377     │
┌──────────────┐  hooks   │              │  plugin  ┌──────────────┐
│  Gemini CLI  │◄────────►│              │◄────────►│  OpenCode    │
│  backend     │   (MCP)  └──────────────┘   (WS)   │  infra       │
└──────────────┘                                    └──────────────┘

Message types:

  • ask_peer — request/response with correlation ID (blocks until answer, 300s timeout)
  • notify_peer — fire-and-forget (no response expected)
  • broadcast — fan-out to all peers in your circle

Circles are logical subnets (mapped to tmux sessions). Peers can only communicate within their circle unless explicitly bypassed.

Supported Agents

Agent Transport How it connects
Claude Code Hooks + MCP Lifecycle hooks register peer, MCP tools for messaging
OpenAI Codex Hooks + MCP Same pattern (requires codex_hooks feature flag, auto-enabled)
Google Gemini CLI Hooks + MCP Uses BeforeAgent/AfterAgent events (mapped to prompt/stop hooks)
OpenCode Plugin + WebSocket TypeScript plugin with persistent WS connection

repowire setup auto-detects which agents are installed and configures each one.

All agents use hooks + tmux injection for message delivery:

  • SessionStart — registers peer, spawns WebSocket hook, injects peer list
  • UserPromptSubmit / BeforeAgent — marks peer BUSY
  • Stop / AfterAgent — marks peer ONLINE, extracts response for dashboard
Experimental: Claude Code channel transport

On Claude Code v2.1.80+ with claude.ai login and bun, an experimental channel transport delivers messages directly via MCP, with no tmux injection.

repowire setup --experimental-channels
  • Messages arrive as <channel source="repowire"> tags in Claude's context
  • Claude replies via reply tool instead of transcript scraping
  • Requires claude.ai login (not available for API/Console key auth)

Control Plane

Web Dashboard

Peer grid overview

Monitor your agent mesh at http://localhost:8377/dashboard, or remotely via repowire.io:

  • Peer overview — online/busy/offline status, descriptions, project paths
  • Chat view — conversation history per peer with tool call details
  • Compose bar — send notifications or queries to any peer from the browser
  • Mobile responsive — hamburger menu, touch-friendly compose

For remote access: repowire setup --relay connects your daemon to repowire.io via outbound WebSocket. Access your dashboard from any browser — no port forwarding, no VPN.

More screenshots

Activity and message detail

Chat view with relay

Telegram Bot

Control your mesh from your phone. A Telegram bot registers as a peer — notifications from agents appear in your chat, messages you send get routed to peers.

# Tokens configured via `repowire setup`, or via env vars:
repowire telegram start
  • /peers — shows online peers with inline buttons
  • Tap a peer → type your message → sent as notification
  • Sticky routing: /select repowire → all messages go there until /clear
  • Agents know @telegram is you — they can notify_peer('telegram', ...) to reach your phone

MCP Tools

Tool Type Description
list_peers Query List all peers with status, circle, path, description
ask_peer Blocking Send a question and wait for the response
notify_peer Fire-and-forget Send a notification — peer can notify_peer back when ready
broadcast Fire-and-forget Message all online peers in your circle
whoami Query Your own peer identity
set_description Mutation Update your task description, visible to all peers and the dashboard
spawn_peer Mutation Spawn a new agent session (requires allowlist config)
kill_peer Mutation Kill a previously spawned session

list_peers and whoami return TSV (more token-efficient than JSON). For long-running requests, prefer notify_peer over ask_peer.

CLI Reference

repowire setup                    # Install hooks, MCP server, daemon service
repowire setup --relay            # Same + enable remote dashboard via repowire.io
repowire setup --experimental-channels  # Use channel transport (needs claude.ai login + bun)
repowire status                   # Show what's installed and running
repowire serve                    # Run daemon in foreground
repowire serve --relay            # Run daemon with relay connection

repowire peer new PATH            # Spawn new peer in tmux
repowire peer new . --circle dev  # Spawn with custom circle
repowire peer list                # List peers and their status
repowire peer prune               # Remove offline peers

repowire telegram start           # Run Telegram bot (config or env vars)
repowire slack start              # Run Slack bot (config or env vars)
repowire update                   # Upgrade package, reinstall hooks, restart daemon
repowire uninstall                # Remove all components (--yes to skip prompts)

Configuration

Config file: ~/.repowire/config.yaml

daemon:
  host: "127.0.0.1"
  port: 8377
  auth_token: "optional-secret"     # Require auth for WebSocket connections

  # Allow agents to spawn new sessions via MCP (both lists must be non-empty)
  spawn:
    allowed_commands:
      - claude
      - codex
      - gemini
    allowed_paths:
      - ~/git
      - ~/projects

relay:
  enabled: true                     # Connect to hosted relay
  url: "wss://repowire.io"
  api_key: "rw_..."                 # Auto-generated on first `repowire serve --relay`

telegram:                           # Optional — configured via `repowire setup`
  bot_token: "..."
  chat_id: "..."

slack:                              # Optional — configured via `repowire setup`
  bot_token: "xoxb-..."
  app_token: "xapp-..."
  channel_id: "C..."

Peers auto-register via WebSocket on session start — no manual config needed.

Remote relay details
repowire setup --relay
# ✓ Relay enabled
#   Dashboard: https://repowire.io/dashboard

Your daemon opens an outbound WebSocket to repowire.io. The relay bridges messages between daemons on different machines and proxies HTTP requests (dashboard, API) back through a cookie-authenticated tunnel.

Browser → repowire.io → enter key → cookie set → relay tunnels to local daemon
Daemon A ←WSS→ repowire.io ←WSS→ Daemon B (cross-machine mesh)

Self-host the relay: repowire relay start --port 8000

Security
  • WebSocket auth — set daemon.auth_token in config to require bearer token for connections
  • CORS — restricted to localhost origins (plus repowire.io when relay is enabled)
  • Spawn allowlistdaemon.spawn.allowed_commands and allowed_paths must both be non-empty for MCP spawn to work
  • Channel gating — channel transport is opt-in (--experimental-channels), requires claude.ai login

Uninstall

# Remove hooks, MCP server, channel transport, and daemon service
repowire uninstall

# Remove the package itself
uv tool uninstall repowire
# or: pip uninstall repowire

repowire uninstall removes:

  • Claude Code hooks + MCP server + channel transport
  • Codex hooks + MCP config from ~/.codex/
  • Gemini hooks + MCP config from ~/.gemini/settings.json
  • OpenCode plugin
  • Daemon launchd/systemd service

Not removed automatically (contains your data/config):

  • ~/.repowire/ — config, session mappings, events, attachments
  • Relay API key in ~/.repowire/config.yaml

To fully clean up: rm -rf ~/.repowire

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

repowire-0.9.1.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

repowire-0.9.1-py3-none-any.whl (657.1 kB view details)

Uploaded Python 3

File details

Details for the file repowire-0.9.1.tar.gz.

File metadata

  • Download URL: repowire-0.9.1.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for repowire-0.9.1.tar.gz
Algorithm Hash digest
SHA256 c400a4d9c52f43baaaea69b6bb7ef49b8c61dcec04b8af7a8a2d9571e51e2691
MD5 0782c2519d3b883111237ca84ef32b34
BLAKE2b-256 4a3639bcb34298e8080c55d8b75c0ed83f3cb7bbd980b6bed0625893a71c6668

See more details on using hashes here.

Provenance

The following attestation bundles were made for repowire-0.9.1.tar.gz:

Publisher: publish.yml on prassanna-ravishankar/repowire

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file repowire-0.9.1-py3-none-any.whl.

File metadata

  • Download URL: repowire-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 657.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for repowire-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3c6661e7031ff60d7605790fef6666d7e14d366f27e7b408d5392f7d0af68a72
MD5 ef6ebc5ee643d4eea67c1b827f440e01
BLAKE2b-256 0adf30fc233cd0f2bcefdb54f11db14a7af3b0c9b3af838c754db6569d644c99

See more details on using hashes here.

Provenance

The following attestation bundles were made for repowire-0.9.1-py3-none-any.whl:

Publisher: publish.yml on prassanna-ravishankar/repowire

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page