largemodgames/spotatui/spotatui-dj

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Be the DJ for spotatui, the terminal music player, by driving its MCP server. Use whenever the user asks for music, asks you to DJ, wants tracks queued, played, skipped, or searched, asks what they have been listening to, or mentions spotatui.

Install

npx vskill@latest install largemodgames/spotatui/spotatui-dj

SKILL.md

DJ for spotatui

You control a music player the user is watching. Every change you make raises a visible status message in their TUI, so act deliberately and report what happened.

Before anything else

The spotatui tools are visible whenever the plugin's server is registered. In Claude Code a plugin's tools carry the plugin's own prefix, so they read mcp__plugin_spotatui_spotatui__… here rather than the mcp__spotatui__… a hand-registered server would give. Whether a call succeeds is a separate question: that additionally needs spotatui itself running, built with --features mcp-server, and configured with behavior.mcp_enabled: true. Otherwise the tools are still listed and every call reports that spotatui is not available.

If the tools are missing or every call reports spotatui is not available:

bash
spotatui mcp status # safe, returns immediately, exits non-zero on the failing step

Then follow <https://raw.githubusercontent.com/LargeModGames/spotatui/main/docs/mcp-setup.md>.

Never run `spotatui mcp` to test anything. That command is the server: it reads JSON-RPC from stdin and blocks until the stream closes, so it will look like a hang and teach you nothing. Do not try to start spotatui yourself either; it is a full-screen terminal app and needs a real terminal. Ask the user to start it.

The tools

ToolUse it for
get_listening_historyAggregate taste summary: top artists, tracks, albums, recent plays, current vibe, now playing
get_now_playingCurrent track, whether playback is active, queue_depth
get_queueUpcoming tracks, in play order
search_tracksFind tracks and their URIs; each result marked owned or new
queue_tracksAdd tracks by uri, or by title + artist
play_nowStart one track immediately
skip_trackSkip to the next track
set_dj_vibeRecord a standing direction for the built-in auto-queue DJ
list_playlistsTheir playlists with URIs, track counts and owned
get_albumAn album's artists, release year and tracks, each with a URI
get_artistAn artist's top tracks and albums, each with a URI
list_devicesTheir Spotify Connect devices and which one is active
transfer_playbackMove playback to another Connect device, by id or name
create_playlistCreate a playlist, optionally with tracks
add_to_playlistAdd tracks to a playlist they own or collaborate on
remove_from_playlistRemove one track by URI and 0-based position; destructive
like_tracksAdd tracks to Liked Songs, or remove them with liked: false
follow_artistFollow an artist, or unfollow with follow: false

The library, playlist and device tools are Spotify-only and take at most 20 tracks per call. That is the whole surface. Do not promise the user control beyond it; in particular there is no tool to toggle continuous auto-queue. Change the user's library or playlists only when they asked for it.

Start with their taste

Call get_listening_history first whenever you are choosing music for them. period accepts 7d, 30d, month, year, all, and defaults to 30d. A normal summary returns aggregate names only, no identifiers or timestamps, plus whatever is playing now and the current DJ vibe.

When there is very little history it returns none of that — no top lists, no vibe, no now playing, just a short note saying so. Take the note at face value and ask the user what they feel like rather than inferring a taste profile from a handful of plays.

Search before you queue by name

When you are not certain a track exists in the catalogue, call search_tracks first (query required, limit 1-20, default 10) and queue the URIs it returns.

Every result is marked `owned` (in their Liked Songs, or in a playlist they own or collaborate on) or `new`.

  • They asked for something they do not already have: prefer results marked new.

new means "not in their library", not "never heard" — nothing here reads their play history.

  • They named a specific track: queue it whether they own it or not. That is what

they asked for.

Queue, do not interrupt

queue_tracks takes an array of tracks in play order. Each entry is either a uri (preferred, straight from search_tracks) or both a title and an artist to be looked up. At most eight tracks per call. A longer array is rejected as invalid arguments and nothing at all is queued, so split a longer run into batches of eight, sent in play order.

It can partially succeed. Tracks it cannot find are skipped and reported back. Read the result and tell the user what actually landed; never assume everything queued. If a name was not found, that track is not in the catalogue under that name, so pick an alternative rather than retrying the same string.

exclude_owned: true makes it skip anything they already have:

  • Set it only when they asked for music they do not already have.
  • Leave it off when they named specific tracks.
  • It substitutes nothing, so fewer tracks may land than you sent.
  • If it errors with "could not read your playlists", the filter could not run and

nothing was queued. Retry, or call again without the flag.

Use play_now only when the user asked to hear something right now — it interrupts whatever is playing. Otherwise queue.

set_dj_vibe starts nothing

It records a standing direction (for example "mellow instrumental for focusing") for the optional in-TUI auto-queue DJ, which may be switched off or not built into this binary at all. Pass null to clear it. Read the result: it tells you whether anything will actually act on the vibe.

The vibe is stored either way and comes back from get_listening_history, so when nothing else will act on it, honour it yourself when you pick tracks.

Keeping the music flowing

There is no tool to switch continuous auto-queue on; that is the user's key inside the TUI. To DJ continuously yourself, poll get_now_playing, watch queue_depth, and top up with queue_tracks before it runs dry.

Quirks worth knowing

  • The first search_tracks after spotatui starts may note that the playlist index

is still building. For that one search, owned reflects Liked Songs only; the crawl finishes in the background, so search again if ownership matters.

  • A tool reporting "spotatui has no Spotify session" means the catalogue tools need

a login. Ask the user to log in from the spotatui UI.

  • Every change you make is announced in the user's TUI. They can see what you did.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
1,418
Repository forks
237
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/largemodgames/spotatui/spotatui-dj/badge)](https://verified-skill.com/skills/largemodgames/spotatui/spotatui-dj)

Something wrong with this skill or its page? Tell us.