Files
claw3d/docs/integrations/universal-backend-plan.md
gsknnft 083c146aac feat: add runtime seam, Hermes adapter support, and demo gateway mode (#89)
* fix: include kanbanImmersive in immersiveOverlayActive calculation

When Kanban board is open, HUD elements (camera preset buttons, edit toolbar, overlays) should be suppressed. The kanbanImmersive flag was defined but not included in the immersiveOverlayActive condition, causing HUD elements to remain visible.

This fix adds kanbanImmersive to the immersiveOverlayActive calculation so HUD elements are properly hidden when the Kanban board is open.

Co-authored-by: Luke The Dev <iamlukethedev@users.noreply.github.com>

* Fix: Hide mini status bar when Kanban immersive overlay is open

Wraps the bottom-left mini status bar (showing agent stats, vibe score, and
control hints) with !immersiveOverlayActive check to match the behavior of
other HUD elements like camera controls and toolbar.

This ensures the status bar is properly hidden when the Kanban board or any
other immersive overlay is active, maintaining a clean immersive experience.

Co-authored-by: Luke The Dev <iamlukethedev@users.noreply.github.com>

* chore: drop unrelated package-lock line from branch

Co-authored-by: Luke The Dev <iamlukethedev@users.noreply.github.com>

* universal-backend-plan

* backend-neutral runtime seam

* package.json update

* feat: add Hermes gateway adapter as alternative to OpenClaw

Adds a WebSocket adapter that lets Claw3D connect to a Hermes AI agent
runtime without any changes to the frontend. The adapter implements the
full Claw3D gateway protocol and bridges it to the Hermes HTTP API.

Changes:
- server/hermes-gateway-adapter.js: WebSocket bridge implementing the
  Claw3D gateway protocol against the Hermes HTTP API. Supports all
  core methods (agents, sessions, chat streaming, cron, config, files,
  approvals) and multi-agent orchestration via spawn_agent/delegate_task
  tools. Persists conversation history to ~/.hermes/clawd3d-history.json.
- scripts/clawd3d-start.sh: All-in-one startup script that launches
  Hermes, the adapter, and the Next.js dev server with auto port
  conflict resolution. Alias as `claw3d` for convenience.
- src/features/office/hooks/useCronAgents.ts: Hook that polls the
  gateway for cron-scheduled agents and surfaces them in the 3D office.
- package.json: adds `hermes-adapter` npm script
- .env.example: documents Hermes config vars
- docs/hermes-gateway.md: setup guide and protocol reference

Usage:
  npm run hermes-adapter   # start adapter (connect to http://localhost:8642)
  npm run dev              # start Claw3D, point browser at localhost:3000
  # or: bash scripts/clawd3d-start.sh  (starts everything automatically)

Both OpenClaw and Hermes are supported simultaneously — the gateway URL
in NEXT_PUBLIC_GATEWAY_URL determines which backend Claw3D connects to.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add read_agent_context tool for cross-agent coordination

Agents can now read each other's conversation history via the
read_agent_context tool, enabling the orchestrator to check what
a sub-agent has done before re-delegating work.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: wire Hermes office UX and role-aware runtime updates

* feature update - demomode & hermes adapter

* fix lint blockers

* lintfix #2

* fix: stabilize retro office camera preset callbacks

* Initial plan

* fix: stabilize retro office overview preset hooks

Agent-Logs-Url: https://github.com/gsknnft/Claw3D/sessions/9cc71555-591e-44cf-aec4-25affbdcb405

Co-authored-by: gsknnft <123185582+gsknnft@users.noreply.github.com>

* feat: add truthful backend selection, Hermes adapter hardening, and demo gateway mode

* fix: address bugbot review and finalize backend selection

* fixed - onboarding and hermes calls

* office systems roadmap

* feat specs in docs

* specs ready

* feat: continue custom runtime seam and gateway alignment

* custom lane wired

* feat: add custom runtime provider path and office runtime alignment

* runtime fixes

* fix lukes findings

* fix lukes findings #2

* stable UI & connect screen page -> overlay

* better baseline for connection

* stable providers & ui rendering

* best launch yet

* nearly no gateway on reconnect

* auto reconnect last state

* fix: preserve selected runtime across reconnects

Keep backend selection aligned with the operator's chosen runtime instead of reviving a mismatched last-known-good adapter, and keep custom runtimes prompting for reconnect when Studio cannot auto-connect them.

Made-with: Cursor

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Luke The Dev <iamlukethedev@users.noreply.github.com>
Co-authored-by: Elias Pfeffer <eliaspfeffer@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: iamlukethedev <lucas.guilherme@smartwayslfl.com>
2026-04-02 15:27:24 -05:00

8.3 KiB

Universal Backend Plan

Backend-neutral Claw3D integration plan for OpenClaw, Hermes, Vera, and other runtimes.

Recommendation

Do not treat PR #70 as the long-term integration architecture.

It is useful as a short-term compatibility shim and a source of a few good UX changes, but it does not make Claw3D backend-neutral. It keeps Claw3D OpenClaw-shaped and makes Hermes imitate OpenClaw.

That matters because:

  • Hermes already has real control surfaces: ACP and an OpenAI-compatible API server.
  • Vera already has a real orchestrator/gateway shape.
  • Every future backend would otherwise need to keep emulating the OpenClaw gateway protocol.

The better path is:

  1. Keep OpenClaw support intact.
  2. Extract a backend-neutral runtime adapter inside Claw3D.
  3. Add Hermes and Vera providers against their native surfaces where possible.
  4. Cherry-pick the high-value UI pieces from PR #70 into that new architecture.

What To Reuse From PR #70

These are worth keeping:

  • Multi-agent UX concepts.
  • read_agent_context as a coordination primitive.
  • Agent role flowing into the 3D office nameplate.
  • Click-to-chat behavior.
  • Live speech bubble rendering for streaming text.
  • Hermes-specific env var documentation.

These are not the right long-term seam:

  • A full OpenClaw-protocol emulator as the primary Hermes integration.
  • Fake-success implementations for config.* and approvals.
  • Synthesizing runtime freshness from Date.now() instead of real event/message timestamps.

Target Architecture

Claw3D should stop treating the browser gateway client as the backend abstraction.

Instead, Studio should expose a backend-neutral runtime service with provider adapters:

Browser UI
  -> Studio runtime API
    -> OpenClaw provider
    -> Hermes provider
    -> Vera provider

The browser can still use WebSocket streaming from Studio, but the messages should be Claw3D-native runtime events rather than implicitly OpenClaw events.

Core Adapter Contract

Suggested TypeScript shape:

export type RuntimeCapability =
  | "agents"
  | "sessions"
  | "chat"
  | "streaming"
  | "agent_roles"
  | "files"
  | "skills"
  | "cron"
  | "approvals"
  | "config"
  | "session_settings";

export type RuntimeEvent =
  | { type: "presence.changed"; agents: RuntimeAgentSummary[] }
  | { type: "session.activity"; sessionKey: string; agentId: string; at: number }
  | { type: "chat.delta"; runId: string; sessionKey: string; text: string; at: number }
  | { type: "chat.final"; runId: string; sessionKey: string; text: string; at: number }
  | { type: "chat.error"; runId: string; sessionKey: string; message: string; at: number }
  | { type: "run.lifecycle"; runId: string; sessionKey: string; phase: "start" | "end" | "error"; at: number }
  | { type: "tool.progress"; runId: string; sessionKey: string; label: string; at: number };

export interface RuntimeProvider {
  readonly id: string;
  readonly label: string;
  getCapabilities(): Promise<Set<RuntimeCapability>>;
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  subscribe(listener: (event: RuntimeEvent) => void): () => void;
  listAgents(): Promise<RuntimeAgentSummary[]>;
  listSessions(input?: { agentId?: string }): Promise<RuntimeSessionSummary[]>;
  getSessionPreview(keys: string[]): Promise<RuntimeSessionPreview[]>;
  sendChat(input: { sessionKey: string; message: string; agentId?: string }): Promise<{ runId: string }>;
  abortRun(input: { runId?: string; sessionKey?: string }): Promise<void>;
  waitForRun(input: { runId: string; timeoutMs?: number }): Promise<"running" | "done">;
}

Optional features such as config editing, approvals, files, skills, and cron should sit behind capability checks instead of being assumed to exist.

Capability Matrix

Initial expected support:

Capability OpenClaw Hermes Vera
Agents Native Native Provider-defined
Sessions Native Native Provider-defined
Chat send/abort/wait Native Native Native via orchestrator
Streaming Native Native Native
Agent roles Native-ish Native Native
Files Native Partial Optional
Skills Native Native Optional
Cron Native Native Optional
Approvals Native Partial Optional
Config mutation Native Limited Limited

Important rule:

If a provider does not support a surface, Claw3D should disable or hide the UI for it. It should not fake a successful write.

Provider Strategy

OpenClaw Provider

Use the existing gateway client as the first provider implementation.

This keeps current behavior working while the rest of the app migrates to the adapter contract.

Hermes Provider

Preferred order:

  1. ACP for session-aware agent orchestration.
  2. Hermes API server for OpenAI-compatible chat and streaming.
  3. OpenClaw-protocol shim only as a temporary bridge.

Rationale:

  • ACP is a better semantic fit for sessions, cancellation, fork/resume, approvals, and editor-style state.
  • The Hermes API server is already stable and useful for chat, tool calling, and cron-backed service behavior.
  • The OpenClaw shim should be treated as transitional compatibility, not the permanent contract.

Vera Provider

Target the Vera orchestrator, not individual vera-torch workers.

Use:

  • POST /v1/chat/completions
  • POST /v1/completions
  • POST /v1/contracted-completions
  • GET /health
  • GET /state
  • GET /registry

The Vera provider should map Claw3D agent identities to routed roles or lanes rather than pretending Vera is an OpenClaw gateway.

Event Model

Current Claw3D expects OpenClaw-flavored chat, agent, and presence events.

That is too narrow for universal providers. Studio should normalize provider-native updates into a Claw3D event model with explicit semantics:

  • presence.changed
  • session.activity
  • chat.delta
  • chat.final
  • chat.error
  • run.lifecycle
  • tool.progress

Then the browser UI can consume one stable event shape no matter what backend is in use.

High-Value PR Split

Recommended implementation order:

PR 1: Runtime Abstraction

Scope:

  • Introduce the provider interface.
  • Wrap current OpenClaw behavior in an openclaw provider.
  • Move capability checks into the UI state layer.
  • Add a Studio-level runtime event normalization layer.

This is the most important PR.

PR 2: Safe UX Cherry-Picks From PR #70

Scope:

  • Agent role in store and office UI.
  • Click-to-chat.
  • Streaming speech bubbles.

These are good product improvements and do not require committing to the Hermes shim architecture.

PR 3: Hermes Native Provider

Scope:

  • Add a hermes provider using ACP where possible.
  • Use Hermes API server for chat/streaming surfaces.
  • Expose capabilities honestly.
  • Persist and surface real timestamps from Hermes session/message state.

Keep the shim optional for compatibility, not required.

PR 4: Vera Provider

Scope:

  • Add a vera provider against the Vera orchestrator.
  • Map Claw3D agents to Vera roles or lanes.
  • Surface orchestrator state and routed worker identity.

PR 5: Optional Compatibility Layer Cleanup

Scope:

  • Retire or reduce the Hermes OpenClaw shim.
  • Convert shim-only routes into provider-native routes where possible.

Near-Term Guidance For Luke

If Luke wants "drop-in Hermes support right now", PR #70 is directionally useful.

If Luke wants "Claw3D should support any backend cleanly", PR #70 should not be the mainline architecture.

Best compromise:

  • Do not merge PR #70 as the final backend architecture.
  • Split out the UI improvements and any safe Hermes-specific pieces.
  • Open a new architecture PR for the runtime provider seam.
  • Rebase Hermes integration on top of that seam.

Why This Also Helps Vera

This path avoids making Vera imitate OpenClaw.

Instead, Vera can appear as:

  • a routed multi-role intelligence backend,
  • with Claw3D visualizing agents, runs, status, and streamed text,
  • while preserving Vera-specific routing, lane, and model identity.

That gives Claw3D a broader identity:

  • similar to the OpenClaw ecosystem,
  • but not subordinate to OpenClaw's protocol and assumptions.

Proposed First Deliverable

The first concrete deliverable should be a new PR that does only this:

  • add the provider interface,
  • wrap existing OpenClaw integration behind it,
  • add capability flags,
  • make the UI stop assuming config/approval/file support from every backend.

That PR creates the seam both Hermes and Vera need.