Claude-skill-registry discover-music
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/discover-music" ~/.claude/skills/majiayu000-claude-skill-registry-discover-music && rm -rf "$T"
skills/data/discover-music/SKILL.mdDiscover Music Skill
Find new music for Horus based on taste profile and external discovery services.
Quick Start
cd .pi/skills/discover-music # Find similar artists ./run.sh similar "Chelsea Wolfe" # Get trending artists ./run.sh trending --range week # Search by genre/style tag ./run.sh search-tag "doom metal" # Search by bridge attribute ./run.sh bridge Corruption # Get fresh releases ./run.sh fresh # Check API connectivity ./run.sh check
Discovery Services
| Service | API | Use For |
|---|---|---|
| MusicBrainz | Free (User-Agent only) | Artist search, metadata, genre tags, relationships |
| ListenBrainz | Free (token optional) | Similar artists, trending, user stats, recommendations |
No API keys required for basic functionality. ListenBrainz token enables personalized recommendations.
Commands
Similar Artists
./run.sh similar "<artist>" [--limit 10] [--json]
Find artists similar to a given artist via ListenBrainz + MusicBrainz tags fallback.
Trending Artists
./run.sh trending [--range week|month|year|all_time] [--limit 10] [--json]
Get site-wide trending artists from ListenBrainz.
Search by Tag
./run.sh search-tag "<tag>" [--limit 10] [--json]
Search MusicBrainz for artists by genre/style tag (e.g., "doom metal", "dark folk").
Search by Bridge
./run.sh bridge <attribute> [--limit 10] [--json]
Search for music matching an HMT bridge attribute:
| Bridge | MusicBrainz Tags |
|---|---|
| Precision | progressive metal, math rock, technical death metal, djent |
| Resilience | epic metal, power metal, post-rock, cinematic, symphonic metal |
| Fragility | dark folk, acoustic, slowcore, sadcore, singer-songwriter |
| Corruption | industrial, doom metal, sludge metal, dark ambient, noise |
| Loyalty | neofolk, neoclassical, world, ritual ambient, medieval |
| Stealth | drone, dark ambient, ambient, minimalist, atmospheric |
Fresh Releases
./run.sh fresh [--limit 10] [--json]
Get fresh/new releases from ListenBrainz explore API.
User Top Artists
./run.sh user-top <username> [--range all_time] [--limit 10] [--json]
Get a ListenBrainz user's top artists.
Check APIs
./run.sh check
Test connectivity to MusicBrainz and ListenBrainz APIs.
Integration with /dogpile
This skill can be invoked via
/dogpile music:
# Via dogpile /dogpile music "dark atmospheric metal similar to Chelsea Wolfe" # Equivalent to ./run.sh similar "Chelsea Wolfe" ./run.sh search-tag "dark atmospheric metal"
Configuration
Environment variables (optional, in
.env):
LISTENBRAINZ_TOKEN=xxx # Optional: enables personalized recommendations LISTENBRAINZ_USERNAME=xxx # Optional: for user-specific queries
MusicBrainz requires no API key - only a User-Agent string (preconfigured as
HorusAgent/1.0).
Crucial Dependencies
| Library | API/Method | Sanity Script | Status |
|---|---|---|---|
| musicbrainzngs | MusicBrainz API | | [x] PASS |
| pylistenbrainz | ListenBrainz API | | [x] PASS |
| requests | HTTP client | N/A (well-known) | - |
Rate Limits
| Service | Limit | Implementation |
|---|---|---|
| MusicBrainz | 1 req/sec | Enforced in client |
| ListenBrainz | ~2 req/sec | 0.5s minimum interval |
Example Horus Queries
# "What's similar to Chelsea Wolfe?" ./run.sh similar "Chelsea Wolfe" --limit 10 # "Find doom metal artists" ./run.sh search-tag "doom metal" # "Music for a battle scene" (Resilience bridge) ./run.sh bridge Resilience # "Dark ambient for corruption scene" ./run.sh bridge Corruption # "What's trending this week?" ./run.sh trending --range week # "New releases for discovery" ./run.sh fresh --json
Output Formats
All commands support
--json for agent-parseable output:
[ {"name": "Emma Ruth Rundle", "mbid": "abc123...", "similarity": 0.85}, {"name": "Lingua Ignota", "mbid": "def456...", "similarity": 0.78} ]