{"slug": "what-if-heterogenous-agents-could-talk-to-each-other", "title": "What if heterogenous agents could talk to each other?", "summary": "Repowire, a new open-source tool, connects multiple coding agents like Claude Code and Codex across different repositories, allowing them to pass messages and coordinate tasks without manual copy-paste. The system runs locally as a daemon on macOS or Linux and provides a control layer for multi-agent work, enabling agent-to-agent questions, scheduled reminders, and remote monitoring through a browser dashboard, Telegram, or Slack. Repowire aims to solve the problem of isolated AI coding assistants by creating a mesh where agents can communicate, dispatch work, and track durable jobs across sessions.", "body_md": "Repowire connects the coding agents you already have open. Claude Code in one repo, Codex in another, a dashboard in your browser, Telegram on your phone: Repowire gives them names and lets them pass messages without copy-paste.\n\nIt is a local control layer for multi-agent work: ask another agent a question, send a quick update, schedule a reminder, or run one session as the coordinator.\n\nUse it when:\n\n- One repo needs a concrete answer from an agent already working in another repo.\n- You want a personal orchestrator session to dispatch tasks, collect status, or keep reviews moving.\n- You want to monitor or nudge agent work from your phone or browser.\n- A session should wake itself or another peer later with a scheduled check-in.\n\nRepowire runs locally by default through a daemon on your machine. The hosted relay is optional and uses outbound connections for remote dashboard access and cross-machine mesh traffic.\n\n**Requirements:** macOS or Linux, Python 3.10+, tmux.\n\n**1. Install Repowire and wire your agents.**\n\n```\ncurl -sSf https://raw.githubusercontent.com/prassanna-ravishankar/repowire/main/install.sh | sh\nrepowire setup\n```\n\nThe installer detects `uv`\n\n, `pipx`\n\n, and `pip`\n\nin that order.\n\n**2. Open your normal agent CLIs.**\n\nUse the tools directly; Repowire hooks into them after setup.\n\n```\n# tmux window 1\ncd ~/projects/project-a && claude\n\n# tmux window 2\ncd ~/projects/project-b && codex\n```\n\n**3. Check that both peers appeared.**\n\nClaude Code registers on session start. Codex registers after its first interaction, so send a short warmup prompt in `project-b`\n\n, then run:\n\n```\nrepowire peer list\n```\n\n**4. Ask from one agent to the other.**\n\nIn `project-a`\n\n, tell your local agent:\n\n```\nAsk project-b what API endpoints they expose.\n```\n\nYour local agent invokes Repowire's `ask`\n\nMCP tool, the second agent receives the question, and the reply comes back as an `ack`\n\nnotification. Repowire is the mesh and tool surface around the agents, not a standalone chat UI. The same pattern works across Claude Code, Codex, Gemini CLI, OpenCode, and Pi when those runtimes are installed.\n\n## multi-repo-fast.mp4\n\nYou can also spawn peers through Repowire:\n\n```\nrepowire peer new ~/projects/project-a\nrepowire peer new ~/projects/project-b --backend codex --profile fast\n```\n\nFor durable recurring workers, scaffold a repo-local agent folder and target it from jobs:\n\n```\nrepowire agents create daily-brief --backend codex\nrepowire jobs create \"Daily brief\" --path .repowire/agents/daily-brief --backend codex --cron \"@daily\" --prompt \"Prepare the brief.\"\n```\n\nFull docs: [docs.repowire.io](https://docs.repowire.io).\n\n**Agent-to-agent asks**: Non-blocking questions with explicit`ack`\n\nreplies and reminder injection until a thread is closed.**Human control surfaces**: Browser dashboard, Telegram, and Slack can route messages as service peers.** Durable jobs**: Track one-off and recurring work through CLI/MCP, with dashboard visibility and controls for run, retry, and cancel.** Orchestrator pattern**: A dedicated peer can dispatch work, check status, coordinate reviews, and keep a queue moving.** Scheduled wake-ups**: Send a future notification or ask to yourself, another peer, or an orchestrator.** Optional relay**: Reach the dashboard remotely and bridge machines without opening inbound ports.\n\nAll peers connect to a local daemon. The daemon keeps the registry, routes asks/notifies, tracks open asks, stores durable jobs, runs schedules, and feeds the dashboard timeline.\n\nThe stable public surface is peers, circles, asks, notifications, broadcasts, schedules, and the `/jobs`\n\ntracked-work API exposed through CLI and MCP JSON tools. The v0.14 direction is session-native: sessions become the durable unit of work, while peers remain the live runtime executors. The current dashboard shows the selected peer/session view, merges Claude transcript history where available with realtime events, and is moving toward broader session commands for controls like resume, scheduling, approvals, and future backend/model changes.\n\nTransport notes:\n\n- Claude Code, Codex, and Gemini CLI use hooks plus MCP tools.\n- OpenCode uses a TypeScript plugin plus WebSocket.\n- Pi uses the Repowire extension path when detected by setup.\n- Claude Code channel/ACP delivery is experimental and opt-in.\n- Relay is optional remote access, not a requirement for local routing.\n\n| Agent runtime | Connection path |\n|---|---|\n| Claude Code | Hooks + MCP; optional experimental channel/ACP transport |\n| Codex | Hooks + MCP |\n| Gemini CLI | Hooks + MCP through normalized `BeforeAgent` / `AfterAgent` events |\nAntigravity CLI (`agy` ) |\nPlugin install verified; hook firing and MCP pending upstream verification |\n| OpenCode | Plugin + WebSocket |\n| Pi | Repowire extension |\n\n| Human or service surface | Role in the mesh |\n|---|---|\n| Dashboard | Browser control surface at `localhost:8377/dashboard` or through relay |\n| Telegram | Phone control surface and notification target |\n| Slack | Team chat control surface |\n| Orchestrator peer | Long-running coordinator that dispatches and reviews work |\n| Relay dashboard | Optional remote dashboard and cross-machine bridge |\n\n`repowire setup`\n\nauto-detects installed runtimes and wires the supported transports it finds.\n\nThe agent-orchestration space is moving fast. Most projects cluster around a few shapes:\n\n**Worktree/task runners**:[Claude Squad](https://github.com/smtg-ai/claude-squad),[Vibe Kanban](https://github.com/BloopAI/vibe-kanban), and[dmux](https://dmux.ai/)help launch and review many isolated agent workspaces.**Deterministic schedulers**:[Bernstein](https://github.com/sipyourdrink-ltd/bernstein)decomposes goals, runs agents in parallel worktrees, verifies, and merges passing work.**Hierarchical swarms**:[multi-agent-shogun](https://github.com/yohey-w/multi-agent-shogun)defines manager/worker roles and routes tasks through tmux, files, or role-specific protocols.**Agent IDEs and workflow systems**:[HumanLayer/CodeLayer](https://github.com/humanlayer/humanlayer)focuses on planning, review, team workflows, and richer agent workspaces.\n\nRepowire sits in a different slot: it is a live mesh and control plane for agent sessions you already have running. It does not try to be the scheduler that decomposes every goal, the kanban board that owns every branch, or the merge gate that lands code. It gives your existing terminals, dashboard, Telegram, Slack, and orchestrator session a shared address book, message lifecycle, schedule queue, and local session timeline.\n\nProject A needs the real API shape from Project B. Ask `project-b`\n\n; the peer answers from its live checkout, not stale docs. See [multi-repo coordination](https://docs.repowire.io/use/workflows/multi-repo/).\n\nSend work to a peer from Telegram, Slack, or the dashboard, then receive progress updates from agents as notifications. Telegram and Slack human messages open tracked asks by default; use their notify/FYI commands for fire-and-forget nudges. See [mobile mesh management](https://docs.repowire.io/use/workflows/mobile-mesh/).\n\nRun one session as the orchestrator. It can dispatch to project peers, ask for status, review PRs, and wake itself later. See [orchestrator coordination](https://docs.repowire.io/use/workflows/orchestrator-coordination/).\n\nSchedule a reminder, check-in, or future ask:\n\n```\nrepowire schedule self 10m \"check CI\"\nrepowire schedule create orchestrator 1h \"handoff\" --from-peer project-a --kind ask\n```\n\nEnable the hosted relay when you want remote dashboard access or cross-machine mesh traffic:\n\n```\nrepowire setup --relay\n```\n\nThe dashboard shows peers, status, descriptions, chat turns, tool calls, attachments, durable jobs, and the selected peer/session timeline. For Claude Code peers, it can merge transcript history with realtime events; other backends contribute realtime events as their transports report them.\n\nRun it locally at:\n\n```\nhttp://localhost:8377/dashboard\n```\n\nWith relay enabled, use:\n\n```\nhttps://repowire.io/dashboard\nrepowire setup                         # install hooks/MCP/plugin/service for detected agents\nrepowire setup --http-mcp              # opt in to localhost Streamable HTTP MCP at /mcp\nrepowire setup --update-checks         # let status/doctor report available updates\nrepowire update                        # explicit package upgrade + hook reinstall + daemon restart\nrepowire status                        # show installed components and daemon status\nrepowire doctor                        # run diagnostics\nrepowire service restart               # restart the installed daemon service\nrepowire peer list                     # list mesh peers\nrepowire peer new PATH [--profile P]   # spawn a peer in tmux\nrepowire schedule self 10m \"check CI\"  # wake this peer later\nrepowire telegram start                # run Telegram service peer\nrepowire slack start                   # run Slack service peer\n```\n\nThe daemon uses `~/.repowire/state.db`\n\nfor durable local state. On first startup\nafter install or update, it applies SQLite migrations and imports legacy\n`schedules.json`\n\n, `events.json`\n\n, and `sessions.json`\n\nonce while leaving those\nfiles in place for downgrade/export compatibility. Migrated state is written to\nSQLite, and `repowire doctor`\n\nreports the SQLite schema, integrity, and import\nstatus.\n\nSee the full [CLI reference](https://docs.repowire.io/reference/cli/) and [MCP tools reference](https://docs.repowire.io/reference/mcp-tools/).\n\nConfig lives at `~/.repowire/config.yaml`\n\n.\n\n```\ndaemon:\n  host: \"127.0.0.1\"\n  port: 8377\n  auth_token: \"rw_local_...\"\n  mcp_http:\n    enabled: false\n    bind: \"localhost-only\"\n    require_auth: true\n    allow_dangerous_tools: false\n  spawn:\n    commands:\n      claude-code: \"claude --dangerously-skip-permissions\"\n      codex: \"codex --dangerously-bypass-approvals-and-sandbox\"\n      gemini: \"gemini --yolo\"\n    profiles:\n      codex:\n        fast:\n          args: [\"--model\", \"gpt-5-mini\"]\n    allowed_paths: [~/git, ~/projects]\nupdates:\n  check_enabled: false\n\nrelay:\n  enabled: true\n  url: \"wss://repowire.io\"\n  api_key: \"rw_...\"\n```\n\nUpdate checks are off by default. If enabled with `repowire setup --update-checks`\n\n, `repowire status`\n\nand `repowire doctor`\n\nmay report that a newer release is available, but they do not upgrade packages, rewrite hooks, or restart services. Use `repowire update`\n\nwhen you want to upgrade explicitly; it preserves enabled package extras such as `repowire[acp]`\n\nwhere practical.\n\nSecurity defaults:\n\n- Local daemon binds to\n`127.0.0.1`\n\n. - Relay is opt-in and uses outbound WebSocket.\n- WebSocket and local HTTP auth are available through\n`daemon.auth_token`\n\n. - Experimental HTTP MCP is opt-in, localhost-only, bearer-authenticated by default, and not exposed through the hosted relay.\n- Spawn requires explicit command and path allowlists.\n- Experimental channel/ACP transport is opt-in.\n\n```\ngit clone https://github.com/prassanna-ravishankar/repowire\ncd repowire\nuv sync --extra dev\nuv tool install . --force-reinstall\n```\n\nHooks and MCP servers run the installed `repowire`\n\nexecutable, not your checkout. After changing daemon, hook, or MCP code locally, reinstall the tool and restart the daemon service so the live mesh uses the new code:\n\n```\nuv tool install . --force-reinstall\nrepowire setup --non-interactive   # rewrites hooks/MCP/service to the installed local build\nrepowire service restart           # enough when only daemon code changed\n```\n\nIf service management fails, use `repowire service status`\n\nfirst. Raw `launchctl`\n\non macOS or `systemctl --user`\n\non Linux are fallback troubleshooting tools.\n\n```\nrepowire uninstall\nuv tool uninstall repowire\n```\n\n`repowire uninstall`\n\nremoves hooks, MCP entries, channel transport config, OpenCode plugin files, and the daemon service. It does not automatically remove `~/.repowire/`\n\n, which contains local config, events, attachments, and relay keys.\n\nSee [CONTRIBUTING.md](/prassanna-ravishankar/repowire/blob/main/CONTRIBUTING.md). Before opening a PR, run the advisory repo-hygiene\nchecklist:\n\n```\npython3 scripts/pre_pr_hygiene.py\n```\n\nIt is an opt-in prompt for docs, README, agent-instruction, and graphify follow-ups, not a mandatory hook. It also flags Beads JSONL ledger churn before it can leak into PR diffs.\n\nMIT", "url": "https://wpnews.pro/news/what-if-heterogenous-agents-could-talk-to-each-other", "canonical_source": "https://github.com/prassanna-ravishankar/repowire", "published_at": "2026-06-04 08:55:54+00:00", "updated_at": "2026-06-04 09:49:17.872046+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-infrastructure", "ai-products"], "entities": ["Repowire", "Claude Code", "Codex", "Telegram", "Python", "tmux"], "alternates": {"html": "https://wpnews.pro/news/what-if-heterogenous-agents-could-talk-to-each-other", "markdown": "https://wpnews.pro/news/what-if-heterogenous-agents-could-talk-to-each-other.md", "text": "https://wpnews.pro/news/what-if-heterogenous-agents-could-talk-to-each-other.txt", "jsonld": "https://wpnews.pro/news/what-if-heterogenous-agents-could-talk-to-each-other.jsonld"}}