Configuration¶
This page shows where Hermes keeps its settings, what the provisioning script accepts, and how to change models, users and channels.
Where things live¶
| What | Where |
|---|---|
| Runtime user | ubuntu |
hermes command |
/usr/local/bin/hermes |
| Application files | /usr/local/lib/hermes-agent |
| Hermes Python environment | /usr/local/lib/hermes-agent/venv |
| Configuration, secrets, sessions, cron jobs and state | /home/ubuntu/.hermes |
API keys and Telegram token (mode 0600) |
/home/ubuntu/.hermes/.env |
| Model and other non-secret settings | /home/ubuntu/.hermes/config.yaml |
| Gateway log | /home/ubuntu/.hermes/logs/gateway.log |
| Provisioning script | /opt/hermes/bin/provision-hermes.sh |
| Service unit | /etc/systemd/system/hermes-gateway.service |
| Provisioning log | /var/log/deploy-ec2.log |
| Installed Hermes release | /etc/hermes-agent-release |
Provisioning settings¶
provision-hermes.sh reads its settings from environment variables. Run it
as root, as shown in Getting started.
| Variable | Required | Default | What it does |
|---|---|---|---|
LLM_API_KEY |
Yes | Your model provider's API key. | |
BOT_TOKEN |
Yes | Your Telegram bot token from BotFather. | |
CUSTOMER_TELEGRAM_ID |
Yes | Your numeric Telegram user ID. | |
LLM_PROVIDER |
No | openai |
openai, anthropic, openrouter, gemini or groq. |
LLM_MODEL |
No | gpt-5 |
The exact model ID your provider expects, with no provider prefix. For OpenRouter, use OpenRouter's own ID, such as anthropic/claude-3.5-sonnet. |
LLM_BASE_URL |
No | A custom or proxy API endpoint. Leave empty for the provider's own. | |
AGENT_NAME |
No | Hermes |
The agent's display name. |
DM_POLICY |
No | allowlist |
allowlist lets only the allowed users talk to the bot. open lets anyone. |
ADDITIONAL_USERS |
No | More Telegram user IDs to allow, comma-separated. | |
CUSTOMER_TIMEZONE |
No | UTC |
The instance time zone, for example America/New_York. |
Keep DM_POLICY=allowlist
With open, anyone who finds your bot can use it and spend your
model-provider credits. Choose it only on purpose.
Re-running the script replaces .env
Each run rewrites /home/ubuntu/.hermes/.env from the variables you
give it. Supply every value again, and re-add anything you put in that
file by hand.
Change the model or provider¶
The simplest way is to run the provisioning script again with new
LLM_PROVIDER and LLM_MODEL values. Or, as the ubuntu user, use the
Hermes commands and restart the service:
hermes model opens an interactive picker. To set values directly:
hermes config set model.provider openrouter
hermes config set model.default anthropic/claude-3.5-sonnet
sudo systemctl restart hermes-gateway
Add or remove Telegram users¶
Run the provisioning script again with the full list in ADDITIONAL_USERS.
Add Discord or Slack¶
The Discord and Slack adapters are installed but not configured. As the
ubuntu user:
Test a new channel before you rely on it.
Interactive setup¶
To review everything at once in Hermes's own wizard, run, as ubuntu:
Python packages¶
Hermes uses its own environment in /usr/local/lib/hermes-agent/venv.
Installing a package with the system pip does not change it.