Skip to content
Automation
Skill

/statusline

Configure the now-playing statusline in one place — toggle items (volume, progress bar, time, output device), arrange which item sits on which line as a numeric pattern like 123/456, and style every part; bold/italic/color for the track title, artist, app, time, volume bar &

From plugin
media
416 skills1 hook

Claude Code

$ npx -y skills add Bangs00/claude-media-control --skill statusline --agent claude-code

SKILL.md

statusline.SKILL.md
name: statusline
description: Configure the now-playing statusline in one place — toggle items (volume, progress bar, time, output device), arrange which item sits on which line as a numeric pattern like 123/456, and style every part; bold/italic/color for the track title, artist, app, time, volume bar & percent, and output device name; playing/paused colors, bar characters, and bar length (cells) for the progress bar; the volume icon and bar shape; the output device icon; the value off hides any part. Use when the user wants to lay out, reorder, restyle, recolor, resize, hide, or redesign anything in the statusline — e.g. "make the title cyan", "title color #ff8800" (hex colors work), "hide the artist", "volume icon ♪", "bar style dots", "make the bar shorter", "reset the statusline styling".
argument-hint: [pattern like 123/456 | preset | style wish like "title bold cyan" | reset]
allowed-tools: Bash, AskUserQuestion

Requested arrangement or style (may be empty): $ARGUMENTS

Current items, in render order (`/` starts a new line):

!`"${CLAUDE_PLUGIN_ROOT}/scripts/media.sh" config statusline.fields`

Current settings — the style table below marks customized values `*custom` (see also `display.statusline`, `statusline.multiline`, `statusline.color`):

!`"${CLAUDE_PLUGIN_ROOT}/scripts/media.sh" config`

---

How arrangement works

`statusline.fields` is an **ordered** list — the segment renders the items in exactly the order they are saved. A `/` in the list starts a new line (explicit layout: each line shows exactly the items placed on it; `app` directly after `track` folds into it as `(App)`; a line with nothing to show disappears). Without `/`, items group automatically (`app` onto track, adjacent `progressbar`+`time`, `output`/`volume` onto a neighbor) and `statusline.multiline on` puts each group on its own line.

**Numeric patterns** — wherever an arrangement can be given ($ARGUMENTS, a typed reply, an "Other" answer): digits name the items, `/` starts a new line, digit order = display order, and digits left out are omitted:

| digit | item | looks like | | --- | --- | --- | | 1 | `track` | `▶︎ Karma Police — Radiohead` | | 2 | `app` | `(Spotify)` | | 3 | `volume` | `🔉 ▄ 45%` (🔇 when muted) | | 4 | `progressbar` | `━━━━━━────` | | 5 | `time` | `2:13/4:24` | | 6 | `output` | `🎧 AirPods Pro` (icon by device: 🔊 speakers · 🎧 Bluetooth/headphones · 📺 HDMI/DisplayPort · 📶 AirPlay) |

`123/456` → `track,app,volume,/,progressbar,time,output` (two lines); `45/126` → `progressbar,time,/,track,app,output`; `15` → `track,time`. Presets: **Standard** = `123456` one line, **Stacked** = `123/456` two lines (a "compact" wish maps to `15` by intent).

The style model

Every visible part has a `style.*` config key:

| key | part | default | | --- | --- | --- | | `style.track.title` | track title | `bold` | | `style.track.artist` | artist name | `italic` | | `style.app` | app name `(Spotify)` | `dim` | | `style.volume.icon` | volume icon glyph | `auto` (🔈/🔉/🔊 by level) | | `style.volume.style` | volume bar shape | `block` (▄ height bar) | | `style.volume.bar` | volume bar on/off | `on` (draws in the accent) | | `style.volume.percent` | volume percent `45%` | `dim` | | `style.progressbar.playing` | bar fill + ▶︎ accent while playing | `green` | | `style.progressbar.paused` | bar fill + ⏸ accent while paused | `yellow` | | `style.progressbar.style` | progress bar characters | `line` | | `style.progressbar.length` | progress bar width in cells (1–60) | `20` | | `style.progressbar.sprite` | `sprite` style: frames, cycling one per second | `● ○` | | `style.progressbar.trail` | `sprite` style: the walked track | `━` | | `style.progressbar.track` | `sprite` style: the track still ahead | `─` | | `style.time.elapsed` | elapsed time `2:13` | `bold` | | `style.time.total` | total-time tail `/4:24` | `dim` | | `style.output.icon` | output device icon | `auto` (by device kind) | | `style.output` | output device name | `dim` |

**Style spec** (the text parts): any of `bold`, `dim`, `italic`, `underline`, plus at most one color — `black red green yellow blue magenta cyan white`, `bright-<color>`, or an exact hex code like `#ff8800` (short `#f80` works too; stored as `#rrggbb`, rendered as 24-bit truecolor) — or `none` (no styling, alone), or **`off` (hide that part, alone)**. Hiding follows the part: title off drops the `—` separator, elapsed off drops the `/` before the total, and an item whose parts are all hidden disappears (with its line, when it sat alone on one).

**Bar characters** (`style.progressbar.style`): `line` `━━━━━━────` (default) · `blocks` `██████░░░░` · `smooth` `█████▋░░░░` (⅛-step partial boundary) · `rise` `█████▅░░░░` (⅛-step boundary rising bottom-up) · `fade` `█████▓░░░░` (⅓-step shade boundary) · `corner` `█████▙░░░░` (¼-step quadrant boundary) · `glide` `━━━━━╾────` (half-cell steps) · `stipple` `⣿⣿⣿⣿⣿⣶⣀⣀⣀⣀` (⅙-step braille boundary) · `tiles` `■■■■■◧□□□□` (half-filled square) · `dash` `━━━━━┅╌╌╌╌` (a heavy line over a dashed track; at the boundary the dashes thicken, multiply, and fuse into the line — `╍┅┉`, ¼ steps, ink only ever grows) · `knob` `━━━━━●────` (slider head) · `playhead` `─────╼╾───` (a one-cell thick head gliding along a thin track in half-cell steps — aligned it draws `━`, straddling it splits into `╼╾`; the elapsed side keeps the accent) · `braille` `⣿⣿⣿⣿⣿⣿⣀⣀⣀⣀` · `chevron` `▸▸▸▸▸▸▹▹▹▹` · `tape` `▰▰▰▰▰▰▱▱▱▱` · `cassette` `▮▮▮▮▮▮▯▯▯▯` · `retro` `======----` · `dots` `●●●●●●○○○○` — or any two characters meaning "filled + empty" (`"#-"` → `######----`). Audio visualizers span the whole bar (colors on: the accent/dim split marks progress; colors off: the unplayed tail dims in height, `notes` to `·` rests): `wave` `▅▂▂▆█▅▂▂▆█` (a length-adaptive sine swell) · `pulse` `▁▁█▁▁▄▁▁█▁` (an ECG trace) · `eq` `▅▂▃▄▆▅▄▅▅▇` (multi-frequency) · `notes` `♪··♫♪♫··♪♫` (a ♪♫ note density) · `spectrum` `▂▂▅▅▄▆▆▃▃▅` · `mirror` `▃█▄▁▇▇▁▄█▃` · `cava` `⢀⣦⣴⣆⣠⣦⣴⣀⣴⣤` · `ri

Read more
@bangs00
Ships withmedia

The current track, live in your Claude Code statusline — ticking every second, ⌘+clickable, styleable down to the bar characters: And whatever your Mac is playing — Spotify, Apple Music, a browser tab, VLC — you can control it from the chat too: "what song is

Stars on GitHub

Momentum

stars in total
4
Star history of Bangs00/claude-media-control on GitHub, a chart by star-history.com

Other skills on media.

verify

verify

How to verify media.sh changes end-to-end on a real Mac — isolated data dir, real native build, and a controllable fake…

@bangs00@bangs00Install Skill
artwork

artwork

Show the album artwork (cover art) of the currently playing track. Use when the user asks to see the album art, cover image, or…

@bangs00@bangs00Install Skill
config

config

Quick media settings — turn the now-playing statusline, the /media:now progress bar, or the playback history on/off, or reset the…

@bangs00@bangs00Install Skill
doctor

doctor

Diagnose the media plugin — native build, read/control paths, fallbacks, permissions — and suggest fixes. Use when media commands…

@bangs00@bangs00Install Skill
history

history

Show recently played tracks (a passive local playback log). Use when the user asks what played earlier, what song was on before,…

@bangs00@bangs00Install Skill
menu

menu

Interactive media remote — control playback via a selectable menu (toggle, next, previous, seek, volume, artwork). Use when the…

@bangs00@bangs00Install Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n10d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

browser-usetoday120k
@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about statusline.

Which coding agents can use statusline?
statusline 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.