Objective: Fetch real telemetry from OpenShell and expose it through API endpoints Exit Criteria: API endpoints return real CPU, GPU, Disk, and Network data
Objective: Build modular, reusable UI components with dark/light mode Exit Criteria: Components render correctly with proper styling and NVIDIA color scheme
Objective: Implement speedometer-style gauges with selectable telemetry targets Exit Criteria: Gauges show real data, sandboxes can be selected, combined telemetry works
Objective: Add "OpenClaw Gateway Dashboard" button and finalize layout Exit Criteria: Button opens OpenClaw dashboard in new window, layout is responsive
- Owner: Builder
- Dependency: None
- Timeout: 120s
- Command:
/Applications/Docker.app/Contents/Resources/bin/docker exec openshell-cluster-openshell kubectl get pods --all-namespaces -o json - Acceptance Test: JSON response with pod data returned
- Owner: Builder
- Dependency: Task 1.1
- Timeout: 120s
- Command:
/Applications/Docker.app/Contents/Resources/bin/docker exec openshell-cluster-openshell kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}' > /tmp/openshell-pods.json - Acceptance Test: JSON file created with pod names and IPs
- Owner: Builder
- Dependency: Task 1.2
- Timeout: 120s
- Command:
/Applications/Docker.app/Contents/Resources/bin/docker exec openshell-cluster-openshell kubectl top pods --all-namespaces -o json - Acceptance Test: Real CPU/memory metrics returned
- Owner: Builder
- Dependency: None
- Timeout: 120s
- Command:
/Applications/Docker.app/Contents/Resources/bin/docker exec openshell-cluster-openshell kubectl get configmaps -n openshell -o yaml > /tmp/openshell-configmaps.yaml - Acceptance Test: Config maps fetched successfully
- Owner: Builder
- Dependency: Task 2.1
- Timeout: 120s
- Command: Update
/Users/markmckeen/nemo-shell-dashboard/app/globals.csswith:@media (prefers-color-scheme: dark) { :root { --bg-color: #0a0a0a; --text-color: #76B900; --card-bg: #1a1a1a; } } @media (prefers-color-scheme: light) { :root { --bg-color: #f0f0f0; --text-color: #0D47A1; --card-bg: #ffffff; } }
- Acceptance Test: CSS classes render correctly in both modes
- Owner: Builder
- Dependency: Task 2.2
- Timeout: 120s
- Command: Create
/Users/markmckeen/nemo-shell-dashboard/app/components/SpeedometerGauge.tsxwith SVG-based gauges - Acceptance Test: Gauge renders with correct color and scale
- Owner: Builder
- Dependency: Task 2.3
- Timeout: 120s
- Command: Create
/Users/markmckeen/nemo-shell-dashboard/app/components/SandboxList.tsxwith click handlers - Acceptance Test: List renders with sandbox names and IPs
- Owner: Builder
- Dependency: Task 3.1
- Timeout: 120s
- Command: Create
/Users/markmckeen/nemo-shell-dashboard/app/api/telemetry/combined/route.ts - Acceptance Test: Returns average metrics from all sandboxes
- Owner: Builder
- Dependency: Task 3.2
- Timeout: 120s
- Command: Create gauge components for CPU, GPU, Disk, Network
- Acceptance Test: Gauges show real data with text labels
- Owner: Builder
- Dependency: Task 3.3
- Timeout: 120s
- Command: Create
/Users/markmckeen/nemo-shell-dashboard/app/components/OpenClawButton.tsxwithtarget="_blank"andhref="http://localhost:18789" - Acceptance Test: Button opens OpenClaw dashboard in new window
- Owner: Builder
- Dependency: Task 4.1
- Timeout: 120s
- Command: Update
/Users/markmckeen/nemo-shell-dashboard/app/page.tsxwith new layout - Acceptance Test: Layout is responsive and displays all components
- Trigger:
kubectlcommand fails in Docker container - Impact: Cannot fetch telemetry data
- Mitigation: Use mock data fallback, explore alternative data sources
- Trigger:
kubectl top podsdoes not return GPU metrics - Impact: GPU gauge shows incorrect data
- Mitigation: Use CPU/memory data as fallback, add GPU-aware monitoring
- Trigger: Media queries not working
- Impact: User sees wrong color scheme
- Mitigation: Add explicit theme toggles, test in both modes
- Detection Signal:
kubectlcommand fails - Response: Check Docker container status, verify kubectl is installed
- Detection Signal: User requests additional features mid-implementation
- Response: Confirm with user, re-plan if needed
- Detection Signal: Cannot verify telemetry data is real
- Response: Add mock data fallback, verify against known values
Build Phase 1, Task 1.1: Fetch OpenShell Kubernetes Data
Command to run:
/Applications/Docker.app/Contents/Resources/bin/docker exec openshell-cluster-openshell kubectl get pods --all-namespaces -o jsonOwner: Builder Timeout: 120s Acceptance Test: JSON response with pod data returned
This plan is based on the Planner skill contract v1. All tasks are designed to be completed in one execution cycle with explicit verification criteria.