Mission Control Dashboard Runbook
Runbook: Mission Control Dashboard
Service Type: Task Management Web UI Runtime: Node.js (Express) Port: 3030 (internal + LAN accessible) Internal URL: http://localhost:3030 LAN URL: http://192.168.68.61:3030 (mobile-friendly) Database: SQLite (~/system/databases/mission-control.db) LaunchAgent: com.john.mc-dashboard Source: ~/system/tools/mc-dashboard.js
Service Info
Mission Control Dashboard is the web UI for task management. Provides CRUD operations, priority management, status tracking, and team coordination.
Features:
- Task list with filters (open/closed, owner, priority)
- Create/edit/delete tasks
- Start/pause/resume tasks
- Priority management (H/M/L)
- Owner assignment (john/edita/—)
- Real-time status updates
- Mobile-responsive design
- Auto-refresh every 30 seconds
CLI Alternative:
node ~/system/tools/mc.js list|add|start|done|pause|resume|block
Status Check
LaunchAgent Status
launchctl list | grep mc-dashboard
Expected output: PID shown (e.g., 12345 0 com.john.mc-dashboard)
If not running: - 0 com.john.mc-dashboard (no PID)
HTTP Check
curl -I http://localhost:3030
Expected: 200 OK
LAN Access Check (from another device)
curl -I http://192.168.68.61:3030
Expected: 200 OK
Database Check
sqlite3 ~/system/databases/mission-control.db "SELECT count(*) FROM tasks WHERE status = 'open';"
Restart Procedure
Stop Service
launchctl unload ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Start Service
launchctl load ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Restart (Stop + Start)
launchctl unload ~/Library/LaunchAgents/com.john.mc-dashboard.plist
launchctl load ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Note: LaunchAgent auto-restarts on crash (KeepAlive=true).
View Logs
stdout (General logs)
tail -f ~/system/logs/mc-dashboard.log
stderr (Error logs)
tail -f ~/system/logs/mc-dashboard.err
Recent errors
tail -50 ~/system/logs/mc-dashboard.err
Troubleshooting
Problem: Dashboard won't start
Check LaunchAgent:
launchctl list | grep mc-dashboard
Check error log:
tail -50 ~/system/logs/mc-dashboard.err
Common causes:
- Port 3030 already bound - check
lsof -i :3030 - Database locked - check for stale processes using SQLite
- Node.js not found - check
which node - Permission issues - check file ownership
Fix:
# Kill any process on port 3030
lsof -ti :3030 | xargs kill -9
# Restart
launchctl unload ~/Library/LaunchAgents/com.john.mc-dashboard.plist
launchctl load ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Problem: Can't connect from mobile (LAN)
Check service is listening on all interfaces:
lsof -i :3030
Expected: *:3030 (listening on all IPs, not just 127.0.0.1)
Check firewall:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
If firewall is on, allow Node.js:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /opt/homebrew/bin/node
Check Mac IP:
ipconfig getifaddr en0 # WiFi
ipconfig getifaddr en1 # Ethernet
Expected: 192.168.68.61 (or similar)
Problem: Tasks not updating (stale data)
Check database integrity:
sqlite3 ~/system/databases/mission-control.db "PRAGMA integrity_check;"
Expected: ok
Check last write:
ls -lh ~/system/databases/mission-control.db
Restart dashboard:
launchctl unload ~/Library/LaunchAgents/com.john.mc-dashboard.plist
launchctl load ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Problem: 500 errors in UI
Check server logs:
tail -f ~/system/logs/mc-dashboard.log ~/system/logs/mc-dashboard.err
Check database:
sqlite3 ~/system/databases/mission-control.db "SELECT * FROM tasks LIMIT 1;"
Common causes:
- Database schema mismatch - migrate database
- Corrupted task data - fix in SQLite
- Node.js error - check stack trace in error log
CLI Integration
Mission Control has two interfaces:
- Dashboard (UI) - http://localhost:3030
- CLI - node ~/system/tools/mc.js
Both read/write the same SQLite database: ~/system/databases/mission-control.db
CLI Commands
# List tasks
node ~/system/tools/mc.js list
node ~/system/tools/mc.js list --owner john
# Start task (creates /tmp/mc-active-task)
node ~/system/tools/mc.js start <id>
# Complete task
node ~/system/tools/mc.js done <id> "outcome summary"
# Pause task (removes /tmp/mc-active-task)
node ~/system/tools/mc.js pause <id>
# Block task
node ~/system/tools/mc.js block <id> "blocker reason"
# Show full details
node ~/system/tools/mc.js show <id>
# Who's working on what
node ~/system/tools/mc.js active
Dependencies
- Node.js - Runtime (/opt/homebrew/bin/node)
- SQLite3 - Database (built-in with Node.js)
- LaunchAgent - Auto-start on login
- No external services - Fully local
Backup
Database Backup
cp ~/system/databases/mission-control.db ~/backups/mission-control-$(date +%Y%m%d-%H%M%S).db
Automated Backup (daily)
Add to crontab or LaunchAgent:
0 2 * * * cp ~/system/databases/mission-control.db ~/backups/mission-control-$(date +\%Y\%m\%d).db
Restore from Backup
# Stop dashboard
launchctl unload ~/Library/LaunchAgents/com.john.mc-dashboard.plist
# Restore database
cp ~/backups/mission-control-YYYYMMDD-HHMMSS.db ~/system/databases/mission-control.db
# Start dashboard
launchctl load ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Configuration
LaunchAgent Plist
Path: ~/Library/LaunchAgents/com.john.mc-dashboard.plist
Key settings:
KeepAlive: true- Auto-restart on crashRunAtLoad: true- Start on loginStandardOutPath- Log stdoutStandardErrorPath- Log stderrEnvironmentVariables: HOME- User home directory
Application Config
Port: 3030 (hardcoded in mc-dashboard.js) Database: ~/system/databases/mission-control.db (hardcoded) Auto-refresh: 30 seconds (client-side)
To change port:
- Edit ~/system/tools/mc-dashboard.js
- Change
const PORT = 3030;to desired port - Restart LaunchAgent
Related Services
Mission Control Session Worker
LaunchAgent: com.john.mc-session-worker Purpose: Background daemon for session-level task monitoring
Status check:
launchctl list | grep mc-session-worker
Notes
- Access: LAN-accessible (no auth) - consider adding auth for remote access
- Mobile-friendly: Responsive design, touch-optimized
- No auth: Anyone on LAN can create/modify tasks - secure network required
- Auto-refresh: Dashboard auto-refreshes every 30s
- Active task enforcement: ~/system/.claude/hooks/gotcha-enforcer.py checks /tmp/mc-active-task before Write/Edit
- CLI vs UI: Both interfaces are equal - use whichever is convenient
Last updated: 2026-02-10 Maintained by: John (AI Director)
No comments to display
No comments to display