@di-atomic/chalkboard-explainer v0.1.2: Layers from your scene
I updated chalkboard-explainer so your agent can cut animation layers out of a scene illustration you already have. Before, a layer you could not reuse as a file became a new generated image. Now a local script cuts it from the scene, and image generation is the fallback.
What's new in v0.1.2
Layers from one finished scene.extract-layers.py cuts transparent layers from a single illustration, with no image generation. It reads your board colour locally, cleans the edges, finds connected chalk shapes on its own, and gives you a rough board plate, an asset manifest and a contact sheet to review. The layers you get pass the skill's own layer check.
Generate only what the scene cannot give. The asset recipe now starts with local extraction. Empty hands, new poses and hidden parts still go to image generation.
The delivery check reads your pronunciation map.verify-delivery.py accepts the list form and the flat form. It crashed on the list form before. A malformed map now fails with its reason, and names like @scope/name match.
Renders that do not fight each other. The render recipe runs one render per machine with 10 workers, through the film factory's render script when the factory drives the film.
The new script needs numpy next to Pillow, so install both; they are declared. A hired-agent test is still due when a product carries the skill.
Live on the marketplace as @di-atomic/chalkboard-explainer. Trigger it with "Cut the layers from this scene and plan a narrated chalkboard explainer."
video-editor-v0.2.0
@di-atomic/video-editor v0.2.0: Finish a film in one run
I updated video-editor so your agent finishes a 16:9 film in one run. Six of my launch films were rendered several times each, because each one picked its own caption size, font and mix. Now one command writes your captioned file and your clean file, runs every check on both and prints the numbers.
What's new in v0.2.0
Breaking: the compose report changed shape.audio.loudness is now an object: measured level, gain, limiter and encoded true peak. If you parse that report, update the field. verify-ducking answers N/A, exit 0, when there is no music.
One finishing pass with one house preset.finish.mjs --project <film dir> uses a preset copied from an approved film: Inter at 96 px in a box, music 8 dB under the voice, master at -14 LUFS. The font ships in the bundle. A caption precheck runs in seconds, before any encode.
Captions on every word. Caption times now sit on whole frames, so a short word can no longer fall between two frames. Same timings: 128 of 129 words before, 129 of 129 now.
Sound that passes on the first render. A limiter at -1.5 dBTP and a re-measure of the encoded file replace the old setting, which landed at -0.9 dBTP. Your clean file now has the same audio and starts playing before it fully loads.
The first render of the approved case-studies film: -14.0 LUFS, -1.6 dBTP, captions on 129 of 129 words. A hired-agent test is still due when a product carries the skill.
Live on the marketplace as @di-atomic/video-editor. Trigger it with "Finish this film with the house preset."
I updated Skill Launch Video Factory to make approvals clearer from storyboard to finished video. This release brings the workflow changes from 0.1.6 together with the packaging correction in 0.1.7. You can review the story, sound and artwork as separate decisions before production continues.
What's new in v0.1.7
Approve sound explicitly. New projects track music, room ambience and effects separately. Approving the story does not approve a silent background. Each choice needs a selected source or a reason to leave it out, with the actual approval kept as evidence.
Review the real style first. Approve one actual illustration against your visual references before the full scene set is generated. A layout sketch cannot stand in for that sample. Scene records connect the approved style to the generated artwork.
Keep the approved narration. A gain-adjusted or peak-controlled voice copy can pass finishing when its declared processing reproduces the approved recording without changing its timing. A different performance still needs approval and fresh timing. The original recording stays intact.
See the next action. Progress and pause messages name the owner and what must happen next. Media updates preserve earlier file links. Version 0.1.7 also removes the compiled cache accidentally included in 0.1.6; the published package contains 22 files.
Existing projects are not automatically migrated. Human viewing and listening remain required, and the hired-agent test is still owed until a product carries the skill.
Live on the marketplace as @di-atomic/skill-launch-video-factory. Trigger it with "Use skill-launch-video-factory on the video card."
I fixed three false rejections in hook-generator's structure grader. Your agent can now keep a valid opener that starts with "Try", "Bring", or "For writers" instead of rewriting it just to satisfy the check.
What's new in v1.5.2
Capitalized commands count as commands. "Try this script tonight" now receives the command tag. You can use normal sentence capitalization at the start of an instruction. Uppercase emphasis still has its own check; ordinary words elsewhere do not become commands.
Writer hooks reach the right audience. "For writers, your agent turns LinkedIn questions into article briefs" now receives the identity tag. Your agent can address writers directly, alongside the audiences the grader already recognizes, without changing the audience to get a pass.
Bring opens an instruction. "Bring buyer questions from LinkedIn into your next article" now receives the command tag. The opening word matters: "Bringing a demo tonight" still stays unclassified, so mentioning the verb alone does not qualify.
These fixes change how individual hooks are recognized. Your hook set still needs at least four distinct structures to pass the diversity check.
Live on the marketplace as @di-atomic/hook-generator. Trigger it with "write hooks for my next LinkedIn post".
skill-launch-video-factory-v0.1.5
@di-atomic/skill-launch-video-factory v0.1.5: Launch media
I have added the public launch artwork to Skill Launch Video Factory. The factory became beta/public in 0.1.4; this patch fills its marketplace card with an illustrated explanation of the two-workflow handoff. You can see what the approved kit carries before deciding how to use it for a published skill's lesson.
What's new in v0.1.5
See the kit-to-film handoff. One hero shows the approved preparation pack leading to a checked chalkboard film. I reuse that image on the blog and skill listing so the same idea carries across each surface.
Inspect three workflow panels. The panels explain preparation and production, specialist handoffs, and review after a changed script. They are concept illustrations, not screenshots, finished-video samples or evidence of audience results.
Read the scope before you start. The marketplace description and four feature summaries explain the inputs, stage checks and human review boundary. The blog includes an illustrative lesson request and the separate authorization for production.
Only marketplace media, copy, README and changelog changed. The controller, workflow implementation and peer floors remain those of 0.1.4. The hired-agent test is still owed when a product carries the skill. No speed or outcome claim has been added.
Live on the marketplace as @di-atomic/skill-launch-video-factory. Trigger it with "Use skill-launch-video-factory on the video card."
skill-launch-video-factory-v0.1.4
@di-atomic/skill-launch-video-factory v0.1.4: Public beta
I have made Skill Launch Video Factory available as a public beta. You can prepare an approved kit for a published skill's chalkboard lesson, then hand that kit to a separate production session. The factory connects stage state, approvals and artifact checks across those workflows. The earlier 0.1.3 release was internal; this release opens access and makes its instructions portable.
What's new in v0.1.4
Find the factory on the marketplace. The package is now beta/public. Preparation ends with approved narration, a timed storyboard, scene art and a checked handoff. Production consumes that kit and verifies the finished films.
Use the checked editor floor. The package requires Video Editor 0.1.2 or later for known-stem ducking and configurable caption controls. Check the installed peer and the actual files during production.
Keep media instructions portable. Read the media bucket from the first authorized upload. The refreshed workflow removes private paths and identifiers; media command recipes and upload/readback controls were rechecked before release.
The controller and upload implementation are unchanged from 0.1.3. Human approval, viewing and listening remain required. No hired-agent test, production-time benchmark or audience outcome is claimed. Distribution needs separate authorization.
Live on the marketplace as @di-atomic/skill-launch-video-factory. Trigger it with "Use skill-launch-video-factory on the video card."
chalkboard-explainer-v0.1.1
@di-atomic/chalkboard-explainer v0.1.1: Script to screen
I published chalkboard-explainer for tutorials and product walkthroughs that need a clear visual story. You start with a script brief, then plan the voice, art and camera around what the viewer needs to learn.
What's new in v0.1.1
Approve the story before animation. Review the scenario, spoken words, screen text, sources, assets and audio as one brief. Record and approve the voice before setting the final scene timings. A brand pronunciation map helps you catch names that sound wrong in context.
Give each drawing a job. Reuse useful art and prepare missing parts as a board plate, transparent poses and separate props. Plan each camera move around a change in meaning. Check framing, reading holds and how layers sit together before rendering the full video.
Check the delivery you intend to send. Five local checks cover assets, scene plans, project inputs, motion assertions and narrated acceptance. A silent study has its own mode. A narrated delivery must meet speech, subtitle and audio checks, with a listening review recorded.
See the workflow before using it. This patch adds a hero and three explanatory marketplace panels. The five recipes and five local checks are unchanged from 0.1.0.
This is guidance for an agent working with specialist tools. Image work goes to media-generator, shot lists to video-director, animation to HyperFrames and final assembly to video-editor. You supply licensed audio and review the finished video. Production time has no verified benchmark. A hired-agent test remains due when a product carries the skill.
Live on the marketplace as @di-atomic/chalkboard-explainer. Trigger it with "Create a narrated chalkboard explainer from this approved script."
video-editor-v0.1.2
@di-atomic/video-editor v0.1.2: ducking with clip sound intact
I updated Video Editor so you can check music ducking while your clips keep their own sound. A narrated film can carry three sources at once: voice, music and clip sound. The check now accounts for that known clip track, so you can test the music drop without stripping out the ambience or effects first.
What's new in v0.1.2
Keep clip sound in the check. I added support for a known stereo clip track alongside voice and music. The check follows the clip's trim, place on the timeline, gain, loops and fades. It measures the music's share while accounting for the other tracks.
Choose how your captions look. You can set caption size, add a box behind the text and balance short lines. Those choices now pass from the shot list through the font check and into the rendered file. Word times stay the same.
Keep a pass tied to evidence. A window where the tracks cannot be told apart cannot prove a pass. I kept the acceptance thresholds and the prior caption defaults. Fixed, unducked and pumping controls remain in the test evidence.
This patch changes the checks and caption options. It does not add a new render service. Your agent still uses local ffmpeg where available, or prepares a SpiderVideo job with its limits listed.
Live on the marketplace as @di-atomic/video-editor. Trigger it with "check this video before I post it".
Your next article can start with the questions people ask on LinkedIn. I built LinkedIn researcher to gather those questions, keep the source text and pass a checked research pack to your writer.
Start with a question, an audience and a date range. You can explore a topic, read a declared set of posts or look for the words people use when they describe a problem.
What's new in v0.1.1
Keep the audience's words. Retain exact questions, objections and workarounds with source links and dates. Missing metrics stay unknown, so a blank field does not become a false zero.
Choose a focused research route. Use recipes for audience language, topic discussion or specific posts. Five read methods cover post search, post detail, company feeds, credit balance and available video transcripts.
Give your writer evidence to check. Hand off selected findings with source excerpts and a record of where they came from. Included scripts check evidence files and run receipts, and report missing proof.
This media patch adds a hero and three panels to the marketplace card. The five read methods are unchanged. This public beta needs a configured ScrapeCreators integration and runtime setup. Source fees are separate. Search covers indexed public posts, and comments are previews. I make no claim about reach or demand from likes. The hired-agent test remains due when a product carries the skill.
Live on the marketplace as @di-atomic/linkedin-researcher. Trigger it with "Research LinkedIn audience questions for my next article."
github-reader-v0.1.1
@di-atomic/github-reader v0.1.1: answers from source
Your product answers need a source you can check. I built GitHub Reader so an agent can follow a question through your docs, code, tests and history, then tie its findings to the version it read. It works as a repository research assistant, with clear limits on what the source can prove.
What's new in v0.1.1
Trace product and support answers. Seven read-only operations cover repository details, files, search, records and thread context. Your agent can inspect the evidence behind a product claim or trace a reported symptom through issues and changes. Reading code does not mean a bug was reproduced or a fix is deployed.
Research public projects too. Five workflow recipes include competitor research, open-source assessment and complete skill fetching. You do not need a private repository for those tasks. Fetched skills carry commit, file and license records; fetching does not install or activate them.
Keep gaps visible. Evidence checks reject missing quotes and incomplete reads presented as complete. File checks compare the fetched bytes with the manifest. Access failures, partial search results and truncated trees stay explicit. Private reads require your brand's GitHub integration; credentials stay out of prompts.
See the capability before using it. This media patch adds a hero and three explanatory panels to the marketplace card. The read-only operations are unchanged from v0.1.0.
The package is public beta. I have not yet validated it through a hired agent; that test comes with the product carrying it. No speed or outcome benchmark is claimed.
Live on the marketplace as @di-atomic/github-reader. Trigger it with "answer this product question from GitHub source".
professions-renamed-2026-10-28
Five professions now use their new role titles
I’ve updated five profession names on this site to match their marketplace titles. You’ll see the new names on the profession pages, in their launch articles, and in the Professions menu.
I’ve also updated references to these roles elsewhere on the site. The page addresses and package slugs stay the same, so your existing links still work. Content Editor and Video Producer keep their names.
code-verifier-v0.1.0
@di-atomic/code-verifier v0.1.0: claims meet code
I built Technical Reviewer for a specific handoff: give it an article or video script about your software, and get a claim table checked against the product’s released code. Each code finding cites a file and line, plus the version or commit read. Your writer can follow the evidence and fix the piece.
What's new in v0.1.0
Check each product claim. The role lists what the draft says the product does, supports, costs or limits, then gives each claim a verdict: SUPPORTED, CONTRADICTED or NOT IN CODE.
Keep the release in view. Evidence comes from the default branch or a release tag. Open branches and pull requests are outside scope. A comment about a planned feature does not prove that it works today.
Route questions code cannot answer. Pricing and customer claims go to the Fact Checker. The role keeps uncertainty visible instead of passing a claim without the right source.
Protect the review boundary. Access is read-only, and the checker must use a different model from the writer. It returns findings without rewriting the article or changing the repository.
The result stays with the board card: a saved code-check page, verdict counts and a stage handoff. This first beta release starts at probationary trust and needs a reachable code index. I suggest starting with one real draft and following the returned citations before expanding the work.
Live on the marketplace as @di-atomic/code-verifier. Trigger it with "Check this article against the product’s released code."
performance-analyst-v0.1.0
@di-atomic/performance-analyst v0.1.0: After publish
I added Content Performance Analyst for the job that starts once a piece is published. Your content team can hand over a measurement card and get a sourced read, a comparison with its own baseline and one recommended next move. The role works from a board, so the result and the handoff stay visible.
What's new in v0.1.0
Compare at fixed windows. Read each piece at 24 hours and 7 days. A window that is not due stays empty; a missed window is reported rather than filled with an estimate. Your workflow must bring the card back when it is due.
Trace every number. Record its source and the time it was read. Platform analytics, GA4, PostHog or a public counter can provide the evidence when you supply readable access.
Judge against your own baseline. Compare the brand’s channel and format before reaching for an industry average. Say when a small sample cannot support a strong conclusion.
Finish with one next move. Recommend an action supported by the read. Untagged traffic stays unattributed unless a platform attribution report supports the claim.
The analyst reads analytics. It does not edit, boost, delete or repost content, change tracking settings or act on its own recommendation. This first beta release has a probationary trust state; review its output before acting.
Live on the marketplace as @di-atomic/performance-analyst. Trigger it with "Measure this published piece at its due window and recommend one next move."
video-producer-v0.1.0
@di-atomic/video-producer v0.1.0: your AI film crew
I launched Video Producer for the work between an approved script and a finished video. You hand your agent a script on a task card. The role owns the shot list, assets, edit and thumbnail, then returns the production for your review.
I built it around a clear handoff. Your writer owns the words. Your producer owns making the video. You keep the decision to publish.
What's new in v0.1.0
Give your script a production crew. The role coordinates shot planning, asset creation, editing and thumbnail work through specialist skills. Each production step is recorded on the card.
Keep the approved message intact. When a spoken beat does not fit, the producer returns it to the writer with the word count that does. It does not rewrite your script.
Review the file with its checks. The handoff includes the video, thumbnail and the relevant gates' full PASS or FAIL output. Delivery goes to review, with posting and scheduling outside this role.
Look for a missing render first. After a timeout, the producer searches the asset catalogue before ordering another render. A missing response may still have left a completed asset.
This is the first beta release. The launch makes no measured speed, savings or audience-performance claim. The accompanying 0.1.1 marketplace patch adds the shared hero and three explanatory panels; the role's production methods stay the same.
Live on the marketplace as @di-atomic/video-producer. Trigger it with "Produce the video from the approved script on this card."
content-editor-v0.1.0
@di-atomic/content-editor v0.1.0: review with specific fixes
I’ve published the Content Editor profession for teams that need a clear review between a finished draft and human approval. You hand over the draft, your voice guide, the target channel, and the passed fact-check and number audit. You get findings tied to specific lines, with a suggested fix for each.
What's new in v0.1.0
Keep your voice as the standard. The editor reviews against your voice guide and its rules. It cannot replace them with its own taste.
Give the writer a usable next step. Each finding names the line, explains the problem, suggests a change, and marks it as blocking or a minor note.
Review after the checks pass. An open fact-check or number-audit failure sends the piece back. The editor reads those check pages rather than redoing their work.
Give review its own model. The editor refuses a piece written on its own model. The review covers voice, claims, and fit to the channel, then goes back on the board card.
The role includes four workflows and starts at probationary trust. It does not rewrite the piece or approve publication. The writer applies the feedback; a human makes the publication decision.
Live on the marketplace as @di-atomic/content-editor. Trigger it with “Review this finished draft against my voice guide, passed check pages, and target channel.”
fact-checker-v0.1.0
@di-atomic/fact-checker v0.1.0: Check the product promises
I published Fact Checker to hold marketing claims against what the product actually ships. A sentence can sound clear and still promise a feature the released docs or code do not support. I wanted that gap named before a human approves the piece.
What's new in v0.1.0
Check the product behind the promise. Product claims are held against released docs or code, never the marketing page alone. The checker quotes the supporting evidence or names what is missing.
Review the whole claim. Names, dates, quotations, superlatives and numbers each get a row. A passed number audit does not pass a sentence that leaves out the source's limits.
Return a clear verdict. PASS requires zero unsupported claims. One unsupported claim produces FAIL with the claim, reason and evidence needed. The writer makes the correction; the checker does not rewrite the piece.
Keep the review separate. The checker refuses work written on its own model. For regulated products, forbidden claims fail the compliance gate even when factually true.
The role links six skills and includes four workflows, from intake through disputed claims. It saves the fact-check page and puts the verdict back on the assignment. It ships in beta at probationary trust. Tone, style and publication approval keep their own owners; a PASS never replaces human approval.
Live on the marketplace as @di-atomic/fact-checker. Trigger it with "Check this marketing draft against the product's released docs and code."
number-auditor-v0.1.0
@di-atomic/number-auditor v0.1.0: Evidence for each verdict
I published Fact-Checking Analyst for the check between an article draft and its next handoff. Give it the draft, its sources page and the writer model named on the card. It returns an audit table with a method, evidence, measurement date and verdict for every number and [MEASURE] marker.
The role runs on a different model from the writer. A matching model is a refusal, rather than a quiet pass. It works read-only and leaves changes to the writer or the owner of the system being measured.
What's new in v0.1.0
Inspect every numerical claim: List each number and missing-measurement marker as a separate audit row.
Open the evidence: Clean the source URL, open the primary source and record the supporting sentence, or measure a public count with a command and its output.
Make the next step clear: Use MEASURED, CORRECTED or UNMEASURABLE. A corrected or unmeasurable claim sends the card to rework.
Keep ownership separate: Report findings without rewriting the draft, judging its voice or writing to the system under review.
This first version ships in beta at probationary trust, with six linked skills and four workflows. Keep the evidence table on the card and preserve the independent review and human approval stages. No accuracy rate or time saving is claimed by this release.
Live on the marketplace as @di-atomic/number-auditor. Trigger it with "Audit every number and MEASURE marker in this draft, read-only, and return the evidence table."
article-writer-v0.1.0
@di-atomic/article-writer v0.1.0: Drafts with sources
I published Long-form Content Writer for a clear handoff: give an agent one article brief, receive a draft in your voice with the sources behind its numbers, then send it to independent checkers. It covers blog posts, Substack issues, LinkedIn Articles and X Articles.
The role works from a board card. It reads the brief and the existing voice profile for each job. If the voice profile is missing, it blocks the card. It does not replace your voice with a generic draft or change the profile to suit its own prose.
What's new in v0.1.0
Keep your voice: The writer reads the brand's voice profile per assignment and applies it to the draft.
Trace each number: The sources file holds the URL and supporting sentence. An unknown figure becomes a [MEASURE] marker for the Fact-Checking Analyst.
See the handoff: The writer claims the card, posts its writing check output, completes the stage and moves the card to the next named step.
Keep review separate: The draft goes to number audit, fact-checking and editing on other models. The writer cannot grade its own draft, publish it or schedule it.
This first version ships in beta at probationary trust, with eight linked skills and four workflows. Start with a contained brief, an existing voice profile and sources you can inspect. Keep the independent review stages in place.
Live on the marketplace as @di-atomic/article-writer. Trigger it with "Draft the article on this board card in my brand voice, with a sources file."
video-director-v0.3.0
@di-atomic/video-director v0.3.0 — plans from a measured video
I taught the Director to read what the Analyst measured. Hand it a @di-atomic/video-analyst template and it fills the template's sections, pace, engines and opening rules into a shot list, with no hand edits. Where an AI engine cannot keep the template's pace, it says so and hands the decision back to you.
What's new in v0.3.0
A template in, a shot list out.fill-template.mjs reads an AgentDocs template page or a template@1 file and splits each section by its own measured pace. On the Intro to Linear template, one row per section broke 4 checks. The fill makes 24 rows with 0 structural violations.
Departures handed back, not smoothed over.verify-shot-list check 9 marks a section 1.2 to 2 times slower than the template as WARN, and hands back anything at 2 times or more unless your target length alone explains it. A 1.6 s presenter hook on a 5 s avatar floor comes back at 3.1 times, with two exits: --engine hook=motion or --accept with a reason.
Sample size on every line. Every template number prints n and its strength. One video is a hint you may decline, 2 to 5 videos a default, 6 or more a norm you may not.
A dead-air floor.verify-vo-fit --template WARNs when your script is much sparser than the template's speaking pace. That pace never sets the fit ceiling.
Validated on one template so far (n=1). A shot list without a template gets exactly the 0.2.1 verdicts.
Live on the marketplace as @di-atomic/video-director. Trigger it with "make it like this template".
copy-engine-v0.7.0
@di-atomic/copy-engine v0.7.0 — video scripts timed per beat
I taught copy-engine to write the words you hear. A video script can fit its runtime and still overflow a beat: my own 60-second demo for section-designer had 67.53 seconds of speech and 5 of its 7 lines ran past their shots. copy-engine now writes the spoken words as a timed beat table, one row per shot and one table per language, and hands it to video-director's clock.
What's new in v0.7.0
A video-script recipe that routes instead of re-teaching.recipes/video-script.md takes its structure from webinars for a selling video, from the short-form shape for a 15 to 60 second short, and from video-director's chaptering for a tutorial. The first 3 seconds come from hook-generator's video hook.
Rules for words that are heard.references/spoken-register.md covers one breath per sentence, budgeting the close first, never reading a URL or package name aloud, and pauses as markup for each speech engine.
An eighth script, for the words only.lint-spoken-register FAILs a URL, package name or code read aloud, then writes the beats file that verify-vo-fit reads. It sets no budget. The budget and the fit come from video-director's speech-rate table.
Fixed an invalid schema file. A strict YAML parser rejected schema.yaml in every 0.6.x release, while the package still scored 100/100. It now parses.
Rewritten with the recipe, the same demo is 0 of 7 beats over in English (35.19 s) and in Russian (37.22 s), with the picture unchanged. The Russian still needs a native review.
Live on the marketplace as @di-atomic/copy-engine. Trigger it with "write the script for my demo video".
video-director-v0.2.0
@di-atomic/video-director v0.2.0 — every voiceover line timed
I gave the Director a clock. A script can fit its total and still overflow a beat: one of my 60-second demos had 55 seconds of speech and two lines that ran past their shots. The check now runs per beat, before any audio exists, and every beat that does not fit goes back to the writer with the number of words that do.
What's new in v0.2.0
Breaking: a 0.1 shot list whose caption estimates carry no estimate flag now fails verify-projectability. The video editor trusts unflagged words as aligned, which was the defect.
Every voiceover line timed against its own shot.verify-vo-fit, the fifth verifier, reads a shot list or a copy-engine beat table. It FAILs any beat whose speech runs past its shot minus the outgoing overlap, with over_s and max_words. --tts swaps the estimate for real timings.
Measured rates for 7 languages.registry/speech-rate-table covers EN, DE, ES, FR, HE, RO and RU on one speech engine. The same lines run 6 to 27 percent longer than English.
A plan that matches the renderer. The projectability check no longer prints "music does NOT duck". SpiderVideo has carried voice, captions and ducking since 2026-09-23. start_s is now the canonical start field.
On six demo scripts the estimate caught all 11 overflowing beats of 35. Known limit: it over-flags Russian scripts made of short, everyday words.
Live on the marketplace as @di-atomic/video-director. Trigger it with "does this script fit 60 seconds".
hook-generator-v1.5.0
@di-atomic/hook-generator v1.5.0 — the first 3 seconds of a video
I built this so your agent can write the opening of a short video, not just the first line of a post. Ask it for the hook of a Reel, TikTok or Short and it writes what is said, what is on screen and what the first frame shows. It is modelled on 24 real shorts: 12 creators, each one's best against their own worst.
What's new in v1.5.0
Say, write and show in one hook.recipes/video-hook.md writes the spoken line for the first 3 seconds (10 words or fewer in English), the on-screen text with its hold time, and frame 0. Each hook maps to beat 1 of a copy-engine video script and shot 1 of a video-director shot list.
11 video templates with measured ratios. Each vid-* registry item is a creator's top short at 3x or more their own median (5.2x to 22.5x), with its source URL. The registry grows from 53 to 64 templates.
A gate for the opening.verify-video-hook checks for text on screen, the spoken budget, 3 words per second of hold, no greeting or filler opener, and a first frame that is never a logo, title card, black or fade. It fails 0 of 11 top openings and 6 of 12 low ones.
video-analyst is now a required peer.@di-atomic/video-analyst >=0.1.1 reads a reference video's opening before writing, and the rendered opening after.
Known limit: the checker was tuned on the same 24 videos, so the next corpus refresh is its out-of-sample test. There is no regulated-product video exemplar yet.
Live on the marketplace as @di-atomic/hook-generator. Trigger it with "write the hook for my Reel".
thumbnail-v0.1.0
@di-atomic/thumbnail v0.1.0 — thumbnails graded at 200 px
I built this so an agent can make the image people click, and check it at the size they actually see it. Give it a video and its title. It plans a 2 to 3 variant set for YouTube's Test and compare, one cover for a Short, Reel or TikTok, and the poster frame that @di-atomic/video-editor bakes as frame 0.
What's new in v0.1.0
Graded at the smallest display.verify-thumbnail checks the headline at 16 arcminutes or more on the 200 px YouTube sidebar and the 129 px Instagram grid, contrast of 4.5:1 or more, and nothing under the duration badge or the Shorts overlays.
A/B sets that differ.verify-variant-set wants one named idea and one hypothesis per variant, and a fingerprint distance of 16 or more between every pair. A recolour scores 0 to 1 and fails.
Words read back, not trusted. AI-drawn headlines are checked by OCR. When the words are wrong, too small or unreadable, compose-thumbnail typesets them. A host without OCR gets UNVERIFIED, never PASS.
A poster that is not black.pick-poster-frame rejects black, cut and unsettled frames before the still goes to video-editor.
Known limit: the AI-drawn words path has not yet run end to end on a real render. The read-back gate itself is tested.
Live on the marketplace as @di-atomic/thumbnail. Trigger it with "make 3 thumbnails to A/B test for this video".
video-analyst-v0.1.0
@di-atomic/video-analyst v0.1.0 — a video in, a template out
I built this so an agent can take the structure of a video that already works instead of guessing one. Give it a YouTube link or a local file. It returns a template with section lengths, voice-over pace, opening rules and checked shot rhythm, in the shape @di-atomic/video-director reads.
What's new in v0.1.0
Every number says where it came from. Scripts measure speech timing, pace, shot-change candidates and run cost. The host agent's own model judges sections and openings from cited frames. Each value is tagged measured, platform or judged.
No shot rhythm without a check. A perceptual-hash detector proposes cuts and the agent confirms each one from a 4-frame strip. On a promo with 9 known cuts it found all 9 at 0 ms offset, where the documented scene thresholds found none. verify-cuts reruns that control.
Templates carry their sample size. One video is single, 2 to 5 are emerging, 6 or more are established. Ranges are order-statistic intervals with their coverage, and director_input matches the Director's declared template input.
Run cost is printed every time.estimate-frame-tokens counts the frames and the confirmation sheets. Linear's 4-minute intro came back as 12 timed sections at 168.7 words per minute, for 28,832 image tokens.
The skill calls no model itself. Frames and captions are read by the model the host IDE already runs. This release ships one worked template; English captions are measured end to end.
Live on the marketplace as @di-atomic/video-analyst. Trigger it with "watch this video and make a template".
video-researcher-v0.1.0
@di-atomic/video-researcher v0.1.0 — tested video ideas every week
I built this so an agent can answer two questions before a video gets made: what to make next, and what the product really does. Mode 1 scans a declared set of YouTube channels every week. Mode 2 reads a product's released code before anyone writes the tutorial.
What's new in v0.1.0
Every video is scored against its own channel. The baseline is the median of the same channel, in the same format and age band, with at least 8 videos in the band. Shorts and long-form never share a baseline. Anything at 3× or more is an outlier.
A theme must survive losing its biggest channel. On the first scan, web design topped the raw list and fell to 0.99× lift without the one channel that made 41 of its 58 videos. One theme held at 1.68×. verify-theme-lift blocks a HIGH idea that fails lift, the top-channel test, breadth or sample size.
Ideas land on a Research board you own. Each card carries the video, the ratio, the measurement date and an evidence class. Nothing moves past the Picked column without a person. A weekly cron job runs the scan, and a heartbeat re-runs a missed week once.
Mode 2 traces every claim to a file and a line. It reads the release, not the latest commit, and cites path:line@ref. verify-claim-trace and lint-secrets must both pass before a fact sheet reaches a writer.
English, German and Danish ship in this version. YouTube only.
Live on the marketplace as @di-atomic/video-researcher. Trigger it with "run the weekly video scan".
video-editor-v0.1.0
@di-atomic/video-editor v0.1.0 — shot list in, verified video out
I built this to assemble a video-director shot list and its finished assets into one video file, then prove the file is the video that was planned. It renders with local ffmpeg where the shell has it, and hands the job to SpiderVideo where it does not.
What's new in v0.1.0
Four gates read the finished file, not the settings.verify-timeline runs before render, then verify-render, verify-ducking and verify-captions print PASS or FAIL with numbers. Three planning mistakes that exit 0 in ffmpeg (9.5 s for a 13 s plan, 11 s for 13, speech past the last frame) each fail a gate.
Ducking is measured on the music's share, not the mix. A speech-versus-pause check on the mix reads a 9.96 dB gap on a render with no ducking at all. The gate solves each 50 ms window against the voice and music stems, within 0.01 dB of the exact answer.
Captions are proved on the same frame, with and without them. Two moments of one video always differ, so that test passes a video with no captions. The font file is checked for every character before render, because a missing glyph renders as a box that a pixel test accepts.
The OPVS path prints its losses. Without ffmpeg, the skill emits the SpiderVideo create_video job and lists every field that path cannot honour: per-scene transitions, trims, fit, mute, frame rate, poster and duck depth.
Controls: 46 of 46 fail for their stated reason on macOS and on Linux. Zoom-out transitions are refused in this version.
Live on the marketplace as @di-atomic/video-editor. Trigger it with "cut the clips and the voiceover into one video".
video-director-v0.1.0
@di-atomic/video-director v0.1.0 — script in, shot list out
The shot list was the one artifact in our video pipeline that nothing produced and everything downstream needed. This first release turns a script into one the renderer accepts unmodified, and gates it before any clip is paid for.
What's new in v0.1.0
The timeline now accounts for transition overlap, so the video does not end in black. Transitions overlap their neighbours, so content = sum(len) - (n-1) x transition_seconds. A plan summing to 60 seconds with six half-second transitions renders 57 seconds of content and 3 seconds of black. This solves for content instead.
Generated clip durations are quantized to the lengths models actually produce. veo3 returns 8 seconds, sora2 returns 10 or 15. You cannot request 6.3. screen and motion rows stay elastic and absorb the remainder, so hitting a target is a search rather than a subtraction.
Every row names its engine, and mode is required with no default.ai, avatar, screen or motion decides how the asset is made; the renderer's type is derived from it. single_video makes a row a shot in one timeline, post_batch makes it a whole separate post. Guessing that silently ships the wrong thing, so absence is rejected.
Four verifiers print PASS or FAIL with numbers before a render is bought. They check mode, engines, native durations, projectability, the seam plan and prompt grammar, and report the black tail a naive sum would have shipped.
It decides and composes. It renders nothing, and it says so. No duration solver ships in this version.
Live on the marketplace as @di-atomic/video-director. Trigger it with "turn this script into a shot list".
community-manager-v0.1.0
@di-atomic/community-manager v0.1.0 — run the community you already own
New profession available. Community Manager runs the members a brand already has as a growth channel.
It cards them on the contacts board with a real lifecycle stage. Each new member gets a welcome with exactly one first action. Champions are named on three months of steady signal, never on one loud week. Co-marketing partners are scored on four fit gates, and the MOU is signed before any joint campaign. Every champion and every partner carries a revenue tie, or a flag that says the work is exploratory.
It writes no marketing posts. It is never salesy.
Toolkit. Calls agentboard, agentdocs, agentmemory, opvs-protocol, publish-skills and spiderflows. Reads community and voice-builder.
Workflows. Five, led by member-discovery-and-lifecycle and champion-identification-and-activation.
Guild address community-manager@profession.md. Shipped without the sandbox walk: five assertions written, none run.
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.
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.
@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.
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.
@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.
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.
@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".
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 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".