* 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>
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:
- Keep OpenClaw support intact.
- Extract a backend-neutral runtime adapter inside Claw3D.
- Add Hermes and Vera providers against their native surfaces where possible.
- 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_contextas a coordination primitive.- Agent
roleflowing 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:
- ACP for session-aware agent orchestration.
- Hermes API server for OpenAI-compatible chat and streaming.
- 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/completionsPOST /v1/completionsPOST /v1/contracted-completionsGET /healthGET /stateGET /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.changedsession.activitychat.deltachat.finalchat.errorrun.lifecycletool.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
openclawprovider. - 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
rolein 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
hermesprovider 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
veraprovider 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.