The promise of AI agents breaks down when they can't coordinate, scale, or be audited.
Individual agents don't share context or delegate tasks to one another. Each operates on its own island, duplicating effort and losing information.
Adding new agents breaks existing flows. Fragile architectures demand a full rewrite for every new integration or capability.
No visibility into routing and execution decisions. You don't know which agent answered, why, or with what confidence score.
An architecture that repeats itself: your team can become the next layer of another team, with no limit on depth.
The execution base. Every agent is a Pi process with access to tools, providers, and the full pi.dev package ecosystem — no extra setup.
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.
AGENTS.md defines who does what. The HybridScorer picks the right agent automatically, with p50 latency under 5ms, no manual rules.
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.
Six capabilities that turn individual agents into a coordinated, auditable team.
BM25F + HNSW + cross-encoder. p50 < 5ms. Always pick the right agent, with no hand-written rules.
<5ms p50Next.js interface with SSE. Watch routing decisions, scores, and executions live — no polling.
SSE streamingDecentralized 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-onceNative 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 channel7 layers of context (AGENTS.md, SOUL.md, IDENTITY.md…). Agents with a consistent, auditable personality.
7 layersMCP stdio/HTTP, coms-net hub, A2A. Add new capabilities without touching existing agents' code.
plug & playA four-stage pipeline that combines sparse retrieval, dense retrieval, and semantic re-ranking into a single routing decision.
SSE event emitted by the real-time portal on every decision:
$ 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_URL to enable the QdrantScorer, with persisted embeddings and vector search at scale.
Three ways to run AgentOffice, from local development to a production cluster.
# 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
$ 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