hud
Setup and manage Oh-My-Toong HUD for Claude Code statusLine
适合你,如果你经常使用 Claude Code 命令行工作
npx oh-my-skill add toongri/oh-my-toong-playground/hudcurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- toongri/oh-my-toong-playground/hudnpx oh-my-skill verify toongri/oh-my-toong-playground/hud怎么用
商店整理自技能原文 · 版本 731a80a · 表述以原文为准安装后,你可以通过 /hud setup 命令在状态栏显示 Oh-My-Toong HUD,通过 /hud restore 恢复之前的配置。
当你说出 "/hud setup" 或 "/hud restore" 命令时触发。
技能原文 SKILL.md
HUD Setup Skill
This skill configures the Oh-My-Toong HUD to display in Claude Code's status bar. Setup, restore, and backup all self-locate via ${CLAUDE_SKILL_DIR} substitution — no branch logic. The same skill source produces correct behavior whether deployed user-globally (~/.claude/skills/hud/) or project-locally (<project>/.claude/skills/hud/).
Usage
/hud setup # Install and configure HUD /hud restore # Restore previous statusLine configuration
Setup Process
When user runs /hud setup:
- Check dependencies
- Run
bun --versionto verify Bun is installed. - Run
jq --versionto verify jq is installed. - If either is unavailable, inform user and stop.
- Resolve self-located paths
``bash ! set -euo pipefail SETTINGS_FILE="${CLAUDE_SKILL_DIR}/../../settings.local.json" BACKUP_FILE="${CLAUDE_SKILL_DIR}/../../statusLine.backup.json" SCRIPT_PATH="${CLAUDE_SKILL_DIR}/scripts/index.ts" echo "SETTINGS_FILE=$SETTINGS_FILE" echo "BACKUP_FILE=$BACKUP_FILE" echo "SCRIPT_PATH=$SCRIPT_PATH" ``
- Verify hud script exists
- Confirm
$SCRIPT_PATH(which is${CLAUDE_SKILL_DIR}/scripts/index.ts) exists. - If missing, inform user to run
make syncfirst and stop.
- Backup existing statusLine config (first-time-only invariant)
``bash ! set -euo pipefail SETTINGS_FILE="${CLAUDE_SKILL_DIR}/../../settings.local.json" BACKUP_FILE="${CLAUDE_SKILL_DIR}/../../statusLine.backup.json"
if [ -e "$BACKUP_FILE" ]; then echo "backup exists — skipping (first-time-only invariant preserved)" echo "BACKUP_FILE=$BACKUP_FILE" exit 0 fi
SETTINGS_CONTENT="{}" if [ -f "$SETTINGS_FILE" ]; then SETTINGS_CONTENT="$(cat "$SETTINGS_FILE")" fi
if echo "$SETTINGS_CONTENT" | jq -e 'has("statusLine")' > /dev/null 2>&1; then echo "$SETTINGS_CONTENT" | jq '.statusLine' > "${BACKUP_FILE}.tmp" mv "${BACKUP_FILE}.tmp" "$BACKUP_FILE" echo "backed up existing statusLine to $BACKUP_FILE" else echo '{}' > "${BACKUP_FILE}.tmp" mv "${BACKUP_FILE}.tmp" "$BACKUP_FILE" echo "wrote sentinel {} to $BACKUP_FILE (no prior statusLine)" fi ``
The first-time-only invariant ensures the original user statusLine is preserved on first setup; subsequent setups must not overwrite the backup with hud's own value. The sentinel {} represents "no prior statusLine existed" so /hud restore knows to remove the key on restore.
- Update settings.local.json with hud statusLine (always executed — supports upgrades)
``bash ! set -euo pipefail SETTINGS_FILE="${CLAUDE_SKILL_DIR}/../../settings.local.json" SCRIPT_PATH="${CLAUDE_SKILL_DIR}/scripts/index.ts"
if [ ! -f "$SETTINGS_FILE" ]; then echo '{}' > "$SETTINGS_FILE" fi
jq --arg cmd "bun run $SCRIPT_PATH" \ '.statusLine = {"type":"command","command":$cmd}' \ "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
echo "Updated statusLine.command to: bun run $SCRIPT_PATH" ``
${CLAUDE_SKILL_DIR} is substituted by Claude Code at preprocessing time, so $SCRIPT_PATH resolves to an absolute path (e.g., /Users/toong/.claude/skills/hud/scripts/index.ts for user-global, or /Users/toong/repos/<project>/.claude/skills/hud/scripts/index.ts for project-local). The jq invocation preserves all other keys in settings.local.json — only .statusLine is updated.
- Inform user
- Display success message including the deployed statusLine.command value (so user can verify the absolute path).
- Instruct user to restart Claude Code.
Restore Process
When user runs /hud restore:
- Resolve self-located paths
``bash ! set -euo pipefail SETTINGS_FILE="${CLAUDE_SKILL_DIR}/../../settings.local.json" BACKUP_FILE="${CLAUDE_SKILL_DIR}/../../statusLine.backup.json" echo "SETTINGS_FILE=$SETTINGS_FILE" echo "BACKUP_FILE=$BACKUP_FILE" ``
- Check
${CLAUDE_SKILL_DIR}/../../statusLine.backup.jsonexists.
- Restore based on backup content
``bash ! set -euo pipefail SETTINGS_FILE="${CLAUDE_SKILL_DIR}/../../settings.local.json" BACKUP_FILE="${CLAUDE_SKILL_DIR}/../../statusLine.backup.json"
if [ ! -e "$BACKUP_FILE" ]; then echo "no backup found — nothing to restore" exit 0 fi
BACKUP_CONTENT="$(cat "$BACKUP_FILE")"
if [ ! -f "$SETTINGS_FILE" ]; then echo '{}' > "$SETTINGS_FILE" fi
if [ "$(echo "$BACKUP_CONTENT" | jq -c '.')" = "{}" ]; then jq 'del(.statusLine)' "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" echo "removed statusLine key (sentinel — pre-setup state restored)" else jq --argjson sl "$BACKUP_CONTENT" '.statusLine = $sl' "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" echo "restored statusLine from backup" fi
mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE" rm -f "$BACKUP_FILE" echo "removed backup file" ``
The sentinel {} distinguishes "no prior statusLine existed" (remove key) from "user had a custom statusLine" (restore object).
Display Format
After setup, the HUD shows:
[OMC] ultrawork | ctx:67% | agents:2 | bg:1 | todos:2/5 | skill:prometheus
Elements
| Element | Description | |---------|-------------| | [OMC] | Oh-My-Toong prefix (always shown) | | ultrawork | Ultrawork mode active | | ctx:N% | Context window usage (green <70%, yellow 70-85%, red >85%) | | agents:N | Running subagents count | | bg:N | Background tasks count | | todos:X/Y | Todo completion (green when done, yellow when pending) | | skill:name | Active skill name (truncated to 15 chars) |
Requirements
- Bun
- Claude Code with statusLine support
- macOS or Linux (Windows untested)