~/.hermes/.env (loaded on startup) and from the shell environment. The .env file takes precedence over stale shell exports.
Use hermes setup to configure variables interactively, or set them directly:
.env file directly:
HERMES_HOME overrides the base directory for all config files. Default is ~/.hermes. Set this before running any hermes command.Provider API keys
At least one provider must be configured for Hermes to start. Runhermes setup to choose a provider interactively.
API key for OpenRouter. Provides access to 100+ models including Claude, GPT, Gemini, and open-source models. Also required for the
vision_analyze and mixture_of_agents tools when using auxiliary providers.API key for direct Anthropic API access (Claude models). Alternative to using Anthropic via OpenRouter.
OpenAI API key. Used when
OPENAI_BASE_URL is set (custom endpoint) or for direct OpenAI access.Base URL for any OpenAI-compatible endpoint (custom deployments, local models, proxies). When set alongside
OPENAI_API_KEY, Hermes routes all requests to this endpoint.API key for Z.AI / ZhipuAI GLM models (GLM-5, GLM-4.7, etc.). Also recognized as
ZAI_API_KEY or Z_AI_API_KEY.Base URL override for the Z.AI / GLM API. Leave empty to use the default endpoint.
API key for Kimi / Moonshot AI models. Keys prefixed with
sk-kimi- use the Kimi Code API by default.Base URL override for Kimi. Use
https://api.kimi.com/coding/v1 for Kimi Code keys, https://api.moonshot.ai/v1 for legacy Moonshot keys.API key for MiniMax China (domestic endpoint).
API key for Alibaba Cloud DashScope (Qwen models).
API key for OpenCode Zen — pay-as-you-go access to curated models.
API key for OpenCode Go — $10/month subscription for open models (GLM-5, Kimi K2.5, MiniMax M2.5).
API key for AI Gateway by Vercel — 200+ models, pay-per-use.
GitHub token for GitHub Copilot access. Accepts OAuth tokens (
gho_*), fine-grained PATs with Copilot Requests permission (github_pat_*), or GitHub App tokens (ghu_*). Classic PATs (ghp_*) are not supported. Set via hermes model → GitHub Copilot, or run copilot login.Override the inference provider at runtime without changing
config.yaml. Accepted values: auto, openrouter, nous, openai-codex, copilot, anthropic, zai, kimi-coding, minimax, minimax-cn, kilocode, custom.Tool API keys
API key for Parallel — AI-native web search and content extraction. Powers the
web_search and web_extract tools.API key for Firecrawl — web search and scraping. Powers
web_search and web_extract.URL for a self-hosted Firecrawl instance. Leave empty to use the Firecrawl cloud service.
API key for Tavily — AI-native web search, extract, and crawl. Powers
web_search, web_extract, and web_crawl tools.API key for Browserbase cloud browser. Required for remote browser execution. Local browser automation works without this key.
Browserbase project ID from your dashboard. Required alongside
BROWSERBASE_API_KEY for cloud browser sessions.API key for Browser Use cloud browser (alternative to Browserbase).
OpenAI API key used exclusively for voice transcription (Whisper) and OpenAI TTS. Named separately to avoid interfering with the main inference provider. Get one at platform.openai.com/api-keys.
API key for ElevenLabs premium text-to-speech voices.
API key for Honcho AI-native cross-session user memory. Required by the
honcho_context, honcho_profile, honcho_search, and honcho_conclude tools. Also requires ~/.honcho/config.json.GitHub personal access token for the Skills Hub (higher API rate limits) and skill publishing. Get one at github.com/settings/tokens.
API key for Tinker — RL training service. Required by
rl_start_training and related tools.Weights & Biases API key for experiment tracking. Used by
rl_get_results and rl_check_status.Messaging platforms
Telegram bot token obtained from @BotFather. Required to enable the Telegram gateway.
Comma-separated Telegram user IDs allowed to interact with the bot. Get your ID from @userinfobot. Leave empty (with
GATEWAY_ALLOW_ALL_USERS=true) for open access.Discord bot token from the Developer Portal. Required to enable the Discord gateway.
Comma-separated Discord user IDs allowed to use the bot.
Slack bot token (
xoxb-...) from your app’s OAuth & Permissions settings. Required scopes: chat:write, app_mentions:read, channels:history, groups:history, im:history, im:read, im:write, users:read, files:write.Slack app-level token (
xapp-...) for Socket Mode. Create in Basic Information → App-Level Tokens. Also requires Event Subscriptions: message.im, message.channels, message.groups, app_mention.Mattermost server URL, e.g.
https://mm.example.com.Mattermost bot token or personal access token.
Comma-separated Mattermost user IDs allowed to use the bot.
Matrix homeserver URL, e.g.
https://matrix.example.org.Matrix access token (preferred over password login).
Matrix user ID in
@user:server format.Comma-separated Matrix user IDs in
@user:server format.Set to
true to enable the WhatsApp gateway. Use hermes whatsapp to pair via QR code.Comma-separated phone numbers (e.g.
15551234567) allowed to message the bot. Use * for anyone.Set to
true to allow all users to interact with messaging bots without an allowlist. Use only for private deployments.Set to
true to enable the OpenAI-compatible API server. Allows frontends like Open WebUI and LobeChat to connect.Bearer token for API server authentication. If empty, all requests are allowed (suitable for local use only).
Port for the API server.
Host/bind address for the API server. Use
0.0.0.0 for network access — set API_SERVER_KEY for security.Settings
Working directory for terminal commands executed via messaging platforms. Defaults to the home directory. The CLI always uses the directory where
hermes was launched.Sudo password for terminal commands requiring root access. Piped via
sudo -S. Works with all terminal backends.Maximum tool-calling iterations per conversation. Overrides
agent.max_turns in config.yaml.Path to a JSON file containing ephemeral prefill messages for few-shot priming. The messages are injected at the start of every API call but never saved to sessions or logs.
An ephemeral system prompt injected at API-call time. Never persisted to sessions.