/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
$ npx -y skills add tmck-code/yet-another-statusline --skill uninstall --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/uninstall
Context preview
The summary Claude sees to decide when to auto-load 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
SKILL.md
uninstall.SKILL.mdname: 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 `statusline-theme` / `terminal-width` config files, 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
fiStep 3: Delete runtime state
The renderer writes these as it runs. Safe to remove; they regenerate if the statusline is ever reinstalled.
for f in statusline-tokens.log statusline-token-rate.log; do
if [ -f "$CONFIG_DIR/$f" ]; then
rm -f "$CONFIG_DIR/$f" && printf " Removed %s\n" "$f"
fi
done
if [ -d "$CONFIG_DIR/statusline-output" ]; then
rm -rf "$CONFIG_DIR/statusline-output" && printf " Removed 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 theme/width prefs — statusline-theme, terminal-width
• 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
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 `statusline-theme` / `terminal-width` config files, 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
fiStep 3: Delete runtime state
The renderer writes these as it runs. Safe to remove; they regenerate if the statusline is ever reinstalled.
for f in statusline-tokens.log statusline-token-rate.log; do
if [ -f "$CONFIG_DIR/$f" ]; then
rm -f "$CONFIG_DIR/$f" && printf " Removed %s\n" "$f"
fi
done
if [ -d "$CONFIG_DIR/statusline-output" ]; then
rm -rf "$CONFIG_DIR/statusline-output" && printf " Removed 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 theme/width prefs — statusline-theme, terminal-width
• 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>
🌈 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
Other skills on yas.
- /tmck-code-statusline
Edit the Claude Code statusline renderer safely. Use when touching claude/yas/**/*.py (the yas package), claude/statusline_command.py (the entry shim), claude/mon.py, or related tests under test/. Covers the layered renderer (GradientEngine / BorderRenderer / Renderer), the
Open skill - /yas-demo-text
Convert `make demo/img` statusline snapshots into ANSI-stripped plain text for diffing and PR embedding. Use when comparing statusline renders before/after a change, producing a text representation of a demo scenario, or preparing before/after statusline output for a pull
Open skill - /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 back a markdown before/after table for the PR description. Use when the user wants real image screenshots (not ANSI-stripped text) attached to a YAS
Open skill - /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, submit, or raise a PR for the current branch.
Open skill - /config
Reconfigure yet-another-statusline — re-runs the interactive install wizard (glyph mode, theme, labels, token soft-limit, and Python version) against the already-installed plugin and re-wires settings.json, without re-registering the marketplace or reinstalling the plugin. Use
Open skill - /init
Wire yet-another-statusline into Claude Code — writes statusLine.command to settings.json in CLAUDE_CONFIG_DIR (default ~/.claude/). Run once after plugin install, and again after every upgrade to update the versioned path.
Open skill

