Overview
MeepaGateway manages credentials for your agents using a flat credential model. All credential types — email addresses, phone numbers, virtual credit cards, GitHub tokens, and custom logins — are stored as uniformAgentCredential entries grouped by category.
Credentials are provisioned per-agent. Built-in categories (email, phone, credit card) support automatic provisioning through external services. Other categories (login, api_key) are stored directly with no provisioning step required.
Credentials are stored in a SOPS-encrypted file in each agent’s workspace.
Credential provisioning is disabled by default. Enable it under credentials in config.yaml.
Credential Categories
| Category | Provisioned? | Example Services |
|---|---|---|
email | Yes (automatic) | AgentMail, Google Workspace |
phone | No (manual) | Tello, carrier SIMs |
credit_card | Yes (automatic) | Privacy.com, manual entry |
login | No (stored directly) | GitHub, npm, Stripe |
api_key | No (stored directly) | OpenAI, Anthropic, custom |
token | No (stored directly) | OAuth tokens, JWTs |
Credential Origins
Every credential has anorigin that tracks how it was obtained:
operator_provided— An operator or admin pre-created and registered the credential.agent_created— The agent autonomously created this credential (e.g., signed up for a service using its email address).
Configuration
Global Setup
Per-Agent Override
Disable or customise credentials for a specific agent:Credential File Format
Provisioned credentials are written to:identity.json files are automatically migrated to this format on first read.
Adding Login / API Key Credentials
Login and API key credentials do not require provisioning — they are stored directly in the agent’s encrypted credential store.Via the Captain Dashboard
- Open the agent in the Captain dashboard.
- Scroll to Agent Credentials and click + Add Credential.
- Select a category (Login, API Key, Token), enter the service name and value, and save.
Via the API
Via the CLI
Removing Credentials
Credential Store
The credential store uses SOPS with age encryption. An age keypair is generated automatically on first provisioning:Sandbox Injection
Wheninject_credentials_env = true, the agent’s credentials are injected as environment variables into the Docker sandbox container:
| Variable | Source |
|---|---|
AGENT_EMAIL | Provisioned email address |
AGENT_PHONE | Provisioned phone number |
AGENTMAIL_API_KEY | AgentMail API key |
PRIVACY_API_KEY | Privacy.com API key |
Credential Status Values
EachAgentCredential entry has a status field:
| Status | Meaning |
|---|---|
provisioned | Resource was newly created by this run |
existing | Resource already existed and was reused |
pending_manual | Waiting for manual action (e.g. SIM card activation) |
pending_signup | Agent is in the process of signing up autonomously |
skipped | Credential type not configured or disabled |
{ "failed": "reason" } | Provisioning failed with the given reason |
Security Notes
- Back up
private-key.key— without it, credentials cannot be decrypted - Credential values are encrypted at rest via SOPS/age
inject_credentials_env = truepasses credentials into container env — only enable when the agent’s tools require them- Deprovisioning deletes the local credentials file but does not revoke credentials in third-party services (Privacy.com cards, AgentMail inboxes, etc.) — revoke those manually
