Skip to main content

Credentials

Credentials are stored in ~/.action-llama/credentials/<type>/<instance>/<field>. Each credential type is a directory containing one file per field. Reference them in agent-config.toml by type name (e.g. "github_token") for the default instance, or use "type:instance" for a named instance (e.g. "git_ssh:botty").

Built-in Credentials

TypeFieldsDescriptionRuntime Injection
github_tokentokenGitHub PAT with repo and workflow scopesGITHUB_TOKEN and GH_TOKEN env vars
anthropic_keytokenAnthropic API key, OAuth token, or pi auth(read by SDK)
openai_keytokenOpenAI API key(read by SDK)
groq_keytokenGroq API key(read by SDK)
google_keytokenGoogle Gemini API key(read by SDK)
xai_keytokenxAI API key(read by SDK)
mistral_keytokenMistral API key(read by SDK)
openrouter_keytokenOpenRouter API key(read by SDK)
custom_keytokenCustom provider API key(read by SDK)
sentry_tokentokenSentry auth token for error monitoringSENTRY_AUTH_TOKEN env var
linear_tokentokenLinear personal API token for workspace accessLINEAR_API_TOKEN env var
linear_oauthclient_id, client_secret, access_token, refresh_tokenLinear OAuth2 credentials for workspace accessLINEAR_CLIENT_ID, LINEAR_CLIENT_SECRET, LINEAR_ACCESS_TOKEN, LINEAR_REFRESH_TOKEN env vars
bugsnag_tokentokenBugsnag auth token for error monitoring and release managementBUGSNAG_AUTH_TOKEN env var
netlify_tokentokenNetlify Personal Access Token for site managementNETLIFY_AUTH_TOKEN env var
git_sshid_rsa, username, emailSSH private key + git author identitySSH key mounted as file; GIT_AUTHOR_NAME/GIT_AUTHOR_EMAIL/GIT_COMMITTER_NAME/GIT_COMMITTER_EMAIL set from username/email
gateway_api_keykeyAPI key for dashboard and CLI access to the gateway(used by gateway + CLI)
github_webhook_secretsecretShared secret for GitHub webhook verification(used by gateway)
sentry_client_secretsecretClient secret for Sentry webhook verification(used by gateway)
linear_webhook_secretsecretShared secret for Linear webhook verification(used by gateway)
mintlify_tokentokenMintlify API token for accessing Mintlify’s APIMINTLIFY_API_TOKEN env var
mintlify_webhook_secretsecretShared secret for Mintlify webhook verification(used by gateway)
x_twitter_apiapi_key, api_secret, bearer_token, access_token, access_token_secretX (Twitter) API credentials for platform accessX_API_KEY, X_API_SECRET, X_BEARER_TOKEN, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET env vars
awsaccess_key_id, secret_access_key, default_regionAWS credentials for managing AWS resourcesAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION env vars
vultr_api_keyapi_keyVultr API key for VPS provisioning (not needed at agent runtime)VULTR_API_KEY env var
reddit_oauthclient_id, client_secret, username, password, user_agentReddit OAuth2 credentials for script apps (posting and moderation)REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_USERNAME, REDDIT_PASSWORD, REDDIT_USER_AGENT env vars

How Credentials Work

  1. Configuration: List credential types in your agent’s agent-config.toml:
    credentials = ["github_token", "git_ssh"]
    
  2. Storage: Credential values live in ~/.action-llama/credentials/<type>/<instance>/<field>. Each field is a plain text file.
  3. Injection: When an agent runs, the credentials it requires are injected into the container.
  4. Git identity: The git_ssh credential includes username and email fields (prompted during al new/al doctor). These are injected as GIT_AUTHOR_NAME/GIT_AUTHOR_EMAIL and GIT_COMMITTER_NAME/GIT_COMMITTER_EMAIL env vars at runtime, so git commit works without requiring git config.

Named Instances

Each credential type supports named instances. For example, you could have webhook secrets for multiple GitHub orgs:
~/.action-llama/credentials/github_webhook_secret/MyOrg/secret
~/.action-llama/credentials/github_webhook_secret/OtherOrg/secret
Or multiple SSH keys:
~/.action-llama/credentials/git_ssh/default/id_rsa
~/.action-llama/credentials/git_ssh/default/username
~/.action-llama/credentials/git_ssh/botty/id_rsa
~/.action-llama/credentials/git_ssh/botty/username
By default, just reference "git_ssh" — this resolves to the default instance. To use a named instance, use colon syntax: "git_ssh:botty".

Managing Credentials

al creds add

Add or update a credential interactively. Runs validation for the credential type (e.g. API key format, GitHub API check):
al creds add github_token              # adds github_token:default
al creds add github_webhook_secret:myapp
al creds add git_ssh:prod

al creds rm

Remove a credential:
al creds rm github_token               # removes github_token:default
al creds rm github_webhook_secret:myapp

al creds ls

List all stored credentials grouped by type:
al creds ls

al doctor

Scan all agents in a project and prompt for any missing credentials:
al doctor -p .

During al new

The al new command prompts for the Anthropic credential during initial setup. Other credentials are configured per-agent by al doctor or al creds add.

Manually

Write credential files directly:
mkdir -p ~/.action-llama/credentials/github_token/default
echo "ghp_your_token_here" > ~/.action-llama/credentials/github_token/default/token

mkdir -p ~/.action-llama/credentials/anthropic_key/default
echo "sk-ant-api-your_key_here" > ~/.action-llama/credentials/anthropic_key/default/token

mkdir -p ~/.action-llama/credentials/openai_key/default
echo "sk-your_openai_key_here" > ~/.action-llama/credentials/openai_key/default/token

mkdir -p ~/.action-llama/credentials/groq_key/default
echo "gsk_your_groq_key_here" > ~/.action-llama/credentials/groq_key/default/token

mkdir -p ~/.action-llama/credentials/bugsnag_token/default
echo "your_bugsnag_token_here" > ~/.action-llama/credentials/bugsnag_token/default/token

mkdir -p ~/.action-llama/credentials/netlify_token/default
echo "your_netlify_token_here" > ~/.action-llama/credentials/netlify_token/default/token

Anthropic Auth Methods

Three auth methods are supported:
  • api_key — Standard API key (sk-ant-api-...). Set authType = "api_key" in model config.
  • oauth_token — OAuth token (sk-ant-oat-...). Set authType = "oauth_token".
  • pi_auth — Use existing pi auth credentials (~/.pi/agent/auth.json). Set authType = "pi_auth". No credential file needed.

Webhook Secrets

Webhook secrets use named credential instances. For example, to set up a GitHub webhook secret for your org:
mkdir -p ~/.action-llama/credentials/github_webhook_secret/MyOrg
echo "your-webhook-secret" > ~/.action-llama/credentials/github_webhook_secret/MyOrg/secret
The gateway automatically loads secrets from all credential instances (e.g. github_webhook_secret:MyOrg, sentry_client_secret:MyOrg) and uses them to verify incoming webhook payloads. No global configuration is needed.

VPS Credential Sync

When deploying to a VPS, credentials are transferred to the remote server via SSH.

VPS Filesystem (SSH)

Secret naming: ~/.action-llama/credentials/{type}/{instance}/{field} on the remote server (same layout as local). Credentials are transferred via SSH. No external secrets manager needed — same trust model as SSH access.