## Summary This PR started as the Hermes/demo/runtime seam work and has now grown into the main runtime stabilization branch for Claw3D. The branch now does four things: - keeps the Hermes adapter path working and easier to debug - makes backend selection more explicit and truthful in Studio - extends the runtime seam beyond OpenClaw-only assumptions - fixes capability mismatches that were exposing unsupported UI/actions This is now the right branch for the Hermes/runtime review path. ## What Changed Since The Earlier PR Notes The earlier summary for this work is now outdated. This branch no longer only has a single OpenClaw-shaped runtime path. It now includes: - persisted backend selection in Studio settings - active backend identity surfaced in the UI - real provider selection across: - `openclaw` - `hermes` - `demo` - `custom` - Hermes/demo hello identity support - stronger office/runtime alignment so the office is less tightly coupled to raw gateway assumptions - runtime and reconnect fixes discovered while exercising Hermes in the real UI ## Included In This PR ### 1. Hermes/runtime stability and reconnect behavior - improved Hermes adapter/runtime selection handling - reduced OpenClaw-specific assumptions leaking into Hermes/demo/custom paths - stabilized reconnect and connect-screen behavior in the office flow - improved local backend switching/debuggability from inside Studio - Studio now only auto-connects from a verified last-known-good runtime state; otherwise it shows the connect overlay and waits for explicit operator choice - fixed a gateway connect-screen hydration bug caused by invalid HTML around the inline loading avatar - fixed an onboarding hydration mismatch caused by reading browser storage during initial render - kept the office mounted while gateway loading/prompt states are shown as overlays instead of full page swaps - kept the office visible behind the runtime overlay, while making the connect modal itself more opaque/readable - aligned Studio proxy URL resolution back to upstream `main` - added a small first auto-connect delay for Hermes/Demo so the initial browser ws proxy attempt is less likely to race Next dev startup - removed destructive office camera resets that were firing on runtime-status and agent-count changes - manual connect now cancels pending auto-connect/retry overlap before opening a new Hermes/Demo attempt - Hermes/Demo gateway connects now allow a second internal attempt before surfacing failure, which materially reduces the first-connect miss pattern in local Studio testing ### 2. Truthful backend selection - Studio persists the selected backend instead of only URL/token - the UI shows selected vs active backend - backend settings are now clearer and less misleading when switching between: - OpenClaw - Hermes - Demo - Custom ### 3. Runtime seam expansion - provider selection is no longer effectively OpenClaw-only - Hermes and Demo use real provider paths - groundwork for direct HTTP-backed custom runtimes is included on this branch ### 4. Office/runtime alignment - office bootstrap and runtime handling are less coupled to raw gateway transport - blank-office / reconnect edge cases were investigated and several stability fixes landed during Hermes validation ### 5. Luke’s findings addressed The Demo cron mismatch called out in review is fixed. Changes: - `Automations` is hidden when `supportsCapability("cron")` is false - cron create/run/delete now fail fast with a clear user-facing error when the runtime does not support cron - added tests covering: - no Automations tab when cron is unsupported - cron mutations blocked when cron capability is unavailable ## Review Follow-Up For Luke Addressed review finding: - Demo runtime no longer exposes unsupported cron mutation behavior through the settings flow - unsupported cron actions are blocked before any RPC is sent Files directly involved in that fix: - `src/features/agents/screens/AgentsPageScreen.tsx` - `src/features/agents/operations/settingsSidebarTabs.ts` - `src/features/agents/operations/useAgentSettingsMutationController.ts` - `tests/unit/settingsSidebarTabs.test.ts` - `tests/unit/useAgentSettingsMutationController.test.ts` ## Validation - [x] `npm run typecheck` - [x] `npx vitest run tests/unit/useGatewayConnection.test.ts tests/unit/useRuntimeConnection.test.ts` - [x] `npx vitest run tests/unit/useAgentSettingsMutationController.test.ts tests/unit/settingsSidebarTabs.test.ts` - [x] `npx vitest run tests/unit/demoGatewayAdapter.test.ts` ## Scope Notes This PR still does **not** claim: - ACP-native Hermes integration - process launch from Studio - fully mature custom-runtime streaming/session semantics - finished office-system feature implementation ## Office Systems Note The office-system roadmap/spec work exists, but it is **not** part of this implementation scope. That work was split into feature issue `#90`. Current docs/specs are planning artifacts only: - bulletin board - whiteboard - meeting room workflow - QA department - desk progression - hierarchy/teams Nothing from those office-system specs should be interpreted as already built in this PR. ## Suggested Reviewer Focus - Hermes adapter/runtime stability in the real Studio/office flow - whether backend selection is now clearer and less misleading - whether capability claims are honest, especially for Demo - whether the runtime/provider seam changes remain coherent for upstream use ## Remaining Follow-Up Work - ACP-backed Hermes provider as separate work - better Hermes profile/model visibility in settings - stronger reconnect persistence behavior - richer multi-agent Hermes flows - continued custom-runtime and downstream orchestrator work ## Current Operator Status As of the latest local verification on April 1, 2026: - Hermes now reaches a stable connected office state without the earlier heavy scene flicker/reset behavior - the office remains visible behind gateway loading/error overlays - the Demo cron capability mismatch called out in review is fixed end-to-end - one residual Hermes issue may still remain in some local dev sessions: the first automatic connection attempt can miss once before a manual `Hermes backend` + `Connect` succeeds cleanly That remaining first-attempt Hermes miss is now the only notable runtime issue still observed in manual browser testing for this pass.