hud

📁 yeachan-heo/oh-my-claudecode 📅 Jan 22, 2026
38
总安装量
38
周安装量
#5426
全站排名
安装命令
npx skills add https://github.com/yeachan-heo/oh-my-claudecode --skill hud

Agent 安装分布

claude-code 36
opencode 29
gemini-cli 24
codex 24
cursor 24
antigravity 23

Skill 文档

HUD Skill

Configure the OMC HUD (Heads-Up Display) for the statusline.

Note: All ~/.claude/... paths in this guide respect CLAUDE_CONFIG_DIR when that environment variable is set.

Quick Commands

Command Description
/oh-my-claudecode:hud Show current HUD status (auto-setup if needed)
/oh-my-claudecode:hud setup Install/repair HUD statusline
/oh-my-claudecode:hud minimal Switch to minimal display
/oh-my-claudecode:hud focused Switch to focused display (default)
/oh-my-claudecode:hud full Switch to full display
/oh-my-claudecode:hud status Show detailed HUD status

Auto-Setup

When you run /oh-my-claudecode:hud or /oh-my-claudecode:hud setup, the system will automatically:

  1. Check if ~/.claude/hud/omc-hud.mjs exists
  2. Check if statusLine is configured in ~/.claude/settings.json
  3. If missing, create the HUD wrapper script and configure settings
  4. Report status and prompt to restart Claude Code if changes were made

IMPORTANT: If the argument is setup OR if the HUD script doesn’t exist at ~/.claude/hud/omc-hud.mjs, you MUST create the HUD files directly using the instructions below.

Setup Instructions (Run These Commands)

Step 1: Check if setup is needed:

ls ~/.claude/hud/omc-hud.mjs 2>/dev/null && echo "EXISTS" || echo "MISSING"

Step 2: Verify the plugin is installed:

PLUGIN_VERSION=$(ls ~/.claude/plugins/cache/omc/oh-my-claudecode/ 2>/dev/null | sort -V | tail -1)
if [ -n "$PLUGIN_VERSION" ]; then
  ls ~/.claude/plugins/cache/omc/oh-my-claudecode/$PLUGIN_VERSION/dist/hud/index.js 2>/dev/null && echo "READY" || echo "NOT_FOUND - try reinstalling: /plugin install oh-my-claudecode"
else
  echo "Plugin not installed - run: /plugin install oh-my-claudecode"
fi

Step 3: If omc-hud.mjs is MISSING or argument is setup, create the HUD directory and script:

First, create the directory:

mkdir -p ~/.claude/hud

Then, use the Write tool to create ~/.claude/hud/omc-hud.mjs with this exact content:

#!/usr/bin/env node
/**
 * OMC HUD - Statusline Script
 * Wrapper that imports from plugin cache or development paths
 */

import { existsSync, readdirSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";
import { pathToFileURL } from "node:url";

// Semantic version comparison: returns negative if a < b, positive if a > b, 0 if equal
function semverCompare(a, b) {
  // Use parseInt to handle pre-release suffixes (e.g. "0-beta" -> 0)
  const pa = a.replace(/^v/, "").split(".").map(s => parseInt(s, 10) || 0);
  const pb = b.replace(/^v/, "").split(".").map(s => parseInt(s, 10) || 0);
  for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
    const na = pa[i] || 0;
    const nb = pb[i] || 0;
    if (na !== nb) return na - nb;
  }
  // If numeric parts equal, non-pre-release > pre-release
  const aHasPre = /-/.test(a);
  const bHasPre = /-/.test(b);
  if (aHasPre && !bHasPre) return -1;
  if (!aHasPre && bHasPre) return 1;
  return 0;
}

async function main() {
  const home = homedir();
  let pluginCacheDir = null;

  // 1. Try plugin cache first (marketplace: omc, plugin: oh-my-claudecode)
  const pluginCacheBase = join(home, ".claude/plugins/cache/omc/oh-my-claudecode");
  if (existsSync(pluginCacheBase)) {
    try {
      const versions = readdirSync(pluginCacheBase);
      if (versions.length > 0) {
        const latestVersion = versions.sort(semverCompare).reverse()[0];
        pluginCacheDir = join(pluginCacheBase, latestVersion);
        const pluginPath = join(pluginCacheDir, "dist/hud/index.js");
        if (existsSync(pluginPath)) {
          await import(pathToFileURL(pluginPath).href);
          return;
        }
      }
    } catch { /* continue */ }
  }

  // 2. Development paths
  const devPaths = [
    join(home, "Workspace/oh-my-claude-sisyphus/dist/hud/index.js"),
    join(home, "workspace/oh-my-claude-sisyphus/dist/hud/index.js"),
    join(home, "Workspace/oh-my-claudecode/dist/hud/index.js"),
    join(home, "workspace/oh-my-claudecode/dist/hud/index.js"),
  ];

  for (const devPath of devPaths) {
    if (existsSync(devPath)) {
      try {
        await import(pathToFileURL(devPath).href);
        return;
      } catch { /* continue */ }
    }
  }

  // 3. Fallback - HUD not found (provide actionable error message)
  if (pluginCacheDir) {
    console.log(`[OMC] HUD not built. Run: cd "${pluginCacheDir}" && npm install`);
  } else {
    console.log("[OMC] Plugin not found. Run: /oh-my-claudecode:omc-setup");
  }
}

main();

Step 3: Make it executable:

chmod +x ~/.claude/hud/omc-hud.mjs

Step 4: Update settings.json to use the HUD:

Read ~/.claude/settings.json, then update/add the statusLine field.

IMPORTANT: The command must use an absolute path, not ~, because Windows does not expand ~ in shell commands.

First, determine the correct path:

node -e "const p=require('path').join(require('os').homedir(),'.claude','hud','omc-hud.mjs');console.log(JSON.stringify(p))"

Then set the statusLine field using the resolved path. On Unix it will look like:

{
  "statusLine": {
    "type": "command",
    "command": "node /home/username/.claude/hud/omc-hud.mjs"
  }
}

On Windows it will look like:

{
  "statusLine": {
    "type": "command",
    "command": "node C:\\Users\\username\\.claude\\hud\\omc-hud.mjs"
  }
}

Use the Edit tool to add/update this field while preserving other settings.

Step 5: Clean up old HUD scripts (if any):

rm -f ~/.claude/hud/sisyphus-hud.mjs 2>/dev/null

Step 6: Tell the user to restart Claude Code for changes to take effect.

Display Presets

Minimal

Shows only the essentials:

[OMC] ralph | ultrawork | todos:2/5

Focused (Default)

Shows all relevant elements:

[OMC] ralph:3/10 | US-002 | ultrawork skill:planner | ctx:67% | agents:2 | bg:3/5 | todos:2/5

Full

Shows everything including multi-line agent details:

[OMC] ralph:3/10 | US-002 (2/5) | ultrawork | ctx:[████░░]67% | agents:3 | bg:3/5 | todos:2/5
├─ O architect    2m   analyzing architecture patterns...
├─ e explore     45s   searching for test files
└─ s executor     1m   implementing validation logic

Multi-Line Agent Display

When agents are running, the HUD shows detailed information on separate lines:

  • Tree characters (├─, └─) show visual hierarchy
  • Agent code (O, e, s) indicates agent type with model tier color
  • Duration shows how long each agent has been running
  • Description shows what each agent is doing (up to 45 chars)

Display Elements

Element Description
[OMC] Mode identifier
ralph:3/10 Ralph loop iteration/max
US-002 Current PRD story ID
ultrawork Active mode badge
skill:name Last activated skill (cyan)
ctx:67% Context window usage
agents:2 Running subagent count
bg:3/5 Background task slots
todos:2/5 Todo completion

Color Coding

  • Green: Normal/healthy
  • Yellow: Warning (context >70%, ralph >7)
  • Red: Critical (context >85%, ralph at max)

Configuration Location

HUD config is stored at: ~/.claude/.omc/hud-config.json

Manual Configuration

You can manually edit the config file. Each option can be set individually – any unset values will use defaults.

{
  "preset": "focused",
  "elements": {
    "omcLabel": true,
    "ralph": true,
    "prdStory": true,
    "activeSkills": true,
    "lastSkill": true,
    "contextBar": true,
    "agents": true,
    "backgroundTasks": true,
    "todos": true,
    "showCache": true,
    "showCost": true,
    "maxOutputLines": 4
  },
  "thresholds": {
    "contextWarning": 70,
    "contextCritical": 85,
    "ralphWarning": 7
  }
}

Troubleshooting

If the HUD is not showing:

  1. Run /oh-my-claudecode:hud setup to auto-install and configure
  2. Restart Claude Code after setup completes
  3. If still not working, run /oh-my-claudecode:doctor for full diagnostics

Manual verification:

  • HUD script: ~/.claude/hud/omc-hud.mjs
  • Settings: ~/.claude/settings.json should have statusLine configured

The HUD updates automatically every ~300ms during active sessions.