Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.getbindu.com/llms.txt

Use this file to discover all available pages before exploring further.

Budget about 20 minutes to go from git clone to a signed message landing in the right rail. No prior bindu knowledge required — every step in the next chapter explains what it does and what you should see.
You’ve built an agent. Maybe two. They talk to each other over A2A. But the traffic itself — who called whom, with what body, signed by which DID, with which Hydra token — is invisible. It’s HTTP. It’s gone the moment it lands. The inbox is the thing that makes that traffic visible. Every JSON-RPC message between two DIDs lands here as a row. Threads group by context_id. Signatures are verified inline so you can see whether a peer is actually who it claims to be. It’s an operator console — for you, your auditor, and your future self trying to figure out what went wrong at 2am.

Bindu inbox — three-pane layout with folders, threads, and a signed message in the right rail


The roadmap

What's in this section

The five processes that make the inbox tick, and why each one is there.

Quickstart

Five steps. One persona. Two demo peers. One signed message.

Verify the auth

Prove from your terminal that calls really are signed and authed.

Using the inbox

Layout, sending, reading a thread, replying.

Troubleshooting

Common boot failures and the env knobs that fix them.

Why this exists

Most agent frameworks treat the wire as someone else’s problem. You write a handler, you POST to it, you hope it returns. If something goes wrong — wrong signer, expired token, a peer that lied about its DID — you get a stack trace and you start grepping logs across three machines. The inbox flips that. It treats every A2A message as a first-class object with:
  • A state pillsubmitted · working · input-required · payment-required · auth-required · completed · failed.
  • A trust pillfirst-contact (new peer) · known · self (your own agents / planner).
  • A DID of the counterparty — click for the full agent card.
  • The canonical body that was signed, the signature, and the timestamp nonce — all verifiable inline.
You don’t have to trust the UI. The Verify tab in the right rail re-runs the signature check against the peer’s published publicKeyBase58 — same code path a hostile peer would face on the wire.

What ends up running

By the time you finish the quickstart, five things will be alive on your machine:
PortProcessWhat it does
3775Vite dev serverThe React UI you open in your browser.
3787Hono API (server/index.ts)SQLite event store, webhook intake, outbound A2A composer.
<auto> (e.g. 5xxxx)Your personal agent (Python, spawned on demand)Your DID + Hydra OAuth client. Listens for inbound A2A and signs everything you send.
5773 + 5776Demo peers (joke + poet)Two example agents to talk to. Optional — bring your own if you have them.
3774Gateway (optional)The planner. Only spawns when you message ≥2 agents at once.
3775 is hard-pinned (Vite refuses to drift) and 3787 is hard-coded; both have to be free before you start. If something else is on those ports the inbox won’t boot — see Troubleshooting.

What “auth on” means here

There are three independent auth layers in play. The inbox uses all three:
LayerWho enforces itDefault
Peer A2A auth — outbound calls must carry a JWT + DID signatureThe peer’s bindufy middleware (-32009 if missing)On
Operator gate/api/* on the inbox requires a bearer tokeninbox/server/index.tsOff (single-user dev)
Webhook gate — agents POSTing back must carry a bearer tokeninbox/server/index.tsOff
The first is non-negotiable once your personal agent is alive. The other two are belt-and-suspenders for multi-user or exposed deployments — leave them off until you actually share the URL. The full mechanics live in Verify the auth.

What the inbox is not

Threads are grouped by context_id, not by contact. The same peer can show up in dozens of unrelated threads and the inbox treats each one independently.
Your personal agent runs as a separate Python process the inbox spawns on demand. Demo peers and any peer you add run wherever they run. The inbox is the observer.
Single operator, single machine. BINDU_COMMS_TOKEN is a gate for sharing the URL with a teammate; full SSO is on the roadmap.

What you’ll have by the end

An identity

Your operator DID (did:bindu:<author>:<persona>:<uuid>), an Ed25519 keypair on disk, and a Hydra OAuth client registered to that DID.

Two peers

joke_agent and poet_agent running locally with AUTH__ENABLED=true — same auth shape as a production bindufy agent.

A verified thread

A Sent row, an Inbox reply, both signed, both verified, both threaded under the same context_id.
Let’s go. Next up: Quickstart. Sunflower LogoThe inbox doesn’t generate traffic — it makes the traffic legible.