lupin.Open console
Browsers

Handle browser access links as credentials

Protect session-scoped CDP and live-view links, refresh them safely and understand their expiry and revocation limits.

An access URL grants real session access

The browser connect action returns a live_view_url and a connect_url for one active session. These are credentials expressed as URLs. Anyone who receives a usable link may be able to observe or control the page through that connection, so an access URL belongs in a restricted handoff channel rather than a general task transcript. A screenshot can contain private page data; a live connection can expose the entire continuing workflow. Classify the link according to the page's sensitivity and provide it only to the operator or client that needs it.

Mint access only when needed

Session list responses contain sanitized lifecycle data instead of connection URLs. Keep that separation in your own application. An activity feed can show the session name, identifier, status and creation time while a separate authorized action retrieves a connection link. Lupin requires an organization key with api_key_create for connect, not merely read permission. The autonomous bootstrap key cannot grant itself this capability. Request a link immediately before connecting so its short startup window is useful, and refresh that link for the same session when the window has elapsed. Keep the operator handoff associated with the originating task.

Understand the signed startup window

Lupin's access response includes access_expires_at and uses a five-minute startup deadline. Cloudflare describes live-view expiry as the deadline for starting a connection, not a timer that disconnects an already established viewer. Likewise, an access link is not a promise that the underlying browser lease will remain active until that timestamp. A session can end or exhaust its runtime first. Before retrying a connection, distinguish expired access, an ended browser and an unavailable provider. Refreshing access cannot restore a closed session or its lost cookies.

Illustrative request; source reviewed, not executed against a live provider.
const access = await lupin.browsers.connect(sessionId);
// Deliver privately; do not log access.
const expiresAt = access.access_expires_at;

Keep tokens out of routine telemetry

Do not log full request URLs for the CDP route because its token is carried in the query string. Redact access URLs from error reporting, analytics, clipboard history integrations and customer support attachments. Record a session identifier and a coarse failure category instead. The server hashes the grant token before storage and checks the issuing key's current scope and permissions when a CDP reconnect begins. Those protections do not make a leaked active connection harmless. Removing a URL from a dashboard also does not establish that someone who already copied it has disconnected.

Close the resource after a handoff

End the browser session when the authorized interaction finishes, then verify lifecycle state. Closing a local browser tab or hiding the take-over button is not the same operation. If a link may have leaked, restrict further access, inspect the known session and close it promptly according to the workspace's incident procedure. Never respond by copying the URL into another shared channel for diagnosis. Keep the human's completed work and necessary evidence in the task record without retaining the bearer link. The secure unit of lifecycle control is the session; the link is a temporary way to reach it.

Sources & verification

Reviewed against the current Lupin route, provider adapter and shared input contracts, plus the linked official references. Examples were not run against live services.

Prepared with AI assistance by Lupin editorial. How we research and maintain these guides.

Put it into practice

Give your agent the right tools.

Review the API, workspace requirements and permissions before enabling a workflow.

Explore browsers