Skip to main content

Run Hermes on any model

Nous Research's agent framework - register Antseed as a custom provider in config.yaml.

Autonomous agentsOpenAI Chat Completions~3 min

What Hermes is. Hermes Agent is the open-source agent framework from Nous Research. It is designed for autonomous, multi-step workflows and reads provider configuration from ~/.hermes/config.yaml.

How Antseed plugs in. Current Hermes releases store named custom endpoints under the providers: mapping; custom_providers: is legacy and auto-migrated. Use the local AI VPN URL when Hermes runs beside it, or copy the authenticated URL and API key from AI VPN → Agents → Define your internet-accessible Antseed endpoint for a remote Hermes host.

One Hermes-specific gotcha. Some peers serve GPT-style models via the openai-responses protocol, which requires streaming. Hermes' auxiliary calls (title generation, context compression) are non-streaming and will fail against those models with HTTP 400: Stream must be set to true. Pin auxiliary slots to a chat_completions model (config example below).

Run Antseed first

Every integration assumes a buyer proxy at http://localhost:8377. One-time setup, ~2 minutes.

Step 1

Install Hermes

  • Install or build Hermes
    # Follow Nous Research setup at https://github.com/NousResearch/hermes-agent

    Hermes is typically run as a long-lived process (often under systemd on a server). The config file ~/.hermes/config.yaml is read at startup - changes require a restart.

Step 2

Point Hermes at Antseed

ANTSEED_BASE_URLhttp://127.0.0.1:8377/v1
ANTSEED_API_KEYantseed-p2p
Show as shell exports
export ANTSEED_BASE_URL="http://127.0.0.1:8377/v1" export ANTSEED_API_KEY="antseed-p2p"

Local setup: keep these defaults. Remote setup: start ngrok or Cloudflare from AI VPN → Agents and replace both values with the displayed public URL and generated antseed_... key.

~/.hermes/config.yaml (merge into your existing config)
model: default: antseed provider: antseed base_url: "" api_mode: chat_completions providers: antseed: name: Antseed api: ${ANTSEED_BASE_URL} api_key: ${ANTSEED_API_KEY} transport: chat_completions extra_headers: originator: hermes default_model: antseed models: antseed: context_length: 200000 deepseek-v4-flash: context_length: 128000 kimi-k2.6: context_length: 256000 minimax-m2.7: context_length: 200000 # Pin auxiliary calls to a chat_completions model so non-streaming # requests (title generation, compression) don't break against # openai-responses peers. auxiliary: title_generation: provider: antseed model: minimax-m2.7 compression: provider: antseed model: minimax-m2.7

Step 3

Pick a model

deepseek-v4-flashkimi-k2.6minimax-m2.7gpt-oss-120b

The special antseed id follows the current AI VPN model picker. Current Hermes expects providers.<name>.models as a mapping, though it still migrates older lists. A local connection accepts any non-empty placeholder api_key; a public endpoint requires the generated antseed_... key from AI VPN → Agents.

The full list is every model on the network. Run curl -s localhost:8377/v1/models, antseed network browse, or open the live network page to see what's available right now.

Verify

Test it

  • Confirm the proxy advertises the same ids your config references
    curl -s "$ANTSEED_BASE_URL/models" -H "Authorization: Bearer $ANTSEED_API_KEY" | jq '.data[].id'
    Example response
    "deepseek-v4-flash" "glm-5" "gpt-oss-120b" "kimi-k2.6" "minimax-m2.7"
  • Restart Hermes to pick up the new provider
    sudo systemctl restart hermes

    Or whatever supervisor you use. Then check the journal: sudo journalctl -u hermes --no-pager -n 30.

  • After the first request, confirm a channel opened and is being metered
    antseed buyer status antseed buyer metering

    status shows Active channels: 1 once the first request settles (~5–15s on Base - one on-chain tx to open the channel). metering shows the per-peer token + USDC totals for each channel. To poll: watch -n 1 antseed buyer metering.

How Hermes talks to Antseed

  • Wire format sent by Hermes: OpenAI Chat Completions (hits /v1/chat/completions on the buyer proxy)
  • Best-fit services: any service whose protocols array contains openai-chat-completions. That's what the peer advertises as natively-supported - zero translation overhead, no transform edge cases.
  • How to check a peer: run antseed network peer <peerId> --json and look at providerServiceApiProtocols[provider].services[service]. The browse command exposes the same field per peer.
  • What happens when protocols don't match: Antseed's @antseed/api-adapter translates between OpenAI Chat Completions and the service's native protocol on the fly. So a request from Hermes can still reach a service that only advertises anthropic-messages - just with a small transform step.
  • One known caveat: services whose only advertised protocol is openai-responses require streaming. If Hermes sends a non-streaming request and the proxy routes it to one of those services, the call fails with HTTP 400: Stream must be set to true. Pick a service whose protocols includes openai-chat-completions (or another non-responses protocol) to avoid this.

If it goes wrong

Troubleshooting

  • HTTP 400: Stream must be set to true from auxiliary callsYou're routing through a peer that serves the model via openai-responses (which requires streaming), but Hermes' auxiliaries are non-streaming. Pin the auxiliary.* slots to a chat_completions model (see the config block above). Confirm a model's protocol with antseed network peer <peerId> - look for protocols: openai-chat-completions vs openai-responses.
  • Hermes loads the provider but every call returns no_peer_pinnedThis error only occurs on buyer proxies older than this release, or when a request carries no model at all. Upgrade the CLI (npm install -g @antseed/cli) and make sure model.default is set - a request that names a model auto-selects a peer. Pin a peer (antseed buyer connection set --peer <peerId> or x-antseed-pin-peer per request) only to force a specific seller.
  • Hermes runs on a remote host and can't reach 127.0.0.1:8377Open AI VPN → Agents, expand “Define your internet-accessible Antseed endpoint,” and start ngrok or Cloudflare. Put the displayed /v1 URL in ANTSEED_BASE_URL and the generated key in ANTSEED_API_KEY; Hermes sends api_key as a bearer token. Do not expose port 8377 directly.
  • Want to swap the routed model without restarting AntseedEdit model.default (and models: if needed) in config.yaml, then sudo systemctl restart hermes. The proxy auto-selects a peer serving the new model; the buyer proxy stays up; no contract calls.

Reference

Links

Same category

Related

Run Hermes on the open market

Install Antseed, point this tool at your local proxy, and pay per request in USDC.

All integrationsProtocol guide