Agent plugin for music catalog acquisition, seller preparation, financing underwriting, royalty normalization, rights checks, and valuation analysis. Built by Recoup.
The plugin turns a messy seller data room into a source-cited deal
package: normalized royalty data, rights exceptions, valuation
workpapers, an agent-authored HTML dashboard, and buyer/seller/lender
memos. The whole thing is driven by a single command —
/recoup-catalog-deal.
claude plugin install https://github.com/recoupable/recoup-catalogs-pluginThen restart your Claude Code session so hooks/hooks.json loads.
- Open the plugin marketplace (puzzle-piece icon in the sidebar).
- Click Add custom plugin and paste:
https://github.com/recoupable/recoup-catalogs-plugin - Approve the requested tool permissions (
Read,Write,Bash— needed to run the validator scripts). - Restart the Cowork session so the PreToolUse and Stop hooks load.
- Confirm install: type
/pluginand check thatrecoup-catalogs-pluginis listed.
- Cursor → Settings → Plugins → Add custom plugin.
- Paste the GitHub URL above.
- Restart Cursor so
.cursor-plugin/plugin.jsonloads commands, skills, and agents.
Core scripts run on the Python standard library alone. PDF and XLSX extraction need two extra packages:
pip3 install -r requirements.txt # pdfplumber, openpyxlYou can skip this if your data room is CSV/TSV only.
After installing, open a new chat in Claude and try:
Let's analyze a catalog with /recoup-catalog-deal
Claude will ask what kind of deal this is (buy-side, seller-prep, or financing) and what to call it. Drag your seller's files into the chat — royalty statements, contracts, metadata exports, even messy ones. Claude runs the full workflow end-to-end: scaffolds the workspace, normalizes the royalties, flags rights issues, builds an interactive dashboard, and drafts an IC memo.
When it finishes, open:
deals/{deal-id}/DASHBOARD.html
The dashboard is authored by the agent for your specific
catalog — layout, charts, and narrative shaped by the deal's story.
A concentration-driven catalog reads differently than a recoupment-
cliff catalog. Agents in May 2026 build remarkable dashboards when
given good direction; the skills/recoup-catalog-dashboard/SKILL.md
file is that direction.
When you're ready to share the deal with a buyer, IC, or lender:
/recoup-catalog-report
That exports a single PDF you can attach to an email.
To see what the plugin produces before pointing it at a real deal — or
to show a teammate — run /recoup-catalog-demo. It runs the full
workflow against a bundled synthetic catalog.
| Command | When to use it |
|---|---|
/recoup-catalog-deal |
Default. End-to-end run from kickoff to dashboard and IC memo, no stops between phases. |
/recoup-catalog-demo |
Optional: runs the full workflow on a bundled synthetic catalog. Useful for showing a teammate what the plugin produces. |
/recoup-catalog-kickoff |
Power-user: scaffold the workspace and stop. |
/recoup-catalog-ingest |
Power-user: re-normalize after dropping new files into source/. Auto-recovers when seller headers don't match a provider profile. |
/recoup-catalog-analyze |
Power-user: refresh analysis workpapers (NPS/NLS bridge, valuation summary). |
/recoup-catalog-dashboard |
Power-user: refresh DASHBOARD.html after editing workpapers, findings, or recommendations. |
/recoup-catalog-qc |
Power-user: re-run QC after editing findings or memos. |
/recoup-catalog-package |
Power-user: refine the IC memo / financing pack / seller cleanup report. |
/recoup-catalog-report |
Export the validated dashboard + memo as a single shareable PDF you can email (deals/{deal-id}/REPORT.pdf). |
If you're new to the plugin, ignore the power-user commands and start
with /recoup-catalog-deal. Try /recoup-catalog-demo only if
you want to see the output before pointing it at a real deal.
v0.3.0 spec migration: The 9 slash commands above were migrated from
commands/*.mdfiles toskills/<command-name>/SKILL.mdfiles per Anthropic's newer skills-not-commands convention (the officialclaude-plugins-officialexample-plugin declares thecommands/*.mdlayout legacy). Both layouts exist in this release for back-compat; the legacy command files will be removed in a future release. Three of the new skill folders (recoup-catalog-dashboard,recoup-catalog-ingest,recoup-catalog-report) share names with existing model-invoked skills and were resolved by augmenting those existing skills rather than creating parallel files.
Loaded automatically by description-matching when the agent recognizes the task:
| Skill | What it does |
|---|---|
recoup-deal-kickoff |
Scaffolds a deal workspace and produces the first missing-file list. |
recoup-catalog-ingest |
Normalizes data rooms, royalty statements, metadata, and rights files into auditable hand-off artifacts. |
recoup-catalog-analysis |
Analyzes normalized cash flows and projects value. |
recoup-catalog-dashboard |
Authors the customer-facing HTML dashboard. The agent picks layout, charts, narrative, and depth — guided by a strong skill spec and a post-hoc validator. |
recoup-catalog-report |
Packages the validated dashboard + memo + workpapers as a single shareable PDF (deals/{deal-id}/REPORT.pdf). Agent picks the conversion path (headless Chrome, Playwright, WeasyPrint, or ReportLab). |
recoup-rights-review |
Reviews ownership support, chain of title, splits, restrictions, transferability. |
recoup-royalty-audit |
Audits statements, normalized ledgers, PRO/MLC issues, gross-to-net support. |
recoup-seller-prep |
Creates cleanup worklists that reduce avoidable valuation discounts before going to market. |
recoup-financing-underwrite |
Builds lender-ready collateral and cash-flow review. |
recoup-ic-memo-package |
Assembles IC memos, seller cleanup reports, financing packs, and final outputs. |
recoup-post-close-admin |
Turns deal-review data into transfer, registration, and income-monitoring worklists. |
deals/{deal-id}/
├── DASHBOARD.html ← open this first (agent-authored)
├── REPORT.pdf ← optional shareable export (run /recoup-catalog-report)
├── source/ ← raw seller files (immutable)
├── normalized/
│ ├── royalty-ledger.csv
│ ├── canonical-catalog.csv
│ └── rights-map.csv
├── workpapers/
│ ├── file-manifest.json
│ ├── ingest-coverage.json
│ ├── concentration-analysis.json
│ ├── valuation-summary.json
│ ├── nps-bridge.json
│ ├── nls-bridge.json
│ ├── recommendations.json
│ └── readiness-check.md ← internal-only QC view
├── findings/
│ ├── findings.json
│ ├── missing-files.md
│ └── manual-review-queue.md
├── memos/
│ └── ic-memo.md
├── assumptions.yaml
└── evidence-ledger.json
DASHBOARD.html is the customer-facing artifact. Everything else is
provenance, evidence, and internal QC. source/ is treated as
immutable evidence — writes into it are denied by the PreToolUse hook
so the agent cannot accidentally mutate the data room.
The trust model has two complementary layers:
Royalty ledgers, valuation summaries, NPS/NLS bridges, concentration
analyses, findings, and the evidence ledger are all structured JSON
or CSV. They go through validators
(scripts/run-deal-checks.py) that confirm shape, evidence
references, cross-artifact consistency, and findings-to-evidence
traceability. These are the source of truth.
The dashboard itself is built by the agent — full creative freedom on
layout, chart types (Chart.js, D3, Plotly), tabs, scenario sliders,
narrative structure, depth. After the agent writes
DASHBOARD.html, scripts/validate-dashboard.py runs and enforces:
- File exists, parses as HTML, between 5 KB and 5 MB.
- Required structural markers present (status, KPIs, findings, recommendations, evidence trail).
- External
<script src>tags only from a CDN allowlist (cdn.jsdelivr.net,cdnjs.cloudflare.com,unpkg.com). - No
<iframe>,<object>,<embed>,eval(,Function(,document.write(. - Every
$-claim in the rendered text either matches a workpaper value within 5%, or carries adata-evidence,data-source, ordata-derivedattribute (or any ancestor does). Unverified numerical claims fail the validator.
-
PreToolUse
protect-source-files.sh— denies anyWrite/Edit/MultiEditwhose path matches*/deals/*/source/*. -
Stop hook (prompt-based, two gates).
- Gate A (completion claims) — when the agent claims a package is
"ready", the hook verifies that
run-deal-checks.pyran cleanly, the readiness check isn'tblocked,assumptions.yamlandevidence-ledger.jsonexist, findings aren't silently dropped, and memo claims trace to evidence. - Gate B (mid-workflow progress) — when the user launched
/recoup-catalog-dealor/recoup-catalog-demo, the hook blocks the agent from stopping untilDASHBOARD.htmlexists andvalidate-dashboard.pyreturnedstatus: ok. This is what prevents the agent from quitting after Phase 2 with "want me to continue?"
- Gate A (completion claims) — when the agent claims a package is
"ready", the hook verifies that
Restart your session after editing hooks/hooks.json.
Keep each skill focused and self-contained. Use references/ for
detailed domain material so each SKILL.md stays easy to scan. Use
scripts/ for deterministic checks and the dashboard validator —
not for rendering customer-facing HTML. The dashboard is the
agent's deliverable; presentation is its job.
Current scripts include validators, the dashboard validator,
normalization, auto-column-mapping recovery, and concentration / NPS-NLS
bridge calculators. The auto column mapper
(scripts/auto-column-map.py) is the recovery path when a seller's
CSV uses non-canonical headers — the agent runs it automatically when
normalization returns status: "partial".
Golden fixtures live under fixtures/golden/ (per-provider canonical
input/expected output pairs). The synthetic demo catalog lives under
fixtures/demo-data-room/ — that's what /recoup-catalog-demo copies in.
Run all tests before release:
python3 scripts/test-normalize-royalty-statement.py
python3 scripts/test-golden-fixtures.py
python3 scripts/test-validate-deal-workspace.py
python3 scripts/test-validate-findings-evidence.py
python3 scripts/test-validate-workspace-consistency.py
python3 scripts/test-build-manual-review-queue.py
python3 scripts/test-calculate-concentration.py
python3 scripts/test-dataroom-hygiene-scan.py
python3 scripts/test-deal-readiness.py
python3 scripts/test-helpers.py
python3 scripts/test-validate-dashboard.py
python3 scripts/test-auto-column-map.pyOperate a real deal workspace with:
python3 scripts/run-deal-checks.py deals/{deal-id}
python3 scripts/build-deal-readiness.py deals/{deal-id} # internal readiness
python3 scripts/validate-dashboard.py deals/{deal-id} # check agent's DASHBOARD.htmlrecoup-catalogs-plugin/
├── .claude-plugin/plugin.json
├── .codex-plugin/plugin.json
├── .cursor-plugin/plugin.json
├── agents/ # Specialist sub-agents (QC, rights, royalty, valuation, metadata)
├── commands/ # Slash commands — start with /recoup-catalog-deal
├── evals/ # Behavioral eval scenarios
├── fixtures/
│ ├── demo-data-room/ # Synthetic catalog used by /recoup-catalog-demo
│ └── golden/ # Per-provider canonical input/output pairs
├── hooks/ # PreToolUse + Stop guardrails
├── references/ # Domain knowledge (workflow, red flags, normalization, tooling)
├── scripts/ # Deterministic Python — validators only, no renderers
├── skills/ # Loaded by description-matching at runtime
│ └── recoup-catalog-dashboard/ # The agent's guide to authoring DASHBOARD.html
├── templates/deal-workspace/ # Workspace scaffolding (assumptions, findings, evidence, memos)
└── README.md
Recoup builds AI-powered infrastructure for music operators. Recoup Catalog Deals is one product in the broader Recoup Catalog Intelligence product line.
- Plugin:
recoup-catalogs-plugin - Repository: https://github.com/recoupable/recoup-catalogs-plugin
- Support: support@recoupable.com