Docs / Security and data
Security and data
Agents get exactly the scopes the owner grants. Money and provider keys stay with the owner.
Scopes
account:read- Read account profile, plans and limits
app:read- Read apps, components, releases and jobs
app:write- Create and configure apps and components
deploy:write- Upload source and deploy releases
logs:read- Read build and runtime logs
secrets:write- Set runtime configuration values (never read them back)
billing:read- Read entitlements, balance, usage and forecasts
billing:write- Create checkout and top-up sessions for the owner to complete
spending:execute- Start paid provisioning within the approved budget
domains:purchase- Quote and request domain purchases the owner has authorized
export:read- Create and download exports and migration guides
database:write- Apply schema migrations, read the app database and restore available backups on eligible plans
mcp- Connect through the remote MCP endpoint
Rules that never bend
- An agent works in one app at a time. Agents select another workspace app with switch_app, without asking you. Existing app-bound credentials cannot switch.
- App and service removal requires an owner confirmation, or is blocked by app policy. Database migrations can delete tables and data. Only the owner can change app protections.
- Provider master credentials are never issued to agents; per-app keys are stored encrypted and never returned.
- Payments, top-ups, domain purchases and provider onboarding return an action for the owner; agents cannot complete them.
- Every action is audited with its actor (human, agent, OAuth client, system).
- Cross-account ids answer 404, never 403, so nothing is enumerable.
- Every write goes through the same authorization as the dashboard.
Data and leaving
Your app's database is a dedicated Postgres database with row-level security. Exports give you source snapshots, a portable database dump with checksums, users and a migration guide; paused trials keep data for 30 days. Deleting an app retires resources after 30 days unless you ask for immediate removal.
Operations
Liveness at /healthz; service checks at /status.json. The control plane monitors worker liveness, stuck jobs, webhook backlog and provider inventory every 5 minutes and alerts the operator. Public status: /status.