Source: rabbitOS updates — 2.3 + 2.2 changelog capture, rabbit support — third-party agents on r1, first-hand field notes — self-hosted Hermes bridge, verified 2026-07-11
The 2026-07-10 rabbitOS 2.3 OTA put Hermes Agent (Nous Research) on the Rabbit R1 as a native, first-class voice backend — completing a three-release arc (2.2: Claude Code, 2.3: Hermes + OpenClaw v4) that turns the R1 into a multi-agent hardware console: pick your agent per page, bring your own keys, run the agent on hardware you control. The transport for all of it is the rabbit-agent node bridge, which replaces the January 2026 QR-pairing flow documented in OpenClaw on Rabbit R1. This article covers what shipped, how the bridge actually works (observed, not just documented), and a verified same-day setup of a self-hosted Hermes fork running headless in a cloud container — including the two failure modes anyone repeating it will hit.
What shipped in 2.3
- hermes agent on r1 — the full open-source Hermes Agent framework, not a branded wrapper. No Hermes-side release changes were needed (nothing rabbit-related appears in Hermes v0.16–v0.18.2); the integration is entirely rabbit-side.
- openclaw protocol v4, “rebuilt through rabbit agent” — OpenClaw moves onto the same node bridge and now works outside the home network (earlier pairing was LAN-bound).
- DLAM goes BYOK — bring your own Anthropic or OpenAI key, pick provider and model in DLAM settings; billing routes to your own account instead of Rabbit’s pool (see DLAM).
- Creations Gallery 1.5, proactive rabbit (triple-tap home-screen messages), and an on-device “what’s new?” card.
- Context: rabbitOS 2.2 (Jun 18) had already shipped Claude Code on r1 (“start, read, and continue sessions from computers running the rabbit agent”) plus the return of terminal mode — 2.3 generalizes that architecture.
The rabbit-agent node bridge
R1 ↔ rabbit cloud ↔ rabbit-agent daemon (your computer) ↔ persistent `<agent> acp` subprocess ↔ agent
- You register a computer as a node from the rabbithole portal (hole.rabbit.tech → settings → nodes → register node → paste a one-time-token install command in a terminal). The daemon keeps an outbound control WebSocket to rabbit’s cloud — no inbound ports, no QR scan.
- One node advertises three backend slots —
openclaw-session,claude-session,hermes-session— and spawns the matching local CLI as a persistent subprocess speaking ACP (Agent Client Protocol), JSON-RPC over stdio:hermes acpfor Hermes. Session jobs are recorded under~/.rabbit-agent/jobs/withpayload/stdout/stderr/exitfiles — the debug surface when things fail. - Registration state persists in
~/.rabbit-agent/:connection.jsonappears only on confirmed cloud registration, whileprivate.keyis written even for a rejected token — automation must gate onconnection.json. Tokens are one-time-use and fail silently when reused. - Rabbit supports none of the agent side: the agent CLI must already work in a terminal on the node machine, with your own keys.
Self-hosted / headless container setup (verified)
The official flow assumes a desktop OS, but the bridge runs cleanly inside a headless cloud container (verified on Railway against a production Hermes fork, v0.18.0 base) ^[the container pattern is first-hand field experience, not rabbit-documented]:
- Setup: run the installer from the container entrypoint as the runtime user with
HOMEon the persistent volume (state survives redeploys); register with the token only whenconnection.jsonis absent, resume otherwise; re-run the idempotent installer every ~10 minutes to replace its crontab-based self-healing; ship a no-opcrontabstub so install.sh survivesset -euo pipefailin cron-less containers; make everything non-fatal so rabbit outages can’t block service boot. - The PATH trap (exit 127): rabbit-agent’s job runner spawns
stdbuf … hermes acpunder a reset login-shell PATH — a venv-onlyhermesis invisible and every session dies instantly withstdbuf: failed to run command 'hermes'. Fix: a shim at/usr/local/bin/hermesthat execs the real CLI and defaultsHERMES_HOMEto the production home, so even a fully stripped job environment lands in the right brain. (This is also why OpenClaw setups “just work” when the CLI lives at/usr/local/bin/openclaw.) - The wrong-node trap: every node advertises all three backends whether or not the agent is installed there. With multiple nodes registered, the R1’s Hermes page can target a node with no Hermes — sessions hang at “starting hermes” forever while the real node sits idle. Select the right computer per agent page. Node labels are container hostnames and change every redeploy; node identity persists.
- Verified end state: persistent
hermes acpprocess bound to the productionHERMES_HOME; gateway (Telegram webhook) healthy during active R1 sessions; ACP sessions keep their own transcripts while sharing long-term memory, config, and skills with every other surface — the standard Hermes per-surface-transcript, shared-brain split (see Architecture Explained).
Key Takeaways
- The R1 is now a voice remote for any of three agent ecosystems you self-host — DLAM (first-party) plus Claude Code, Hermes, and OpenClaw over one node daemon. Rabbit’s pitch is explicitly “plug the open agent ecosystem into pocket hardware.”
- ACP is the integration surface. Rabbit didn’t build a Hermes integration; it built an ACP client and spawns
<agent> acp. Any agent that speaks ACP over stdio is a candidate backend — the same protocol editors (Zed, JetBrains) use. - Self-hosted needs no subscription and no Hermes changes — a stock
hermes acp(v0.16+ ships the ACP adapter;hermes acp --checkverifies) on any machine the daemon runs on, including headless containers. - Voice still transits rabbit’s cloud — transcription happens on rabbit’s stack before reaching your agent, and session traffic rides their relay; a rabbit outage takes the bridge down even with your agent healthy (unchanged from the QR era).
- Security posture: an R1 session gets whatever the local agent CLI can do — for a production Hermes home that includes terminal tools. Same trust tier as any full-power surface; revoke via rabbithole node removal, and consider a locked-down profile for the device.
Try It
- Update the R1 to rabbitOS 2.3 (check the “what’s new?” card), and have Hermes working in a terminal on the target machine (
hermes acp --check→ “Hermes ACP check OK”). - hole.rabbit.tech → settings → nodes → register node → run the copied command on that machine (fresh token; they’re one-time-use).
- On the R1: swipe left to the Hermes page → “click to refresh” → select the right computer → hold PTT and talk. Session history lives behind the notebook icon.
- If it hangs or retries: read the newest
~/.rabbit-agent/jobs/hermes-session-*/stderr— exit 127 means a PATH problem (puthermeson the default system PATH); no jobs at all means the R1 is targeting a different node. - Container deployments: follow the headless pattern above, and re-select the node on the device after each redeploy if the hostname label changed.
Open Questions
- Friendly node names — partially resolved 2026-07-12: the label is a cloud-side
displayNamerefreshed from the hostname in the daemon’s environment report (confirmed by watching labels track container hostnames across redeploys). rabbit-agent 0.1.2 has no rename API (surface:get_node+post_registerNode) and no naming env var; the portal’s token-mint schema carries an unexposed optionaldisplayName. Working approach on hosts where the hostname can’t be controlled (e.g. Railway blockssethostname/unshare --uts): the daemon is a dynamically linked Bun binary, so a scopedLD_PRELOADshim interposinggethostname()/uname()makes it report a chosen name (RABBIT_NODE_NAME) — shipped to both self-hosted containers; final on-device confirmation pending (also proves Bun’sos.hostname()uses libc, not raw syscalls). - Multi-R1 → one node, and per-agent-page node stickiness semantics, remain undocumented (carried forward from the QR era’s open questions).
- Whether rabbit-agent probes agent CLIs beyond PATH + the official install layouts (
~/.hermes/hermes-agent/venv/bin/hermes,~/.local/bin/claude) is unconfirmed — PATH placement is the reliable contract. ^[inferred] - DLAM BYOK’s rate-limit behavior post-2.3 (early community reports of throttling on the legacy pooled path).
Related
- OpenClaw on Rabbit R1 — the January 2026 QR-pairing predecessor this bridge replaces
- Rabbit R1 — 2026 State of the Device
- DLAM — Rabbit’s Plug-and-Play Computer Agent
- Hermes Architecture Explained — where ACP/CLI surfaces sit relative to the gateway
- Hermes v0.18 “Judgment” — the release line verified on the bridge
- Pocket Access to Always-On Agents — the thin-surface pattern this hardware instantiates
- The Agent Hardware Frontier