Skip to main content
Clawup uses a .env file to manage secrets outside of your manifest. The clawup.yaml manifest declares which env vars to read using ${env:VAR_NAME} syntax — making the YAML self-documenting while keeping actual values out of version control.

How It Works

  1. clawup init generates a clawup.yaml with ${env:VAR} references in the secrets section, plus a .env.example file
  2. You copy .env.example to .env and fill in values
  3. clawup deploy loads .env, validates all secrets are present, and configures Pulumi automatically before deploying
The .env file is automatically added to .gitignore by clawup init. Actual secret values are stored encrypted in Pulumi config — the .env file is a convenience for populating secrets non-interactively.

Resolution Order

When resolving ${env:VAR} references, values are checked in this order:
  1. process.env — Shell environment variables (highest priority)
  2. .env file — Loaded from the project root (or path specified by --env-file)
This matches standard dotenv behavior — shell variables always take precedence.

Global Secrets

These are shared across all agents and always included in the manifest:

Per-Agent Secrets

Per-agent secrets are scoped by role. The env var name follows the pattern <ROLE>_<SECRET_SUFFIX>: For example, if the PM agent (role pm) has the Slack plugin, the expected env vars are PM_SLACK_BOT_TOKEN and PM_SLACK_APP_TOKEN.

Linear User UUID

The linearUserUuid is auto-fetched by clawup deploy using the Linear API. You can also set it manually in .env to bypass the API call:

Identity requiredSecrets

Identities can declare additional secrets beyond what plugins and deps imply using the requiredSecrets field in identity.yaml:
The camelCase key is converted to SCREAMING_SNAKE_CASE and prefixed with the agent’s role. For example, notionApiKey on a pm agent becomes PM_NOTION_API_KEY. This is additive — secrets implied by plugins/deps are always included. requiredSecrets adds extras on top. If a key in requiredSecrets is already implied by a plugin/dep, it won’t be duplicated.

.env.example

The .env.example file is generated automatically by clawup init (and regenerated by clawup deploy). It lists all required env var names with empty values, organized by scope:

Using --env-file

By default, clawup deploy looks for .env in the project root. Override with:

Validation

Clawup validates well-known secret formats during deployment: If a value from .env fails validation, a warning is shown but the value is still used.

Managing Secrets Post-Deploy

After initial deployment, manage secrets without re-deploying:
Under the hood, this updates the encrypted Pulumi config. Run clawup redeploy to apply changes to running agents.