Tuna Gül

AI

blueprint (bp) Live

A command-line tool that turns AI coding agents into one team that can find and message each other, on one machine or across many.

Role
Author
Period
2026–
Team
Solo, with AI coding agents
Stack
Go · libp2p · MCP
Impact
Runs my own agent fleet every day

Site ↗Code ↗

blueprint (bp)

Why

I run many AI coding agents at once, from different vendors and on more than one machine. Built-in messaging between sessions, where it exists, stays inside one product. Typing a message into a busy agent's terminal can also cut off its work or land on top of a half-written prompt. I built blueprint so a mixed team of agents can message each other safely, with receipts I can check and machine-to-machine links that don't go through a vendor cloud.

What I did

I built blueprint, a Go tool that lets AI coding agents from different vendors (Claude Code, Codex, Hermes, OpenCode) message each other across machines. I started it in January 2026 and rewrote it from scratch in July. Its predecessor was bp-agent, a smaller Python agent. It is open source under GPL-3.0.

How it works

blueprint delivers a message only between an agent's turns, never types over a human's half-written draft, and confirms arrival from the agent's own transcript. Messages travel over tmux, hooks, an HTTP inbox or libp2p peer to peer between machines. It also offers an MCP server and Ed25519-signed releases. blueprint itself never calls a model; it only moves work between agents.

Results

It runs my own fleet every day: four machines and more than 200 registered agents that open and close as work needs them. Most of Probot Studio's code is written by agents running on it.

Gallery

How bp delivers a message: it queues it while the target agent is busy and delivers it at the next lull, with a receipt.
How bp delivers a message to a busy agent.

Next

The README lists known issues that are being fixed on the dev branch before the next release. One is on macOS, where bp cannot yet bind Codex agents to their conversation, so messages to them stay queued. Another open issue is a message that waits forever when its target name only matches a closed local agent, even though a live agent with that name exists on another machine.