How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-status-pet:petThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage the Claude Status Pet desktop companion.
Manage the Claude Status Pet desktop companion.
The user will run /pet with an optional subcommand. Parse the arguments and execute accordingly:
/pet or /pet on — Launch the pet (session selection handled by the app UI)/pet init — First-time setup: download the binary and assets/pet update — Update binary, hooks, skill, and assets to the latest release/pet status — Show current config, active sessions, and installed character packs/pet uninstall — Uninstall the pet completely (stop processes, remove all data, uninstall plugin)/pet help — Show available commandsFirst time? Run
/pet initto download the binary. After that,/pet onto launch.
Closing the pet: Right-click the pet → Exit. There is no
/pet offcommand.Switching characters: Right-click the pet to open the character menu.
Custom characters: To create, install, or share custom character packs, read https://raw.githubusercontent.com/moeyui1/claude-status-pet/main/docs/CUSTOM-CHARACTERS.md
Detect the user's platform and use appropriate commands. On Windows use PowerShell, on macOS/Linux use bash. Do NOT use Node.js.
Key paths:
$env:USERPROFILE\.claude\pet-data\~/.claude/pet-data/Sub-paths:
bin/ — Pet binary (claude-status-pet*)status-*.json — Active session status filespet-*.lock — PID lock files (one per running pet window)config.json — User config (character)assets/ — DLC characters (mona, gopher, fluent-emoji, etc.)characters/ — User-installed custom packsSimply launch the pet binary. The binary has built-in PID lock detection, so duplicate windows are automatically prevented.
Claude Code provides
${CLAUDE_SESSION_ID}— use it to bind directly to the current session.
PowerShell:
$dir = "$env:USERPROFILE\.claude\pet-data"
$bin = Get-ChildItem "$dir\bin\claude-status-pet*.exe" -ErrorAction SilentlyContinue | Select-Object -First 1
if (-not $bin) { $bin = Get-ChildItem "$dir\bin\claude-status-pet*" | Select-Object -First 1 }
if (-not $bin) { Write-Host "Pet binary not found. Run /pet init first."; return }
Unblock-File $bin.FullName -ErrorAction SilentlyContinue
$sid = "${CLAUDE_SESSION_ID}"
$sf = "$dir\status-$sid.json"
$a = @("run","--status-file",$sf,"--session-id",$sid)
$assets = "$dir\assets"
if (Test-Path $assets) { $a += "--assets-dir"; $a += $assets }
Start-Process $bin.FullName -ArgumentList $a -WindowStyle Hidden
Write-Host "Pet launched"
bash:
DIR="$HOME/.claude/pet-data"
BIN=$(ls "$DIR/bin/claude-status-pet"* 2>/dev/null | head -1)
[ -z "$BIN" ] && echo "Pet binary not found. Run /pet init first." && exit 1
SID="${CLAUDE_SESSION_ID}"
SF="$DIR/status-$SID.json"
ARGS="run --status-file $SF --session-id $SID"
[ -d "$DIR/assets" ] && ARGS="$ARGS --assets-dir $DIR/assets"
nohup "$BIN" $ARGS >/dev/null 2>&1 &
echo "Pet launched"
Alias for /pet update. Run the same steps as /pet update below.
Update the pet to the latest release.
Important: Close all running pets before updating. After updating, inform the user to restart with
/pet on.
PowerShell:
$REPO = "moeyui1/claude-status-pet"
$BASE = "https://github.com/$REPO"
$dir = "$env:USERPROFILE\.claude\pet-data"
# 1. Close running pets
Get-Process | Where-Object { $_.ProcessName -like "claude-status-pet*" } | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }
Start-Sleep -Milliseconds 500
Write-Host "[1/2] Stopped running pets"
# 2. Download binary
$binDir = "$dir\bin"
New-Item -ItemType Directory -Path $binDir -Force | Out-Null
$asset = "claude-status-pet-windows-x64.exe"
Invoke-WebRequest -Uri "$BASE/releases/latest/download/$asset" -OutFile "$binDir\$asset"
Unblock-File "$binDir\$asset"
Copy-Item "$binDir\$asset" "$binDir\claude-status-pet" -Force
Write-Host "[2/2] Binary updated"
Write-Host "Update complete! Run /pet on to start. Assets will be downloaded automatically on launch."
bash:
REPO="moeyui1/claude-status-pet"
BASE="https://github.com/$REPO"
DIR="$HOME/.claude/pet-data"
# 1. Close running pets
pkill -f claude-status-pet 2>/dev/null; sleep 0.5
echo "[1/2] Stopped running pets"
# 2. Download binary
mkdir -p "$DIR/bin"
OS=$(uname -s); ARCH=$(uname -m)
case "$OS" in
Darwin) [ "$ARCH" = "arm64" ] && ASSET="claude-status-pet-macos-arm64" || ASSET="claude-status-pet-macos-x64" ;;
Linux) ASSET="claude-status-pet-linux-x64" ;;
MINGW*|MSYS*|CYGWIN*|*_NT-*) ASSET="claude-status-pet-windows-x64.exe" ;;
esac
curl -sLo "$DIR/bin/$ASSET" "$BASE/releases/latest/download/$ASSET"
chmod +x "$DIR/bin/$ASSET" 2>/dev/null || true
ln -sf "$DIR/bin/$ASSET" "$DIR/bin/claude-status-pet" 2>/dev/null || true
echo "[2/2] Binary updated"
echo "Update complete! Run /pet on to start. Assets will be downloaded automatically on launch."
Tell the user: "Update complete! Use /pet on to start the pet."
PowerShell:
$dir = "$env:USERPROFILE\.claude\pet-data"
if (Test-Path "$dir\config.json") { Write-Host "Config:"; Get-Content "$dir\config.json" }
$sessions = Get-ChildItem "$dir\status-*.json" -ErrorAction SilentlyContinue
Write-Host "Active sessions: $($sessions.Count)"
$sessions | ForEach-Object { Write-Host " $($_.Name)" }
foreach ($sub in @("assets","characters")) {
$d = "$dir\$sub"
if (-not (Test-Path $d)) { continue }
Get-ChildItem $d -Directory | Where-Object { Test-Path "$($_.FullName)\character.json" } | ForEach-Object {
$cfg = Get-Content "$($_.FullName)\character.json" | ConvertFrom-Json
$label = if ($sub -eq "assets") { "DLC" } else { "Custom" }
Write-Host "${label}: $($cfg.name) ($($_.Name))"
}
}
Always give a short confirmation after executing.
Important: Confirm with the user before proceeding. This is destructive and cannot be undone.
PowerShell:
# 1. Stop running pets
Get-Process | Where-Object { $_.ProcessName -like "claude-status-pet*" } | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }
Start-Sleep -Milliseconds 500
Write-Host "[1/3] Stopped running pets"
# 2. Remove pet-data (binary, scripts, assets, config, status files)
$dir = "$env:USERPROFILE\.claude\pet-data"
if (Test-Path $dir) { Remove-Item $dir -Recurse -Force; Write-Host "[2/3] Removed $dir" }
else { Write-Host "[2/3] $dir not found (skipped)" }
# 3. Remove skill
$skillDir = "$env:USERPROFILE\.claude\skills\pet"
if (Test-Path $skillDir) { Remove-Item $skillDir -Recurse -Force; Write-Host "[3/3] Removed skill" }
else { Write-Host "[3/3] No skill (skipped)" }
Write-Host "Uninstall complete."
bash:
# 1. Stop running pets
pkill -f claude-status-pet 2>/dev/null; sleep 0.5
echo "[1/3] Stopped running pets"
# 2. Remove pet-data
DIR="$HOME/.claude/pet-data"
if [ -d "$DIR" ]; then rm -rf "$DIR"; echo "[2/3] Removed $DIR"
else echo "[2/3] $DIR not found (skipped)"; fi
# 3. Remove skill
SKILL="$HOME/.claude/skills/pet"
if [ -d "$SKILL" ]; then rm -rf "$SKILL"; echo "[3/3] Removed skill"
else echo "[3/3] No skill (skipped)"; fi
echo "Uninstall complete."
After running, tell the user:
/plugin uninstall claude-status-pet"npx claudepluginhub moeyui1/claude-status-pet --plugin claude-status-petCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.