name: omh description: Generate oh-my-hi dashboard. Visual catalog and usage/token analysis of skills, agents, plugins, hooks, memory, MCP servers, rules, and principles. Triggered by "/omh", "harness status", "dashboard", etc. argument-hint: "[--data-only] [--enable-auto] [--disable-auto] [--status] [--update] [--help]"
oh-my-hi
Oh, so that's what Claude's been doing!
Generates a full harness insights dashboard and opens it in the browser.
Usage
/omh— Full build (parse data → build web-ui → start local HTTP server → open browser)/omh --data-only— Regenerate data files only (server continues serving updated files)/omh --enable-auto— Enable automatic rebuild on session end/omh --disable-auto— Disable automatic rebuild/omh --status— Check auto-refresh status/omh --update— Check and install latest version/omh --help— Show help
First Run Guide
If the console output after running the script shows auto-refresh not configured, ask the user:
Would you like to enable automatic dashboard data refresh on session end?
- If enabled, data is automatically refreshed at every session end, so the dashboard always shows the latest data.
- If disabled, you need to manually run
/omh --data-onlyor/omhto refresh data.
If the user chooses enable, run --enable-auto. If they choose disable, explain the manual refresh method.
Behavior
- Parses harness files from the Claude Code config directory
- Analyzes usage data (history.jsonl, transcript)
- Generates data files (
data-core.js,data-usage.js) andindex.html - Starts a local HTTP server (port 3939+) and opens browser
Architecture
- Local HTTP server:
scripts/serve.mjsservesoutput/over HTTP (port 8282, auto-detects next available); re-uses running instance on subsequent/omhcalls - --data-only: Regenerates data files only; server continues serving the updated files on next browser refresh
- Auto-refresh:
--enable-autoregisters a Stop hook — rebuilds data on every session end - Browser open: macOS
open, Windowsstart, Linuxxdg-open
Find and run the script (picks the latest version from cache, falls back to marketplaces):
PLUGINS_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/plugins"
# Pick the highest semver version from cache (sort -V handles semantic versioning)
SCRIPT=$(find "$PLUGINS_DIR/cache" -name "generate-dashboard.mjs" -path "*/scripts/generate-dashboard.mjs" 2>/dev/null \
| sort -V | tail -1)
# Fallback to marketplaces directory
if [ -z "$SCRIPT" ]; then
SCRIPT=$(find "$PLUGINS_DIR/marketplaces" -name "generate-dashboard.mjs" -path "*/scripts/generate-dashboard.mjs" -print -quit 2>/dev/null)
fi
if [ -z "$SCRIPT" ]; then
echo "oh-my-hi: ERROR — generate-dashboard.mjs not found. Try: /omh --update"
exit 1
fi
node "$SCRIPT" $ARGUMENTS