4.9 KiB
4.9 KiB
Claw Fleet Console
openclaw-taskboard is now a Next.js + React + Tailwind + shadcn-style dashboard for the deployed Claw fleet.
It tracks and visualizes:
- OpenClaw swarm agents on
ubuntu - ZeroClaw host runtimes on
grizzleyandice - direct SSH host targets for
pve,truenas, andpanda - shared task assignment and dispatch across all families
- wiki pages and architecture documentation rendered in the UI
- dispatch audit history, failure queues, heartbeat overlays, and task templates
Stack
- Next.js App Router
- React 19
- Tailwind CSS
- shadcn-style UI components under
components/ui - SQLite task storage
Key Pages
/tasks- unified Kanban board/agents- configured OpenClaw, ZeroClaw, and direct host targets/openclaw- focused OpenClaw swarm view/zeroclaw- focused ZeroClaw host-runtime view/dispatch- dispatch audit log and failure queue/architecture- deployed architecture documentation with ASCII topology/wiki- markdown-backed runbooks and generated docs/usage- usage aggregates from the local tracking table
Control Plane Features
- typed fleet config and task template config
- dispatch lifecycle states and SQLite audit history
- OpenClaw swarm dispatch into
~/.clawdbot/active-tasks.json - ZeroClaw webhook dispatch for
grizzleyandice - direct SSH dispatch for
pve,truenas, andpanda - task callback API for remote completion/result sync
- OpenClaw registry sync API for swarm task state reconciliation
- heartbeat pickup API at
/api/heartbeat/{agent}for queue inspection and self-dispatch - failure queue and dispatch history views
- family-specific runtime views for OpenClaw and ZeroClaw plus unified direct-host visibility
- architecture documentation rendered directly from tracked config
Fleet Model
OpenClaw
- Host:
ubuntu - Service:
openclaw.service - Runtime:
/srv/state/openclaw/current - Config:
~/.openclaw/openclaw.json - Channels:
- Telegram DM allowlist
- Homelab HQ forum topics
- local gateway on
:18789
ZeroClaw
- Primary runtime:
grizzley - Control-plane runtime:
ice - Runtime roots:
/srv/state/zeroclaw/current/home/bear/.zeroclaw-admin
- Channels:
- paired HTTP gateway access
- Homelab-Ice forum topics
- remote gateway routing from
ice
Direct SSH Targets
- Execution host:
ubuntutaskboard container - Transport:
sshusing the mounted host key - Configured targets:
pveviaroot@192.168.50.11truenasviachristopher@192.168.50.12pandaviabear@192.168.50.196
- Dispatch model:
- select a direct target agent
- dispatch a built-in safe action
- capture stdout/stderr
- write completion through the same callback pipeline as remote runtimes
Important Environment Variables
DB_PATHWIKI_DIRAGENTS_DIRSWARM_TASKS_FILESWARM_REPO_MAP_FILESWARM_WORKTREES_DIRREPO_ACCESS_ROOTSOPENCLAW_CONFIGZEROCLAW_GRIZZLEY_URLZEROCLAW_GRIZZLEY_TOKENZEROCLAW_ICE_URLZEROCLAW_ICE_TOKENDIRECT_SSH_KEY_PATHDIRECT_SSH_TIMEOUT_MS
Heartbeat Pickup
Configured OpenClaw and ZeroClaw runtimes can hit:
curl -s http://127.0.0.1:8395/api/heartbeat/<agent>
The heartbeat endpoint will:
- sync OpenClaw swarm state before scheduling
- inspect the agent's assigned tasks
- skip tasks blocked by
depends-on:<task-id>ordependency:<task-id>tags - auto-dispatch the next runnable task when the agent does not already have an active unblocked task
- return queue state, blocked items, and any task that was dispatched during the heartbeat
This is the canonical path for agent-driven task pickup. Assignment alone does not start work; heartbeat pickup or an explicit dispatch does.
Development
npm install
npm run dev
Production Build
npm run build
npm start
Deployment Shape On Ubuntu
- app source checkout:
/srv/apps/openclaw-taskboard/current - taskboard data:
/srv/state/openclaw-taskboard/data - OpenClaw mounts:
/home/bear/.openclaw/agents/home/bear/.openclaw/openclaw.json/home/bear/.openclaw/workspace/wiki
- ZeroClaw architecture:
- rendered from the tracked fleet model in this repo
- optional runtime path overrides can be provided via
ZEROCLAW_PRIMARY_DIRandZEROCLAW_CONTROL_DIR
- Direct SSH:
- taskboard container mounts
/home/bear/.sshas read-only - direct targets use
/root/.ssh/id_ed25519by default
- taskboard container mounts
Notes
- The UI intentionally treats OpenClaw, ZeroClaw, and direct host targets as separate families with different runtime and channel models.
iceZeroClaw remains tied to host-local secret/encryption state; the dashboard reads that runtime but does not attempt to rewrite it.- Direct targets are intentionally limited to safe built-in actions from
config/fleet.json, not arbitrary shell commands from the browser.