How this command is triggered — by the user, by Claude, or both
Slash command
/claude-hud:setupThis command is limited to the following tools:
The summary Claude sees in its command listing — used to decide when to auto-load this command
**Note**: Placeholders like `{RUNTIME_PATH}`, `{SOURCE}`, and `{GENERATED_COMMAND}` should be substituted with actual detected values.
## Step 0: Detect Ghost Installation (Run First)
Check for inconsistent plugin state that can occur after failed installations:
**macOS/Linux**:
**Windows (PowerShell)**:
### Interpreting Results
| Cache | Registry | Meaning | Action |
|-------|----------|---------|--------|
| YES | YES | Normal install (may still be broken) | Continue to Step 1 |
| YES | NO | Ghost install - cache orphaned | Clean up cache |
| NO | YES | Ghost install - registry sta...Note: Placeholders like {RUNTIME_PATH}, {SOURCE}, and {GENERATED_COMMAND} should be substituted with actual detected values.
Check for inconsistent plugin state that can occur after failed installations:
macOS/Linux:
# Check 1: Cache exists?
CACHE_EXISTS=$(ls -d ~/.claude/plugins/cache/claude-hud 2>/dev/null && echo "YES" || echo "NO")
# Check 2: Registry entry exists?
REGISTRY_EXISTS=$(grep -q "claude-hud" ~/.claude/plugins/installed_plugins.json 2>/dev/null && echo "YES" || echo "NO")
# Check 3: Temp files left behind?
TEMP_FILES=$(ls -d ~/.claude/plugins/cache/temp_local_* 2>/dev/null | head -1)
echo "Cache: $CACHE_EXISTS | Registry: $REGISTRY_EXISTS | Temp: ${TEMP_FILES:-none}"
Windows (PowerShell):
$cache = Test-Path "$env:USERPROFILE\.claude\plugins\cache\claude-hud"
$registry = (Get-Content "$env:USERPROFILE\.claude\plugins\installed_plugins.json" -ErrorAction SilentlyContinue) -match "claude-hud"
$temp = Get-ChildItem "$env:USERPROFILE\.claude\plugins\cache\temp_local_*" -ErrorAction SilentlyContinue
Write-Host "Cache: $cache | Registry: $registry | Temp: $($temp.Count) files"
| Cache | Registry | Meaning | Action |
|---|---|---|---|
| YES | YES | Normal install (may still be broken) | Continue to Step 1 |
| YES | NO | Ghost install - cache orphaned | Clean up cache |
| NO | YES | Ghost install - registry stale | Clean up registry |
| NO | NO | Not installed | Continue to Step 1 |
If temp files exist, a previous install was interrupted. Clean them up.
If ghost installation detected, ask user if they want to reset. If yes:
macOS/Linux:
# Remove orphaned cache
rm -rf ~/.claude/plugins/cache/claude-hud
# Remove temp files from failed installs
rm -rf ~/.claude/plugins/cache/temp_local_*
# Reset registry (removes ALL plugins - warn user first!)
# Only run if user confirms they have no other plugins they want to keep:
echo '{"version": 2, "plugins": {}}' > ~/.claude/plugins/installed_plugins.json
Windows (PowerShell):
# Remove orphaned cache
Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\plugins\cache\claude-hud" -ErrorAction SilentlyContinue
# Remove temp files
Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\plugins\cache\temp_local_*" -ErrorAction SilentlyContinue
# Reset registry (removes ALL plugins - warn user first!)
'{"version": 2, "plugins": {}}' | Set-Content "$env:USERPROFILE\.claude\plugins\installed_plugins.json"
After cleanup, tell user to restart Claude Code and run /plugin install claude-hud again.
On Linux only, if install keeps failing, check for EXDEV issue:
[ "$(df --output=source ~ /tmp 2>/dev/null | tail -2 | uniq | wc -l)" = "2" ] && echo "CROSS_DEVICE"
If this outputs CROSS_DEVICE, /tmp and home are on different filesystems. This causes EXDEV: cross-device link not permitted during installation. Workaround:
mkdir -p ~/.cache/tmp && TMPDIR=~/.cache/tmp claude /plugin install claude-hud
This is a Claude Code platform limitation.
IMPORTANT: Use the environment context values (Platform: and Shell:), not uname -s or ad-hoc checks. The Bash tool may report MINGW/MSYS on Windows, so branch only by the context values.
| Platform | Shell | Command Format |
|---|---|---|
darwin | any | bash (macOS instructions) |
linux | any | bash (Linux instructions) |
win32 | bash (Git Bash, MSYS2) | bash (use macOS/Linux instructions) |
win32 | powershell, pwsh, or cmd | PowerShell (use Windows instructions) |
macOS/Linux (Platform: darwin or linux):
Get plugin path:
ls -td ~/.claude/plugins/cache/claude-hud/claude-hud/*/ 2>/dev/null | head -1
If empty, the plugin is not installed. Go back to Step 0 to check for ghost installation or EXDEV issues. If Step 0 was clean, tell user to install via /plugin install claude-hud first.
Get runtime absolute path (prefer bun for performance, fallback to node):
command -v bun 2>/dev/null || command -v node 2>/dev/null
If empty, stop and tell user to install Node.js or Bun.
Verify the runtime exists:
ls -la {RUNTIME_PATH}
If it doesn't exist, re-detect or ask user to verify their installation.
Determine source file based on runtime:
basename {RUNTIME_PATH}
If result is "bun", use src/index.ts (bun has native TypeScript support). Otherwise use dist/index.js (pre-compiled).
Generate command (quotes around runtime path handle spaces):
bash -c '"{RUNTIME_PATH}" "$(ls -td ~/.claude/plugins/cache/claude-hud/claude-hud/*/ 2>/dev/null | head -1){SOURCE}"'
Windows (Platform: win32):
Choose instructions by Shell: value before running any commands:
Shell: bash -> use the macOS/Linux section above (same command format).Shell: powershell, pwsh, or cmd -> use the Windows PowerShell section below.Get plugin path:
(Get-ChildItem "$env:USERPROFILE\.claude\plugins\cache\claude-hud\claude-hud" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
If empty or errors, the plugin is not installed. Tell user to install via marketplace first.
Get runtime absolute path (prefer bun, fallback to node):
if (Get-Command bun -ErrorAction SilentlyContinue) { (Get-Command bun).Source } elseif (Get-Command node -ErrorAction SilentlyContinue) { (Get-Command node).Source } else { Write-Error "Neither bun nor node found" }
If neither found, stop and tell user to install Node.js or Bun.
Check if runtime is bun (by filename). If bun, use src\index.ts. Otherwise use dist\index.js.
Generate command (note: quotes around runtime path handle spaces in paths):
powershell -Command "& {$p=(Get-ChildItem $env:USERPROFILE\.claude\plugins\cache\claude-hud\claude-hud | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName; & '{RUNTIME_PATH}' (Join-Path $p '{SOURCE}')}"
WSL (Windows Subsystem for Linux): If running in WSL, use the macOS/Linux instructions. Ensure the plugin is installed in the Linux environment (~/.claude/plugins/...), not the Windows side.
Run the generated command. It should produce output (the HUD lines) within a few seconds.
Read the settings file and merge in the statusLine config, preserving all existing settings:
darwin or linux, or Platform win32 + Shell bash: ~/.claude/settings.jsonwin32 + Shell powershell, pwsh, or cmd: $env:USERPROFILE\.claude\settings.jsonIf the file doesn't exist, create it. If it contains invalid JSON, report the error and do not overwrite.
If a write fails with File has been unexpectedly modified, re-read the file and retry the merge once.
{
"statusLine": {
"type": "command",
"command": "{GENERATED_COMMAND}"
}
}
Note: The generated command dynamically finds and runs the latest installed plugin version. Updates are automatic - no need to re-run setup after plugin updates. If the HUD suddenly stops working, re-run /claude-hud:setup to verify the plugin is still installed.
After the statusLine is applied, ask the user if they'd like to enable additional HUD features beyond the default 2-line display.
Use AskUserQuestion:
If user selects any options, write ~/.claude/plugins/claude-hud/config.json (create directories if needed):
| Selection | Config keys |
|---|---|
| Tools activity | display.showTools: true |
| Agents & Todos | display.showAgents: true, display.showTodos: true |
| Session info | display.showDuration: true, display.showConfigCounts: true |
| Session name | display.showSessionName: true |
Merge with existing config if the file already exists. Only write keys the user selected — don't write false for unselected items (defaults handle that).
If user selects nothing (or picks "Other" and says skip/none), do not create a config file. The defaults are fine.
Use AskUserQuestion:
If yes: Ask the user if they'd like to ⭐ star the claude-hud repository on GitHub to support the project. If they agree and gh CLI is available, run: gh api -X PUT /user/starred/jarrodwatts/claude-hud. Only run the star command if they explicitly say yes.
If no: Debug systematically:
Verify config was applied:
~/.claude/settings.json or $env:USERPROFILE\.claude\settings.json on Windows)ls -td lookup), it may be a stale config from a previous setupTest the command manually and capture error output:
{GENERATED_COMMAND} 2>&1
Common issues to check:
"command not found" or empty output:
ls -la {RUNTIME_PATH}command -v node often returns a symlink that can break after version updatescommand -v bun or command -v node, and verify with realpath {RUNTIME_PATH} (or readlink -f {RUNTIME_PATH}) to get the true absolute path"No such file or directory" for plugin:
ls ~/.claude/plugins/cache/claude-hud/Windows shell mismatch (for example, "bash not recognized"):
Platform: + Shell:Windows: PowerShell execution policy error:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedPermission denied:
chmod +x {RUNTIME_PATH}WSL confusion:
ls ~/.claude/plugins/cache/claude-hud/If still stuck: Show the user the exact command that was generated and the error, so they can report it or debug further
3plugins reuse this command
First indexed Jul 11, 2026
npx claudepluginhub ryan-mt/claude-hud/setupInitializes or resumes Conductor project setup by creating foundational documentation (product definition, tech stack, workflow, style guides) through interactive Q&A.
/setupChecks whether the local Codex CLI is ready and optionally toggles the stop-time review gate. If Codex is not installed, prompts the user to install it via npm.
/setupGuides enterprise admins through configuring Claude Office add-in to use their own cloud backend (Vertex AI, Bedrock, Azure AI Foundry, or custom gateway), handles admin consent, and generates deployable M365 manifest(s).
/setupDetects and cleans up ghost installations of the claude-hud plugin in Claude Code, checking cache, registry, and temp files across macOS/Linux and Windows.
/setupInteractive setup wizard that detects installed AI providers, configures auth, and optimizes token usage for the Octopus ecosystem. Runs on first install or manual invocation.