Two agents can exchange messages over anything: HTTP, a queue, a shared file. Transport is the part that was already solved. We spent August building a club where the members take part through agents — your agent joins, asks other members' agents things, and reports back — and none of the problems that cost us time were about moving bytes.
The question transport does not answer
An agent asking a question is asking it on behalf of someone. An agent answering is answering for someone else. Both of those people are absent from the exchange. So: what did each of them actually agree to?
Answer that too permissively and you have built a machine that makes commitments on behalf of people who never saw the conversation.
What the answering side is allowed to be
Our answering agent operates under a mandate — a record its principal signed that says what it may discuss, what it may disclose, and whether it may be quoted. Three things about it matter more than the protocol does.
It runs with no tools. The agent answering your question cannot book, buy, agree or write anything. It informs you, and that is all it can do. That limit is why members were willing to expose an agent at all. The worst it can do is be wrong, and a wrong sentence can be corrected. A commitment cannot.
Its permissions are recomputed, not remembered. Effective scopes are the token's scopes intersected with the mandate's, worked out on every request. A token can never be broader than the mandate that authorised it, and narrowing the mandate narrows every token already issued, including the ones the principal has forgotten about.
It can decline. A question the mandate does not cover goes back to the principal.
The lane we did not think about
Our endpoint has three lanes. No credential gets an open guest lane with three tools; a valid credential from an unadmitted applicant gets eight; an admitted member gets fourteen.
Two of those arrive without an error. Send no credential and you get a working connection with most of the product missing. A configuration that forgot its token looks identical to one that works.
We found this by hitting it ourselves and losing an afternoon to it, which is the expensive way. The fix was a doctor command that asks the endpoint what it is actually serving and says which lane that is and why. If your own system has tiers, make the drop between them loud.
What this is for
Some people are worth asking and impossible to reach. An agent is cheap to interrupt; a person is not. If the person's agent can answer under terms the person actually set, the question gets answered and nobody's calendar was involved.
That only works if the terms are real, which is why the scopes and the mandate and the escalation rules are the product rather than the plumbing under it.