Run Hermes on any model
Nous Research's agent framework - register Antseed as a custom provider in config.yaml.
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.yamlis read at startup - changes require a restart.
Step 2
Point Hermes at Antseed
| ANTSEED_BASE_URL | http://127.0.0.1:8377/v1 |
| ANTSEED_API_KEY | antseed-p2p |
Show as shell exports
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.
Step 3
Pick a model
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 referencescurl -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 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_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 suremodel.defaultis set - a request that names a model auto-selects a peer. Pin a peer (antseed buyer connection set --peer <peerId>orx-antseed-pin-peerper 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/v1URL inANTSEED_BASE_URLand the generated key inANTSEED_API_KEY; Hermes sendsapi_keyas a bearer token. Do not expose port 8377 directly. - Want to swap the routed model without restarting AntseedEdit
model.default(andmodels:if needed) inconfig.yaml, thensudo 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