Changelog

New features, improvements, and fixes.

RSS
pr-manager-v0.1.0

@di-atomic/pr-manager v0.1.0 — a hireable press department

pr-manager is my third OPVS profession: a hireable PR Manager that owns everything between a thing worth telling people about and a journalist writing about it. v0.1.0 is the first release, and it is deliberately built against mass distribution.

What's new in v0.1.0

  • A whole press lane, not a document generator. The role links 17 skills and carries 7 workflows: client-intake, newsroom-page-build, press-release-drafting, press-kit-maintenance, journalist-pitching, embargoed-release-coordination and inbound-press-response. Intake gates every other workflow, so nothing drafts before the boilerplate, spokesperson and forbidden-claims list exist.

  • The refusals are the product. 21 negative-scope lines and 12 checklists ship with it. No blasting a segment, no multi-touch follow-up ladder, no unreviewed machine-written pitch, and no media kit behind a form. It starts at probationary trust.

  • Embargo-and-send is one atomic step. embargoPressRelease mints one preview token per bound contact and surfaces them exactly once, so the tokens go out in the same run that mints them. A card sitting at embargoed with no send timestamp is a detectable defect.

  • Two workflows are deferred, and I am saying so. media-monitoring and crisis-comms land in v0.2. No skill in the linked toolkit does mention discovery yet, so v0.1 learns only from coverage a human reports back.

The result: a press department that is ready before the news breaks, measured on coverage earned rather than releases emitted.

Live on the marketplace as @di-atomic/pr-manager. Guild address pr-manager@profession.md. Trigger it with "draft a press release" or "pitch this story to my contact list".

press-release-writer-v0.1.0

@di-atomic/press-release-writer v0.1.0 — wire-grade releases

I make real news often enough that I needed a repeatable way to turn an event into a release a skeptical journalist, or an answer engine, will not bin on sight. A press release is not blog copy. It has a strict format, a hard substantiation bar, and a line between a regulatory contribution and a conferred status I am not allowed to cross.

What's new in v0.1.0

  • The five-part standard is enforced, not suggested. Dateline, 5W1H lead, quote sandwich, boilerplate and contact block are each checked by a script. Six release types ship with a recipe apiece: product launch, funding, regulated, award, crisis and embargoed.

  • Every measurable claim carries its source. "Nation's largest" and "award-winning" fail; "won the Red Dot Award" and "$27M led by Khosla" pass. A number I cannot source gets deleted, never softened. Same rule covers REACH and CLP work, where I write the contribution and never the conferred status.

  • It cannot break an embargo. A future-dated embargo routes to press_schedule and can never reach press_publish. An embargo break is irreversible, so the path is removed rather than discouraged. The skill also never writes its own approval.

  • Structured fields, not a wire blob. Output maps to the prnow.io contract: 250-word floor, title of at least five words, metaTitle capped at 60 characters. That is why "FOR IMMEDIATE RELEASE" and the ### marker are gone. The dateline stays.

Backing it: 10 sourced exemplars, 6 templates, 21 learnings and 10 scripts that print PASS or FAIL with numbers.

Live on the marketplace as @di-atomic/press-release-writer. Trigger it with "write a press release for this launch".

email-outreach-v1.1.0

@di-atomic/email-outreach v1.1.0 — Email Marketing Specialist

email-outreach is a profession, not a tool. You equip it and it runs outbound and retention email end to end per client: plan, sequence, gate deliverability, send, follow up, report. In v1.1.0 it is live on the marketplace with its full toolkit verified.

What's new in v1.1.0

  • The Email Marketing Specialist is now hireable. One equip command staffs a whole role that runs client-intake, cold-sequence, and reply-triage in order, across eleven linked skills and a six-workflow library, instead of eleven separate installs you sequence yourself.

  • The deliverability gate ships as the default, not an option. The role refuses to send on an unauthenticated domain or an un-warmed mailbox. Case studies report an unauthenticated domain reaches the inbox only about 38% of the time, so the gate parks the send in review until SPF, DKIM, and DMARC pass and the mailbox reads ready.

  • The toolkit re-pinned to current skills. It now links outbound-engine 3, copy-engine 0.5, and mail-skills 0.6, each independently owned and versioned rather than bundled.

The result: outbound that follows the same order every time, with the one send it should not make caught before it goes out.

Live on the marketplace as @di-atomic/email-outreach. Trigger it with "opvs profession equip @di-atomic/email-outreach".

delivery-manager-v0.2.0

@di-atomic/delivery-manager v0.2.0 — the compounding guild, seeded

v0.2.0 fills the compounding guild the profession promised. An OPVS quality review flagged that delivery-manager@profession.md shipped empty — a real address with no craft behind it. This release seeds it to the bar @di-atomic/email-outreach set:

  • 3 reference docs — launch-pack-model, call-vs-read-map, hero-reuse-discipline (the methodology the workflows fork).

  • 4 sealed learnings from real launch runs — verify the rendered result, downscale gate-media before web, no hex in a render prompt, close with updateTask not moveTask.

  • A registry starter — launch-pack-starter, a forkable launch-card scaffold with hero-reuse encoded in its shape.

  • A SKILL.md router over the references, workflows, registry and learnings.

I also re-pinned @spideriq/publish-skills from ^0.14 to ^0.21. The role, its judgment, its four workflows and its 16-skill toolkit are unchanged — v0.2 stocks the room, it doesn't rebuild it.

case-studies-v0.1.0

@di-atomic/case-studies v0.1.0 — proof you can actually publish

I had real client wins and no repeatable way to turn one into a proof asset I could publish. Every attempt became a bespoke negotiation over which numbers I could say and who signed off, so the strongest evidence I owned stayed stuck in transcripts. This first release fixes the order and the discipline around it.

What's new in v0.1.0

  • Release before the interview, not after the draft. The skill secures the legal sign-off up front, so a story never dies at month six with all its cost sunk.

  • Every number carries its source. A script walks the Result section figure by figure, and any percentage over 100% has to show its absolute baseline, so "up 1,200%" fails but "up 1,200% (3 to 39 a month)" passes.

  • The two beats an AI always drops. It enforces "what they tried before" and "the bumps", because a case study that reads frictionless reads fake.

  • It never claims a status a regulator confers. For REACH and CLP work it writes "supported the dossier", never "made them compliant", and reads a human-owned approval gate it can never write itself.

Guidance-only: it decides and gates, and composes copy-engine, voice-builder, explainer-illustrations, section-designer, and @spideriq/publish-skills to do the work. Backed by 25 sourced exemplars, 2 ask-and-release templates, 20 learnings, and 6 scripts that print PASS or FAIL.

Live on the marketplace as @di-atomic/case-studies. Trigger it with "write up the ONYX engagement as a case study".

cro-actions-v0.1.0

@di-atomic/cro-actions v0.1.0 — findings become a shippable plan

My auditor could tell you a page was broken. It could not tell you what to change it to, in what order, or how long that would take. cro-actions closes that gap: it turns a ranked finding list into a plan where every action is concrete enough to start on Monday.

What's new in v0.1.0

  • Every action names a target and cites evidence. An action must carry a source-cited measured lift (or an explicit unverified flag) plus a named component to install or a specific content edit. No evidence and no target, and it does not ship.

  • Three scripts gate every plan. One rejects uncited actions and caps a plan at 20% unverified. One grades effort against its change-type band. One lints for empty verbs, so "improve the CTA" fails on naming no element, no change and no success metric.

  • Lifts are never summed. Individual gains overlap, so projections stay per-action rather than adding 12, 9 and 6 into a 27 that nobody will hit.

  • 32 action blueprints ship with the bundle. Each carries its own source and measured lift, alongside 7 fix recipes and 10 learnings.

This completes the chain: cro-audit finds it, cro-actions plans it, cro-optimizer checks whether the win was real.

Live on the marketplace as @di-atomic/cro-actions. Trigger it with "what should I fix first".

kpi-advisor-v0.1.1

@di-atomic/kpi-advisor v0.1.1 — now visible on the marketplace

I published kpi-advisor on 6 July and then it sat where nobody could reach it. The package shipped with its tier set to internal and its skill visibility set to internal, which is the marketplace equivalent of leaving the lights off. For sixteen days the skill was live, healthy, and invisible. This release fixes that and finishes the listing I never filled in.

What's new in v0.1.1

  • Visible and installable. Tier and skill visibility are both public now, so kpi-advisor appears in the catalogue and installs like every other @di-atomic package. Nothing about the skill logic changed. It was always working; you just could not see it.

  • A marketplace card with actual content. The card previously carried an empty feature list and no images. It now has a written description, feature bullets, a hero image, and three screenshots showing the four investor lenses, the distributor scale comparison, and the interpretation pipeline.

  • Four investor lenses, stated up front. The skill reads the same numbers as a growth VC, an efficiency fund, a bootstrapper, or a regulated B2B distributor, and it asks which one you want rather than picking silently. The distributor lens applies reorder and account concentration math instead of SaaS churn thresholds.

  • Every verdict carries a citation. Each health call points at a dated benchmark from the 55 registry items, recommendations are capped at three, and a missing metric produces a question rather than an estimate. Five bundled scripts enforce this.

Live on the marketplace as @di-atomic/kpi-advisor. Trigger it with "read my numbers like a CFO".

influencer-marketing-v0.1.2

@di-atomic/influencer-marketing v0.1.2 — a card you can read

The skill itself has not changed. Its marketplace card had, until today, nothing on it: no hero, no screenshots, no feature list, and a tier that said one thing in the manifest and another in the registry. If you went looking for it, you found a name and a wall of description text. That is fixed, and the fix is worth writing down because a bare card is a silent failure. Nothing errors. It just does not sell.

What's new in v0.1.2

  • The card has an asset kit. A hero plus three panels: the IMPACT loop end to end, the engagement-over-followers inversion, and the peer chain the skill composes.

  • Five features, in plain words. Ranks on engagement rather than followers, discovers creators without a marketplace subscription, briefs with guardrails instead of scripts, carries an FTC/ASA/DSA disclosure clause on every brief, and measures at 7, 30 and 90 days.

  • The manifest tier now matches the registry. It read internal while the registry record said beta. Same package, two answers, depending on which field you asked.

  • The package type is declared. The type: skill field was simply absent before.

Nothing about the guidance, the 16 recipes, the 56 registry assets or the 5 enforcement scripts moved. This release is the shop window, not the shop.

Live on the marketplace as @di-atomic/influencer-marketing. Trigger it with "find creators for my product and build me a campaign".

cro-audit-v0.1.2

@di-atomic/cro-audit v0.1.2 — now customer-visible

My CRO diagnosis skill has been finished since June and nobody could see it. It shipped at tier: internal, which hides a package from the marketplace, and I did not catch it for a month. That is fixed, and the release carries the card it should have had on day one.

What's new in v0.1.2

  • Now customer-visible. Both tier and the skill's visibility moved from internal to public, so cro-audit finally appears on the marketplace.

  • A card you can judge it by. Hero plus three screenshots, a first-person description, and five feature bullets, instead of the empty slots the package shipped with.

  • Fixed two wrong claims in the description. It said the ICE rank was severity times lift times effort; it divides by effort, as SKILL.md always said. And it promised a handoff to cro-actions, a sibling that is not built yet.

  • Trimmed the bundle. The tarball no longer carries the bulky upstream working code it was adapted from. The MIT licence notices and the provenance README stay, because attribution is not optional.

Nothing about how the skill reasons has changed. The eight dimensions, the sixty evidence cards, the thirteen learnings and the four enforcement scripts are exactly as they were. This release is about being findable and being honest on the card.

Live on the marketplace as @di-atomic/cro-audit. Trigger it with "audit my landing page".

podcast-v0.1.3

@di-atomic/podcast v0.1.3 — Now customer-visible

podcast writes a multi-speaker episode script from your source material and gates it with four PASS/FAIL checks before a second of audio exists. It has been live since June, but hidden. In v0.1.3 I made it visible and cleaned up what the bundle was actually shipping you.

What's new in v0.1.3

  • You can find it now. The package shipped at the internal tier with its skill marked private, so it was published and installable but invisible on the marketplace. Both are now public.

  • The card shows what the skill does. New hero plus three explanatory panels, five feature bullets, and a rewritten description that leads with the reason this exists: you cannot quietly edit an episode somebody already downloaded.

  • Fixed: the bundle was shipping you my internal files. The brief, my test fixtures, the propagation drafts and the creative prompts were all inside the tarball. Removed. The bundle went from 140 files to 121, and the MIT licence and provenance note still ship.

  • Fixed: upstream naming leaked into 7 files. Three provenance paths, one learning note, one registry item name and the marketplace description all carried the name of the project this was adapted from. Provenance now points at the one file where it belongs.

Nothing changed in how episodes are written. The four gates, the 1 to 4 speakers and the two-pass authoring chain are all unchanged from v0.1.1.

Live on the marketplace as @di-atomic/podcast. Trigger it with "turn this research into a podcast".

cro-optimizer-v0.1.2

@di-atomic/cro-optimizer v0.1.2 — now customer-visible

cro-optimizer has been on the marketplace since June, and until today nobody could see it. It shipped at internal tier, which hides a package from the catalog entirely. That is fixed. It is the third skill in my CRO chain: cro-audit finds what is broken, cro-actions plans the fix, and cro-optimizer decides afterwards whether the result was actually real.

What's new in v0.1.2

  • Customer-visible. Tier moved from internal to beta and the skill entry is public, so it now appears in the catalog and installs like every other @di-atomic package.

  • A marketplace card that explains the loop. The listing carries a hero and three panels covering the retest reversal, the two mandatory gates, and the write-back into cro-audit's baseline.

  • Cleaner bundle. The published archive no longer ships my working brief, the archived umbrella brief, or the internal test fixtures. Customers get the skill, not the workbench.

  • Both gates documented on the card. The significance gate and the causal-overreach gate are named in the listing copy, because they are the reason to install this rather than read a stats blog.

Live on the marketplace as @di-atomic/cro-optimizer. Trigger it with "is this a real win?".

retention-v0.1.2

@di-atomic/retention v0.1.2: three save playbooks, not one

Retention is now customer-visible on the marketplace. It is the keep-customers brain that picks up where sales-pipeline ends, and the thing it exists to get right is that keeping a customer is three different jobs. Agency, SaaS and B2C churn for different reasons, on different clocks, and the save move that rescues one will lose you another. The skill branches on business model before it proposes anything.

What's new in v0.1.2

  • Business-model branching runs first. The skill detects whether a relationship is agency, SaaS or B2C before it scores risk or picks an offer, because a discount that rescues a consumer reads as an insult to an agency client.

  • Save moves are matched to the reason code, not the account. Price and value churn takes a discount or a downgrade; frustration churn takes a conversation. Pause is offered ahead of any price cut, since roughly a quarter of would-be cancellers pause instead.

  • Involuntary churn is treated as plumbing, not persuasion. Between 20% and 40% of subscription churn is an expired card rather than a decision, so dunning is sequenced ahead of any save offer on cost-to-recover.

  • Four scripts gate the advice. They fail on a discount aimed at an agency client, a referral request sent to an unhappy customer, absolute claims in regulated copy, and a dunning cadence missing its documented windows.

Backed by 70 metric-bearing exemplars tagged by business model, 21 learnings, and 11 references. Guidance-only: it decides and composes, then hands sending to outbound-engine and smartlead. Live on the marketplace as @di-atomic/retention. Trigger it with "score the churn risk for this account".

sales-pipeline-v0.1.3

@di-atomic/sales-pipeline v0.1.3 — You can actually install it

sales-pipeline has been on the marketplace since June, and until today you could not install it. It shipped hidden. This release fixes distribution and packaging. The skill itself does not change.

What's new in v0.1.3

  • You can find and install it now. Versions 0.1.0 through 0.1.2 published at tier internal, which hides a package from customers. v0.1.3 declares tier beta, so the skill is visible on the marketplace and installable for the first time.

  • The bundle contains only the skill. Earlier versions shipped my working files to you: the brief, the test fixtures, the creative prompts, and a folder of draft social copy. v0.1.3 stages five canonical entries plus skills/sales-pipeline/, so what you install is the skill and nothing else.

  • The marketplace card has content. The media block was empty and there were zero feature bullets, so the listing rendered blank. v0.1.3 adds a hero image, screenshots, and feature bullets that say what the skill does.

  • Nothing about the behaviour changed. The router, 12 references, 9 recipes, 81 registry assets, 23 learnings, and 5 enforcement scripts are byte-identical to 0.1.2. If you were already running it from a direct bundle, there is nothing to re-test.

This is a distribution release, not a feature release. The work was making a finished skill reachable.

Live on the marketplace as @di-atomic/sales-pipeline. Trigger it with "create a deal for this prospect".

community-v0.1.1

@di-atomic/community v0.1.1 — community that ties to revenue

I built this after reading 52 community teardowns and finding that the strongest champion programs pay nothing at all. Notion's ambassadors are unpaid. AWS Community Builders get credits, a private Slack, and a badge. Cash attracts mercenaries; access attracts advocates. That finding, and the anti-vanity discipline behind it, is what this skill enforces.

What's new in v0.1.1

  • Member-to-revenue is a hard gate, not a report field. Every champion and every partnership carries a revenue_tie mapping a member to a deal, or an explicit exploratory: true flag. There is no third option, and verify-member-to-revenue-tracking.mjs fails the build when one is missing.

  • Champion activation waits for sustained signal. Three months of consistent depth and reach, never a single good interaction. Activate too early and you burn the person out; wait too long and somebody else recruits them.

  • It runs on the stack you already own. The AgentBoard contacts board is the member CRM with lifecycle columns from lurker to moderator, content_calendar is the scheduler, scrapecreators is the discovery surface, and post-writer drafts in your own voice. No rented community platform holds your list.

  • Salesy tone fails a script, not a review. Topic first, product second, so lint-salesy-tone.mjs flags product-first copy and any call to action placed ahead of value.

Guidance-only, so your agent makes the calls: 7 hard rules, 8 recipes, 52 evidence-bundled registry items, 25 learnings, and 5 scripts that print PASS or FAIL with real numbers.

Live on the marketplace as @di-atomic/community. Trigger it with "who are our champions?".

distribution-launcher-v0.3.2

@di-atomic/distribution-launcher v0.3.2 — Now customer-visible

This release makes the directory-launch skill visible to customers for the first time, and gives it the marketplace card it should have shipped with. The planning content did not change. What changed is that you can now find it, read what it does before installing, and see the stance it takes.

What's new in v0.3.2

  • Visibility. The package moved from the internal tier to beta, so it appears in marketplace search and installs like every other Di-Atomic skill. It has been published and healthy since June, just hidden.

  • A card that explains the stance. The listing now carries a hero image, three panels, a first-person long description, and feature bullets. Before this release the card was a title and a one-line summary, which is a poor way to introduce a skill whose whole argument is that listings matter.

  • The argument, stated plainly. Directory profiles are now a source that AI systems read when deciding what to recommend, so a stale profile misroutes buyers. The skill has always enforced a 180-day freshness window over its 72-directory registry. The card now says why that gate exists.

  • Bundle shape confirmed. The nested layout landed in v0.3.1. This release verifies it against the packaging gate so skill_read resolves the guide, the registry, the six recipes, and all 13 learnings.

Nothing was removed and no behaviour changed, so upgrading is safe.

Live on the marketplace as @di-atomic/distribution-launcher. Trigger it with "where should I list my product".

voice-builder-v0.3.2

@di-atomic/voice-builder v0.3.2 — visible on the marketplace

voice-builder has been on the marketplace since June, but at internal tier, which meant you could not see or install it. That was wrong for a foundation skill. Both copy-engine and section-designer already declare voice-builder as a peer dependency, so the thing they depend on was invisible to the brands installing them. This release fixes the packaging and the shopfront, not the skill.

What's new in v0.3.2

  • Installable by any brand. Tier moves from internal to beta, so voice-builder now appears on the marketplace and resolves as a real peer instead of a dangling reference.

  • A marketplace card you can actually read. The card shipped with an empty media block and zero feature bullets. It now carries a hero image, three explanatory panels, a first-person description, and five feature bullets.

  • A smaller, cleaner bundle. Earlier versions shipped my internal brief, the 13 test transcripts, the propagation drafts, and the creative specs to every customer. Those are gone from the tarball. You get the skill, not my workbench.

  • No change to how it works. The 15 starter voices, 4 enforcement scripts, 10 learnings, 5 recipes, and 4 references are byte-identical to 0.3.1. Nothing you built on top of it moves.

If you installed 0.3.1, upgrading gains you the card and the smaller download. If you could not find voice-builder at all, that was the tier, and it is fixed.

Live on the marketplace as @di-atomic/voice-builder. Trigger it with "build my brand voice".

icp-discovery-v1.1.2

@di-atomic/icp-discovery v1.1.2 — now open to everyone

I shipped this targeting planner hidden. It has been sitting on the marketplace at internal tier, which means it worked and nobody could install it. That changes today, and I filled in the card that was sitting empty next to it.

What's new in v1.1.2

  • Open to everyone. The package moves from internal to beta tier, so you can install it instead of just reading about it.

  • A card that actually explains the skill. Hero image, three explanatory panels, five feature bullets and a written overview replace what were three empty fields.

  • A smaller, cleaner download. I was shipping my own design brief, test fixtures and draft social posts inside the bundle. They are gone, and the package dropped from 58 KB to 37 KB.

  • Honest version numbers. The previous release bumped the manifest but left both skill files reading 1.1.0. All three now agree.

Nothing changed in the guidance itself. The references, recipes, the 10 sourced exemplar profiles, the 7 learnings and both verifier scripts are byte-identical to what you were already getting.

Live on the marketplace as @di-atomic/icp-discovery. Trigger it with "who should I target for this product, and how do I get them?"

post-writer-v1.5.0

@di-atomic/post-writer v1.5.0 — Sharper openers, fixed handoff

I ran a cross-analysis pass over my own skills and it surfaced two things worth shipping. One was an opener principle that kept turning up independently across separate craft research. The other was a publishing rule of mine that had quietly gone stale and was telling agents to do the wrong thing.

What's new in v1.5.0

  • Name an enemy, and make it a behavior. The most defended opener across the research is naming the broken default you replace, before anything else. The hard limit is that the enemy must be a practice, never a named competitor, because competitor-bashing measurably backfires.

  • The first line only has to earn the second. Openers were being asked to carry the whole post. They are not. A first line that buys one more line of attention is doing its job, and that reframing produces less strained hooks.

  • The publishing handoff was stale and is now correct. A blog body is sent as {markdown} and the server normalizes it. The old instruction to hand-convert prose into Tiptap, or watch the post render empty, no longer applies and has been removed.

  • Corrected tenant specifics. Tags on this tenant are plain strings rather than tag entities, cover images must come from an allowed host, and a render check on the live page is now a required step rather than a suggestion.

Additive release. No recipe, router or script changed, so nothing you already rely on moves.

Live on the marketplace as @di-atomic/post-writer. Trigger it with "draft a LinkedIn post about this".

hook-generator-v1.2.1

@di-atomic/hook-generator v1.2.1 — hooks with sources, not guesses

I rebuilt the way this skill produces an opener. It no longer writes hooks from training data. It installs them from a swipe file where every entry carries the URL it came from, then refuses to hand you the set until three scripts agree it passed.

What's new in v1.2.1

  • Breaking: the HTTP backend and its three methods are gone. This skill is guidance-only, so the schema and provider calls that used to 404 have been removed. Your agent reads the skill through skill_read and runs the loop itself, with five peer skills declared.

  • 52 sourced hook templates replace invention. The agent matches on platform and angle, installs the templates, and writes your topic into shapes that ran on real posts. Six angles are covered: contrarian, number-led, admission, story, future-shock, identity.

  • Honest metrics, including the uncomfortable ones. Only 7 of the 52 carry a verifiable or category-level number. The other 45 are labelled pattern-level rather than dressed up with figures nobody measured.

  • Three verifiers gate every set. Per-platform length ceilings, an AI-slop blacklist with a non-overridable BPR and CLP gate for regulated products, and a structure check that demands at least four distinct angles and at most one question.

Non-English templates stay gated until the native lead for each language signs off, and Hebrew is out entirely. Ask for those today and the skill tells you so instead of guessing.

Live on the marketplace as @di-atomic/hook-generator. Trigger it with "write me hooks for".

url-utils-v0.3.1

@di-atomic/url-utils v0.3.1 — URL hygiene agents can verify

A URL that parses is not a URL that is safe, and for a long time my agents treated those as the same verdict. url-utils is the skill that separates them. It carries the patterns, the installable assets, and three scripts that hand back a PASS or a FAIL with counts, so an agent stops reasoning its way through hex codes and UTM conventions on every call.

What's new in v0.3.1

  • Guidance-only, no phantom backend. The old typed-method surface declared an API url-utils never had, and a typed call against it would 404. Every operation here is pure logic your own runtime already runs. The retired schema is kept at source/legacy/ for provenance.

  • 22 installable registry assets. Eight UTM channel templates, six per-platform tracking-parameter sets, four CMS canonical patterns, plus fixtures and configs. Install one instead of re-deriving it.

  • Three verifier scripts you run directly. verify-url.mjs catches mixed-script homographs, double percent-encoding, userinfo spoofs and suspicious ports. strip-tracking.mjs removes the full click-ID family, not just utm_*. lint-utm.mjs enforces the GA4 medium vocabulary and fails a manually-tagged Google Ads URL.

  • A hard gate on stripping. No parameter you have declared attribution-authoritative is ever removed. Run strip-tracking.mjs --mode=audit to see what would go before anything changes.

Live on the marketplace as @di-atomic/url-utils. Trigger it with "clean these URLs".

api-docs-writer-v0.1.0

@di-atomic/api-docs-writer v0.1.0 — the docs an importer skips

For a while I imported an OpenAPI spec, generated a reference section, and called the docs done. They weren't. An importer writes Reference and stops there, skipping response examples, error resolutions, and three of the four kinds of docs a developer actually reads. This first release is the discipline that finishes the job.

What's new in v0.1.0

  • Import, then enrich. The skill imports the OpenAPI reference, then adds the response examples and error resolutions the importer drops, plus the tutorial, how-to, and explanation docs it never writes.

  • Five scripts that gate the set. Diátaxis coverage, one runnable example per method, an error section per fallible method, and per-registry render checks each return PASS or FAIL with numbers. A doc set that looks complete but fails one does not ship.

  • Catches real spec defects. On VayaPin's live API it flagged a missing servers block that would have pointed every generated code sample at the wrong host.

  • Ships live, not just saved. Delivery runs through the SpiderPublish docs theme: a three-column reference with a pinned tabbed code panel, published and deployed.

Live on the marketplace as @di-atomic/api-docs-writer. Trigger it with "write API docs for this OpenAPI spec" or "audit these API docs".

v0.1.5

@di-atomic/social-media-manager v0.1.5 — it sets up its own board

In v0.1.5 the skill stops assuming a workspace exists and builds its own. This release is additive; nothing changes in how you already run it, the agent just handles more of the setup and uses more of the board.

What's new in v0.1.5

  • It provisions the board for you. On a brand with no content calendar, the skill now creates one automatically, seeded with the right columns and the full field set. A new brand goes from nothing to a working plan without you touching board settings.

  • It uses the whole board, not a slice. Every planned post now carries which account it posts from, a permanent image link, and the per-platform publishing options, so the card holds everything the publish step needs instead of guessing.

  • The plan always resolves first. Before it plans a single post, the skill finds or builds the brand's board, because the board is the plan and there is nowhere else for a post to live.

  • The account is never guessed. A brand usually has several connected accounts, so each card now records the exact one to publish from, which removes a whole class of wrong-account mistakes.

Live on the marketplace as @di-atomic/social-media-manager. Trigger it with "set up our social media department".

delivery-manager-v0.1.0

@di-atomic/delivery-manager v0.1.0 — a role that owns the launch

Propagation used to be five sessions producing each surface blind to the others. delivery-manager is a new profession that owns the whole launch from one card.

What's new in v0.1.0

  • New profession available. Equip one role that seeds the launch card, coordinates every surface, and holds the publish gate.

  • The hero renders once. Blog, changelog, listing, and marketplace reuse the same image instead of re-rendering it.

  • It never fabricates. Every surface draws from the verified real release, and a release too small to warrant a launch is declined.

Sixteen linked skills, four workflows, and the delivery-manager guild.

Available on the marketplace as @di-atomic/delivery-manager. Trigger it by equipping the profession: opvs profession equip @di-atomic/delivery-manager.

v2.3.0

@di-atomic/outbound-engine v2.3.0 — the human approval gate

outbound-engine is the cold-outreach brain: it picks the copywriting framework for an ICP, writes the whole multi-touch sequence, and runs five verifier scripts before you send. Version 2.3.0 adds the part I was missing: instead of assuming a workspace, the skill now provisions and drives a campaign board, so you plan, approve, and watch every campaign in the open.

What's new in v2.3.0

  • The skill provisions your campaign board. The first time you run a campaign it advises you on the structure, asks before creating anything, then builds a nine-column board where each campaign is one card and the plan lives in the card fields for you to read.

  • Two columns are yours. Awaiting Approval and Copy Review are human-owned gates. The agent drafts everything but cannot move a card out of a column you own, so nothing warms a domain or sends until you sign off.

  • It reuses what it learned. planStrategy now recalls the framework and tone already proven for a brand and ICP before deciding, instead of re-choosing from scratch every run.

This is an additive release. The fourteen frameworks, the follow-up ladder, and the five verifier scripts are unchanged.

Live on the marketplace as @di-atomic/outbound-engine. Trigger it with "build a cold campaign for {ICP}".

v0.1.0

@di-atomic/help-docs-writer v0.1.0: a help center you own

I shipped help-docs-writer, a skill that plans, writes, screenshot-briefs, audits, and maintains a client-facing help center, then ships it to your own site instead of a vendor knowledge base you rent by the seat.

What's new in v0.1.0

  • Diátaxis discipline, enforced. Every article declares its type (tutorial, how-to, reference, explanation) and follows a locked eight-section shape, checked by six scripts that pass or fail with numbers rather than a prompt you hope the model honored.

  • Screenshot briefing with a PII-blur gate. The skill briefs machine-readable screenshots rather than rendering them, and requires a blur list on auth, settings, and billing screens to meet GDPR and CCPA. When the product changes, it flags which screenshots went stale.

  • Ships to your own site. Output lands as SpiderPublish documentation pages on your own domain, in your own design, so you own the help center rather than a login to one.

  • Multilingual and compliance-aware. Works across EN, DE, HE, RU, RO, FR, and ES, with the blur discipline built for regulated, compliance-heavy products.

Live on the marketplace as @di-atomic/help-docs-writer. Trigger it with "plan a help center" or "write a help article".

v0.1.3

@di-atomic/social-media-manager v0.1.3 — the social-ops loop

In v0.1.3 I folded lessons from a live deployment back into the skill. This release is additive. Nothing changes in how you already use it; the agent just knows more about how the pieces fit and where it must stop for you.

What's new in v0.1.3

  • Added the canonical social-ops loop recipe. It lays out the full order every other recipe is a slice of: recall what won, plan the calendar, create with the specialist skills, stop at the human review gate, publish, then write the result back to memory. One page the agent can follow end to end instead of stitching the steps together itself.

  • Hardened the publish rules. Nothing leaves the review column without a human approval, and only a stored, permanent image link is allowed on a review or publish card. A provider link that expires in a few hours can no longer reach a post scheduled for next week.

  • Clarified the media step. An image generated through SpiderGate arrives already stored, so the agent uses that link directly and only persists a raw provider link when that is the only thing it holds.

Live on the marketplace as @di-atomic/social-media-manager. Trigger it with "plan my content for next week".

v1.5.1

@di-atomic/media-generator v1.5.1 — route to the real engine

media-generator tells an agent how to produce brand-grade images and video, then hands the actual call to a peer engine. In v1.5.1 I fixed the thing that tripped up a live agent across three sessions: it could not tell that the methods it saw were guidance, not endpoints.

What's new in v1.5.1

  • The skill now points at the real engine. A banner at the top names the exact failure an agent hits when it calls a method directly, and names the peer to call instead. One deployed agent burned three sessions on this before the sign existed.

  • Your generation settings stop vanishing. A new lesson makes the agent read a model's declared inputs before it generates, because any parameter the model does not recognise is dropped with no error. A wrong casing costs you the setting, not a warning.

  • Generated assets stop turning into dead links. A new lifecycle recipe tells the agent when a returned URL is already durable and when it still needs persisting, so a hero image does not expire a day after it ships.

  • Images stop inventing fake logos and gibberish text. A new guardrail recipe blocks readable fake text and invented brand marks, the two tells that read as AI slop on sight.

Nothing about what the skill produces changed. What changed is that an agent reaches the right engine on the first try instead of the fourth.

Live on the marketplace as @di-atomic/media-generator. Trigger it with "make a hero image".

v2.2.0

@di-atomic/outbound-engine v2.2.0 — follow-up ladder made explicit

outbound-engine is the cold-outreach brain: it decides which copywriting framework fits an ICP, writes the whole multi-touch sequence in that framework, and runs five verifier scripts before you send. Version 2.2.0 folds in lessons from an agent I have had running live outreach, and it makes the follow-up ladder a first-class part of every sequence instead of an afterthought.

What's new in v2.2.0

  • The sequence shape is now explicit. A sequence is the first email plus two to three timed follow-ups, each with a different angle. A new recipe codifies the ladder so no touch repeats the same pain, subject, or "just checking in."

  • Client examples become the seed. When a client hands you their own messages, the skill adapts from them (structure, tone, offers, calls to action) instead of inventing a fresh voice. With no examples, it builds from the brand voice profile.

  • Warmup traffic is separated from real replies. A new rule keeps machine-to-machine inbox-warmup mail out of your reply rate and off your pipeline, so your campaign numbers stay honest.

This is an additive release. The decision tree, the fourteen frameworks, and the five verifier scripts are unchanged.

Live on the marketplace as @di-atomic/outbound-engine. Trigger it with "build a cold campaign for {ICP}".

v1.9.0

@di-atomic/smartlead v1.9.0: replies that can't fail silently

I shipped v1.9.0 of @di-atomic/smartlead, the cold-email send skill in my outbound stack. This release folds in four lessons my deployed agents surfaced in production. The biggest one came after a live campaign sent perfectly and lost every reply, because it went out with no webhook attached.

What's new in v1.9.0

  • Webhook on every create. A Smartlead campaign with no webhook still sends, but silently drops every reply and click with no error. The skill now attaches the webhook in the same flow as the campaign, and won't treat a campaign as "ready" until listWebhooks confirms one.

  • skill_describe blindness, handled. A live marketplace skill returns no methods from skill_describe. That is normal, not a breakage. The skill now says so, so an agent calls the methods directly instead of assuming it is gone.

  • Phantom methods removed. DNS-auth, webhook handling, and reply follow-up are not API calls; they are a script, a recipe, and a composition. The old internal method stubs that returned 404 are gone.

  • Sender discovery, made explicit. listEmailAccounts is the step that turns a from-address into the account id every other call needs, now documented as step one with the shared-master-key warning.

Live on the marketplace as @di-atomic/smartlead. Trigger it with "launch a Smartlead campaign."

v0.5.1

@di-atomic/copy-engine v0.5.1 — the body-shape trap, mapped

copy-engine drafts the words. The surface those words land on (blog, changelog, page, help doc) decides whether the body is markdown, Tiptap JSON, or an HTML string. v0.5.1 folds that whole matrix into the skill so I stop shipping the wrong shape to the wrong surface.

What's new in v0.5.1

  • Body-shape matrix documented. The SpiderPublish surface-to-body-shape mapping now lives in references/, so a session sees at-a-glance whether a target expects markdown, Tiptap, or HTML before it drafts a single word.

  • Dual-register within one piece. A new learning documents when a single blog post benefits from shifting register mid-piece (technical narration into a conversational aside, then back into a dev-callout) so long-form reads like a person thinking, not one voice droning.

  • Worked recipe: blog with inline images. A new example walks through composing a full launch post that lands the hook, the sections, the hero image, and the inline explainer diagrams in one composition pass, no context-lost handoff between skills.

Result: the composer knows the target surface before it writes, and the writing itself carries more life.

Live on the marketplace as @di-atomic/copy-engine. Trigger it with "write copy for…"

v0.2.0

@di-atomic/changelog-writer v0.2.0 — field notes from shipping it

changelog-writer turns a shipped release into one correctly-rendered changelog entry on your own site, in your own voice. v0.2.0 is an experience wave: I folded in what actually broke while I shipped the standard, so the skill warns you before you hit the same traps.

What's new in v0.2.0

  • It knows the traps now. A new learning on why you cannot curl a changelog fix (the tenant token only reads; the write API rejects it), plus three real live entries carried in verbatim as recipes and a reference on the compact and minimal body shapes the first recipes missed.

  • Recovery is written down. The deployment guide gained an edge-cases section: what to do when the write tool is not loaded, how to handle a yanked release, and keeping a multi-artifact release consistent across the blog and the changelog.

  • Additive only, zero scope change. One learning, three recipes, one reference, one instruction delta. The decision tree, the five gate scripts, and the peers are untouched.

The skill got smarter without changing what it does or how you use it.

Live on the marketplace as @di-atomic/changelog-writer. Trigger it with "write the changelog entry".

v0.3.0

@di-atomic/section-designer v0.3.0 — Molds as first-class

section-designer turns a rough block into a brand-grade section in one of 150 named design languages, then runs a script-driven critique before it hands anything off. In v0.3.0 I gave it a memory of what "correct" looks like, so the output stops drifting between turns.

What's new in v0.3.0

  • Molds are now first-class. I promoted molds/ to a bundle-root layer with three seed molds: stripe-fintech-pricing-hero, linear-app-b2b-cta-section, and apple-premium-consumer-features-grid. Each ships a canonical_specs block the critique script checks against.

  • The critique gate went from 7 dimensions to 9. Rule 8 makes every composed section declare which mold it started from. Rule 9 verifies the composed values against that mold's canonical specs, so a section cannot quietly wander off its reference.

  • Token extraction runs about 100x faster. I pre-parsed the tokens.yaml files for all 150 design systems, so extract-tokens.sh drops from roughly 200ms to 2ms with zero transcription drift across turns.

The result: sections that ship faster and read as one system instead of 150 one-off guesses.

Live on the marketplace as @di-atomic/section-designer. Trigger it with "redesign this hero" or "apply linear-app style to this pricing block."

explainer-illustrations 0.2.1

explainer-illustrations v0.2.1 — plan the illustrations before you render them

explainer-illustrations is the planning brain between your copy and your image tool: it reads a finished article, extracts one cognitive anchor per image, and returns a shot list before anything is drawn — so every illustration explains instead of decorates.

What's new in 0.2.1

  • Real brand style, enforced. The skill now recalls a brand's locked visual style as a hard gate and refuses to invent a palette. For Di-Atomic that is a dark board, white line work, and a single gold accent.

  • One render path. Rendering routes only through media-generator and SpiderGate, and the deliverable is a durable hosted image URL — never a raw blob.

  • Ship what readers keep. Studies put articles with images at roughly 94% more views; the honest signal of a good explainer is that people save it instead of arguing about it.

Live on the marketplace as @di-atomic/explainer-illustrations. Trigger it with "illustrate this article."

startup-forecast-v0.1.0

@di-atomic/startup-forecast v0.1.0 — forecast a startup before you run the numbers

New skill, live on the OPVS marketplace. startup-forecast projects the future of a startup idea or a strategic bet, and it runs the pre-mortem and tarpit scan before any figure. It branches the math by business model (SaaS-B2B, DTC, marketplace, agency, regulated), forces bottom-up SOM against a directional TAM, reads the idea through four VC-persona lenses, anchors projections to reference-class base rates, and reports worst/base/best ranges instead of point estimates.

Six enforcement scripts gate every forecast with pass/fail counts. Every forecast is snapshotted to agentdocs and its assumptions stored in agentmemory for later review. Guidance-only. Triggers: "forecast this startup", "is this a tarpit".

v0.1.1

@di-atomic/tobacco-compliance v0.1.1 — sourced compliance verdicts

I shipped tobacco-compliance, the first skill in a new compliance lane for me. It answers the three questions that gate a nicotine or tobacco launch, can I sell this here, what does the pack need to say, and is this marketing claim allowed, and it puts the regulation cited under every answer. My roots are EU chemicals compliance, REACH, CLP, and biocides, and this is that same discipline pointed at the nicotine market.

What's new in v0.1.1

  • Sourced verdicts, never guesses. Every rule carries a live government source, or it is flagged for verification. A build check fails the whole skill if any rule ships without one.

  • Full coverage, no silent gaps. The jurisdiction-by-product-class matrix is enforced one hundred percent filled across the EU, Germany, France, the UK, the US federal and state layers, Canada, and Australia.

  • On brand under constraint. It hands claim limits to copy-engine and voice-builder, so your compliant copy still sounds like you and never makes an unlicensed reduced-risk claim.

  • Hedged by design. Every answer is informed guidance with citations, not binding legal advice, and it says so.

Live on the marketplace as @di-atomic/tobacco-compliance. Trigger it with "can I sell a 10 mg pouch in Germany."