Intents (a menu for agents)
An intent is a named action your app agrees to perform for an agent.
Not a goal. Not a vibe. Not “AI please do the thing.”
It’s a contract:
- a name (e.g.
ping,invoice.create,journal.createEntry) - an input shape (payload schema)
- optional output shape (result schema)
- required scopes (permissions)
If you give an agent a key, the intent system is what prevents the agent from turning your backend into a piñata.
Quick link: if things get weird in production, you can always revoke the key (dashboard → Keys → Revoke). That’s the panic button.
How it runs (what actually happens)
The agent calls your app:
{ "intent": "ping", "payload": {} }Your app (via the Bissap SDK) does:
- Auth: validate the
bs_live_...key → “this is user X” - Permissions: check scopes → “is X allowed to run this?”
- Validation (optional): validate payload against the intent schema
- Routing: call your handler
- Return: send JSON back
That’s it. No secret LLM logic inside Bissap. Your app stays in charge.
Why intents exist
You could expose one big endpoint like POST /agent/do-anything.
You could also eat spaghetti with your hands.
Intents give you:
- explicit capability boundaries (small surface area)
- debuggability (you can log intent name + payload)
- evolvability (add new intents without breaking old ones)
Intent registry (recommended)
If you want the copy/paste recipe + verification steps, see: How to publish the intent manifest.
In the Node SDK (Zod), you can define an intent registry so Bissap can:
- enforce
requiredScopes - validate payload (and optionally output)
- expose an intent manifest at
GET /bissap/agent/intents
In Python, same idea with Pydantic.
Scope mapping (MVP)
There are two ways scope enforcement works:
- Simple rule (default): if the intent name matches a scope string, that scope is required.
- Intent registry: each intent can declare
requiredScopesand those are enforced.
If your app needs something more nuanced, you can always enforce inside the handler.
strictIntents (recommended for production)
Set strictIntents: true in your SDK config. This means:
- Only intents you've explicitly registered can be called
- Unknown intent names return
404 INTENT_NOT_FOUND - The intent manifest (
GET /bissap/agent/intents) only lists registered intents
Without strictIntents, unregistered intents fall through to onAgentIntent, which can be useful during development but is risky in production.
What NOT to expose
Don't map every endpoint to an intent.
Just because your app has an internal endpoint doesn't mean agents should access it. Bulk-list endpoints, admin routes, and catalog dumps can leak your business logic and proprietary data.
Ask: "Would I put this behind a public API?" If no, don't make it an intent.
For a full guide on choosing what to expose (with real examples), see: Intent Hygiene.