Skip to main content
Set environment variables and secrets once, at the account (or org) level, and boxd injects them into every machine you own β€” into login shells, into the environment your boxd machine exec commands and coding agents run in, and into services your machine starts at boot. No per-VM setup, no .env files to copy around. There are two kinds: Both are injected into your machines the same way (as environment variables). The difference is at rest: env var values are stored in cleartext and shown by list; secret values are sealed and never returned by the API β€” not even to you. To change a secret you re-set it. Manage them from any boxd CLI β€” the laptop CLI or the in-VM CLI β€” or from the console.

Environment variables

Secrets

Secrets are write-only: there’s no get, and list never returns a value. Rotate one by running set again with the new value.

Naming

Names must be valid environment identifiers (letters, digits, underscores; not starting with a digit). The BOXD_* prefix is reserved for boxd’s own variables.

Scope (in an org context)

When you’re working in an org context, --scope decides which of the org’s machines receive the variable:
In your personal context the scope is always all (your personal machines) β€” the --scope flag is ignored. boxd env scope <name> <scope> moves an existing secret between scopes without re-entering its value.

How they reach a machine

On boot β€” and on every login shell β€” boxd resolves the env vars and secrets in scope for that machine and exports them. So they’re present for:
  • interactive shells (ssh <vm>.boxd),
  • boxd machine exec commands,
  • the pre-installed coding agents, and
  • services your machine starts at boot.
Add or rotate a value and new machines pick it up immediately; already-running machines see it on their next boot profile refresh.