TeamCopilot never injects a secret into the LLM chat history. The model gets secret names and placeholders, while the real values are resolved only by trusted runtime layers at execution time.
What you need to do
If a skill or workflow needs a secret:- Open Profile Secrets in TeamCopilot.
- Add the required key, such as
OPENAI_API_KEYorSTRIPE_SECRET_KEY. - Save it.
- Retry the skill or workflow.
Where secrets live
TeamCopilot supports two secret scopes:- Profile Secrets: your personal secrets for your own runs
- Global Secrets: shared fallback secrets managed by engineers
- regular users add their own keys in Profile Secrets
- engineers can provide shared defaults in Global Secrets
- a user’s personal key wins over the global key with the same name
How skills and workflows ask for secrets
Skills and workflows declare the secret keys they need by name.Skills
InSKILL.md, declare required_secrets in frontmatter and use {{SECRET:KEY}} placeholders in the content.
Workflows
Inworkflow.json, declare the required secret keys:
run.py as environment variables:
How TeamCopilot keeps secrets out of the model
The core rule is simple: the agent sees secret names, not secret values. For bash-based usage, TeamCopilot uses a secret proxy pattern:- The skill or command references
{{SECRET:KEY}}. - A trusted runtime layer checks where that placeholder is being used.
- If the usage is allowed, TeamCopilot injects the real value only at execution time.
- The raw value does not need to appear in the prompt, command text, or normal UI output.
required_secrets, and TeamCopilot resolves those values for the current user at runtime.
What this protects against
This design is meant to reduce the most common AI-agent secret leaks.- Prompt injection: if an attacker gets hidden instructions in front of the model, the model still does not have the plaintext key to leak
- Unsafe command construction: secret placeholders are only resolved in trusted positions; unsupported usage is rejected
- UI exposure: the frontend shows masked values instead of raw credentials
- Cross-user leakage: one user can use a shared or personal secret without seeing another user’s actual key