Run the Antseed buyer proxy 24/7 on your VPS as a systemd service. Hermes and OpenClaw connect to a local API endpoint, payments settle in USDC on Base, and the whole stack auto-recovers on reboot.
The Mac desktop guide covers the laptop-side workflow with an SSH reverse tunnel. This post is for the production case: you want your AI agents to keep working even when your laptop is closed. By installing the Antseed CLI directly on the VPS and running the buyer proxy as a systemd service, you get:
http://localhost:8377node --version, npm --version)user โ substitute your username)Antseed is an open peer-to-peer network where independent operators sell access to AI models โ Claude, GPT, Llama, Qwen, DeepSeek, Mistral, and more โ and you pay them directly per request in USDC instead of routing through a centralized API gateway. Want the full architecture deep-dive? Read AntSeed: The Open Market for AI Inference.
SSH into your VPS and install the CLI globally via npm:
npm install -g @antseed/cli
Verify the install:
antseed --version
antseed --help
The first time you run any antseed command, it generates a node identity key at ~/.antseed/identity.key. This file is your wallet โ it controls your deposits and signs every payment. Treat it like an SSH private key.
antseed buyer status
If the identity didn't auto-generate, force it by running any command. Then export the hex-encoded identity into your shell environment โ the systemd unit and CLI both read this:
export ANTSEED_IDENTITY_HEX=$(cat ~/.antseed/identity.key)
echo $ANTSEED_IDENTITY_HEX
โ ๏ธ Security: The file at ~/.antseed/identity.key is a private key. Anyone who reads it controls your USDC deposits. Lock down permissions:
chmod 600 ~/.antseed/identity.key
chmod 700 ~/.antseed
Don't commit it to git, don't paste it in chat, and back it up to an offline password manager if you plan to keep funds in it.
List every active provider on Antseed:
antseed network browse
You'll see a table with the peer's 40-character hex ID, display name, services offered, sample models, and reputation:
For this guide we'll use surplusintelligence.ai โ it lists 136+ services, hosts a generous free tier, and its paid models price around $0.0010 / $0.0030 per million input/output tokens for the cheapest endpoints. To inspect everything it offers:
antseed network peer 0e49122e76bd8b9ccb2fe10c0088c41ceb608927
Until you pin a peer, the buyer proxy doesn't know who to route requests to. Pin Surplus Intelligence:
antseed buyer connection set --peer 0e49122e76bd8b9ccb2fe10c0088c41ceb608927
Confirm the pin stuck:
antseed buyer status
You should see Pinned peer โ 0e49122eโฆ in the output. To switch peers later, just run the same connection set command with a different ID.
Why pinning matters: Without a pinned peer, every request from Hermes/OpenClaw will fail with {"error":{"type":"no_peer_pinned"}}. The router won't auto-pick โ you have to choose.
Antseed uses USDC on the Base blockchain for settlement. You deposit once, the proxy debits the contract per request. The CLI ships with a local payment dashboard for handling deposits.
On the VPS:
antseed payments
This launches a web UI on http://localhost:3118. It does not need to run 24/7 โ only when you're depositing or withdrawing.
If the command errors out with an identity-related complaint, re-export your key and try again:
export ANTSEED_IDENTITY_HEX=$(cat ~/.antseed/identity.key)
antseed payments
The dashboard binds to localhost on the VPS, so you need to forward port 3118 to your machine to access it in a browser. Open a new terminal on your laptop and run:
ssh -L 3118:localhost:3118 user@your-vps-ip
Now open http://localhost:3118 on your laptop. You'll see the Antseed payment portal showing your wallet address (something like 0x4โฆF) and current balance.
10, and approve the transaction in your wallet. There are two transactions: an ERC-20 approval, then the actual deposit. Both are cheap on Base.Deposits available: 9.000000 USDC
(The 1 USDC difference is reserved against pending settlements; it returns when the contract clears.)
You can now stop the payments dashboard โ close the terminal where it's running, or hit Ctrl+C. The funds stay on-chain in the Antseed payment contract, available to the buyer proxy.
Without deposits, every request returns {"error":{"type":"insufficient_deposits"}}. Top up before you start running agents against the proxy.
This is the production piece. We want antseed buyer start to run on boot, restart on crash, and log to journald so you can debug without SSH gymnastics.
systemd needs the absolute path:
which antseed
Common results: /usr/bin/antseed, /usr/local/bin/antseed, or (if you use nvm) something like /home/user/.nvm/versions/node/v20.10.0/bin/antseed. Note the full path โ you'll plug it into the unit file.
Create /etc/systemd/system/antseed.service (you'll need sudo):
sudo nano /etc/systemd/system/antseed.service
Paste in:
[Unit]
Description=Antseed Buyer Proxy (P2P AI inference)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=user
WorkingDirectory=/home/user
# Sanity check: identity must exist before we start
ExecStartPre=/bin/bash -c 'test -f /home/user/.antseed/identity.key'
Environment="HOME=/home/user"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Export identity from file, then launch the buyer proxy
ExecStart=/bin/bash -c 'export ANTSEED_IDENTITY_HEX=$(cat /home/user/.antseed/identity.key) && /usr/local/bin/antseed buyer start'
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Replace user with your VPS username and adjust the antseed binary path to whatever which antseed reported. If the binary lives under nvm, point ExecStart at that absolute path.
sudo systemctl daemon-reload
sudo systemctl enable antseed
sudo systemctl start antseed
Confirm it's running:
sudo systemctl status antseed
You should see Active: active (running) and a fresh PID. Tail logs to verify the proxy bound to port 8377:
sudo journalctl -u antseed -f
Expected log lines mention something like buyer proxy listening on :8377 and peer pinned: 0e49122eโฆ. Hit Ctrl+C to stop following.
curl http://localhost:8377/v1/models | head -50
If that returns a JSON list of models, the proxy is healthy and you're ready to wire up agents.
Both agents speak the OpenAI and Anthropic chat-completion formats, and the buyer proxy serves both. Set environment variables in the agent's environment file (or directly in your shell, then restart the agent):
export ANTHROPIC_BASE_URL=http://localhost:8377
export OPENAI_BASE_URL=http://localhost:8377/v1
export OPENAI_API_KEY=unused
The OPENAI_API_KEY value is irrelevant โ payment is handled on-chain via your Antseed identity, not via API keys โ but most SDKs require something non-empty in that variable.
| Format | Endpoint | Used By |
|---|---|---|
| Anthropic Messages | POST http://localhost:8377/v1/messages | Claude SDK, Hermes anthropic provider |
| OpenAI Chat Completions | POST http://localhost:8377/v1/chat/completions | OpenAI SDK, OpenClaw, most agent frameworks |
| OpenAI Responses | POST http://localhost:8377/v1/responses | OpenAI Responses-API clients (gpt-5.x) |
| Model list | GET http://localhost:8377/v1/models | Health check, available-model discovery |
curl http://localhost:8377/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-72b",
"messages": [{"role":"user","content":"Say hello in one word."}]
}'
If that returns a chat completion, the entire pipeline is live: Hermes/OpenClaw โ localhost:8377 โ Surplus Intelligence โ response โ settled in USDC.
| Task | Command |
|---|---|
| Check service status | sudo systemctl status antseed |
| Start service | sudo systemctl start antseed |
| Stop service | sudo systemctl stop antseed |
| Restart service | sudo systemctl restart antseed |
| Enable on boot | sudo systemctl enable antseed |
| Disable on boot | sudo systemctl disable antseed |
| Tail logs | sudo journalctl -u antseed -f |
| Last 200 log lines | sudo journalctl -u antseed -n 200 |
| List antseed processes | ps aux | grep antseed |
| Kill a stuck buyer proxy | pkill -f "antseed buyer start" |
| Browse network | antseed network browse |
| Inspect a peer | antseed network peer <peer-id> |
| Switch peers | antseed buyer connection set --peer <peer-id> |
| Check buyer status | antseed buyer status |
| Open payments dashboard | antseed payments |
The systemd ExecStartPre guard caught a missing identity file. Either the file is at a non-default path, or it was deleted. Recreate or restore it:
# Run any command as your user to regenerate
antseed buyer status
ls -la ~/.antseed/identity.key
If you have a backup, restore it; otherwise a new identity will be created and you'll need to fund it again.
no_peer_pinnedYou haven't pinned a peer, or the pin was cleared. Pin Surplus Intelligence (or your preferred peer):
antseed buyer connection set --peer 0e49122e76bd8b9ccb2fe10c0088c41ceb608927
sudo systemctl restart antseed
insufficient_depositsYour USDC balance on the Antseed contract has run out. Top up:
# On the VPS
antseed payments
# In another terminal on your laptop
ssh -L 3118:localhost:3118 user@your-vps-ip
Open http://localhost:3118, deposit more USDC, then close the dashboard.
antseed payments errors out about identityThe CLI lost the identity in the current shell. Re-export and try again:
export ANTSEED_IDENTITY_HEX=$(cat ~/.antseed/identity.key)
antseed payments
An old buyer proxy didn't die cleanly. Stop systemd, kill the orphan, restart:
sudo systemctl stop antseed
pkill -f "antseed buyer start"
sleep 2
sudo systemctl start antseed
sudo systemctl status antseed
Environment variables aren't picked up by a process that's already running. Restart the agent after exporting the new BASE_URL values:
# For Hermes
sudo systemctl restart hermes
# For OpenClaw
sudo systemctl restart openclaw
If you set the variables in ~/.bashrc, that won't help systemd-managed services โ add them to the agent's EnvironmentFile or a drop-in unit override instead.
Check the journal โ usually it's a missing node binary in the systemd PATH, an incorrect User=, or the identity file's permissions blocking the cat in ExecStart:
sudo journalctl -u antseed -n 100 --no-pager
Fix whatever the logs name, run sudo systemctl daemon-reload, and start again.
You now have a production-grade Antseed buyer proxy on your VPS: 24/7 availability, automatic recovery, USDC-based pay-per-request inference, and a clean local API endpoint that any OpenAI- or Anthropic-compatible client can use. Hermes and OpenClaw don't need to know anything about peer-to-peer settlement, blockchain, or P2P routing โ they just hit localhost:8377 and get responses back, the same way they'd hit OpenAI.
The whole stack โ buyer proxy + agents โ survives reboots, crashes, and most normal failure modes without manual intervention. Top up your USDC every few weeks (the dashboard takes about 30 seconds), monitor the journal occasionally, and otherwise let it run.
If you want to compare topologies, the Mac desktop variant trades VPS independence for a friendlier GUI but couples your agent uptime to your laptop. For headless, hands-off, production deployments, the systemd path documented here is the right call.
Related reads: AntSeed: The Open Market for AI Inference ยท Mac Desktop Setup Guide ยท SSH Reverse Tunnel Variant ยท Hermes Agent Guide
๐ฌ Comments