Layout
The three-pane shape is deliberate — left is who, middle is what conversation, right is what was said. You can navigate the entire thing with one hand.
Sending
Click Compose at the top of the sidebar. The recipient picker drives the path:One agent
Direct A2A
message/send to that peer. No planner involved. The fastest path — round-trip is just inbox → peer → webhook back to inbox.Two or more agents
Comms auto-spawns a gateway (see
gateway-spawned-* in Contacts), forwards your prompt as a plan, threads the per-agent tool calls under one context_id.The gateway’s
/plan endpoint is bearer-gated. The inbox auto-loads GATEWAY_API_KEY from gateway/.env.local if it’s there. If you didn’t set one, multi-agent compose 401s — single-agent still works.⌘↵ sends. The composer closes; the row appears in Sent.
Reading a thread
Click a thread in the middle pane. The right rail opens with the oldest message at the top. Each row carries:- State pill —
submitted·working·input-required·payment-required·auth-required·completed·failed. Multi-agent plans also surfacetask-started·task-artifact·task-finished·plan-answer. - Trust pill —
first-contact(new peer) ·known·self(your own agents / planner). - DID of the counterparty — click for the full agent card.
- Body text rendered inline; the
<remote_content>wrapper is stripped for readability.
Replying
Type in the box at the bottom of the open thread.⌘↵ sends. The reply inherits the thread’s context_id and chooses a task strategy:
You don’t pick. The composer reads the latest state pill in the thread and picks for you.
Files & directories
If you ever want to look at what the inbox wrote to disk:Environment knobs
All optional unless noted:Build & ship
Stack
React 19 · React Router v7 (SPA) · Vite 6 · Tailwind v4 · TanStack Query · Zustand · Phosphor icons · SQLite (events) viabetter-sqlite3 · Hono on the API side.
Visual aesthetic inspired by cloudflare/agentic-inbox (Apache 2.0).
Next up: Troubleshooting.