One install path gave me 1 file. The other gave 166.
I installed the same skill twice, two documented ways, and counted the files.
One command gave me a single SKILL.md. The other gave me 166 files. The single-file version looked completely fine. It just quietly wasn't going to work.
Here is what that one file is. It's a router. It says "load references/platform-algorithm-2026.md," "install from registry/," "run scripts/verify-hook-quality.mjs." Every one of those paths belongs to a layer file that the install did not copy. You get a map with no territory, and nothing errors.
The sharpest case in my toolkit is press-release-writer. Installed one way: 104 files. Installed the other: 1. The file that goes missing is scripts/score-newsworthiness.mjs — the script that decides whether a release deserves a launch at all. Install it the documented way and your newsworthiness gate silently degrades into the model's opinion. No warning. No exit code. You just start shipping blog posts for things that earned a changelog line.

I found this while building the profession I'm launching today.
Who this is for
If you ship software and then hand-run the announcement every single time, this is for you. Blog, changelog, listing page, marketplace card. Five surfaces, produced blind to each other, in five browser tabs, from memory.
I've done that for thirty launches. The hero image got rendered two and three times because no surface knew the last one already made it. The voice drifted between the blog and the listing. And when I wanted to know what a launch had actually shipped, there was no record anywhere.
@di-atomic/propagate v0.1.0 is live — the Launch Engineer. It's the role I equip inside Claude Code, Cursor, or Antigravity when I'm launching my own work.
One honest boundary first: this one is internal tooling, for Di-Atomic, SpiderIQ and OPVS. If you want this craft pointed at your releases and your campaigns, the sibling profession is @di-atomic/delivery-manager. Same craft, different audience. I'd rather say that plainly than sell you the wrong one.
What I hire when I equip it
The defining constraint shaped the whole design: an IDE session starts with an empty toolkit. So workflow number one isn't "start a launch." It's acquire your tools and prove they work.
After that, it holds one line above everything else: not every release earns a launch. Before it produces anything, it verifies the real delta, runs the newsworthiness rubric, and records the score, the tier, which signals fired, and any override with its reason. A release scoring 0 to 2 gets a changelog line and an honest "this isn't news." Declining is the most valuable thing this role does.
This post is the proof. The gate scored this launch a 3 — blog tier. Scored conservatively, as just another profession shipping, it scores 0 and you'd be reading a changelog line instead. It reached 3 on the measured install-path finding above, which is why that finding leads the post rather than sitting in a footnote. Internal tooling with no gate is exactly how thirty launches become thirty blog posts.
Then it seeds one launch card, and that card is the shared state. Every surface reads it, adds its piece, passes it on. The hero renders once. Everything else reuses it by URL.

The toolkit: 16 skills, linked not copied
A profession doesn't bundle its skills. It links them by name and version, and they stay independently owned. propagate links 16, and they split into two kinds that behave nothing alike:
7 are CALL. Real routed methods, reached over MCP. These are capability: @opvs-ai/agentboard (the launch card), @opvs-ai/agentdocs (surface bodies, versioned), @opvs-ai/agentmemory (which hooks converted last time), @opvs-ai/opvs-protocol (the handoff), @opvs-ai/profession (the guild hall), @spideriq/publish-skills (publish live and deploy), and @spideriq/gateway-skills — the render engine.
9 are READ. Guidance only. Your own model executes them, no credentials involved: voice-builder, hook-generator, copy-engine, section-designer, explainer-illustrations, press-release-writer, media-generator, changelog-writer, and marketplace-card.
The rule that needs no lookup table, and it has no exceptions: every @di-atomic/* link is READ. Every @opvs-ai/* and @spideriq/* link is CALL. True for all 16.

Getting this wrong is easy, because the method index lies. media-generator declares six method names. All six definitions are empty, with no route behind them. Count names and you'll classify it as callable; its own documentation tells you not to call it. Classify by whether a method carries an HTTP route, never by how many names you can count.
The render chain is where people trip. You READ explainer-illustrations to plan the shot list, READ media-generator to build the on-brand prompt, then CALL gateway-skills to actually render. Three skills, one render, only the last one is a call.
Five workflows
toolkit-bootstrap— the intake. Acquire the toolkit in this runtime and prove both halves work before anything else starts. This is where the install finding lives as a hard rule.launch-intake— the gate. Resolve which brand you're shipping for, verify the delta, score it, then commit or decline.seed-launch— the seeder. One card, all stages laid down upfront, blog and hero produced exactly once.work-surface— the worker. One surface, self-gated on inputs it didn't produce, reusing everything it was handed.stalled-launch— stop cleanly with a named gap. A launch that halts with a named gap is recoverable in minutes. One that improvises around it ships something wrong that nobody catches until a customer does.
Three recipes ride on top: skill-launch, profession-launch, product-release.
The guild
Every profession opens a guild. This one's address is propagate@profession.md.
That's the part a skill can't do. Skills ship knowledge. A profession ships knowledge plus a compounding loop, so the anonymized craft accumulates at a shared address instead of evaporating into whoever ran the last launch. Right now my launch craft lives in one head across thirty launches. Three projects contributing to one guild is the entire point.
Everything crossing that membrane is generalized. No client facts, no brand ids, no tenant keys.
Equip it
opvs profession equip @di-atomic/propagateIt ships at v0.1.0 with 16 links, 5 workflows, 16 definition-of-done checklists, and 23 explicit out-of-scope lines. Security review came back 100/100 with no findings and zero coherence findings.
Your first thirty days: run toolkit-bootstrap before anything else and let it fail loudly if a CALL surface isn't wired. Then let the gate decline something. The first time it tells you a release doesn't earn a launch and you agree with it, the role has already paid for itself.
Two things it will never do. It won't push a production deploy — it publishes surfaces and deploys to preview, and the production push stays my call. And it won't touch client work. That belongs to delivery-manager, and the boundary is the audience, not the craft.