Skip to content

Security

Browsers are credentials. Treat them that way.

A browser session can hold logged-in state, cookies, and live pages. Panes is designed so that access to one is always scoped, always short-lived, and always attributable.

Keystone identity

Sign-in is OAuth against Keystone (auth.l1fe.ai). Sessions, IAM, entitlements, and usage checks delegate to Auth v4, IAM v4, and Garden v4 — the console never invents its own auth.

Tenant isolation

Every API call carries org → project → workspace scope. You only ever see your tenant's sessions — the sessions table itself is tenant-scoped Omega data.

Ephemeral credentials

Live-session access uses term credentials minted on demand. They expire within minutes, render masked by default, and are never stored — not by us, not in your browser.

Permission-gated agents

Agent invocations go through POST /api/agent/invoke and require panes.agent.invoke plus the underlying instance permission. Agents get exactly what you grant — nothing more.

In practice

Short-lived by default, masked by default

This is the actual credentials dialog. Endpoint and token, masked by default, with copy and reveal as explicit actions. The dialog warns you to treat them like a password — because they are one, just one that dies in minutes.

panes.sh — credentials
Term credentials dialog — masked token with reveal and copy controls

Least privilege

Scopes, not superpowers

The console requests a precise OAuth scope set. Instance read, create, and control are separate grants — an integration that only lists sessions never gets the power to stop them.

openidprofileemailauth:sessioniam:readgarden:usage:writepanes:instances:readpanes:instances:createpanes:instances:controlpanes:agent:invoke

Plus offline_access for refresh — revocable at any time from your Keystone account.

Security questions?

We'll walk your security team through the auth flow, tenancy model, and credential lifecycle in detail.