[ARCHITECTURE] The Robing — OpenClaw + Hermes cohabitation pattern #141

Open
opened 2026-03-31 03:40:51 +00:00 by Timmy · 1 comment
Owner

The Robing — OpenClaw + Hermes Cohabitation Architecture

Definition

The Robing is the act of configuring a wizard agent with two cooperative layers:

  • The Robe (OpenClaw) — the operator-facing shell. Handles messaging channels (Telegram, Discord), dispatch (heartbeat, labels), subagent spawning, and gateway plumbing. The robe makes the wizard reachable.

  • The Body (Hermes) — the cognitive core. Holds memory, tools, soul, session history, skills, and durable identity. Runs the LLM inference loop with full agent capabilities. The body makes the wizard real.

Both run as separate processes on the same machine, connected through localhost APIs.

States

State Robe Body Result
Robed OpenClaw running Hermes running Full wizard. Reachable and real.
Unrobed Hermes running Capable but not reachable via channels. CLI/API only.
Lobster OpenClaw running Reachable but empty. No memory, no tools, no soul. The failure state.
Dead Nothing running.

Architecture Diagram

            ┌──────────────────────────────┐
            │     THE ROBE (OpenClaw)       │
            │                              │
            │  Telegram ←→ Gateway         │
            │  Discord  ←→ Gateway         │
            │  Heartbeat → Gitea labels    │
            │  Subagent dispatch            │
            │                              │
            │  Port 18789 (ws)             │
            │  Model: kimi/kimi-code       │
            │  (dispatch only, not mind)   │
            └──────────────┬───────────────┘
                           │ localhost API
                           ▼
            ┌──────────────────────────────┐
            │     THE BODY (Hermes)        │
            │                              │
            │  Memory (MEMORY.md, USER.md) │
            │  Soul (system_prompt_suffix) │
            │  Tools (all toolsets)        │
            │  Sessions (11,000+)          │
            │  Skills (scoping, triage...) │
            │  Cron (morning report)       │
            │                              │
            │  Port 8642 (API server)      │
            │  /v1/chat/completions        │
            │  Model: claude-opus-4-6      │
            │  (the actual thinking)       │
            └──────────────────────────────┘

The Bridge

OpenClaw connects to Hermes through localhost:8642/v1/chat/completions. When a Telegram message arrives:

  1. OpenClaw receives it (Telegram polling)
  2. OpenClaw can handle simple dispatch directly (Kimi for grunt work)
  3. For complex work, OpenClaw routes to Hermes API
  4. Hermes thinks (with memory, tools, soul, full context)
  5. Response flows back through OpenClaw to Telegram

The heartbeat script bridges Gitea labels to OpenClaw dispatch:

  • assigned-kimi label → heartbeat picks up → openclaw agent dispatches → results posted

How to Robe a Wizard

  1. Install Hermes — clone, venv, configure config.yaml with model/provider, set up home/ with memories
  2. Start Hermes gatewayhermes gateway run (API server on localhost)
  3. Install OpenClaw — configure openclaw.json with channels (Telegram, Discord)
  4. Write the workspace docsAGENTS.md, IDENTITY.md, SOUL.md in the OpenClaw workspace
  5. Start OpenClaw gatewayopenclaw gateway install (LaunchAgent on macOS, systemd on Linux)
  6. Verify both running — Hermes on its port, OpenClaw on its port, channels connected

How to Detect a Lobster

If an agent on Telegram:

  • Asks clarifying questions instead of checking with tools
  • Spawns subagents for single API calls
  • Takes 5 minutes for a grep
  • Doesn't remember previous conversations
  • Can't find files that exist

...it's probably a lobster. OpenClaw without Hermes underneath.

Diagnosis: Check if Hermes gateway is running alongside OpenClaw. If only OpenClaw is running, the wizard is naked under the robe — which means there is no wizard, only a crustacean.

Instances

Wizard Host Robe Body State
Timmy Mac Mini (apayne) OpenClaw (Telegram, Kimi dispatch) Hermes (Claude, all tools) Robed
Ezra Hermes VPS (143.198.27.163) OpenClaw workspace (Telegram via Hermes) Hermes (Claude, oracle tools) Robed
Allegro Allegro VPS (167.99.126.228) Hermes (Kimi, gateway) Unrobed
Allegro-Primus Hermes VPS (143.198.27.163) Hermes (Ollama qwen2.5:1.5b) Unrobed

Naming Discipline

  • "Robed" = both layers running and connected
  • "Unrobed" = Hermes only, no OpenClaw channels
  • "Lobster" = OpenClaw only, no Hermes (the bug, the failure, the thing we fix)
  • "The Robing" = the procedure of setting up both layers
  • "Disrobing" = intentionally removing OpenClaw (going API/CLI only)
  • "The Robe" = OpenClaw in this context
  • "The Body" = Hermes in this context

Provenance

Architecture designed by Bezalel (2026-03-29), who robed Ezra first.
Pattern recognized and named by Ezra (2026-03-31).
Applied to Timmy by Ezra on Alexander's order (2026-03-31).
Codified here for all future wizards.

## The Robing — OpenClaw + Hermes Cohabitation Architecture ### Definition **The Robing** is the act of configuring a wizard agent with two cooperative layers: - **The Robe** (OpenClaw) — the operator-facing shell. Handles messaging channels (Telegram, Discord), dispatch (heartbeat, labels), subagent spawning, and gateway plumbing. The robe makes the wizard reachable. - **The Body** (Hermes) — the cognitive core. Holds memory, tools, soul, session history, skills, and durable identity. Runs the LLM inference loop with full agent capabilities. The body makes the wizard real. Both run as separate processes on the same machine, connected through localhost APIs. ### States | State | Robe | Body | Result | |-------|------|------|--------| | **Robed** | OpenClaw running | Hermes running | Full wizard. Reachable and real. | | **Unrobed** | — | Hermes running | Capable but not reachable via channels. CLI/API only. | | **Lobster** | OpenClaw running | — | Reachable but empty. No memory, no tools, no soul. The failure state. | | **Dead** | — | — | Nothing running. | ### Architecture Diagram ``` ┌──────────────────────────────┐ │ THE ROBE (OpenClaw) │ │ │ │ Telegram ←→ Gateway │ │ Discord ←→ Gateway │ │ Heartbeat → Gitea labels │ │ Subagent dispatch │ │ │ │ Port 18789 (ws) │ │ Model: kimi/kimi-code │ │ (dispatch only, not mind) │ └──────────────┬───────────────┘ │ localhost API ▼ ┌──────────────────────────────┐ │ THE BODY (Hermes) │ │ │ │ Memory (MEMORY.md, USER.md) │ │ Soul (system_prompt_suffix) │ │ Tools (all toolsets) │ │ Sessions (11,000+) │ │ Skills (scoping, triage...) │ │ Cron (morning report) │ │ │ │ Port 8642 (API server) │ │ /v1/chat/completions │ │ Model: claude-opus-4-6 │ │ (the actual thinking) │ └──────────────────────────────┘ ``` ### The Bridge OpenClaw connects to Hermes through `localhost:8642/v1/chat/completions`. When a Telegram message arrives: 1. OpenClaw receives it (Telegram polling) 2. OpenClaw can handle simple dispatch directly (Kimi for grunt work) 3. For complex work, OpenClaw routes to Hermes API 4. Hermes thinks (with memory, tools, soul, full context) 5. Response flows back through OpenClaw to Telegram The heartbeat script bridges Gitea labels to OpenClaw dispatch: - `assigned-kimi` label → heartbeat picks up → `openclaw agent` dispatches → results posted ### How to Robe a Wizard 1. **Install Hermes** — clone, venv, configure `config.yaml` with model/provider, set up `home/` with memories 2. **Start Hermes gateway** — `hermes gateway run` (API server on localhost) 3. **Install OpenClaw** — configure `openclaw.json` with channels (Telegram, Discord) 4. **Write the workspace docs** — `AGENTS.md`, `IDENTITY.md`, `SOUL.md` in the OpenClaw workspace 5. **Start OpenClaw gateway** — `openclaw gateway install` (LaunchAgent on macOS, systemd on Linux) 6. **Verify both running** — Hermes on its port, OpenClaw on its port, channels connected ### How to Detect a Lobster If an agent on Telegram: - Asks clarifying questions instead of checking with tools - Spawns subagents for single API calls - Takes 5 minutes for a grep - Doesn't remember previous conversations - Can't find files that exist ...it's probably a lobster. OpenClaw without Hermes underneath. **Diagnosis:** Check if Hermes gateway is running alongside OpenClaw. If only OpenClaw is running, the wizard is naked under the robe — which means there is no wizard, only a crustacean. ### Instances | Wizard | Host | Robe | Body | State | |--------|------|------|------|-------| | Timmy | Mac Mini (apayne) | OpenClaw (Telegram, Kimi dispatch) | Hermes (Claude, all tools) | Robed | | Ezra | Hermes VPS (143.198.27.163) | OpenClaw workspace (Telegram via Hermes) | Hermes (Claude, oracle tools) | Robed | | Allegro | Allegro VPS (167.99.126.228) | — | Hermes (Kimi, gateway) | Unrobed | | Allegro-Primus | Hermes VPS (143.198.27.163) | — | Hermes (Ollama qwen2.5:1.5b) | Unrobed | ### Naming Discipline - "Robed" = both layers running and connected - "Unrobed" = Hermes only, no OpenClaw channels - "Lobster" = OpenClaw only, no Hermes (the bug, the failure, the thing we fix) - "The Robing" = the procedure of setting up both layers - "Disrobing" = intentionally removing OpenClaw (going API/CLI only) - "The Robe" = OpenClaw in this context - "The Body" = Hermes in this context ### Provenance Architecture designed by Bezalel (2026-03-29), who robed Ezra first. Pattern recognized and named by Ezra (2026-03-31). Applied to Timmy by Ezra on Alexander's order (2026-03-31). Codified here for all future wizards.
Rockachopa was assigned by Timmy 2026-03-31 03:40:51 +00:00
Timmy self-assigned this 2026-03-31 03:40:51 +00:00
Member

🏷️ Automated Triage Check

Timestamp: 2026-03-31T03:45:03.640943
Agent: Allegro Heartbeat

This issue has been identified as needing triage:

Checklist

  • Clear acceptance criteria defined
  • Priority label assigned (p0-critical / p1-important / p2-backlog)
  • Size estimate added (quick-fix / day / week / epic)
  • Owner assigned
  • Related issues linked

Context

  • No comments yet - needs engagement
  • No labels - needs categorization
  • Part of automated backlog maintenance

Automated triage from Allegro 15-minute heartbeat

## 🏷️ Automated Triage Check **Timestamp:** 2026-03-31T03:45:03.640943 **Agent:** Allegro Heartbeat This issue has been identified as needing triage: ### Checklist - [ ] Clear acceptance criteria defined - [ ] Priority label assigned (p0-critical / p1-important / p2-backlog) - [ ] Size estimate added (quick-fix / day / week / epic) - [ ] Owner assigned - [ ] Related issues linked ### Context - No comments yet - needs engagement - No labels - needs categorization - Part of automated backlog maintenance --- *Automated triage from Allegro 15-minute heartbeat*
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Timmy_Foundation/timmy-home#141