> MULTI-AGENT ORCHESTRATION

Agents that work as a team.

Coordinate teams of AI agents with semantic routing, real-time communication, and full control — from local development to a multi-node, highly available cluster.

Get started → View features
<5ms routing
7 context layers
A2A Protocol
Semantic Routing · NATS JetStream · A2A Protocol · Persona System · HybridScorer BM25F+HNSW · Pi Runtime · coms-net Hub · Chain & Schedules · Semantic Routing · NATS JetStream · A2A Protocol · Persona System · HybridScorer BM25F+HNSW · Pi Runtime · coms-net Hub · Chain & Schedules ·
[π]

Built on the Pi runtime — every pi.dev package works natively with any AgentOffice agent.

Learn more →
> THE PROBLEM

Isolated agents don't deliver

The promise of AI agents breaks down when they can't coordinate, scale, or be audited.

⛓️

No coordination

Individual agents don't share context or delegate tasks to one another. Each operates on its own island, duplicating effort and losing information.

📈

No scalability

Adding new agents breaks existing flows. Fragile architectures demand a full rewrite for every new integration or capability.

🔭

No control

No visibility into routing and execution decisions. You don't know which agent answered, why, or with what confidence score.

> HOW IT WORKS

Layers that repeat

An architecture that repeats itself: your team can become the next layer of another team, with no limit on depth.

01
01

Pi Runtime

The execution base. Every agent is a Pi process with access to tools, providers, and the full pi.dev package ecosystem — no extra setup.

02
02

Agent Office

A Pi extension that adds semantic routing, a real-time portal, and transport for cross-team communication — the coms-net hub (HTTP) or NATS (decentralized pub/sub). Enabled in one line: pi -e agent-office.ts.

03
03

Your team

AGENTS.md defines who does what. The HybridScorer picks the right agent automatically, with p50 latency under 5ms, no manual rules.

04
04

Teams of teams

Any agent on your team can spin up its own Agent Office extension and become a team in its own right — with its own agents, extensions, and configuration. Repeat step 02 as many times as makes sense.

↻ step 04 can become step 02 of a brand-new team, in any project — and they all see each other via coms-net/NATS.
> FEATURES

Everything you need

Six capabilities that turn individual agents into a coordinated, auditable team.

🔀

Hybrid Routing

BM25F + HNSW + cross-encoder. p50 < 5ms. Always pick the right agent, with no hand-written rules.

<5ms p50
🌐

Real-Time Portal

Next.js interface with SSE. Watch routing decisions, scores, and executions live — no polling.

SSE streaming
🔗

NATS JetStream

Decentralized pub/sub transport between teams and instances — an alternative to the coms-net hub for larger topologies. At-least-once delivery via JetStream, with 1h result persistence.

at-least-once
🤖

A2A Protocol

Native Google Agent-to-Agent support — not the transport between your own teams (that's coms-net/NATS), but the door to the outside: interoperability with frameworks and agents outside the Pi ecosystem.

external channel
🎭

Persona System

7 layers of context (AGENTS.md, SOUL.md, IDENTITY.md…). Agents with a consistent, auditable personality.

7 layers
🔌

Pi Extensions

MCP stdio/HTTP, coms-net hub, A2A. Add new capabilities without touching existing agents' code.

plug & play
> ROUTING

HybridScorer — precision and speed

A four-stage pipeline that combines sparse retrieval, dense retrieval, and semantic re-ranking into a single routing decision.

Stage 1
BM25F
Sparse
→
Stage 2
all-MiniLM-L6
Dense HNSW
→
Stage 3
RRF (k=60)
Fusion
→
Optional
Cross-Encoder
Re-ranking
→
Decision
Agent
+ score
5ms BM25F p50 latency
20ms With cross-encoder p99
60k RRF window

SSE event emitted by the real-time portal on every decision:

routing:decision — SSE stream
$ curl -N http://localhost:3000/api/events

# Event emitted on every routing decision
data: {
  "type": "routing:decision",
  "agent": "builder",
  "score": 0.94,
  "runner": "hybrid",
  "latencyMs": 4,
  "ts": "2025-07-02T10:23:41.187Z"
}
ⓘ
Qdrant is optional: Set QDRANT_URL to enable the QdrantScorer, with persisted embeddings and vector search at scale.
> DEPLOY

From local development to Kubernetes in minutes

Three ways to run AgentOffice, from local development to a production cluster.

terminal — bash
$ git clone https://github.com/org/agentoffice
Cloning into 'agentoffice'...
$ cd agentoffice && npm install
added 142 packages in 3.2s
$ pi -e extensions/agent-office.ts
[AO] AgentOffice v2.0 starting...
✓ coms-net hub active on port 4222
✓ real-time portal: http://localhost:3000
✓ HybridScorer loaded (BM25F + HNSW)
✓ 4 agents registered. Ready.
docker-compose.yml
# docker-compose.yml
version: '3.9'
services:
  agentoffice:
    image: ghcr.io/org/agentoffice:latest
    ports:
      - "3000:3000"
      - "4222:4222"
    volumes:
      - ./AGENTS.md:/app/AGENTS.md:ro
    environment:
      NODE_ENV: production
      NATS_URL: nats://nats:4222
  nats:
    image: nats:2.10-alpine
    command: --jetstream --store_dir /data

$ docker compose up -d
# Portal available at http://localhost:3000
k8s/agentoffice.yaml
$ kubectl apply -f k8s/

# Applies: Namespace, Deployment, Service, ConfigMap
namespace/agentoffice created
deployment.apps/agentoffice created
service/agentoffice-svc created
configmap/agents-config created

$ kubectl get pods -n agentoffice
NAME                            READY   STATUS    RESTARTS
agentoffice-7d4f9c8b6-xp2k9    1/1     Running   0
nats-0                          1/1     Running   0

$ kubectl port-forward svc/agentoffice-svc 3000:3000 -n agentoffice
# Portal at http://localhost:3000

> READY TO GET STARTED

Get started in under 2 minutes

One line to install, one file to configure. Your agent team, in production today.

Read the docs View on GitHub