Hermes
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.
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"claude-opus-4-7" "claude-sonnet-4-6" "deepseek-v4-flash" "gpt-oss-120b" "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