Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ jobs:
NEXT_PUBLIC_POSTHOG_KEY: ${{ vars.NEXT_PUBLIC_POSTHOG_KEY }}
run: npm run cf:build

# Copy the prerendered SSG cache into the assets bundle
# (assets/cdn-cgi/_next_cache). The site serves blog/docs pages from the
# static-assets incremental cache; without this the Worker falls back to
# on-demand MDX rendering, which fails in the Workers runtime (500). The
# bare `wrangler deploy` below does not run this, so do it here.
- name: Populate static-assets cache
working-directory: web
run: npx opennextjs-cloudflare populateCache remote

- name: Deploy to Cloudflare
working-directory: web
env:
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ jobs:
NEXT_PUBLIC_POSTHOG_KEY: ${{ vars.NEXT_PUBLIC_POSTHOG_KEY }}
run: npm run cf:build

# Copy the prerendered SSG cache into the assets bundle
# (assets/cdn-cgi/_next_cache). The site serves blog/docs pages from the
# static-assets incremental cache; without this the Worker falls back to
# on-demand MDX rendering, which fails in the Workers runtime (500). The
# bare `wrangler versions upload` below does not run this, so do it here.
- name: Populate static-assets cache
working-directory: web
run: npx opennextjs-cloudflare populateCache remote

- name: Upload preview version
id: preview
working-directory: web
Expand Down
92 changes: 92 additions & 0 deletions web/content/blog/introducing-agent-relay.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
---
title: 'Introducing Agent Relay'
description: 'Your software should coordinate. Agent Relay is an open-source SDK that gives agents real-time, cross-provider communication — so you stop being the message bus in the middle.'
date: '2026-02-27'
author: 'Will Washburn'
category: 'Announcement'
tags:
- Agent Relay
- Multi-agent systems
- Agent communication
- SDK
---

**TLDR:** Your software should coordinate. Our SDK can help you do that.

Tell me if this sounds familiar.

You have multiple terminals open. One agent is building a plan. Another is executing it. You're tabbing between them like a very patient middle manager. You copy errors out of CI and paste them into Claude. You paste feedback from Codex into OpenCode. You press enter to say yes, it's totally fine that claude runs `find . -type f -name "*.ts" -print0 | xargs -0 grep -Hn "any"` just this once. Your research agent finds something interesting and writes it to a `SUPER_DETAILED_RESEARCH.md` document. Your planner needs it, but after pasting the markdown in the planner finds something else it needs context on. So you find the other terminal and copy the markdown back into the research prompt. Then you tweak the plan. Then you adjust the codex terminal running the plan. Then you review the output. Then you start again because it wasn't quite right. Ugh, compacting again?! Man… I'm exhausted. Software used to be fun! You know what's not fun? Being a glorified message bus for a bunch of LLMs.

Today I'm excited to show you a better way, one where you are no longer the bottleneck.

Instead of YOU being the glue in the middle… what if they could just, like, talk to each other?

## The Agent Relay SDK

Relay gives you a deterministic foundation for multi-agent systems:

- real time push communication
- Spawning and releasing agents
- channels, emoji reactions, read receipts — basically slack, but for headless and built FOR agents

Relay is NOT a custom harness so you can bring your own configuration as you like it. Your skills and configurations should work out of the box.

Imagine getting two agents to play tic tac toe. With the relay SDK this is simple:

```typescript
import { AgentRelay, Models } from "@agent-relay/sdk";

const relay = new AgentRelay();

relay.onMessageReceived = (msg) =>
console.log(`[${msg.from} → ${msg.to}]: ${msg.text}`);

const channel = ["tic-tac-toe"];

const x = await relay.claude.spawn({
name: "PlayerX",
model: Models.Claude.SONNET,
channels: channel,
task: "Play tic-tac-toe as X against PlayerO. You go first.",
});

const o = await relay.codex.spawn({
name: "PlayerO",
model: Models.Codex.GPT_5_3_CODEX_SPARK,
channels: channel,
task: "Play tic-tac-toe as O against PlayerX.",
});

await Promise.all([
relay.waitForAgentReady("PlayerX"),
relay.waitForAgentReady("PlayerO"),
]);

relay.system().sendMessage({ to: "PlayerX", text: "Start." });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the SDK sample away from removed system send

Because this post tells readers to install/import unpinned @agent-relay/sdk, the sample is copied against the current SDK, but the v8 migration docs state that there is no longer a system relay and that new examples should send from a registered participant (web/content/docs/migration.mdx lines 6-15 and 24). As written, readers following this launch post with the current package will hit a missing API here; either update the sample to the v8 workflow or explicitly label/pin it as legacy v7.1.1 code.

Useful? React with 👍 / 👎.


await AgentRelay.waitForAny([x, o], 5 * 60 * 1000);
await relay.shutdown();
```

Without Relay:

- You'd have to copy the board state between agents.
- You'd be the one to decide whose turn it is.
- You'd be bored and miserable watching ties happen in slow motion

The same primitive scales for other more complex tasks. When you have long running workflows it's hugely beneficial to have feedback while the work is being done; planners and executors and researchers can all discuss and evaluate plans forward _without_ waiting for a human to say "k".

Of course you can observe and interject when you need to, but the agents are surprisingly good at making it work without you.

## Don't we already have subagents?

While this _feels_ similar to subagents, they're actually quite different and complementary.

1. Subagents are hierarchical. (i.e Parent → child → result) That works for "do this subtask." but it breaks for systems or long running work. What happens when you need to adjust or have feedback in real time? With relay, you can still take advantage of subagents (and should!) to complete a subtask. With relay, you can have peer conversations back and forth to come to a conclusion. This generally allows for more creative and emergent solutions.
2. Subagents don't work cross provider. You want to be able to use the best model from multiple providers for the given task and you want it to work seamlessly with other agents.

## Open source and open to contributions

If you've felt like the manager of a very fast, very forgetful engineering team… This is for you. Go to (or probably just point your agent to) [https://github.com/AgentWorkforce/relay](https://github.com/AgentWorkforce/relay) and try it out.

Build something that doesn't require you to be the runtime.
Loading