Integrations / Hermes Agent
Hermes Agent
Hermes Agent, the terminal coding tool from Nous Research, takes any OpenAI-compatible endpoint as a custom provider. No plugin — one block in ~/.hermes/config.yaml.
Add Viro under providers in ~/.hermes/config.yaml:
providers:
viro:
type: openai
base_url: https://api.viro.app/v1
api_key: ${VIRO_API_KEY}
models:
viro/clean:
context_length: 131072
viro/gpt-oss-120b:
context_length: 131072
anthropic/claude-sonnet-5:
context_length: 1000000
model:
provider: viro
model: viro/cleanOr set the same values from the command line, which writes the key to ~/.hermes/.env rather than into the config file:
hermes config set providers.viro.type openai
hermes config set providers.viro.base_url https://api.viro.app/v1
hermes config set providers.viro.api_key viro_sk_live_...
hermes config set model viro/viro/cleanThe base URL ends in /v1 — Hermes appends /chat/completions itself. Get a key from API Keys.
Hermes wants a context_length per model, and GET /v1/models does not carry one — it returns OpenAI's four fields and nothing else. Take the numbers from the Models page's Context column.
Setting one too high means Hermes packs a prompt the model then rejects; too low just wastes context. When in doubt, the smaller number is the safe mistake.
A router slug is usually the right answer for an agent — it picks per request, so a quick edit and a hard refactor do not have to share a model. See Routing.
viro/clean— renewable-verified providers only, and errors rather than falling back to unverified infrastructureviro/optimized— cheapest model that still clears the task, across the whole catalogviro/frontier— strongest available, cost and energy disregarded
Which model actually ran comes back in the x-viro-resolved-model response header.