Skip to content
Development
Skill

/uninstall

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

From plugin
yas
2467 skills3 agents1 hook

Claude Code

$ npx -y skills add tmck-code/yet-another-statusline --skill uninstall --agent claude-code

SKILL.md

uninstall.SKILL.md
name: uninstall
description: "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 behind."
allowed-tools: Read, Write, Bash
effort: low
model: haiku

<objective>

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.

</objective>

<workflow>

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.

</workflow>

Read more
@tmck-code
Ships withyas

🌈 Check out the official landing page here: YAS! Yet Another Statusline Most common form is displaying the first few rows, which include the loaded plugins & skills. Extra sections appear below them as needed

2467 skills3 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
246
Star history of tmck-code/yet-another-statusline on GitHub, a chart by star-history.com

Other skills on yas.

tmck-code-statusline

tmck-code-statusline

Edit the Claude Code statusline renderer safely. Use when touching claude/yas/**/*.py (the yas package),…

@tmck-code@tmck-codeInstall Skill
yas-demo-text

yas-demo-text

Convert `make demo/img` statusline snapshots into ANSI-stripped plain text for diffing and PR embedding. Use when comparing…

@tmck-code@tmck-codeInstall Skill
yas-pr-screenshots

yas-pr-screenshots

Generate before/after PNG screenshots for a YAS branch's rendering changes, push them to the yas-pr-screenshots repo, and hand…

@tmck-code@tmck-codeInstall Skill
yas-pr

yas-pr

Assemble a pull request that follows this repo's PR template, then open it as a draft. Use when the user wants to open, create,…

@tmck-code@tmck-codeInstall Skill
config

config

Reconfigure yet-another-statusline — re-runs the interactive install wizard (glyph mode, theme, labels, token soft-limit, and…

@tmck-code@tmck-codeInstall Skill
init

init

Wire yet-another-statusline into Claude Code — writes statusLine.command to settings.json in CLAUDE_CONFIG_DIR (default…

@tmck-code@tmck-codeInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc11d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about uninstall.

Which coding agents can use uninstall?
uninstall installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.