The path of one question
1
The panel posts the question
The panel sends
POST /api/vendo/threads and reads the reply as a stream.
baseUrl on the provider is what decides that path.The body carries the question and a snapshot of what the user is looking at.
Nothing else leaves the browser.2
Your route answers who is asking
vendo init wrote one file, and it is ordinary source you can read and change.app/api/vendo/[...vendo]/route.ts
principal function for you to fill
in instead.Vendo mints no identity of its own. Without one of the two, createVendo
throws, and a visitor your resolver cannot place is refused the turn.3
The turn runs on your server
The harness runs the loop in your own process. Where the prompt goes is set by
what your composition selects: pass a model object —
models: { default: anthropic("claude-sonnet-4-6") }, which is what vendo init writes when you
bring your own key — and the call goes straight to that provider. Leave the slot
unset and the VENDO_API_KEY in your environment answers it over the Vendo
Cloud gateway. Model credentials covers both.Its tools are your API, extracted into .vendo/tools.json by vendo init and
refreshed by vendo sync, plus Vendo’s own tools for building screens.4
The guard grades every call
Every tool call passes the guard before it runs. Reads run; anything
destructive, and anything extraction could not grade, stops and asks.An ask parks the turn on an approval card in the thread, showing the exact
request. Approve it and the same turn resumes and the tool runs.
5
Your API runs the call
The call reaches your own endpoint as the person who is signed in. The agent
can do what that person could already do by clicking, and nothing more.
6
A screen comes back instead of a paragraph
When the answer is one to look at, the agent calls
vendo_make with the
request in plain language. Vendo assembles a screen, or builds a small app
whose server code runs on a Cloud sandbox.The view streams into the transcript as it forms and lands interactive, bound
to live data from your own tools. From there it can be pinned into a
VendoSlot on your page.What runs where
One key fills the model, store, and sandbox slots your composition left unset.
Nothing to provision, and nothing to run.
What the agent can see
Each send carries a small[Situation] bundle for that turn only. It rides the
request and never enters the transcript.
- The accessibility tree of the visible page, with the URL and title on top, capped at 8 KB.
- Anything you publish yourself with
useVendoContext.
data-vendo-ignore are left out of the snapshot, and the
panel excludes its own chrome. Pass captureScreen={false} on the provider to
turn the page snapshot off entirely.
What stops a call
The guard’s decision is server-side, so no client can talk it out of one. The default policy runs reads and asks a person about destructive and ungraded calls. Write your own rules in.vendo/policy.json, or pass them to guard() in the
route. Approved calls, denials, and everything that ran land in the audit log.
Mount the surface
Every surface the panel is made of, and the props that move them.
API tools
How your endpoints become tools, and how each one gets its risk grade.