recoup-platform-build-os
Scaffold and run a label's self-managing "music-company OS" inside its own git repo — the full label-intelligence workspace (folders, a self-managing CLAUDE.md mirrored to AGENTS.md, a read-only doctor + never-stale janitor, compound-learning and self-improvement loops, an in-place plugin) seeded with Recoup's conventions (top-level artists/{slug}/RECOUP.md identity files, releases/{slug}/RELEASE.md) and backed by the Recoup API as system of record. Use for "set up our label OS", "build the org workspace", "turn this repo into our label brain", or onboarding a new org/label repo. Pulls the real roster from the live account (auth via recoup-platform-connect-account), onboards artists API-first via recoup-roster-add-artist, and calls the other recoup-* skills (research/content/release/song/catalog) instead of reinventing them. The single workspace/OS builder — also covers the lightweight "just mirror my roster into folders" case.
NPX Install
npx skill4agent add recoupable/skills recoup-platform-build-osTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Recoup — Build Label OS
CLAUDE.mdAGENTS.mdplugin/{DOMAIN_SLUG}-osRecoup specialization — this is a music-company OS [read before Phase 0]
workspace-os- The domain is fixed — don't re-infer it. Core unit: the artist (and their
releases). Entities folder: top-level . The release lifecycle (
artists/) is tracked per release underdemo -> A&R -> signed -> production -> release -> promo -> catalog(stage inartists/{slug}/releases/) — there is no separate top-levelRELEASE.md; unsigned candidates live inpipeline/. Spend Phase 0's effort understanding this specific label (roster, genres, deal posture, content motion, team), not which archetype it is.prospects/ - The repo is one org/label. This runs inside a single org's git repo, so artists live at
top-level — no
artists/{artist-slug}/nesting (the repo already is the org).orgs/ - Seed Recoup's conventions exactly — other recoup skills depend on them:
- — identity file, frontmatter
artists/{artist-slug}/RECOUP.md/artistName/artistSlug(artistId = the RecoupartistId). Same shapeaccount_id,recoup-roster-list-artistsread/write.recoup-roster-add-artist - and
releases/{release-slug}/RELEASE.mdper artist.releases/top-tracks.md - = lowercase-kebab; never append IDs to folder names.
slugify
- Secrets stay out of the shared repo. Always seed (documenting
.env.exampleorRECOUP_API_KEY,RECOUP_ACCESS_TOKEN, optionalRECOUP_ORG_ID) and aRECOUP_API_URLthat ignores.gitignore. Real credentials live outside the repo (env vars /.env); never commit them — the repo is shared across the label's team.~/.claude/recoup.env - The Recoup API is the system of record; the repo is the brain. Get the real roster from
the live account — never invent one:
- Connect the machine first by chaining (mints/loads the credential:
recoup-platform-connect-accountorRECOUP_API_KEY, optionalRECOUP_ACCESS_TOKEN).RECOUP_ORG_ID - If the roster is empty (0 artists), hand off to to bootstrap it (it fans
recoup-roster-onboardout across parallel subagents); otherwise materialize the existing roster intorecoup-roster-add-artistyourself:artists/(or useGET /api/organizations) ->RECOUP_ORG_ID->GET /api/artists?org_id=…and writemkdir -p artists/{slugify(name)}per artist (RECOUP.md/artistName/artistSlugfromartistId); skip existing. Useaccount_idto inventory first andrecoup-roster-list-artistsfor the call shapes.recoup-platform-api-access - Write with the contract: DB owns structured entities (roster, socials, metrics, releases-as-records, billing); the repo owns the unstructured brain (knowledge, research, plans, drafts). Entity creation is API-first — onboard a new artist with
operations/sync.md(the 8-call create -> enrich chain), then its folder appears; never create an artist byrecoup-roster-add-artistalone. Usemkdirfor raw REST / connector calls. Empty orgs+artists usually means a throwaway key, not a blank label — surface it, don't fabricate a roster.recoup-platform-api-access
- Connect the machine first by chaining
- Reuse the platform; don't reinvent it. In Phase 4, do not author that duplicate Recoup capabilities — wire to the installed
plugin/skills/skills: roster (recoup-*), research (recoup-roster-*), content (recoup-research-*), release (recoup-content-*), song (recoup-release-*), catalog (recoup-song-*). The OS's ownrecoup-catalog-*should be label-specific glue (this label's routines/orchestration) plus the standard maintenance organs (doctor/janitor/learn/reflect/skillify/intake). Default the plugin name toplugin/skills/.{label-slug}-os - Still scaffold everything else a music company needs. Beyond the core (,
artists/,knowledge/,library/,work/,artifacts/,plugin/), add optional folders only with real material:operations/(the flywheel),content/(catalog acquisitions),deals/(industry network),contacts/(press/milestones),proof/(splits/royalties/contracts),business/(A&R funnel),prospects/(label bible). Mark inferred items "draft — confirm". Seereference/for the full tree.references/blueprint.md - Filling the generic templates (doctor/dashboard/janitor). When you generate them from
, the entity is
assets/and there is no pipeline folder — leaveartists/empty, or set it to{PIPELINE}only if the label does A&R. The doctor reads release status from eachprospects/(stage inartists/{slug}/releases/), not a top-level funnel.RELEASE.md
Operating beliefs (apply to every OS you build)
- Separate what compounds from what flows. Compounding = reusable assets that improve every time (templates, knowledge base, skills, proof). Flowing = instances moving through stages (deals, tickets, releases, experiments). Wire feedback so every flowing instance deposits back into a compounding asset.
- Never stale. It is the agent's job to manage state. Any time new input arrives OR the user works in the OS, every file/folder that should change gets touched in the same turn. A janitor skill + scheduled task is the safety net.
- Compound learning. Every session makes the system smarter — capture decisions, recurring answers, and patterns into the knowledge base. Never solve the same thing twice.
- Skillify proven repeatable work. After finishing work, ask whether it will be done again or
maintained. If yes, promote the proven process into a staged, verified skill before it lands in
. One-off work stays in
plugin/skills/(dated) — it never becomes its own top-level folder.work/ - Self-describing. Every folder explains its own purpose; encodes where new things go and how to keep the system current.
CLAUDE.md - Evidence over confidence. "Done", "consistent", and "reachable" are decided by a checkable
surface — a run, a skill's verification, a reachable trigger — not the agent's feeling. And the OS improves itself over time (
{domain}-doctor), not just its contents.{domain}-reflect
Phase 0 — Understand the project deeply (always first)
references/domain-inference.md- Ingest ALL kickoff input (files, transcripts, prompt). If files exist, read them fully.
- Determine the domain archetype and the core unit of work (e.g. consulting -> deals/clients, product -> features/releases, record label -> artists/releases, research -> questions/experiments).
- If input is rich, derive structure from the material. If input is sparse (just a prompt), use best judgment: infer the domain, predict the entities, stages, assets, routines, and metrics the project will need, and anticipate them rather than waiting — but express that preparation as stubs and subfolders inside a lean root (see Phase 1), not as extra top-level directories.
- Produce a short Understanding Brief: domain, core unit, lifecycle stages, key entities, compounding assets, recurring tasks (skill candidates), metrics, and likely external tools.
- Confirm the brief with the user only if something material is ambiguous; otherwise proceed.
Phase 1 — Design the taxonomy
references/blueprint.md- Start from the small core the loops maintain: the flowing stores (a staged pipeline folder +
an entity folder like /
clients//artists/), the compounding storesfeatures/andknowledge/,library/(non-recurring output, by project),work/(finalized recurring outputs like the dashboard),artifacts/(the in-place plugin), andplugin/(routines, sync, health, improvements).operations/ - Add an optional top-level folder only when the domain has real material for it now —
(canon/source),
reference/(outcomes),proof/(a real content motion),content/(legal/finance/metrics). When unsure, leave it out; adding later is onebusiness/.mkdir - Keep every top-level folder name to one lowercase word (, not
operations;operating-system, notknowledge). Rename to the domain's language but keep it a single word. (Skill folders insideknowledge-basestay kebab-case — a different convention.)plugin/skills/ - Don't reproduce the whole anatomy by reflex, and don't promote one-off work to a top-level
folder — ad-hoc tasks live in ; only work that repeats or needs upkeep becomes a skill in
work/. Push over-preparation into subfolders and stubs, not a row of empty top-level dirs.plugin/
Phase 2 — Scaffold structure + the brain
- Create only the folders the taxonomy calls for (lean root). Give every non-obvious folder a short
stub stating what belongs there.
README.md - Write from
artifacts/dashboard.html(HTML, not md). Seedassets/dashboard.html.tmpl(empty — theoperations/health.mdfills it) and{domain}-doctor(a header for theoperations/improvements.mdledger).{domain}-reflect - Write the self-managing from
CLAUDE.md, customized to the domain (filing decision tree, the auto-manage loop, never-stale contract, repetition-to-skill rule). Readassets/CLAUDE.md.tmplfor what the contract must contain.references/self-management.md - Create as a symlink to
AGENTS.md(CLAUDE.md) so agent runners that look for either file get the same brain. If symlinks aren't supported, write anln -s CLAUDE.md AGENTS.mdthat says "See CLAUDE.md" — but prefer the symlink.AGENTS.md
Phase 3 — Seed compounding assets
- Populate (blank instruments you reuse — templates, scripts, checklists) and
library/(settled answers you read back — faqs, insights, decisions, sops). Rule of thumb: if you'd use it to make something it'sknowledge/; if you'd consult it to decide something it'slibrary/.knowledge/ - Extract this material from the input. With sparse input, seed sensible starter templates for the domain and mark them "draft — confirm".
Phase 4 — Author skills (the in-place plugin/
)
plugin/references/skill-authoring.mdreferences/skillifying-work.md- Derive the plugin name from the domain as (kebab-case) unless the user explicitly gave a name. Use that same name in every manifest.
{DOMAIN_SLUG}-os - Scaffold as a real plugin in place:
plugin/fromplugin/.claude-plugin/plugin.json,assets/claude-plugin.json.tmplfromplugin/.codex-plugin/plugin.json, and aassets/codex-plugin.json.tmpldirectory. The Codex manifest must includeplugin/skills/; see"skills": "./skills/".references/packaging.md - Create as a symlink to
.agents/skillsso Cursor and Codex can discover the same project skills. If symlinks aren't supported, copy../plugin/skillsthere and note that it is a compatibility mirror.plugin/skills/ - For each recurring task in the brief, author (frontmatter
plugin/skills/{name}/SKILL.md+ description with real trigger phrases, then imperative steps referencing the workspace paths).name - Always include the maintenance skills (the OS's feedback organs), generated from the templates:
- a doctor () — the read-only verification surface (health score + punch list to
assets/doctor-SKILL.md.tmpl); the janitor and the build report are gated on it. Also generateoperations/health.mdfromoperations/doctor.py(fill theassets/doctor.py.tmpl/PIPELINE/slug) as its deterministic fast path — so the mechanical checks ship with the build instead of being reinvented later.ENTITY - a janitor () — run the doctor, then reconcile and fix what's safe.
assets/janitor-SKILL.md.tmpl - a compound-learn skill () — capture decisions/answers/patterns into
assets/compound-learn-SKILL.md.tmplafter each work session.knowledge/ - a reflect skill () — improve the OS itself (skills, routing, checks, templates) into
assets/reflect-SKILL.md.tmpl; the 50/50 budget.operations/improvements.md - a skillify skill () — promote proven repeatable work into staged, verified skills.
assets/skillify-SKILL.md.tmpl
- a doctor (
- Also include an orchestrator skill (the auto-manage loop as one trigger) named .
{domain}-intake - Routing stays lean: rely on each skill's for routing while the pack is small; add a
description(trigger -> skill table) only once skills grow enough that descriptions overlap or the doctor's reachability check flags ambiguity.plugin/skills/RESOLVER.md - Author a skill only for work that repeats or needs upkeep — one-off builds belong in , not a throwaway skill. For skills created from completed work, follow the skillify loop: prove provenance, extract the repeatable process, stage in
work/, verify with the strongest domain-appropriate check, ask before moving intowork/, then repackage.plugin/skills/
Phase 5 — Package the plugin
references/packaging.md- Run first — packaging is gated on a clean (or explained) report.
{domain}-doctor - The workspace directory is already the installable plugin — no copying. Validate it: every
plugin/has aplugin/skills/*/; both plugin manifests are valid JSON and share theSKILL.mdname; the Codex manifest points at{DOMAIN_SLUG}-os; no angle brackets in any description; no stray non-skill folders in./skills/;plugin/skills/points to or mirrors.agents/skills. Fix before packaging.plugin/skills/ - the contents of
ziptoplugin/first, then copy the/tmpto the outputs folder and present it for install..plugin
Phase 6 — Wire the never-stale schedule
- Try to create a scheduled task that runs the janitor skill (default weekly) so the workspace self-reconciles even when the user isn't looking.
- If no scheduling tool is available, or the user declines: this is not a failure. Record the
intended cadence in , AND drop a ready-to-use schedule from
operations/routines.md(GitHub Actions / cron / launchd / agent-runner task) so enabling it later is a single copy, not a research project. The OS is still complete — the janitor also runs on demand — but until the schedule is armed, the doctor keeps a standing low "schedule armed" finding, because "self-reconciles when no one is looking" is only true once it actually runs unattended.assets/janitor-schedule.tmpl - Don't block or leave the build "unfinished" over scheduling; treat it as the one optional step.
Phase 7 — Report
{domain}-doctorGuardrails
- Don't invent domain facts the user must own — mark inferred items "draft — confirm".
- Leave nothing stale: if you touched the project, update the dashboard, boards, and any affected README in the same turn.
- Prefer improving a template/skill over a one-off instance.