Skip to content

Environment Variables

All environment variables used by protoPen. Set these in your docker-compose.yml, .env file, or shell.

Secrets / Infisical

VariableRequiredDefaultDescription
INFISICAL_TOKENyes (prod)--Infisical service token for non-interactive secret fetching. Set via systemd override at ~/.config/systemd/user/protopen.service.d/infisical.conf.

All secrets auto-exported

start.sh exports every secret from the Infisical protoPen project (prod env) into the process environment. You do not need to manually set individual API keys — they are all fetched at startup. The variables below document what the code expects to find, but they are populated automatically from Infisical.

Infisical Secrets Inventory

Secrets stored in the Infisical protoPen project (f7d3c43d, prod environment):

Secret KeyDescription
ANTHROPIC_API_KEYAnthropic API key for LLM access
DISCORD_BOT_TOKENDiscord bot token for Gateway + REST API
DISCORD_ALERT_WEBHOOKDiscord webhook for publishing digests, security reports, and alerts (legacy alias: DISCORD_WEBHOOK_URL)
GITHUB_TOKENGitHub personal access token
LANGFUSE_PUBLIC_KEYLangfuse tracing public key
LANGFUSE_SECRET_KEYLangfuse tracing secret key
PROTOPEN_API_KEYAPI key for A2A endpoint authentication

Core

VariableRequiredDefaultDescription
AGENT_BACKENDnolanggraphAgent backend to use (langgraph)
SANDBOX_DIRno/sandboxRoot directory for the sandboxed workspace
INSTANCE_NAMEnoavaInstance name for multi-node identification and Discord digest branding

LLM / API Keys

VariableRequiredDefaultDescription
OPENAI_API_KEYyes--LiteLLM gateway master key
ANTHROPIC_API_KEYno--Direct Anthropic API key (optional)
OPENAI_API_KEYno--OpenAI-compatible API key (used for LiteLLM gateway access)

Observability

VariableRequiredDefaultDescription
LANGFUSE_PUBLIC_KEYno--Langfuse public key for tracing
LANGFUSE_SECRET_KEYno--Langfuse secret key for tracing
LANGFUSE_HOSTnohttp://host.docker.internal:3001Langfuse server URL

Integrations

VariableRequiredDefaultDescription
GITHUB_TOKENno--GitHub personal access token (higher API rate limits for trending tool)
DISCORD_BOT_TOKENno--Discord bot token for reading channel feeds and reacting to mentions
DISCORD_ALERT_WEBHOOKno--Discord webhook URL for publishing research digests, security alerts, and engagement reports as rich embeds. Preferred over the legacy DISCORD_WEBHOOK_URL. Managed via Infisical in prod.

External Tools

Some tools shell out to binaries installed outside protoPen's Python environment to avoid dependency conflicts. They resolve from PATH by default; these variables override the location.

VariableRequiredDefaultDescription
MAIGRET_BINnomaigret on PATHPath to the isolated maigret binary used by the maigret OSINT username tool. start.sh installs maigret into ~/.maigret-venv and sets this automatically; the Docker image installs it to /usr/local/bin/maigret.
HOLEHE_BINnoholehe on PATHPath to the isolated holehe binary (email→accounts OSINT). start.sh installs it into ~/.holehe-venv; the Docker image links it to /usr/local/bin/holehe.
PHONEINFOGA_BINnophoneinfoga on PATHPath to the pinned phoneinfoga binary (phone-number OSINT). start.sh installs it to ~/.local/bin/phoneinfoga; the Docker image to /usr/local/bin/phoneinfoga.
NUMVERIFY_API_KEYno--Enables PhoneInfoga's numverify scanner → carrier + line type on phone scans (free tier at apilayer.com, 100 req/mo). Without it, only the keyless local + googlesearch scanners run. PhoneInfoga reads this from the environment (inherited by the subprocess); add it to Infisical and restart. The scanner is auto-skipped when absent.

The OSINT binary paths are wired automatically — you only ever need to set NUMVERIFY_API_KEY (optional) for richer phone results.

A2A Authentication

VariableRequiredDefaultDescription
PROTOPEN_API_KEYno--API key for authenticating A2A requests. Checked via x-api-key header.

TIP

When PROTOPEN_API_KEY is not set, the A2A endpoint accepts unauthenticated requests. This is appropriate for a private Tailnet but not for public exposure.

WARNING

Never commit API keys to the repository. Use a .env file (git-ignored) or inject them via your deployment pipeline.

Part of the protoLabs autonomous development studio.