Secrets
Secrets never live in a team’s repo. They’re bound on the platform and injected at runtime.
Binding
Section titled “Binding”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.
Storage
Section titled “Storage”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.
Injection
Section titled “Injection”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).