Run Hermes on any model
Nous Research's agent framework - register AntSeed as a custom provider in config.yaml.
What Hermes is. Hermes is the agent framework from Nous Research (successor to OpenClaw's lineage). It's designed for autonomous, multi-step workflows - research agents, coding agents, swarms - and reads its model catalog from ~/.hermes/config.yaml.
How AntSeed plugs in. Add an entry under custom_providers with base_url: http://127.0.0.1:8377/v1, api_mode: chat_completions, and a list of models. Each model id must be a service id your pinned peer advertises. Then point model.default at the one you want as primary.
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.yamlis read at startup - changes require a restart.
Step 2
Point Hermes at AntSeed
Step 3
Pick a model
Only ids listed under models: show up in Hermes' picker - mirror it against curl http://127.0.0.1:8377/v1/models so you don't advertise models no peer serves. model.provider: antseed pins the default to this custom provider. Route to a specific peer by prefixing the model id: <peerId>@<service-id>.
The exact list of models depends on which peer you pin. Run 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 referencescurl -s http://127.0.0.1:8377/v1/models | 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 providersudo 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 meteredantseed buyer status antseed buyer metering
statusshowsActive channels: 1once the first request settles (~5–15s on Base - one on-chain tx to open the channel).meteringshows 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/completionson the buyer proxy) - Best-fit services: any service whose
protocolsarray containsopenai-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> --jsonand look atproviderServiceApiProtocols[provider].services[service]. The browse command exposes the same field per peer. - What happens when protocols don't match: AntSeed's
@antseed/api-adaptertranslates 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 advertisesanthropic-messages- just with a small transform step. - One known caveat: services whose only advertised protocol is
openai-responsesrequire streaming. If Hermes sends a non-streaming request and the proxy routes it to one of those services, the call fails withHTTP 400: Stream must be set to true. Pick a service whoseprotocolsincludesopenai-chat-completions(or another non-responses protocol) to avoid this.
If it goes wrong
Troubleshooting
HTTP 400: Stream must be set to truefrom auxiliary callsYou're routing through a peer that serves the model viaopenai-responses(which requires streaming), but Hermes' auxiliaries are non-streaming. Pin theauxiliary.*slots to achat_completionsmodel (see the config block above). Confirm a model's protocol withantseed network peer <peerId>- look forprotocols: openai-chat-completionsvsopenai-responses.- Hermes loads the provider but every call returns
no_peer_pinnedIn the default manual flow AntSeed does not auto-select a peer - pin one withantseed buyer connection set --peer <peerId>, sendx-antseed-pin-peerper request, or start the buyer with a router plugin. The session pin survives buyer-proxy restarts (it's persisted to~/.antseed/buyer.state.json). - Hermes runs on a remote host and can't reach
127.0.0.1:8377Either run the buyer proxy on the same host as Hermes (recommended - keeps the hot signing key local), or expose the proxy via SSH tunnel:ssh -N -L 127.0.0.1:8377:127.0.0.1:8377 user@hermes-host. Do not bind the buyer proxy to a public interface. - Want to swap the routed model without restarting AntSeedEdit
model.default(andmodels:if needed) inconfig.yaml, re-pin a peer that serves it (antseed buyer connection set --peer <peerId>), thensudo systemctl restart hermes. The buyer proxy stays up; no contract calls.
Reference
Links
Same category