/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 &
Claude Code
$ npx -y skills add Bangs00/claude-media-control --skill statusline --agent claude-code
Codex
$ npx skills add Bangs00/claude-media-control --skill statusline -a codex -y
Cursor
$ npx skills add Bangs00/claude-media-control --skill statusline -a cursor -y
Gemini CLI
$ npx skills add Bangs00/claude-media-control --skill statusline -a gemini-cli -y
GitHub Copilot
$ npx skills add Bangs00/claude-media-control --skill statusline -a github-copilot -y
OpenCode
$ npx skills add Bangs00/claude-media-control --skill statusline -a opencode -y
Windsurf
$ npx skills add Bangs00/claude-media-control --skill statusline -a windsurf -y
SKILL.md
statusline.SKILL.mdname: 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
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
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
More skills from other plugins.
browser-use
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…
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.

