CrossModel
Hermes Agent

Integration guide

Hermes Agent

Hermes Agent is an open-source terminal coding and task agent from Nous Research. It supports custom OpenAI-compatible providers, so a little config gets you onto the CrossModel catalog.

Quickstart

1. Install Hermes Agent

pip install hermes-agent
hermes postinstall

Reload your shell afterward (source ~/.zshrc or source ~/.bashrc).

2. Create an API key

Sign in to the Console and create a key that starts with cm- on the API Keys page. The key is shown only once, so copy it somewhere safe.

3. Add your API key

Hermes Agent keeps secrets in ~/.hermes/.env. In custom-provider mode it reads the key from OPENAI_API_KEY by default — put your CrossModel cm- key there:

OPENAI_API_KEY=cm-YOUR_KEY

The variable is named OPENAI_API_KEY, but the value should be your CrossModel cm- key.

4. Point Hermes at CrossModel

CrossModel isn't a built-in Hermes provider, so wire it up as a custom OpenAI-compatible one. Edit ~/.hermes/config.yaml:

model:
  provider: custom
  default: deepseek/deepseek-v4-pro
  base_url: https://api.crossmodel.ai/v1

5. Launch

hermes

Or use the modern terminal UI:

hermes --tui

How it works

With model.provider set to custom and a base_url provided, Hermes Agent skips its built-in providers and sends requests straight to the OpenAI-compatible endpoint you specify (https://api.crossmodel.ai/v1), authenticated with the key from ~/.hermes/.env.

Hermes keeps secrets (.env) separate from other settings (config.yaml): the key lives in .env, while model and interface settings live in config.yaml.

Choosing models

To switch models, just change model.default in config.yaml, using the vendor/short_name format — e.g. deepseek/deepseek-v4-flash or anthropic/claude-sonnet-4.6. See the full list in the model catalog.

Troubleshooting

SymptomWhat to check
"Missing API key"Confirm OPENAI_API_KEY is set in ~/.hermes/.env to a valid cm- key.
Auth failure (401/403)Check that the key is valid and your account has balance.
"Model not found"Verify model.default matches an ID from the /v1/models response.
Insufficient balanceTop up in the Console.