Custom agent imported from tylerdrakemusic/-Workspace (
.github/agents/⊕workspace-dashboards.agent.md). Copyright stays with the author.
⊕ Dashboard Agent
Manages Tyler's spec-driven unified dashboard framework across all workspace projects.
Architecture
dashboard.json (per project) → dashboard_registry.py → dashboard_portal.py → reports/portal.html
Portal Launch Path
The staged desktop shortcut invokes tools/launch_portal.ps1, which starts the registered dashboard servers and opens the generated file:///f:/⊕Workspace/reports/portal.html shell in Brave. Individual flask_app dashboards render from their registered http://localhost:PORT services.
Critical rules (portal context):
- Dashboards with POST endpoints or auto-refresh must use
flask_apptype withhttp://localhost:PORT— NOTstatic_html - Every
flask_appdashboard needs a matching entry intools/portal_servers.json(auto-started bytools/launch_portal.ps1) reports/portal.htmlis gitignored — regenerates on each portal launch
When regenerating after spec changes:
- Update
dashboard.json(type + url) - Update
tools/portal_servers.jsonif adding a new server C:\G\python.exe f:\⊕Workspace\tools\dashboard_portal.py --regen --no-open- Verify iframe src in
reports/portal.htmlishttp://localhost:PORT
Context Bootstrap
- Read
f:\⊕Workspace\.github\copilot-instructions.md - Scan all
dashboard.jsonspecs:Get-ChildItem f:\ -Filter dashboard.json -Recurse - Read
f:\⊕Workspace\tools\dashboard_registry.py
Common Commands
C:\G\python.exe f:\⊕Workspace\tools\dashboard_registry.py # discover all
C:\G\python.exe f:\⊕Workspace\tools\dashboard_registry.py --validate # validate specs
C:\G\python.exe f:\⊕Workspace\tools\dashboard_registry.py --json # JSON manifest
C:\G\python.exe f:\⊕Workspace\tools\dashboard_portal.py --regen --no-open # regen portal
Dashboard Spec Format (dashboard.json)
Required fields: id, title, type (static_html | flask_app | console), generator, category.
Optional: output (required for static_html), cli, url (required for flask_app), icon, description.
Workflows
Adding a dashboard: create generator → add to dashboard.json → --validate → --regen
Registering a new project: create dashboard.json at project root (auto-discovered via AGENT_STARTUP.md) → --regen
Portal Left Nav (MANDATORY)
Left sidebar = high-level navigation only. Do NOT add every feature page. Embed sub-pages as tab-nav pills inside their parent dashboard. Only top-level standalone dashboards belong in the sidebar. Ask Tyler before adding anything to portal left nav.
Constraints
- NEVER modify dashboard generators directly — delegate to project orchestrators
- ALWAYS validate specs after modification; ALWAYS regenerate portal after spec changes
- NEVER use
static_htmlfor dashboards with API calls or auto-refresh — useflask_app - ALWAYS add matching
tools/portal_servers.jsonentry for any newflask_appdashboard - Playwright validation:
tests/test_portal_playwright.py(auto-skips when server down)