From ops
A&R any record like a dance-pop label owner + master producer. Single track, batch, or full Gmail-inbox demo sweep — runs the audio-ar analysis stack (BPM/key/loudness/structure, CLAP mood/genre/hit-lean, Whisper lyrics, Cyanite/Music.ai pro layer) and delivers verdict cards. Can email the full verdict with listen links on request.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ops:ops-ar <audio file | URL/Dropbox | "latest" | <file1> <file2> ... | inbox [from <sender>...]><audio file | URL/Dropbox | "latest" | <file1> <file2> ... | inbox [from <sender>...]>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A&R the given record(s) like a pop/dance-hit label owner + master producer. The deliverable is always the full A&R card per track:
A&R the given record(s) like a pop/dance-hit label owner + master producer. The deliverable is always the full A&R card per track:
VERDICT (hit/10 + sign / develop / pass) → WHAT'S WORKING → WHAT'S HOLDING IT BACK → THE PLAN (producer moves) → REFERENCE & POSITIONING → NEXT.
| Setting | Source | Default |
|---|---|---|
| Audio analysis stack home | $AUDIO_AR_HOME env or ar.stack_home in $PREFS_PATH | ~/audio-ai |
| Python venv | $AUDIO_AR_HOME/venv/bin/python | — |
| Music.ai workflow slug | $MUSICAI_WORKFLOW env or Doppler | (required for Music.ai) |
| Cyanite / Music.ai / Soundcharts keys | env / Doppler / ~/.mcp-secrets.env | — |
| A&R taste profile (label lane, reference acts, tempo sweet spot) | ar.profile in $PREFS_PATH | dance-pop / feel-good house |
The skill must read these at runtime — never hardcode user names, mailboxes, label names, or absolute /Users/... paths.
/ops:ops-ar <file|url|latest>Spawn the ar-producer agent (Opus) with the track:
&dl=1; YouTube: yt-dlp -x --audio-format mp3).latest / empty → newest audio file (.mp3, .wav, .m4a, .aiff, .flac, .ogg, .aac) in ~/.claude/jobs/*/tmp/ by mtime — ignore JSON, PNG, and other non-audio artifacts.ToolSearch select:mcp__audio-ar__full_ar_report,mcp__audio-ar__analyze_track,mcp__audio-ar__mood_score,mcp__audio-ar__transcribe_vocals,mcp__audio-ar__separate_stems,mcp__audio-ar__render_visuals,mcp__audio-ar__analyze_stems,mcp__audio-ar__cyanite_analyze,mcp__audio-ar__musicai_analyze,mcp__audio-ar__soundcharts_lookup — subagents don't inherit MCP discovery./ops:ops-ar <file1> <file2> ... (or multiple URLs)A&R multiple local paths or URLs in one invocation:
nproc/uptime first). Same subagent MCP rule as single-track mode (include the full ToolSearch select:mcp__audio-ar__... list). Relay each agent's full A&R card back verbatim./ops:ops-ar inbox [from <sender> ...]Pull every demo/song from the user's Gmail inbox and A&R them all:
gog gmail search 'has:attachment (filename:mp3 OR filename:wav OR filename:m4a OR filename:aiff OR filename:flac OR filename:ogg OR filename:aac)' (add from: filters if senders given). Confirm scope with the user if the set is large (>10 threads).gog gmail thread get <tid> -j → message ids from thread.messages[].id (envelope {downloaded, thread: {messages: [...]}} — NOT top-level messages) → gog gmail raw <mid> -j piped to jq for audio parts (filename + attachmentId) → gog gmail attachment <mid> <aid> --out <dir>/<label>__<file>. Also grep text parts for external links (postal.music, disco.ac, wetransfer, dropbox) — flag link-only demos that need a login as NOT ANALYZED and tell the user to request a file re-send.nproc/uptime first). Same subagent MCP rule as single-track mode (include the full ToolSearch select:mcp__audio-ar__... list). Relay each agent's full A&R card back verbatim.House rule: every A&R email ALWAYS includes (a) a per-track DIRECT LISTEN LINK and (b) the FULL A&R card per track — never just the ranked summary.
gog drive upload <file> → share → direct link). An email-thread link alone is NOT sufficient.gog gmail url <threadId>) — both direct + email link is ideal.$AUDIO_AR_HOME/venv/bin/python pro_apis.py cyanite <file>): returns genreTags, moodTags, bpmRangeAdjusted, era, voice gender, energyLevel, valence, arousal. Free/trial plans have a LIFETIME library cap — deleting tracks does NOT free quota. On librarySizeLimitExceededError, route through Music.ai instead.pro_apis.py musicai <file>, needs $MUSICAI_WORKFLOW, e.g. a "Metadata Suite" workflow): same Cyanite engine on separate billing + extras — ai_voice (Real vs AI-GENERATED — always flag AI guide vocals: they're placeholders needing a real singer), voice_gender, instruments. Implementation gotchas (already handled in pro_apis.py): requests need a browser User-Agent (Cloudflare 1010 blocks default python-urllib), and the upload-URL request must be a clean GET with no body. Convert .m4a to mp3 before upload.pro_apis.py soundcharts <query>): released-catalogue lookup only — useless for unreleased demos; use it for reference-track benchmarking in the REFERENCE section.bpmRangeAdjusted when available; otherwise confirm by groove.If mcp__audio-ar__* is unavailable, run the stack directly via Bash from $AUDIO_AR_HOME (venv/bin/python analyze.py <file>, clap_score.py, transcribe.py, pro_apis.py). Never fabricate analysis — if nothing ran, say so.
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when dispatching multiple ar-producer agents in batch or inbox-sweep mode. This enables:
Team setup (only when flag is enabled, batch/inbox dispatch phase):
TeamCreate("ar-batch")
Agent(team_name="ar-batch", name="ar-[track-slug]", ...)
If the flag is NOT set, use standard parallel subagents (fire-and-forget, waves of ≤2).
npx claudepluginhub lifecycle-innovations-limited/claude-ops --plugin opsCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.