How an approval works
- You ask for something that needs a service you hold a key for, such as “list my Stripe customers”, or share a link into a service Roomote has no connector for but whose API accepts a key you hold, such as a Figma frame or an Intercom conversation.
- The agent reads the service’s documentation and prepares an approval with
only nonsecret policy: a label, the exact HTTPS origin (for example
https://api.stripe.com), the header that carries the key, and the HTTP methods the work needs (read-only by default). The approval waits 24 hours for the key. - While you are viewing the session, the key form opens automatically. If you dismiss it, a service-specific card such as Add your Figma key remains at the end of the conversation, and the agent’s secure link opens the same form. Enter the key there; the form bypasses chat and is excluded from capture and replay. If the agent asked for write methods, the form shows them and you confirm them. Choose Only me for a personal integration or Everyone in this deployment for a shared integration.
- The session resumes on its own. Personal integrations are available to your sessions and coding tasks. Deployment-wide integrations are available to active members while the integration owner remains active.
What agents can do with it
In a human session turn, Roomote can discover existing integration keys, prepare secure approval requests, and make one or a few direct calls to an approved origin using any HTTP method approved for that integration. Roomote’s API sends the request with the real key and returns the response. For scripts, SDKs, CLIs, or many calls, Roomote launches an attached coding task instead. In coding tasks launched from the session, the task receives each approved service as a substitute token in its environment, plus one base URL. The agent calls the service through that base URL with the substitute as its bearer token, using curl, a script, an SDK, or a CLI, with any of the approved methods. Roomote’s API forwards the request to the real origin and places the real key in the header the service expects. The substitute only works through that proxy, only from that task, and only while the approval and the task are live. The real key never enters the sandbox. Coding tasks pick up approvals when they start or resume. A key approved while a task is already running becomes available to the next task.Header names
An approval names the header that carries the key at the approved origin:authorization, optionally with a Bearer, Basic, or Token scheme,
x-api-key, api-key, or the service’s own header such as private-token or
x-shopify-access-token. A scheme is only accepted on authorization.
Headers that shape the request itself, such as cookies, host, content
framing, and proxy or forwarding headers, cannot carry a key. Inside a coding
task the agent always sends the substitute as a bearer token; the proxy moves
the real key to the right header.
Security boundary
The approved origin receives the key. It can use whatever privileges the key grants, including write privileges even when the approval is read-only, and some services perform side effects on GET. Approve a least-privilege, disposable key and only a service you trust. Responses are visible to the agent and may enter the transcript, and a service can disclose partial or transformed values that Roomote cannot recognize. This is not a data-loss prevention guarantee. Substitutes are capabilities. A substitute token is bound to one task, one integration, and the task’s current generation, and it stops working when the task ends, or the integration expires or is revoked. Within that window, a copy of the substitute could be used from elsewhere against the same origin. Roomote never logs substitutes or keys, strips them from snapshots, and refuses responses that echo the key. Do not put keys in labels, origins, paths, task prompts, task environment files, or ordinary session messages.Limits
- One origin per integration; paths under it are not restricted beyond the approved methods.
- Personal integrations are available only to their owner. Deployment-wide integrations are available to active members, stop working when their owner becomes inactive or is deleted, and remain manageable by administrators.
- A task receives only the integrations available to its acting user.
- Services that sign requests with the secret (for example AWS Signature V4) cannot be used, since the key must be present where the signature is made.
- Streaming responses, WebSockets, and redirects are not relayed through the proxy; responses are capped at 8 MiB.
- SDKs that allow a host override but no path prefix need a dedicated proxy hostname; see below.
Self-hosting
No configuration is required. Optionally setR_CREDENTIAL_EGRESS_PROXY_HOST on
the API and controller to a hostname pointed at the API service, so coding
tasks receive https://<that host> as their base URL and host-only SDK
clients work. See environment variables.