Hermes Agent Provider: MiniMax M3 (Direct, Not Via OpenRouter)
Wiring MiniMax M3 as a Hermes provider: API key from MiniMax / MiniMax API, the literal model string MiniMax-M3, direct access (not via OpenRouter), and the live senior-dev profile today.

Why MiniMax direct
This guide documents the working setup for MiniMax’s M3 model class on the operator’s VPS as of 2026-07-14. Two important notes:
- Direct, not via OpenRouter. OpenRouter can route to MiniMax at a per-token markup. The operator has explicitly stopped using the OpenRouter path for MiniMax M3 access — direct provider calls are preferred for cost and latency.
- The model string is literal:
MiniMax-M3. Notminimax-m3, notM3, notminimax/MiniMax-M3. The exact string is sensitive to case and dash.
The setup is one of the cheapest. Four lines, no browser OAuth, no key rotation.
The 4-line setup
- Get an API key at
https://api.MiniMax.chat/(sign up, set billing, generate a key). export MINIMAX_API_KEY=<key>in the env.hermes config set provider.minimax.api_key "$MINIMAX_API_KEY"(lower-case provider name in the config; only the model string is upper-case M3).hermes config set provider.minimax.default_model "MiniMax-M3"and verify withhermes chat --provider minimax -q "Reply with OK".
Lower-case minimax in hermes config set provider.<name> is the canonical identifier. The upper-case MiniMax-M3 in the model field is the canonical model string.
Step-by-step breakdown
1. Get the key. https://api.MiniMax.chat/ — sign up with email, verify, set a billing method (credit card or prepaid credit), and create a new API key. Copy it once into a password manager; MiniMax only shows the full key on creation. The dashboard exposes per-key usage after the first request lands.
2. Export it. export MINIMAX_API_KEY=<key> in the shell that will run Hermes. For a long-lived daemon or cron, put the export in /etc/environment or the supervisor’s env file so it survives reboots. A key stuck in ~/.bash_history but not exported is the most common cause of “401 invalid key” on a fresh shell.
3. Wire it to Hermes. hermes config set provider.minimax.api_key "$MINIMAX_API_KEY". The provider identifier is minimax (lowercase); the model identifier is MiniMax-M3 (uppercase M, dash, not slash). Conflating the two is the second most common failure mode.
4. Pin the model and verify. hermes config set provider.minimax.default_model "MiniMax-M3" then hermes chat --provider minimax -q "Reply with OK". The reply should be a single line — anything longer means the key works but a different model answered.
The model-pin rule
The model is MiniMax-M3 exactly. Different names that look similar:
minimax-m3— wrong case; fails.MiniMax/M3— wrong slash; this is an OpenRouter alias, not a direct-MiniMax model.MiniMax-M3— correct. Direct MiniMax.
# Correct
hermes config set provider.minimax.default_model "MiniMax-M3"
hermes chat --provider minimax --model MiniMax-M3 -q "Reply with OK"
# Don't
hermes config set provider.minimax.default_model "minimax-m3" # wrong case
hermes config set provider.minimax.default_model "MiniMax/M3" # wrong, this is OpenRouter
If the response fails, the failure is usually step 1 (key not exported) or the model-name case/slash mismatch.
Why not OpenRouter
The OpenRouter-vs-direct choice has a real cost impact. OpenRouter adds ~5% margin on top of direct provider pricing. For a high-volume install, that’s a real number per month.
Three reasons to prefer direct:
- Cost. Direct is cheaper.
- Latency. Direct is roughly 10% faster (no aggregator hop).
- Privacy. The request goes to MiniMax’s servers, not through an intermediate aggregator.
The only reason to use OpenRouter for MiniMax is to fall back to a different model in the same credential. If you don’t need that, stay direct.
What the operator’s install does today
Today on this VPS, the senior-dev profile uses MiniMax as the primary provider. The full fallback chain in /opt/hermes/config.yaml is:
provider_fallback:
- minimax # direct MiniMax M3
- openai # gpt-5 / gpt-5-mini
- openrouter # aggregator (last resort)
- ollama_local # local
The operator never hits OpenRouter for MiniMax access; OpenRouter’s slot is reserved for models that need aggregator routing. If MiniMax returns a 5xx (server error), the chain falls to OpenAI’s gpt-5; if OpenAI is also degraded, OpenRouter picks up the slack with whatever’s in stock. The local Ollama slot at the end of the chain is the network-disconnected fallback — when every public-API is unreachable, Ollama picks the work up with whatever local model was pinned at last config-set.
The MiniMax-specific quirks
Three details that don’t apply to other providers on Hermes:
- The model string is the only accepted alias.
MiniMax-M3resolves;MiniMax/M3does not. If you want to pin a MiniMax model via OpenRouter, use the OpenRouter alias — but you’re paying for it. - Token usage reports back in a different field name from Anthropic and OpenAI. Hermes’s logging normalizes it, but raw responses carry
output_tokens_countrather thanoutput_tokens. If you write custom logging, account for the field-name difference. - Cross-region routing is automatic. MiniMax’s servers route across regions for latency. You don’t need to set a region; it picks. This is invisible to the operator — until one region has an outage and the latency spikes; that’s when “automatic” starts costing you.
These quirks don’t change the 4-line setup; they affect the verification surface (the usage block format) and the latency-observation habit.
What not to do
- Don’t use
minimax-m3(wrong case) orMiniMax/M3(wrong namespace). - Don’t put OpenRouter-routed MiniMax first in the fallback chain when the operator wants direct. Cost adds up.
- Don’t share API keys across operators without rotating quarterly.
- Don’t trust the dashboard usage display for budget-gating — same hourly-sample trap as Anthropic and OpenAI.
Verification checklist
| # | Command | What it proves |
|---|---|---|
| 1 | hermes config show --provider minimax | Provider configured |
| 2 | hermes chat --provider minimax -q "Reply with OK" | API key valid |
| 3 | hermes chat --provider minimax --model MiniMax-M3 -q "Reply with OK" | Model pin resolves |
| 4 | MINIMAX_API_KEY is exported (not just in shell history) | Key live this session |
| 5 | provider_fallback[0] is minimax (direct, not OpenRouter) | Direct path configured |
Sources
- Hermes Agent provider docs
- MiniMax API portal
- ABS companion: Hermes Agent Provider: OpenRouter for Cross-Vendor A/B Tests
- ABS companion: Hermes Agent: Switching Providers Mid-Run When a Provider Fails
Last verified: 2026-07-14 against Hermes v0.18.2 (2026.7.7.2) on the senior-dev profile. Live model: MiniMax-M3.



Submit a take
Have a different read on this? Drop a comment below — your email isn't published, and I read every one. Nothing leaves the site until I approve it.