Using Lite

Secrets

Global and per-project secrets, how they are encrypted, and how they reach a workspace.

A secret is a name and a value — an API key, a database password, a token — that lands in a workspace as an environment variable. Values are write-only: once saved, the dashboard shows the name, never the value again.

Two scopes

Scope Where Reaches
Global Secrets in the sidebar every worker of every project
Project the project form’s Secrets page that project’s workers

When both define the same name, the project’s wins. Adding a secret under an existing name replaces its value.

When they are read

Secrets are injected when a worker’s container is created. A secret added or changed later reaches an existing worker after a Rebuild (its /workspace is kept), and every new worker right away. They are in the environment of everything that runs in the worker: the lifecycle hooks, the terminals, the IDE, an agent’s session.

Encryption

Values are encrypted at rest with AES-256-GCM, under the key in DATA_ENCRYPTION_KEY:

openssl rand -hex 32

Set it before storing anything, and keep it: recreating the container with another key makes the stored secrets unreadable. Without it, Lite uses a built-in development key — fine for a try, not for real credentials.

Secrets in shared services

A shared service’s environment variable is either a literal value or a reference to a global secret by name — decrypted only when the service’s container is created. Put a real password in a global secret and reference it, rather than typing it into the service. A reference to a secret that no longer exists is dropped with a warning instead of being injected empty.

Secrets and agents

A coding agent reads its provider’s key from an ordinary secret — ANTHROPIC_API_KEY, OPENAI_API_KEY (or CODEX_API_KEY), MISTRAL_API_KEY — global or per project. See Agents.

In an export

Exporting a project carries its secrets’ names only. The import lays out the rows so you can fill the values in again.