uninstall

SkillFiles & storage

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

Use uninstall in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add uninstall and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the uninstall skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

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

uninstallStart free
About this skill

Completely remove claude-ops plugin, all stored credentials, cached files, shell exports, and MCP registrations. Confirms each step before deletion.

What this skill tells your AI

The instructions your AI receives, as published by davepoon/buildwithclaude in plugins/claude-ops/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
4k
Forks
543
Last commit
Sep 2026
Advanced
Item type
skill
Key
uninstall
Source
github.com/davepoon/buildwithclaude