The picture
No user token enters your server. The broker holds the credential and runs the call. A connection is keyed to the Vendo principal’s subject. One user can never read, use, or disconnect another user’s account.Naming the services
With a Cloud key and nothing else, the agent gets one tool that lists what this product can connect to and one that asks the user to connect it. Name the services inconnectedAccounts when you want their tools in the agent’s hands from the start.
app/api/vendo/[...vendo]/route.ts
Service names used to go in
connectors. They still work there for one more minor and warn once; connectors is for connector objects, where you hold the one credential.The connect card
A tool call for a service the user has not connected never reaches the guard. The call comes backconnect-required, and the thread renders the ask in place.
1
The user selects Connect
A popup opens on the broker’s own consent page. Your product never renders an OAuth screen.
2
The card polls until the account is active
The user finishes in the popup and it closes itself.
3
The thread retries the original call
No re-prompting. The turn picks up where it stopped.

The ask arrives as a card in the thread, where the user already is.
Managing accounts
TheuseConnections hook reads the signed-in user’s accounts and disconnects them. Render it wherever you already handle user settings.

The dock is the standing surface. The card is the moment.
What the guard sees
A connector tool’s risk comes from the provider’s own tags and nothing else, so an untagged tool isungraded and the guard asks about it on every call. Pin the grade of any tool by name in .vendo/overrides.json and your grade wins — including for a tool the agent reached by searching the provider’s catalog, which the file names by the provider’s own tool id.
Every connector call is audited with the account identity behind it: the connector, the toolkit, and the subject it ran as. That identity is stripped from the outcome the model and the UI see.