Sixth step (after the swap — the text AFTER the creative). Takes the Idea Pool card + the finished creative (05) and
writes publish-ready text in the author's voice. Doesn't write from scratch itself — a router over the process
linkedin-post-writing (Viktor's steps: idea → problem+meat → copywriting framework →
summary → trailer → humanize → format), tied to the idea/creative, and closes grade gate
(blind judge by rubric, step 8) before showing.
Input: $ARGUMENTS — idea (with creative from 05) + client. If there's no creative yet and the format ≠
text-only — first content-engine:content-creative.
What we read
- Idea Pool card: hook draft · pillar · funnel · format · competence proof · notes · source.
- Creative (05): for a carousel — slide content (text = only a one-line caption); for single image / infographic — the full post for the visual.
- Strategy (Notion) Section 6 Voice + author profile skill, if it's set (e.g.
about-<автор>): tone, signature, signature patterns, "WHAT WE NEVER WRITE". - Rules:
${CLAUDE_PLUGIN_ROOT}/reference/hook-bank.md(hooks) +${CLAUDE_PLUGIN_ROOT}/reference/methodology.md§3 (frameworks/structure/formatting), §4 (distribution).
Process (reuse linkedin-post-writing)
- Framework by type: PAS (contrarian/problem) · BAB (case/how-i) · AIDA (giveaway/hand raiser).
- Hook: take the hook draft from the card → generate 2-3 variants per the hook bank (7-10 words, a number in 8/10, no emoji in the 1st line, 2 keywords) → pick the best, save the rest in Notes for reuse.
- Structure (all formats EXCEPT carousel): trailer(hook+rehook) → problem(+reinforcement) → meat → summary(+CTA). Case study (BOFU) — 8 elements (§3.7). Carousel — only a one-line caption.
- Numbers — only from patron facts (strategy Section 9), not invented.
- Humanize: run through
anticopywriting-ai— remove AI traces (long dashes, the "not X, but Y" template, bureaucratese); check against "WHAT WE NEVER WRITE". - Format: "fir trees", short lines, rhythm; target 120-250 words (900-1700 characters), ceiling 300 (§3.5).
- CTA: directives — a command, a comment gate, or "DM me". NEVER a question.
- Grade gate (blind judge): run the assembled draft through
${CLAUDE_PLUGIN_ROOT}/reference/grader-rubric.md.- First a structural pre-gate (section in the rubric): myth flip, triad, mirror pair, reversal, comma upsell, empty warm-up, dash, even rhythm. It worked → fix and check again, spawn the judge only on a clean draft. Automated by a detector from the skill
anticopywriting-ai. - A separate subagent (Task, clean context) — do NOT grade in the same call, otherwise self-deception. Gives ONLY: text + type/format + "WHAT WE NEVER WRITE" + the rubric. Does not give backstory (why the idea, reference, hook draft).
- The judge returns JSON:
scoresacross 7 categories ·total·hard_fails·lowest·one_fix. - Gate = pre-gate clean AND total ≥ 90 AND hard_fails empty. Not passed → fix hard_fails first, then
lowest(applyone_fix) → rescore with a fresh subagent (not "tweak"). Repeat. - Stop after 3 iterations without the gate → show the draft with the note "gate not passed, weakest = X", the decision is the human's. Silent auto-ship below 90 is forbidden.
- Skipping the gate is not allowed: we show the post to the user only after it is passed (or with an explicit flag).
- First a structural pre-gate (section in the rubric): myth flip, triad, mirror pair, reversal, comma upsell, empty warm-up, dash, even rhythm. It worked → fix and check again, spawn the judge only on a clean draft. Automated by a detector from the skill
Distribution playbook (add to the post)
З methodology.md §4: T-20min comments to the cluster · time · first hour nurture · link in body (conversion)
or without links (reach) — NOT in the first comment · self-repost 4-6h ×1 · 0 hashtags · saves-CTA.
Output
- Publish-ready post (text + link to the creative) — show to the user only AFTER the gate is passed; in the summary the final
totalscore. - Posts DB: create a draft (Name=hook, pillar/funnel/format copy, Idea relation, draft status,
grader_score= final total,grader_iterations= how many rounds). - Idea Pool: card →
Status = written,Last used= date. - Telegram channel "LinkedIn Drafts" (when we connect the token/n8n): post + creative + playbook.
- Summary: ready post, what's next (publish manually → then metrics into the tracking tool).
Definition of Done
- Text in the author's voice; anticopywriting passed; "WHAT WE NEVER WRITE" observed.
- Hook per hook-bank (≤10 words, a number if appropriate); 2-3 variants, the best one chosen.
- Structure by type (carousel = caption; case = 8 elements); numbers only from fact-cartridges.
- No comment-to-get; distribution playbook attached.
- Grade gate passed (blind subagent, total ≥ 90, 0 hard_fails) OR explicit flag "gate not passed" after 3 iterations.
- Posts DB draft created (with
grader_score); Idea Pool → written; summary returned (with final score).