OPS > DASH — Interactive Command Center
Runtime Context
Before rendering, load available context:
- Preferences: Read
${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json owner— personalize the dashboard header greetingtimezone— display timestamps correctly in status indicators
- Daemon health: Read
${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json - If
action_neededis not null → show a warning banner at the top of the dashboard before the menu
CLI/API Reference
bin/ops-dash
| Command | Usage | Output | |---------|-------|--------| | ${CLAUDE_PLUGIN_ROOT}/bin/ops-dash | Render full pixel-art dashboard | Formatted ASCII dashboard | | ${CLAUDE_PLUGIN_ROOT}/bin/ops-dash 2>/dev/null \|\| echo "DASH_RENDER_FAILED" | Render with failure detection | Dashboard or DASH_RENDER_FAILED sentinel |
The bin script reads preferences.json and daemon-health.json internally. The skill reads these files separately to check for warnings before invoking the script.
Agent Teams support
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when loading dashboard data in parallel. This enables:
- Agents share context and can coordinate mid-flight
- You can steer priorities in real-time
- Agents report progress as they complete
Team setup (only when flag is enabled):
TeamCreate("dash-team")
Agent(team_name="dash-team", name="infra-loader", prompt="Gather ECS health, Vercel status, and CI pipeline state")
Agent(team_name="dash-team", name="comms-loader", prompt="Gather unread counts across all configured channels")
Agent(team_name="dash-team", name="projects-loader", prompt="Gather GSD phase, git status, and PRs for all projects")
Agent(team_name="dash-team", name="business-loader", prompt="Gather revenue, Linear sprint, and fire alerts")
If the flag is NOT set, use standard fire-and-forget subagents.
Render dashboard instantly
${CLAUDE_PLUGIN_ROOT}/bin/ops-dash 2>/dev/null || echo "DASH_RENDER_FAILED"
Your task
The dashboard has already rendered above via the shell script. Your job is to route user input to the right skill.
Present the dashboard output as-is (it's already formatted). Then immediately use AskUserQuestion:
Type a number (1-9, 0), letter (a-j), or describe what you need
Routing table
| Input | Route | Description | |-------|-------|-------------| | 1, go, morning, briefing | /ops:ops-go | Morning briefing | | 2, inbox, unread, messages | /ops:ops-inbox | Inbox zero | | 3, fires, incidents, down | /ops:ops-fires | Fire check | | 4, projects, portfolio | /ops:ops-projects | Project dashboard | | 5, next, priority, what | /ops:ops-next | What's next | | 6, revenue, costs, money | /ops:ops-revenue | Revenue & costs | | 7, linear, sprint, board | /ops:ops-linear | Linear sprint | | 8, deploy, ship | /ops:ops-deploy | Deploy status | | 9, triage, issues | /ops:ops-triage | Triage issues | | 0, speedup, clean, optimize | /ops:ops-speedup | System speedup | | a, yolo | /ops:ops-yolo | YOLO mode | | b, merge, prs | /ops:ops-merge | Auto-merge PRs | | c, setup, configure | /ops:setup | Setup wizard | | d, send, comms | /ops:ops-comms | Send message | | e, report, csuite | Read latest YOLO report | C-suite report | | f, settings, prefs, config | Settings sub-menu | Interactive config | | g, share | Share sub-menu | Share your setup | | h, faq, help, wiki, ? | FAQ sub-menu | Help & FAQ | | back, dash, home | Re-render dashboard | Return to dash |
C-suite report access (option e)
When user selects e:
- Find latest YOLO session:
ls -td /tmp/yolo-*/ 2>/dev/null | head -1 - If found, show a sub-menu:
Display the C-suite header, then use batched AskUserQuestion (max 4 options per call):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS > C-SUITE REPORTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AskUserQuestion call 1:
[CEO — Strategic analysis]
[CTO — Technical health]
[CFO — Financial analysis]
[More...]
AskUserQuestion call 2 (only if "More..."):
[COO — Operations review]
[All — Full Hard Truths report]
[Back to dashboard]
Read the selected file and display it. After display, offer [Back to dashboard].
- If no YOLO reports exist:
No C-suite reports yet. Run /ops:ops-yolo to generate one.
b) Back to dashboard
Settings sub-menu (option f)
When user selects f, read current preferences and present an interactive config editor.
PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
cat "$PREFS" 2>/dev/null || echo '{}'
cat "${CLAUDE_PLUGIN_ROOT}/scripts/registry.json" 2>/dev/null || echo '{}'
Display the full settings menu as text (for reference), then use batched AskUserQuestion calls (max 4 options each) to let the user pick a category:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS > SETTINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROFILE: Owner=[value] | TZ=[value] | Style=[value]
CHANNELS: Email=[✓/✗] | WA=[✓/✗] | Slack=[✓/✗] | Telegram=[✓/✗]
INTEGRATIONS: AWS=[value] | Sentry=[value] | Linear=[value]
PROJECTS: [N] registered
PLUGIN: v[version]
──────────────────────────────────────────────────────
Use AskUserQuestion (max 4 options):
What would you like to configure?
[Profile (name/timezone/style)]
[Channels (email/WA/slack/telegram)]
[Integrations & Projects]
[Back to dashboard]
On "Profile": use AskUserQuestion with [Owner name], [Timezone], [Briefing style], [Back]. On "Channels": use AskUserQuestion with the 4 channel names (fits in one call). On "Integrations & Projects": use AskUserQuestion with [AWS/Sentry/Linear], [View registry], [Add/remove project], [Update plugin / Re-run setup].
For each option, use AskUserQuestion to get the new value, then write to preferences.json or registry.json.
Writing preferences:
PREFS="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
# Read existing, merge update, write back
jq --arg key "owner" --arg val "$NEW_VALUE" '.[$key] = $val' "$PREFS" > "${PREFS}.tmp" && mv "${PREFS}.tmp" "$PREFS"
After each change, confirm success and return to the settings menu. User can keep making changes or press b to go back.
Share sub-menu (option g)
When user selects g, generate a shareable summary of their ops setup:
Display the share header, then use batched AskUserQuestion (max 4 options per call):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS > SHARE YOUR SETUP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AskUserQuestion call 1:
[Share on X (Twitter)]
[Share via Slack]
[Share via Email]
[More...]
AskUserQuestion call 2 (only if "More..."):
[Copy to clipboard]
[Export setup guide (markdown)]
[Back to dashboard]
Share content generation
Generate a share-ready message. Never include secrets, tokens, or private project names. Only share:
- Plugin version
- Number of integrations configured
- Number of projects managed
- OS and system info
- Feature highlights used
Template:
I'm running my business from Claude Code with claude-ops v0.3.1
Setup: [N] projects | [N] channels | [OS]
Features: Morning briefing, inbox zero, fire alerts, C-suite AI analysis, system optimizer
Try it: /plugin marketplace add ops-marketplace
#ClaudeCode #DevOps #AI
Share actions
| Option | Action | |--------|--------| | X/Twitter | Copy text to clipboard + open https://twitter.com/intent/tweet?text=... via open (macOS) or xdg-open (Linux) | | Slack | Send via `/ops:ops-comms slack