Hermes Agent Integration
The endpoint
http://100.126.153.18:8081/v1 (THE GATEWAY — memory + persona + tracing layered; raw llama-swap lane: http://100.126.153.18:8080/v1)/v1/chat/completions, /v1/embeddings, tools/function-calling/srv/llm/secrets/api-key and api-key-2 on the box); firewall restricts :8080/:8081/:18190 to tailnet 100.64.0.0/10http://frame-serv-2:18190/v1/rerank — POST {"query":…,"documents":[…]}qwen38-27b · flashnext-iq1s · flashnext-fp4 · glm53-flash · dsv4-flash · llama-3.3-70b · embedDrop-in Hermes profile (working, verified)
Live on the operator's node at ~/.hermes/profiles/frameserv2/ — verified
end-to-end ("ARISE" round-trip through hermes → tailnet → llama-swap → MTP inference):
~/.hermes/profiles/frameserv2/config.yaml --- model: default: "qwen38-27b" provider: "custom:frameserv2" base_url: "http://100.126.153.18:8081/v1" api_key: "" providers: custom:frameserv2: base_url: "http://100.126.153.18:8081/v1" model_prefix: "" api_key: " " agent: max_turns: 60 task_completion_guidance: true display: personality: technical show_cost: false show_reasoning: false compact: true
Run it: hermes --profile frameserv2 · one-shot: hermes --profile frameserv2 -z "…"
Switch models by changing model.default to any of the
model ids above — one endpoint, three brains:
qwen38-27b— default. 19.3 t/s served, MTP-accelerated, full vision + tools. Fastest all-rounder.flashnext-iq1s— 176B MoE at 31 t/s decode. The heavy hitter.glm53-flash— 313B MoE at 14.1 t/s. Deep reasoning; structured tool calls work (template fix shipped on the box 2026-09-10).
Multiple profiles can share this endpoint with different personas (SOUL.md) — same pattern as zaraki/ishigami on ashborn-prime.
Plain OpenAI client (any agent framework)
from openai import OpenAI
client = OpenAI(base_url="http://100.126.153.18:8081/v1", api_key="…")
r = client.chat.completions.create(
model="qwen38-27b",
messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)
Network reachability matrix
| From | Reachable? | Path |
|---|---|---|
| Any tailnet device (dxverm tailnet) | yes | Tailscale → firewalld rich-rule (100.64.0.0/10 scoped) → :8081/:8080/:18190 |
| Friend's LAN (10.141.47.x) | planned open at handback | owner moves the box to a static IP on his LAN; firewalld opens the AI ports to his subnet (see Roadmap 5.3) |
| Public internet | never | No port-forward exists. Post-handback remote access method is the owner's choice (tunnel plan retired 2026-09-10) |
Security posture: API-key auth is enforced on every inference endpoint (401 without a valid key; two independent keys live since 2026-09-12) on top of tailnet-scoped reachability. Verified: 401 with a wrong or missing key, 200 with either key.
Try it visually
The Model Playground (on the box, tailnet-only) runs one prompt against every model sequentially with live streaming — the fastest way to see the differences.
What this endpoint gives an agent
| Capability | Models | Verified |
|---|---|---|
| Chat + streaming | all | yes |
| Tool / function calling (OpenAI schema) | qwen38-27b, flashnext-iq1s, flashnext-fp4, glm53-flash, llama-70b, dsv4 | yes |
| Vision (image input) | qwen38-27b, flashnext-iq1s | yes |
| Embeddings (1024-dim) | embed | yes |
| Reranking | :18190 (bge-reranker-v2-m3) | yes |
| Server-side MCP web tools | web-search + web-fetch on qwen38-27b and glm53-flash | experimental — registration verified; emission varies by model |