uninstall

SkillAI & models

Removes the yet-another-statusline configuration from Claude Code settings.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the uninstall skill

About this skill

Unwire yet-another-statusline from Claude Code, removes statusLine.command from settings.json in CLAUDE_CONFIG_DIR (default ~/.claude/) and deletes the renderer's runtime state. Run before (or after) `claude plugin uninstall yas`, which only deletes the plugin cache and leaves the statusLine config

What this skill tells your AI

The instructions your AI receives, as published by tmck-code/yet-another-statusline in skills/uninstall/SKILL.md and read by ahel’s review.

Reverse /yas:init. Remove the statusLine block from settings.json in $CLAUDE_CONFIG_DIR (default ~/.claude/), only when it points at this plugin's renderer, and delete the runtime logs and per-session payloads the renderer wrote.

claude plugin uninstall yas@yet-another-statusline only deletes the plugin cache — Claude Code keeps reading statusLine.command from settings.json and tries to run the now-missing script. This skill clears that config so the statusline actually stops.

Leaves untouched: a custom (non-yas) statusLine, the settings.json.bak-yas-* backups, the user's yas.toml config file, and any make install dev symlinks.

Step 0: Resolve config dir

CONFIG_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
SETTINGS="$CONFIG_DIR/settings.json"
printf "  Config dir: %s\n" "$CONFIG_DIR"

Step 1: Inspect the current statusLine

if [ ! -f "$SETTINGS" ]; then
    printf "  No settings.json — nothing to unwire.\n"
    CFG_STATE="absent"
else
    CMD=$(jq -r '.statusLine.command // ""' "$SETTINGS" 2>/dev/null)  # timeout: 5000
    if [ -z "$CMD" ]; then
        printf "  No statusLine configured — nothing to remove.\n"
        CFG_STATE="none"
    elif printf '%s' "$CMD" | grep -q "statusline_command.py"; then
        printf "  Found yas statusLine: %s\n" "$CMD"
        CFG_STATE="yas"
    else
        printf "! statusLine points elsewhere — not a yas command:\n    %s\n  Leaving it untouched.\n" "$CMD"
        CFG_STATE="foreign"
    fi
fi

statusline_command.py is the signature of this project's renderer (used by both the plugin-cache path and the dev checkout path from the README). If CFG_STATE is anything other than yas, skip Step 2 — do not edit statusLine.

Step 2: Back up, then remove the statusLine block

Only when CFG_STATE is yas:

BAK_TS=$(date -u +%Y%m%dT%H%M%SZ)
cp "$SETTINGS" "$SETTINGS.bak-yas-${BAK_TS}"  # timeout: 5000
printf "  Backed up → settings.json.bak-yas-%s\n" "$BAK_TS"

_result=$(jq 'del(.statusLine)' "$SETTINGS")  # timeout: 5000
[ $? -eq 0 ] && [ -n "$_result" ] || { printf "! jq failed — settings.json unchanged\n"; exit 1; }

_tmp=$(mktemp "$SETTINGS.XXXXXXXXXX")
printf '%s\n' "$_result" > "$_tmp" \
    || { rm -f "$_tmp"; printf "! write failed — settings.json unchanged\n"; exit 1; }
mv "$_tmp" "$SETTINGS"  # timeout: 3000

if jq empty "$SETTINGS" 2>/dev/null; then  # timeout: 5000
    printf "  Removed statusLine from settings.json\n"
else
    cp "$SETTINGS.bak-yas-${BAK_TS}" "$SETTINGS"
    printf "! Result was invalid JSON — restored from backup\n"
    exit 1
fi

Step 3: Delete runtime state

The renderer writes these as it runs. Safe to remove; they regenerate if the statusline is ever reinstalled. yas.toml is deliberately preserved — it is the user's own configuration, not YAS-generated state.

# Consolidated state tree (current versions)
if [ -d "$CONFIG_DIR/yas" ]; then
    rm -rf "$CONFIG_DIR/yas" && printf "  Removed yas/\n"
fi

# Legacy flat paths (older versions, pre-migration)
for f in statusline-tokens.log statusline-token-rate.log statusline-render.log \
         statusline-theme terminal-width yas-last-prompt.json yas.toml.cache; do
    if [ -e "$CONFIG_DIR/$f" ]; then
        rm -f "$CONFIG_DIR/$f" && printf "  Removed legacy %s\n" "$f"
    fi
done

if [ -d "$CONFIG_DIR/statusline-output" ]; then
    rm -rf "$CONFIG_DIR/statusline-output" && printf "  Removed legacy statusline-output/\n"
fi

# Legacy: older versions wrote per-session info files here
for f in "$CONFIG_DIR"/statusline-info-*; do
    [ -e "$f" ] || continue
    rm -f "$f" && printf "  Removed legacy %s\n" "$(basename "$f")"
done

(Use the resolved $CONFIG_DIR — not a hardcoded ~/.claude.)

Step 4: Report

Count, but do not delete, the init/uninstall backups:

N_BAK=$(ls -1 "$CONFIG_DIR"/settings.json.bak-yas-* 2>/dev/null | wc -l | tr -d ' ')
[ "$N_BAK" -gt 0 ] && printf "  Kept %s settings.json.bak-yas-* backup(s) in %s\n" "$N_BAK" "$CONFIG_DIR"

Then print a summary:

  Done. statusLine config and runtime state removed.

  Still installed (this skill does not remove these):
    • the plugin itself — run:  claude plugin uninstall yas@yet-another-statusline
    • your config — yas.toml
    • backups — settings.json.bak-yas-*  (delete by hand if you want)

  Reload Claude Code to clear the statusline.

If CFG_STATE was foreign, remind the user their custom statusLine was kept on purpose.

Signals

GitHub stars
242
Forks
24
Last commit
Sep 2026
Advanced
Item type
skill
Key
uninstall
Source
github.com/tmck-code/yet-another-statusline