Skip to content

Secrets

Secrets never live in a team’s repo. They’re bound on the platform and injected at runtime.

A secret is bound to a specific (team, agent, key) triple. That means two agents in the same team can each have their own value for a key with the same name — growth/copywriter’s SENDGRID_KEY and research/scout’s SENDGRID_KEY don’t have to be the same secret.

Your team’s tools.json and plugin.ts declare which env var names an agent expects (via env); the platform’s connect flow surfaces those declarations so you know what to bind before the first deploy.

Secret values are encrypted at rest. The API is write-only for values — you can list which secrets are bound (by name and scope), but no API response, ever, returns a value back to you. If you’ve forgotten what you set a secret to, the answer is to set it again, not to look it up.

At worker start, a team’s bound secrets are decrypted and materialized as per-agent environment files inside that worker’s container — restricted to that container, cleaned up on stop. They’re never written into the repo, never logged, and never inherited from the platform’s own environment (the platform’s own credentials aren’t available to any worker).