skills/hud/SKILL.md
Setup and manage Oh-My-Toong HUD for Claude Code statusLine
npx skillsauth add toongri/oh-my-toong-playground hudInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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/).
/hud setup # Install and configure HUD
/hud restore # Restore previous statusLine configuration
When user runs /hud setup:
Check dependencies
bun --version to verify Bun is installed.jq --version to verify jq is installed.Resolve self-located paths
!`
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
$SCRIPT_PATH (which is ${CLAUDE_SKILL_DIR}/scripts/index.ts) exists.make sync first and stop.Backup existing statusLine config (first-time-only invariant)
!`
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)
!`
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
When user runs /hud restore:
Resolve self-located paths
!`
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.json exists.
Restore based on backup content
!`
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).
After setup, the HUD shows:
[OMC] ultrawork | ctx:67% | agents:2 | bg:1 | todos:2/5 | skill:prometheus
| 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) |
tools
Use when creating, refining, or managing requirement-stage PM tickets. Triggers include "요구사항 티켓 만들어", "티켓 정리", "이 요구사항 이슈로", "티켓 써줘", "requirement to ticket", "manage ticket", "file this requirement", "이슈로 만들어", "티켓 작성", "요구사항 이슈화".
development
Autonomous objective-pursuit orchestrator — wraps deep-interview/prometheus/sisyphus, then re-pursues the objective across plan/execute cycles until an objective-level argus completion gate confirms the verification surface is met.
tools
Use at the end of a work session to review the WHOLE session and record entities worth pinning. This is the manual, deliberate complete-sweep review — NOT an automated nudge. Triggers on "wrap up", "wrap-up", "session wrap", "end of session", "what should I pin".
documentation
Use when initializing the pins knowledge graph for the first time in a project. Guides the user through creating pins.yaml (the storage manifest). Triggers on "setup pins", "initialize pins", "create pins.yaml", "first-run pins".