* 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>
* feat(kanban): add Kanban board with task-manager skill, modal UI, and desk clutter
Implement a full Kanban board system for tracking agent tasks:
- Add task-manager skill with shared JSON task store for persistence
- Render board as a floating modal over the live 3D office (not immersive)
- Auto-create tasks from actionable user messages with heuristic filtering
- Sync task status through OpenClaw agent lifecycle events
- Collapse task details panel by default, expand on card click
- Add dynamic desk clutter (papers, folders, etc.) reflecting active task count
- Exclude done tasks from desk clutter count
- Extract KANBAN_CLUTTER_OFFSET for easy positioning adjustment
- Add install flow with progress bar for the task-manager skill
- Include unit and e2e test coverage
Made-with: Cursor
* feat(kanban): production-harden task board with AI-free classification, resilient persistence, and modal UX
- Harden shared task store with atomic writes, payload size limits, and server-side enum validation
- Add client resilience: request timeouts (AbortController), exponential backoff retries, poll deduplication
- Implement optimistic UI with rollback on all card mutations (update, move, archive)
- Add modal accessibility: focus trap, Escape to close, aria-modal, keyboard card navigation
- Trust OpenClaw agent lifecycle phase=start as task classification signal instead of regex heuristics
- Keep regex heuristic only as lightweight filter for direct chat events (conversational noise)
- Expand verb recognition with typo tolerance and broader action vocabulary
- Create tasks from agent runs even when no chat event is received (external channel support)
- Merge dual header bars into single bar; reposition close button outside modal corner
- Exclude done tasks from desk clutter count; make clutter position configurable via KANBAN_CLUTTER_OFFSET
- Update default furniture layout to match user configuration
- Ensure kanban_board furniture persists in local storage across sessions
- Add comprehensive test coverage for store, API route, and controller logic
Made-with: Cursor
---------
Co-authored-by: iamlukethedev <lucas.guilherme@smartwayslfl.com>
Harden the SSH agent-state and skill-removal paths to match the local security model, and avoid rejecting valid local workspace skill removals.
Made-with: Cursor
Co-authored-by: iamlukethedev <lucas.guilherme@smartwayslfl.com>
* fix(voice): enforce upload size limit before buffering (issue #7)
The previous implementation called request.formData() and audio.arrayBuffer()
before checking MAX_VOICE_UPLOAD_BYTES, meaning oversized uploads were fully
buffered into memory before rejection — a DoS/OOM risk.
Changes:
- Check Content-Length header early and return 413 if it exceeds the limit,
preventing any request body from being read into memory for oversized uploads
- Export MAX_VOICE_UPLOAD_BYTES for use in tests
- Switch from instanceof File to duck-typing (checking .arrayBuffer method)
to avoid cross-realm failures in jsdom test environments
- Return HTTP 413 Payload Too Large for oversized uploads (was 400 before)
- Retain a secondary post-buffer size check to catch missing/spoofed
Content-Length headers
Tests added (tests/unit/voiceTranscribe.test.ts):
- Content-Length exceeding limit → 413 before any buffering
- Content-Length at exactly the limit → proceeds normally
- No Content-Length header, small file → proceeds normally (200)
- No Content-Length header, oversized body → 413 after buffering
- Missing audio field → 400
- Empty audio file (0 bytes) → 400
- Malformed Content-Length header → falls through gracefully
Fixes: issue #7
* fix(issue-7): account for multipart overhead in Content-Length early check
The early Content-Length guard was comparing total multipart request size
against MAX_VOICE_UPLOAD_BYTES, but multipart/form-data includes boundary
and header overhead (~200-500 bytes). A valid file at exactly the 20 MB
limit was being rejected with 413.
Fix: add a 1 KB MULTIPART_OVERHEAD_ALLOWANCE to the early check threshold.
The post-buffer check remains the authoritative limit and measures actual
audio bytes. Updated tests to reflect the corrected early-check boundary.
---------
Co-authored-by: Neo (subagent) <neo@openclaw.local>
Co-authored-by: Neo <neo@openclaw.ai>
* feat: add company builder wizard with AI-powered org generation
Adds a new "Build Your Company" step to the onboarding wizard that lets
users describe their business and generates a full agent org structure
using OpenClaw's AI. Includes company plan generation, role deduplication,
agent bootstrap with main-agent reuse, org chart preview, confetti on
success, CSS voxel running-avatar loader, amber theme unification, and
best-effort SSH workspace cleanup.
Made-with: Cursor
* fix: resolve lint errors in CompanyBuilderModal
Replace setState-in-effect pattern with a direct callback, escape
apostrophes in JSX text, and derive org chart hover state without
side effects.
Made-with: Cursor
---------
Co-authored-by: iamlukethedev <lucas.guilherme@smartwayslfl.com>
Add the office jukebox flow so Spotify can be controlled from the SOUNDCLAW skill, manual jukebox UI, and local browser auth bridge during development.
Made-with: Cursor
* Remote openclaw connection enabled and agent added
* 2 worlds connected
* Performance improvement
* Performance improvements
* Added documentation
* feat(office): add multi-agent beta remote office support
Add a second-office beta that can mirror remote Claw3D presence or derive remote gateway presence so teams can visualize and message agents across instances. Harden the new remote flows, document setup, and keep the branch green with full validation.
Made-with: Cursor
---------
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
Co-authored-by: iamlukethedev <lucas.guilherme@smartwayslfl.com>
The isWithinHome() check used path.relative() which is purely string-based
and does not follow symlinks. A symlink inside the home directory pointing
to an external path would bypass the containment check, allowing directory
listing of arbitrary filesystem locations.
Now uses fs.realpathSync() to resolve symlinks before the containment
comparison, ensuring the real filesystem path is validated.
Co-authored-by: ThankNIXlater <ThankNIXlater@users.noreply.github.com>
* feat(ui): improve visual polish, responsiveness, and UX consistency
- GatewayConnectScreen: replace hardcoded text-white* with semantic
foreground/muted-foreground tokens so the connect form is readable
in both light and dark modes
- HeaderBar: show gateway status chip for "connected" state in addition
to "connecting", giving users clear visual feedback once connected
- FleetSidebar: add aria-label and aria-pressed to agent row buttons
for screen-reader accessibility
- HQSidebar: add role=tablist/tab/tabpanel, aria-selected, aria-controls,
and aria-labelledby to the headquarters panel tabs
- OfficePage: replace Suspense fallback={null} with a themed spinner
so users see feedback instead of a blank screen during initial load
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(office): widen agent nameplate to prevent name truncation
- Expand background plane from 0.68 to 1.1 width
- Increase maxWidth from 0.56 to 1.0
- Slightly reduce fontSize 0.1 to 0.09 for better fit
- Add whiteSpace nowrap to prevent wrapping
- Truncate names >14 chars with ellipsis for very long agent names
---------
Co-authored-by: Claw3D UI Bot <ui-improvements@claw3d.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>