Tidal
Reusable open-source Agent Skills for Pi and compatible agent systems
npx -y skills add bgevorkian/agent-skills --skill tidalAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 13 days oldThe repository was created 13 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generic TIDAL account JSON CLI for explicit user-requested tasks: OAuth setup/status, me, search, playlist inspection, favorites, id/URL resolution, and tightly gated playlist/favorite writes. Use when the user explicitly asks to work with TIDAL itself, not for recommendations, similarity, mood, vibe, BPM, key, or auto-sorting.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.5 KB, as published. Nobody here has run it
TIDAL
Generic TIDAL account skill for direct, explicit tasks only.
It can:
- run interactive OAuth setup and show auth status;
- show the current account summary;
- search tracks, albums, artists, and playlists;
- list user playlists and playlist tracks;
- list favorites when supported by the installed
tidalapi; - resolve TIDAL ids and URLs;
- create, rename, delete playlists;
- add, remove, and reorder playlist tracks;
- favorite and unfavorite supported items.
It does not do recommendations, radio, similarity, mood, BPM, key, energy, vibe classification, or automatic playlist sorting.
Safety contract
Every TIDAL account mutation requires both:
TIDAL_ALLOW_WRITE=true- explicit
--confirm-write
Without both, writes fail locally before any API call.
Never print or commit session file contents.
Session location
Session lookup order:
TIDAL_SESSION_FILE- generic per-user data file:
- Windows:
%APPDATA%/agent-skills/tidal/session.json - macOS:
~/Library/Application Support/agent-skills/tidal/session.json - Linux:
${XDG_DATA_HOME:-~/.local/share}/agent-skills/tidal/session.json
- Windows:
Secret setup
Follow Secure secret profiles. Treat the TIDAL session as a credential file, not an ordinary environment variable: keep it outside the skill with private permissions and never print or commit its contents. Ask before changing authentication or materializing a temporary file from a secret manager.
Run
From this skill directory:
uv run --python 3.13 --with tidalapi python scripts/tidal.py auth-login
uv run --python 3.13 --with tidalapi python scripts/tidal.py auth-status
uv run --python 3.13 --with tidalapi python scripts/tidal.py me
uv run --python 3.13 --with tidalapi python scripts/tidal.py search --type track --query "Massive Attack" --limit 10
uv run --python 3.13 --with tidalapi python scripts/tidal.py resolve "https://tidal.com/browse/playlist/00000000-0000-0000-0000-000000000000"
uv run --python 3.13 --with tidalapi python scripts/tidal.py list-playlists --limit 50 --offset 0
uv run --python 3.13 --with tidalapi python scripts/tidal.py playlist-tracks playlist:00000000-0000-0000-0000-000000000000 --limit 100
uv run --python 3.13 --with tidalapi python scripts/tidal.py favorites --type track --limit 50
Write examples
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py create-playlist --title "Inbox" --description "Manual playlist" --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py rename-playlist playlist:00000000-0000-0000-0000-000000000000 --title "Inbox 2" --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py add-tracks playlist:00000000-0000-0000-0000-000000000000 --track track:12345 --track track:67890 --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py remove-tracks playlist:00000000-0000-0000-0000-000000000000 --index 0,1 --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py reorder-tracks playlist:00000000-0000-0000-0000-000000000000 --index 3 --position 0 --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py favorite-add --type album --item album:54321 --confirm-write
TIDAL_ALLOW_WRITE=true uv run --python 3.13 --with tidalapi python scripts/tidal.py favorite-remove --type album --item album:54321 --confirm-write
Notes
- Output is UTF-8 JSON.
- Limits and offsets are supported on read commands.
resolveaccepts TIDAL URLs,kind:id,kind/id, or explicit--kind.- Raw numeric ids are ambiguous without a known kind.
favorite-removeis intentionally single-item to avoid accidental bulk deletes.
Tests
uv run --python 3.13 --with tidalapi python tests/test_tidal.py