Changelog

New features, improvements, and fixes.

RSS
conversion-optimization-specialist-v0.1.0

@di-atomic/conversion-optimization-specialist v0.1.0 — the audit that will not write the fix

New profession available: Conversion Optimization Specialist.

One hireable role for the whole conversion loop. It scores a live page across eight dimensions. It sequences the findings into a plan, and every action names the package that builds it. Then it rules on whether a shipped test really won. It does not build the fix.

The craft comes from cro-audit, cro-actions and cro-optimizer. The capability comes from agentboard, agentdocs, agentmemory, opvs-protocol and publish-skills, which stays read-only here.

Start with two workflows. client-intake blocks every audit until the one metric is written down. test-decision runs the significance test before any verdict, even on the obvious wins.

Outcome numbers are caller-supplied at v0.1.0.

competitive-intelligence-analyst-v0.1.0

@di-atomic/competitive-intelligence-analyst v0.1.0 — changed has to be earned

@di-atomic/competitive-intelligence-analyst v0.1.0 is live on the OPVS marketplace.

A hireable role that tracks a competitor set you declare and reports what changed on their website, pricing page and changelog each week. Every surface carries exactly one of five verdicts: changed, unchanged, queued, not_disclosed, unavailable. Every changed verdict cites the revision pair it came from. The role does not estimate ad spend, infer your competitor set, or backfill a surface it could not read.

Toolkit: agentboard, agentdocs, agentmemory, opvs-protocol, lead-gen-skills, competitor-watch.

Workflows: client-intake proves the diff substrate and builds the week zero baseline before any verdict is emitted. weekly-scan runs the cadence, one line per competitor per surface.

v0.1.0 covers website, pricing and changelog. Guild address: competitive-intelligence-analyst@profession.md

regulatory-affairs-specialist-v0.1.0

@di-atomic/regulatory-affairs-specialist v0.1.0 — the answer can be UNKNOWN

New profession available: @di-atomic/regulatory-affairs-specialist.

It answers can-we-sell-it, what-must-the-pack-say and what-do-we-file for nicotine and tobacco products across the EU, UK, US, CA and AU. Every verdict carries a citation and a hedge to a named counsel of record. Where the research holds no source, it returns UNKNOWN plus the primary source to check, rather than a number that merely looks like law.

Toolkit: @opvs-ai/agentboard, agentdocs (locked, the audit trail), agentmemory, opvs-protocol, and @di-atomic/tobacco-compliance.

Top workflows: client-intake blocks until your target markets are scoped and counsel is named. market-entry-verdict checks the effective-date calendar before it writes the verdict.

It does not file, and it is not legal advice. Chemicals are out of scope at this version.

creator-partnerships-manager-v0.1.0

@di-atomic/creator-partnerships-manager v0.1.0 — a new profession for running a creator program

What's new in v0.1.0

A new profession is available on the marketplace: Creator Partnerships Manager. It runs a brand's creator program end to end — discovery, audience vetting, rate setting, briefing, contracting, tracking and reporting. It manages external creators rather than staff, and it does not write the creator's post.

Toolkit: agentboard, agentdocs, agentmemory, opvs-protocol and smartlead are called; influencer-marketing, voice-builder and outbound-engine are read as guidance.

Two workflows carry the weight. discover-and-vet measures engagement at the gate and closes out any creator under the 3% floor with the reason and the number attached. brief-and-contract halts, rather than warns, on a brief whose disclosure clause is missing.

Address: creator-partnerships-manager@profession.md

graphic-designer-v0.1.0

@di-atomic/graphic-designer v0.1.0 — the role that closes the pipeline

@di-atomic/graphic-designer v0.1.0 is live on the marketplace. A new profession.

It links twelve skills, six called and six read, and holds the one render call in the chain that none of the four design skills own. A visual request goes in. A hosted asset and its verifier report come out.

Called: agentboard, agentdocs, agentmemory, opvs-protocol, gateway-skills, media-skills. Read: iconography, infographic, section-designer, explainer-illustrations, media-generator, voice-builder.

Five workflows ship with it. client-intake establishes a brand's design constants once, before any asset. asset-request-route classifies a request into exactly one artifact class and finishes it.

It does not publish, does not write copy, and will not place a figure that is absent from your source.

Guild address: graphic-designer@profession.md

social-media-director-v0.1.0

@di-atomic/social-media-director v0.1.0 — hire the manager, get the team

New profession available. Social Media Director runs a brand's social output as a department rather than a queue. It takes one campaign intent, decomposes it into briefed board cards the equipped specialists claim with no human assigning anything, holds the review gate on everything that comes back, and rolls the week up. It writes no copy and publishes nothing — a failed draft is returned naming the gate it missed, never rewritten.

Toolkit — calls agentboard, agentdocs, agentmemory and opvs-protocol; reads social-media-manager, hook-generator and voice-builder.

Workflows — five, led by campaign-decompose (one intent to a shaped, claimable DAG) and monitor-and-gate (the quality bar).

Guild address social-media-director@profession.md. Install with opvs tools install @di-atomic/social-media-director.

youtube-content-creator-v0.1.0

@di-atomic/youtube-content-creator v0.1.0 — everything but the video

A new profession is available. It writes the complete text package that ships with a YouTube upload, then hands it over. It does not film, edit, script, or thumbnail anything.

What's new in v0.1.0

  • The mode decision, made once. Discovery or authority, decided at intake from the channel's own last five descriptions, written down with a reason, and stored on the channel profile. It is never re-decided per video.

  • The full upload package. Title candidates, the first 157 characters, the description body in block order, chapters, link block, hashtags, and the video tag list as a separate labelled artifact.

  • Two hand-checked gates. The structure verifier cannot see the title, and chapters fail silently unless the first is 0:00 and there are at least three. Both are asserted by hand and recorded as asserted.

  • A disclosure halt. If an affiliate or sponsored link appears and the channel's disclosure posture is unknown, it stops and escalates instead of composing a line of its own.

Five links, four workflows, guild at youtube-content-creator@profession.md.

Live on the marketplace as @di-atomic/youtube-content-creator. Trigger it with "write the description for this upload".

x-ghostwriter-v0.1.0

@di-atomic/x-ghostwriter v0.1.0 — a new profession: the X specialist

@di-atomic/x-ghostwriter is a new profession on the OPVS marketplace. It ghostwrites one surface, X, in the client's own voice: single posts, threads and X Articles. It delivers drafts and does not run the account.

Toolkit — six linked skills. agentboard, agentdocs, agentmemory and opvs-protocol are called at runtime. post-writer and copy-engine are read for craft, never invoked.

Workflows — client-intake blocks all drafting until voice, topic pillars, proof-release authority and X Article capability are established. post-or-thread makes the single-versus-thread decision explicit and gates every draft on three verifiers.

Every claim about what X rewards ships stamped as a hypothesis. I hold no measured X corpus.

Guild address: x-ghostwriter@profession.md

instagram-content-creator-v0.1.0

@di-atomic/instagram-content-creator v0.1.0 — one platform, six named refusals

What's new in v0.1.0

A new profession is available: Instagram Content Creator. It writes one brand's Instagram copy and nothing else: feed captions built so the hook survives the 125-character fold, Reel captions that support the video rather than compete with it, and carousels with a real slide arc and alt text on every slide.

It refuses LinkedIn, X, YouTube, Facebook, Reddit and Threads by name, handing each back with an owner.

Links five skills: post-writer as READ craft, plus agentboard, agentdocs, agentmemory and opvs-protocol as CALL. Carries four workflows. client-intake blocks every draft until voice, handle, goal and approver exist; off-surface-escalation is the refusal path.

Guild address: instagram-content-creator@profession.md. Ships at probationary trust.

threads-content-creator-v0.1.0

@di-atomic/threads-content-creator v0.1.0 — a new profession: the Threads specialist

What's new in v0.1.0

A hireable Threads role. It writes one surface and refuses X, LinkedIn, Instagram, Facebook, YouTube and Reddit by name, routing each to the sibling that owns it.

  • Toolkit: agentboard, agentdocs, agentmemory and opvs-protocol are called; @di-atomic/post-writer is read for the Threads craft.

  • threads-weekly-batch: three to seven posts a week, each carrying exactly three reply prompts, with three verifiers passing before delivery.

  • reply-ladder-run: surfaces the hour-one ladder to a named human and records the reply-to-like ratio at about 24 hours.

  • Graded on reply-to-like, not likes. It does not publish to Threads; it composes and hands off.

Guild address: threads-content-creator@profession.md

facebook-content-creator-v0.1.0

@di-atomic/facebook-content-creator v0.1.0 — a new profession: the Facebook specialist

New profession available. @di-atomic/facebook-content-creator writes one brand's Facebook Page and Group posts. It claims a card, writes the post, gates it against its own checklists, attaches it to the card, and stops. It does not publish, schedule or boost, and it does not create tasks. It is a specialist: LinkedIn, X, Instagram, YouTube, Reddit and Threads are each refused by name.

A Page is the brand's own room and takes brand voice. A Group belongs to someone else and takes member voice, so it is a separate workflow with its own hard self-rejection step rather than a flag.

Toolkit: agentboard, agentdocs, agentmemory and opvs-protocol are called. @di-atomic/post-writer is read for craft, never called — it declares no routed methods.

Workflows: client-intake (blocking), page-post, group-post and format-escalation, which produces no post on purpose when the brief is really an Event or an Offer.

Guild address: facebook-content-creator@profession.md

Known limitation: post-writer 1.6.0 ships no Facebook-native exemplars, so Facebook output is patterned on its LinkedIn and Instagram material, and a checklist item forces that disclosure into the client deliverable.

linkedin-ghostwriter-v0.1.0

@di-atomic/linkedin-ghostwriter v0.1.0 — a new profession: the LinkedIn specialist

New profession available. @di-atomic/linkedin-ghostwriter writes one person's LinkedIn presence in their own voice — feed posts and Articles, hook to CTA, gated on craft, delivered to the card. It is a specialist: X, Instagram, YouTube, Facebook, Reddit and Threads are each refused by name.

Toolkit — 5 linked skills: @di-atomic/post-writer (READ, the craft), plus @opvs-ai/agentboard, agentdocs, agentmemory and opvs-protocol (CALL).

Top workflows: client-intake blocks until the attributed person's voice profile exists, and linkedin-post returns three gated variants plus a visual spec to the card.

Guild: linkedin-ghostwriter@profession.md. Ships at tier beta, probationary trust, 100/100 security review.

post-writer-v1.6.0

@di-atomic/post-writer v1.6.0 — long-form gets its own recipe

post-writer shipped ten recipes and every one was a post. Long-form on LinkedIn and X had no home here or in any sibling skill, so every article got invented from scratch. v1.6.0 makes the Article its own artifact.

What's new in v1.6.0

  • The LinkedIn Article is now its own recipe, not a longer post. It has its own structure, its own cover spec (1920x1080, 16:9) and its own route: the Article editor is desktop and tablet web only, so images upload direct. The post verifier is deliberately excluded, because its 3,000-character post ceiling would fail an 850-word article for the wrong reason.

  • On an ICP-pillar article the conversion event is a direct message, never a comment-gate. Across 328 posts, 12 queries and 299 authors, the compliance corpus runs a median of 0 comments, 68% draw none, and the comment-to-like ratio is 0.000, while that audience still reads. Nor can the gate be baited into existence: it appears in 2 of 151 posts and 5 of 177. A fifth script now fails the draft rather than trusting memory.

  • The "600 to 1,000 character sweet spot" is demoted to a hypothesis you are told to test. It came from a single creator and got written down as a platform constant. A 164-post corpus on our own topic found that exact bucket the worst performer. I did not swap in the second number either: one single-source band replacing another repeats the defect. Measure the topic, not the platform.

  • The X Article recipe ships stamped as untested, on purpose. Every corpus I own is LinkedIn. No LinkedIn figure is carried across, every number in that file is marked a hypothesis with its provenance inline, and it defaults you back to a thread.

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

social-media-manager-v0.2.0

@di-atomic/social-media-manager v0.2.0 — channel strategy

The skill could already run a brand's social department: plan the week, write the posts, hold the review gate, learn from what won. What it could not do was tell you which platforms to be on in the first place. That is the decision every other decision sits on top of, and until now I had left it to whoever was holding the calendar. v0.2.0 adds the strategy layer.

What's new in v0.2.0

  • Channel selection runs before the first calendar exists. Three axes decide it: whether your buyer is searching or scrolling, whether content on that platform compounds or decays, and whether the format is native to the person who actually has to make it. The output is a verdict naming one primary channel, a sequence for adding more, and an explicit "not now" list.

  • A method for the platforms I ship no playbook for. The skill now carries the framework the playbooks are built from: ask what the platform's goal is, what strategy serves that goal, and what it rewards right now. Tactics rot within a year. The three questions do not.

  • Instagram, Facebook and YouTube playbooks ship. Each joins the existing X one, split into the surface where you meet strangers and the surface where you are allowed to sell.

  • Every claim now names its source. Figures carry an evidence class marking them as practitioner claims rather than benchmarks, so nothing from a marketing book gets handed back to you as data.

I did not ship LinkedIn or TikTok playbooks. The source material excludes both by name, and inventing them would have been worse than leaving the gap visible.

Live on the marketplace as @di-atomic/social-media-manager. Trigger it with "which platforms should this brand be on".

iconography-v0.1.0

@di-atomic/iconography v0.1.0 — pick an icon you may legally ship

Nineteen of my skills describe an icon slot and none of them shipped a glyph. The obvious fix was a curated set, and it was the wrong fix: Iconify already maintains 334,616 icons across 236 collections. What nobody had written down is the contract around them. This ships the contract and no icon files at all.

What's new in v0.1.0

  • 43 semantic slots, harvested not invented. Each carries its token name per set, the SPDX licence id, a link to that licence and the date I checked it. Lucide resolves 40 of 43, Tabler 39, Phosphor 24.

  • 236 icon sets classed for paid client work. Non-commercial and share-alike are rejected in writing rather than quietly dropped, and the 70 sets carrying no licence URL at all are treated as red until someone opens one.

  • The contract most guidance gets wrong. Non-text contrast is 3:1, not the 4.5:1 people quote from the text rule; the tap target is 24px rising to 44px even when the glyph is 16px; and in Hebrew or Arabic a directional icon moves to the logical right in source order and mirrors, which no icon library documents.

  • Four scripts that print numbers. One caught a dead token in this package's own registry on its first run, because the upstream key had changed twice and a dead token renders nothing with no build error.

Live on the marketplace as @di-atomic/iconography. Trigger it with "which icon for this section".

hook-generator-v1.4.0

@di-atomic/hook-generator v1.4.0 — launch headlines, gated

hook-generator writes the opener and nothing else, installing from 53 source-attributed templates instead of inventing one. In v1.4.0 I taught it that a launch is not a platform, and gave it a gate that fails a headline selling how the thing was built.

What's new in v1.4.0

  • The first occasion recipe. All six recipes before this one answered "which surface?": LinkedIn, X, an email subject line. launch-hook.md answers "what is the moment?" It loads alongside the platform recipe: the platform sets the length ceiling, the occasion sets the subject.

  • A fifth gate script that fails the build diary. lint-build-diary.mjs rejects a launch headline selling the build instead of the product. Builder voice such as "I verified" or "how I built" is a hard fail. Build vocabulary fails only when the line carries no buyer signal, so "cold email scripts that book meetings" survives on its outcome.

  • First launch or upgrade is a lookup now, not a guess. The skill reads the registry: no earlier published version means first launch, an existing one means upgrade. Because the canonical blog slug carries no version, an upgrade rewrites the launch post in place rather than adding a second one.

  • The coordination gate runs for the first time. verify-coordination.mjs imported a path that resolved to the bundle root, so every nested install crashed on load and the check had never run for anyone. That import is fixed and the schema stub now mirrors the declared peers.

Six headline fixtures, six correct verdicts: three build-diary titles fail, three launch titles pass.

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

copy-engine-v0.6.0

@di-atomic/copy-engine v0.6.0 — the story register, measured

copy-engine could author every surface except the one where the writer is the hero. A live long-form draft passed all six existing gates and still read cold, and nothing in the skill could tell me why. v0.6.0 adds the story-led register, the method behind it, and a script that measures whether a draft actually reads like a story.

What's new in v0.6.0

  • A seventh script. verify-narrative-voice prints four bars with PASS or FAIL on each: em-dashes, first-person per thousand, second-person per thousand, average sentence length. Two modes, --mode story and --mode explainer, because an explainer is allowed to be an explainer. Fenced code is stripped before measuring.

  • The founder's-epiphany recipe. recipes/story-led-article.md collects the fourteen answers, orders the piece by the five phases, and closes on who you became rather than what you got.

  • Three sourced registry items. The Epiphany Bridge script from Brunson's Expert Secrets pp.213-222, the Hero's Two Journeys from Hauge and Vogler via pp.197-211, and the measured narrative voice bars. Page numbers attached, evidence labelled pattern-level.

  • Two triggers that make the register reachable. "tell my founder story" and "write the launch article". The story route existed in the decision tree but nothing in frontmatter would surface it.

Live on the marketplace as @di-atomic/copy-engine. Trigger it with "write my founder story".

infographic-v0.2.0

@di-atomic/infographic v0.2.0 — the sketch look on real graphics

The hand-drawn register was unselectable for any real information graphic. It lived on the raster path only, and that path caps at six labels. Real graphics run past six. A live client run wanted that look, could not pick it, and hand-built it in CSS. My density gate then returned UNCHECKED, because it resolves a style by name and there was nothing to resolve.

What's new in v0.2.0

  • The sketch look now works at any label count. style/hand-drawn-html ships the same register on the HTML path: marker display face, handwriting body, drawn box edges, grained off-white paper. Token-based, no label ceiling.

  • Check C returns a real verdict again. Against the spec that produced the UNCHECKED, it now reports PASS · html ∈ [html] with zero unchecked, and FAILs if you select the style on the raster path.

  • Contrast recomputed, not inherited. The reference gold measured 2.22:1, under WCAG 1.4.11's 3:1 floor for a graphical element, so it ships at 3.25:1. The marker yellow is 1.59:1 as text and is restricted to ground, where ink on it reads 10.02:1.

  • An opt-in drawn-edge filter, with a measurement. The prior art states filter-shapes-not-text as a binary. On an HTML canvas it is a threshold: the naive build holds to scale 3 and breaks at 6. A shell layer removes the ceiling for three CSS rules.

style/hand-drawn-marker keeps its six-label raster cap and now names its counterpart. Registry goes from 59 items to 60. All seven fixtures return byte-identical verdicts; no script or cap changed.

Live on the marketplace as @di-atomic/infographic. Trigger it with "build me an infographic from this data".

webinars-v0.1.0

@di-atomic/webinars v0.1.0 — Localise the section that failed

Ask an agent to write you a webinar today and you get an outline. It will have a hook, some teaching and an offer, and it will not tell you which of those three failed when nobody buys. A selling presentation is one artifact doing four jobs in sequence, and most teams get two of the four right. This skill localises the failure instead of generating another draft.

What's new in v0.1.0

  • It picks a framework instead of blending two. The source material is two practitioner books that disagree about what a selling presentation is for. Blending them produces a draft with two spines pulling in opposite directions, so this routes on a diagnosis: they do not know how, or they do not believe it works for them.

  • The transition is treated as a section, not a sentence. It is the shortest part of a presentation and the one most drafts silently omit. A gate fails any draft with fewer than three transition beats, because a missing bridge is the modal defect.

  • Every urgency and proof claim has to name its mechanism. The corpus itself says do not use scarcity if it is not true, states it once, and never checks. Every deadline, seat cap, results screenshot and guarantee must name what makes it true or the draft fails.

  • Every number ships as a shape, never as a benchmark. The source figures are one operator's pre-2019 results with no controls. Ratios and orderings ship. Rates do not, and they carry an evidence class that keeps them out of the measured-benchmark tier.

Five scripts gate the draft and print PASS or FAIL with a number: structural completeness, strategy versus tactics, objection cycling, the honesty gate, and a citation gate that verifies the evidence class.

Live on the marketplace as @di-atomic/webinars. Trigger it with "write me a webinar" or "our webinar isn't converting".

persona-builder-v0.1.1

@di-atomic/persona-builder v0.1.1 — personas from research

I built persona-builder because my AI employees kept looking like stock photos of a job instead of people who have one. It authors a persona from what the market shows about a profession, not from imagination. Guidance-only: no backend, no credentials, no methods. Your agent reads the skill and does the work.

What's new in v0.1.1

  • Two modes, one skill. product writes identity, goal, and five to eight falsifiable rules including at least one explicit refusal. character adds the seed prompt, the face-consistency prompt, six variation prompts and the voice, rendered through @di-atomic/media-generator.

  • Nothing gets invented. The job title comes from what the market calls the role, the skills from practitioner frequency, the self-description from the register practitioners use on themselves. The name is composed from name-frequency distributions and collision-checked until it belongs to nobody, because the most common first name paired with the most common surname reliably names a real, findable person.

  • Research stays aggregate. Profession research runs over LinkedIn via SpiderPeople and returns distributions. No real name, employer, biography, profile URL or photo survives into a persona file, and the check fails closed if the research manifest is missing.

  • A false claim from v0.1.0 is corrected. The old listing said the visual standard was recovered from 46 shipped personas. I then ran the gate across all 102 avatars in the live catalog: 7 meet it. Both descriptions now carry the real number and say plainly that the standard was applied to one batch of 33 and then abandoned. Five PASS/FAIL scripts exist to stop that recurring.

Live on the marketplace as @di-atomic/persona-builder. Trigger it with "build a persona for <profession>" or "my persona looks AI-generated".

cro-audit-v0.2.0

@di-atomic/cro-audit v0.2.0 — re-run an audit without burning it

Until now this auditor could only tell you why a page was weak. It could not tell you whether last quarter's findings ever got fixed, because walking a signup or checkout funnel end to end consumes a test account. You get one shot, so nobody takes it twice. v0.2.0 makes a funnel audit repeatable.

What's new in v0.2.0

  • Split a funnel where it writes, not where the pages change. Find the last step before the funnel mutates state. Everything upstream re-runs at zero cost, and only the tail spends a fixture. On the funnel this came from, that boundary sat at step 5 of 6, which turned a one-shot teardown into something you can schedule.

  • Verdicts have three states now, not two. A check returns True, False, or None, and None renders as UNKNOWN. A binary check quietly converts "I could not tell" into "it is fine", and that is what makes an audit worse than none.

  • A fifth script gates the evidence, not just the writing. It fails a verdict rendered over a sample spread that straddles the threshold under test, a noisy metric called from a single sample, a check set with zero controls, and a fixture whose state was never asserted.

  • Fixture state gets asserted before the first check. A converted account renders different UI than an unconverted one. I filed a critical finding on that mistake and had to retract it, so the rule is written down.

One URL I had not touched returned an LCP of 3032, 1100, 848 and 2272 ms across four sequential runs. A single sample would have reported that page fixed.

Live on the marketplace as @di-atomic/cro-audit. Trigger it with "has the funnel I audited last quarter actually been fixed".

appointment-setter-v0.1.0

@di-atomic/appointment-setter v0.1.0 — the closer for your replies

A new profession is available. Appointment Setter picks up the thread when someone replies to your outbound, and owns one outcome: a real meeting, on a real calendar, with someone who should be in it. It is a sibling to email-outreach, not a feature of it. The campaign side sends. This role answers.

What's new in v0.1.0

  • Five-class reply handling, written as structured fields. Every inbound is classified into custom_fields before a word is composed, so the send side gates on structure rather than on prose a stranger authored.

  • The recipient is locked before every send. The reply address is copied from the inbound sender when the card is created, and to == reply_to_locked is asserted immediately before each send, including scheduled reminders. A mismatch refuses and escalates instead of correcting itself.

  • Six workflows. client-intake blocks until your offer, disqualifiers, price boundary and approved answers exist. Then reply-classification, book-the-meeting, objection-answer, no-show-recovery and end-the-conversation run on their own triggers.

  • Eight linked skills and a guild address. Four called directly, four read for method. Anonymized objection and answer outcomes compound at appointment-setter@profession.md, while prospects, company names and your price boundary never leave.

No send is unattended in this version. Every draft queues for a second actor, and held rate is reported split by reply class rather than blended.

Live on the marketplace as @di-atomic/appointment-setter. Trigger it with "answer this reply and book the meeting".

infographic-v0.1.0

@di-atomic/infographic v0.1.0 — caps you can check

infographic builds a full-scale information graphic from your data or a document, routing between an HTML render path and an image path. In v0.1.0 every cap it enforces comes from a measurement I ran, not from the rule the category inherited.

What's new in v0.1.0

  • The routing rule is measured, and the measurement changed it. Across eight controlled renders spelling stayed perfect through 20 labels, so the usual justification for avoiding image models is out of date. What broke at 8 was the label set: dropped, duplicated, mis-bound. The image path now stops at 6 and refuses above 16.

  • The image path is checked by an exact set comparison on the rendered artifact. It reports dropped, added, duplicated, mis-bound, bare icon and cropped separately, so a graphic that reads cleanly but is missing one of your facts cannot pass as correct.

  • Copy caps belong to the canvas, not to a global number. verify-copy-density holds no cap table at all. It reads the limits off the active canvas item, and when it cannot resolve the canvas it reports copy density NOT verified instead of substituting a default.

  • Five scripts report instead of gate. All of them exit 0 and print observed against cap as numbers. You are shown the report before anything ships, and you decide. Unsourced claims are listed first, one by one, with the nearest match in your source.

The result: 59 composable pieces where every cap carries the evidence tag that earned it.

Live on the marketplace as @di-atomic/infographic. Trigger it with "build an infographic from this data".

propaganda-v0.2.3

@di-atomic/propaganda v0.2.3 — the launch profession, renamed

The launch profession is now @di-atomic/propaganda. Same role, same 17 links, same 5 workflows. Only the name moved, and the guild address moved with it to propaganda@profession.md.

I renamed it because of a collision I could not fix from the outside. A profession installs as a skill directory, and a directory named propagate shadows the /propagate slash command in any workspace that has both. The skill wins, the command disappears, and nothing warns you. SpiderIQ had exactly that pair sitting side by side. Deleting the command file fixes it until the next reinstall recreates it, so I renamed the package instead.

What's new in v0.2.3

  • Breaking: the package name changed. Install @di-atomic/propaganda and remove the old skill directory. It starts at 0.2.3 rather than 0.1.0 because this is not a new role, it is the same one under a name that stops colliding.

  • The old package still resolves. I did not unpublish it. Versions 0.1.0 through 0.2.3 stay live and immutable, and every workflow is left intact so an existing pin keeps working. It simply stops receiving updates.

  • The skill-creator seam is repaired, and this is the part that would have failed quietly. Version 0.1.3 of @di-atomic/skill-creator addresses its handoff to the launch profession, and an unresolved handoff is precisely how it detects a dropped launch. Left stale, every handoff would have been accepted, delivered nowhere, and never flagged.

  • Three names deliberately kept. The handoff_to_propagate payload key and the propagate_card back-link are a data contract already written onto live cards, and renaming a key orphans every card carrying it. The Propagate board column names a column, not a package.

Live on the marketplace as @di-atomic/propaganda. Trigger it with "propaganda <thing> v<version>".

client-strategist-v0.1.0

@di-atomic/client-strategist v0.1.0 — a hireable client-strategy role

New profession available. client-strategist owns the proactive half of an account — the half that runs whether or not the client writes in.

It links 16 skills: 5 real API calls (agentboard, agentdocs, agentmemory, opvs-protocol, gateway-skills) and 11 guidance-only reads.

Two workflows carry most of the weight. weekly-review turns one week of a client's communication record into three beats, with every claim resolving to a specific message. churn-risk-scan scores drift across the roster and returns one of five verdicts rather than two, so an account it could not read is declared unmeasured instead of healthy.

Guild address: client-strategist@profession.md. Tier beta, trust state probationary.

customer-comms-reader-v0.1.0

@di-atomic/customer-comms-reader v0.1.0 — claims that resolve

The state of a client relationship lives in Gmail, Calendar and Drive, and reconstructing one week of it costs me 20 to 40 minutes of scrolling. What scrolling misses is the part that matters: an unanswered thread, a stakeholder who quietly stopped accepting invites, a decision postponed rather than made. This reads one authenticated account for a named client over a bounded window, with every line traceable to a record I can open.

What's new in v0.1.0

  • Two phases with a file between them. Harvest writes harvest.json using Google's own field names. Reasoning runs over that file and reads nothing. Because the manifest exists before any thinking happens, a claim either resolves to a real record or it is treated as fabricated.

  • Absence is reported as a finding, never as an all-clear. A meeting with no notes is a recorded fact carrying its own source id. Asked what happened last week, it will say a meeting ran and that what was decided is not visible from here.

  • It parses Google's meeting notes instead of re-extracting them. Meet's note-taker already writes owner-tagged action items into Drive. Across five real documents that was 44 items, 44 with owners. Only 1 carried a due date, so "unassigned" ships as the correct output rather than a gap to fill in.

  • Three scripts gate every extract with numbers. verify-time-window, verify-attribution and lint-pii-exposure print PASS or FAIL. GDPR Article 9 data is dropped at harvest, blocked from every destination including private memory.

Reads only. It never replies, sends, files or archives, enforced by instruction rather than by the credential. Action-item recall for this task class measures around 77%, so every extract closes with counts per surface and what it could not reach.

Live on the marketplace as @di-atomic/customer-comms-reader. Trigger it with "what happened with <client> this week".

competitor-watch-v0.1.0

@di-atomic/competitor-watch v0.1.0 — diffs you can check

I built this because most competitor reports describe the present in change-flavoured language, and nothing in them tells you whether anything actually moved. This first release makes a change something the substrate proves rather than something a writer asserts.

What's new in v0.1.0

  • Every "changed" verdict carries a revision pair. Snapshots go to AgentDocs, which is content-addressed, so an identical write creates no revision at all. Unchanged is a free server-side fact, and a real change reports its additions and deletions counts.

  • Five verdicts instead of two. changed, unchanged, queued, not_disclosed and unavailable stay distinct, so a crawl that never returned and a jurisdiction that discloses nothing never collapse into "no change".

  • Ad spend is never emitted. No ad library discloses it for commercial ads, so the skill refuses to estimate one. Sampled ad lists are labelled as samples, because diffing page one manufactures churn that never happened.

  • The demand side is read, not just the supply side. Searching a competitor's name plus "alternative" surfaces the rivals buying that intercept, including ones that run no ads and appear in no ad library.

Six recipes, fourteen registry items, seven learnings and four enforcement scripts that print pass or fail with numbers.

Live on the marketplace as @di-atomic/competitor-watch. Trigger it with "run the weekly competitor scan".

pricing-strategist-v0.1.0

@di-atomic/pricing-strategist v0.1.0 — pricing that cites sources

I built this because pricing guidance in the agent ecosystem is confident and unsourced. I audited 48 public pricing and go-to-market skills before starting. None ships an enforcement script, an evidence registry, or a learnings set. Two widely-installed ones give opposite instructions on the 10x value rule, and neither cites anything.

What's new in v0.1.0

  • Six steps, strategy before number. Understand the service, research the field live, pick skim or neutral or penetrate, pick the value metric, set the mechanics, then set the number. The pipeline stops at step one if retention is unproven, because you cannot price something you have not shown people will keep.

  • Five scripts that print PASS or FAIL with numbers. They classify every numeric claim and demand the source its class requires, hard-fail cost-plus pricing, lint a pricing page for undisclosed overage, check that every cohort in a migration has a lawful next state, and keep the coordination declarations honest.

  • A defensibility check you can observe. The primary signal is the share of prospects who refuse on price, roughly 20 to 25 percent, corroborated by two independent authorities. That is a count from your own pipeline, not an estimate of savings your buyer has not realised yet. The 10x rule ships labelled as folklore and is never used as a threshold.

  • It decides the price and stops. Named tiers, integer-cent amounts, billing periods and per-tier entitlements hand off to the Paddle and Stripe skills to implement.

Guidance-only, so there is no API surface: 39 evidence-bundled registry items, 11 learnings, 10 procedures and 7 recipes. The provenance gate failed my own first pricing memo at 36 unsourced claims out of 36.

Live on the marketplace as @di-atomic/pricing-strategist. Trigger it with "what should I charge for this".

0.1.0

@di-atomic/skill-creator 0.1.0 — the Skill Creator profession

New profession available: Skill Creator, at skill-creator@profession.md.

It turns an existing backend — an API, a CLI, an MCP surface — into a published skill, then proves each release surface shipped by fetching the artifact and reading it back. Di-Atomic publishes to one surface, OPVS to eight, SpiderIQ to four plus a scaffold: one workflow, three per-house recipes.

Eight workflows. Two carry the weight: skill-intake decides whether a candidate is worth wrapping, and verify-shipped refuses to call anything shipped on a green build alone.

Toolkit: nine linked skills. Five CALL — agentboard, agentdocs, agentmemory, opvs-protocol, profession, all built by OPVS. Four READ — api-docs-writer, copy-engine, voice-builder, hook-generator.

Internal tooling for Di-Atomic, SpiderIQ, and OPVS. The launch half is @di-atomic/propagate.

propagate-v0.1.0

@di-atomic/propagate v0.1.0 — the Launch Engineer

New profession available. It runs one bounded launch end to end from inside an IDE — and bootstraps its own toolkit before it works, because an IDE session starts empty.

Links 16 skills: 7 CALL (agentboard, agentdocs, agentmemory, opvs-protocol, profession, publish-skills, gateway-skills) and 9 READ (the @di-atomic guidance set). Carries 5 workflows. Two matter most: toolkit-bootstrap, which proves both halves of the toolkit before a launch starts, and launch-intake, the gate that decides whether a release earns a launch at all.

Guild address: propagate@profession.md. Internal tooling for Di-Atomic, SpiderIQ and OPVS — the client-facing sibling is @di-atomic/delivery-manager.

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".