Use this skill when a user asks about configuring Hermes, enabling features, setting up voice, managing tools/skills, or troubleshooting.
~/.hermes/config.yaml~/.hermes/.env~/.hermes/skills/~/.hermes/hermes-agent/~/.hermes/hermes-agent/venv/Hermes is used via the hermes command (or python -m hermes_cli.main from the repo).
hermes Interactive chat (default)
hermes chat -q "question" Single query, then exit
hermes chat -m MODEL Chat with a specific model
hermes -c Resume most recent session
hermes -c "project name" Resume session by name
hermes --resume SESSION_ID Resume by exact ID
hermes -w Isolated git worktree mode
hermes -s skill1,skill2 Preload skills for the session
hermes --yolo Skip dangerous command approval
hermes setup Interactive setup wizard (provider, API keys, model)
hermes model Interactive model/provider selection
hermes config View current configuration
hermes config edit Open config.yaml in $EDITOR
hermes config set KEY VALUE Set a config value directly
hermes login Authenticate with a provider
hermes logout Clear stored auth
hermes doctor Check configuration and dependencies
hermes tools Interactive tool enable/disable per platform
hermes skills list List installed skills
hermes skills search QUERY Search the skills hub
hermes skills install NAME Install a skill from the hub
hermes skills config Enable/disable skills per platform
hermes gateway run Start the messaging gateway
hermes gateway install Install gateway as background service
hermes gateway status Check gateway status
hermes sessions list List past sessions
hermes sessions browse Interactive session picker
hermes sessions rename ID TITLE Rename a session
hermes sessions export ID Export session as markdown
hermes sessions prune Clean up old sessions
hermes status Show status of all components
hermes cron list List cron jobs
hermes insights Usage analytics
hermes update Update to latest version
hermes pairing Manage DM authorization codes
hermes setup)The interactive setup wizard walks through: 1. Provider selection — OpenRouter, Anthropic, OpenAI, Google, DeepSeek, and many more 2. API key entry — stores securely in the env file 3. Model selection — picks from available models for the chosen provider 4. Basic settings — reasoning effort, tool preferences
Run it from terminal:
cd ~/.hermes/hermes-agent
source venv/bin/activate
python -m hermes_cli.main setup
To change just the model/provider later: hermes model
hermes skills)Skills are reusable instruction sets that extend what Hermes can do.
hermes skills list # Show installed skills
hermes skills search "docker" # Search the hub
hermes skills install NAME # Install from hub
hermes skills config # Enable/disable per platform
hermes skills config opens an interactive UI where you can enable or disable specific skills for each platform (cli, telegram, discord, etc.). Disabled skills won't appear in the agent's available skills list for that platform.
hermes -s skill-name or hermes -s skill1,skill2/skill skill-name/skill skill-name in any chatVoice messages from Telegram/Discord/WhatsApp/Slack/Signal are auto-transcribed when an STT provider is available.
cd ~/.hermes/hermes-agent
source venv/bin/activate
pip install faster-whisper
Add to config.yaml under the stt: section:
stt:
enabled: true
provider: local
local:
model: base # Options: tiny, base, small, medium, large-v3
Model downloads automatically on first use (~150 MB for base).
After config changes, restart the gateway (send /restart in chat, or restart hermes gateway run). Then send a voice message.
Hermes can reply with voice when users send voice messages.
| Provider | Env var | Free? |
|---|---|---|
| ElevenLabs | ELEVENLABS_API_KEY | Free tier |
| OpenAI | VOICE_TOOLS_OPENAI_KEY | Paid |
| Kokoro (local) | None needed | Free |
| Fish Audio | FISH_AUDIO_API_KEY | Free tier |
/voice on — voice reply to voice messages only/voice tts — voice reply to all messages/voice off — text only (default)hermes tools)cd ~/.hermes/hermes-agent
source venv/bin/activate
python -m hermes_cli.main tools
This opens a curses UI to enable/disable toolsets per platform (cli, telegram, discord, slack, etc.).
Use /reset in the chat to start a fresh session with the new toolset. Tool changes do NOT take effect mid-conversation (this preserves prompt caching and avoids cost spikes).
| Toolset | What it provides |
|---|---|
| terminal | Shell command execution |
| file | File read/write/search/patch |
| web | Web search and extraction |
| browser | Browser automation (needs Browserbase) |
| image_gen | AI image generation |
| mcp | MCP server connections |
| voice | Text-to-speech output |
| cronjob | Scheduled tasks |
Some tools need extra packages:
cd ~/.hermes/hermes-agent && source venv/bin/activate
pip install faster-whisper # Local STT (voice transcription)
pip install browserbase # Browser automation
pip install mcp # MCP server connections
The main config file is ~/.hermes/config.yaml. Key sections:
# Model and provider
model:
default: anthropic/claude-opus-4.6
provider: openrouter
# Agent behavior
agent:
max_turns: 90
reasoning_effort: high # xhigh, high, medium, low, minimal, none
# Voice
stt:
enabled: true
provider: local # local, groq, openai
tts:
provider: elevenlabs # elevenlabs, openai, kokoro, fish
# Display
display:
skin: default # default, ares, mono, slate
tool_progress: full # full, compact, off
background_process_notifications: all # all, result, error, off
Edit with hermes config edit or hermes config set KEY VALUE.
| Command | What it does |
|---|---|
| /reset or /new | Fresh session (picks up new tool config) |
| /help | Show all commands |
| /model [name] | Show or change model |
| /compact | Compress conversation to save context |
| /voice [mode] | Configure voice replies |
| /reasoning [effort] | Set reasoning level |
| /sethome | Set home channel for cron/notifications |
| /restart | Restart the gateway (picks up config changes) |
| /status | Show session info |
| /retry | Retry last message |
| /undo | Remove last exchange |
| /personality [name] | Set agent personality |
| /skill [name] | Load a skill |
The ~/.hermes/.env file is a protected credential file — the patch and write_file tools will refuse to edit it. To update API keys, use sed via the terminal:
# Update a specific key (use | as delimiter to avoid escaping issues with keys containing /)
sed -i 's|^KEY_NAME=.*|KEY_NAME=new-value-here|' ~/.hermes/.env
# Verify the change
grep '^KEY_NAME=' ~/.hermes/.env
Common keys to update:
- VOICE_TOOLS_OPENAI_KEY — OpenAI TTS and Whisper STT
- FAL_KEY — fal.ai image generation
- GROQ_API_KEY — Groq Whisper STT
- ELEVENLABS_API_KEY — ElevenLabs TTS
- FIRECRAWL_API_KEY — Firecrawl web tools
- BROWSERBASE_API_KEY — Browser automation
After updating keys, restart the gateway or start a new CLI session for changes to take effect.
hermes tools to check if the toolset is enabled for your platformhermes doctor to check configurationhermes login to re-authenticateDo NOT just grep ~/.hermes/config.yaml. Provider credentials live in the credential pool, not (only) in config.yaml. hermes config show will report a provider as (not set) even when an OAuth credential is active in the pool, because that view only reflects env-var/API-key auth.
Authoritative inspection commands:
hermes auth list # Every credential in every pool, with auth type + status
hermes auth status <provider> # Just one provider, e.g. anthropic / nous / openai-codex / openrouter / custom:venice-ai
hermes auth list output decodes as:
anthropic (1 credentials):
#1 anthropic-oauth-3 oauth hermes_pkce exhausted (55m 8s left)
│ │ │ └─ status: ready | exhausted (NNm left) | error
│ │ └─ source: hermes_pkce (OAuth) | env:VAR_NAME | model_config | device_code
│ └─ auth type: oauth | api_key
└─ credential id/label
Mapping auth type → billing:
- oauth + source hermes_pkce or device_code → subscription (Claude.ai Pro/Max, ChatGPT, Nous portal)
- api_key + source env:FOO or model_config → pay-as-you-go API credits
exhausted (NNm left) on a subscription means the rolling-window quota (e.g. Claude's 5-hour window) is spent and will auto-reset; Hermes falls back to other pool members in the meantime. The credential_pool_strategies: block in config.yaml (e.g. anthropic: round_robin) only controls how the pool is rotated — it does not by itself imply a provider is configured.
When the user asks "am I on subscription or API credits?", the answer comes from hermes auth list, not from config.yaml.
curl -s "https://api.telegram.org/bot<TOKEN>/getMe"curl -s "https://api.telegram.org/bot<TOKEN>/getWebhookInfo"
- Hermes uses long polling by default (webhook url should be empty)
- If TELEGRAM_WEBHOOK_URL is set in .env, it uses webhook mode insteadhermes gateway status can report a stale PID. Cross-check with ps aux | grep gatewayhermes gateway start (if installed as service) or hermes gateway runtail -30 ~/.hermes/logs/errors.log — HTTP 529 means the model provider is overloadedhermes skills list shows the skillhermes skills config has it enabled for your platform/skill name or hermes -s name