agentsclimarketplace

Kai write

Skill cgallic/kai-cmo-harness/harness/skills/kai-write

Open-source AI CMO for Claude Code: marketing agent skills for SEO, content, email, ads, launches, CRO, AEO/GEO, and AI-search visibility.

Install
npx -y skills add cgallic/kai-cmo-harness --skill kai-write

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Write a single piece of marketing content using Kai CMO Harness frameworks and quality gates. Supports blog posts, LinkedIn articles, emails, cold outreach, press releases, ad copy, and TikTok scripts. Automatically loads the right framework, skill contract, and persona. Use when "write a blog post", "draft an email", "LinkedIn article", "cold outreach", "write ad copy", "press release", "TikTok script", or any single content creation request. For building a complete email system, use /kai-email-system instead.

SKILL.md

6.4 KB, as published. Nobody here has run it

Kai root note: knowledge/, harness/, and scripts/ paths in this skill live in the Kai install, not the user's project. Resolve them against the first ancestor directory of this SKILL.md that contains a knowledge/ folder (the Kai plugin root, ~/.claude/kai, or the kai-cmo-harness repo). MARKETING.md, memory/, and any output files live in the current project. If a referenced scripts/ command is not available in this install, say so, skip it, and continue with the file-based guidance — never fabricate its output.

Write one piece of content using the Kai CMO Harness. Loads the right framework, applies quality gates, outputs ready-to-publish copy.

Phase 0: Load Product Context

Check if MARKETING.md exists in the project root (same directory as CLAUDE.md, README.md, package.json).

If it exists: Read it — skip product discovery questions. It has the product name, ICP, value prop, monetization, brand voice, current channels, and competitive landscape.

If it does NOT exist: Auto-explore the codebase to create it in the project root (next to CLAUDE.md). Do NOT ask the user what the product is. Read CLAUDE.md, README.md, PROJECT.md, package.json, landing pages, and any project files. Search for email/ad/analytics config. Then create MARKETING.md using the template from /kai-email-system. Present draft to user for confirmation.


Step 1: Identify Format and Load Context

Determine the content format from the user's request, then load the corresponding files from the harness (paths relative to the project root):

FormatFrameworkContractChecklist
Blog postknowledge/frameworks/content-copywriting/algorithmic-authorship.mdharness/skill-contracts/blog-post.yamlknowledge/checklists/content-checklist.md
LinkedInknowledge/channels/linkedin-articles.mdharness/skill-contracts/linkedin-article.yaml
Email (lifecycle)knowledge/channels/email-lifecycle.mdharness/skill-contracts/email-lifecycle.yaml
Email (cold)knowledge/channels/email-lifecycle.md + harness/references/cold-email-rules.mdharness/skill-contracts/cold-email.yaml
Meta adsknowledge/channels/meta-advertising.md + harness/references/meta-ads-rules.mdharness/skill-contracts/meta-ads.yamlknowledge/checklists/meta-advertising-checklist.md
Google adsknowledge/channels/paid-acquisition.md + harness/references/google-ads-policy-reference.mdharness/skill-contracts/google-ads.yamlknowledge/checklists/paid-acquisition-checklist.md
Press releaseknowledge/channels/press-releases.mdknowledge/checklists/pr-checklist.md
TikTokknowledge/channels/tiktok-algorithm.mdknowledge/checklists/tiktok-checklist.md
SEO contentknowledge/frameworks/content-copywriting/algorithmic-authorship.md + knowledge/frameworks/aeo-ai-search/aeo-ai-search-playbook-2026.mdharness/skill-contracts/blog-post.yamlknowledge/checklists/seo-checklist.md

Read the framework file(s) and skill contract before writing. Do not guess at rules — load them.

Step 2: Brief

If the user hasn't provided a brief, create one using harness/brief-schema.md. At minimum, confirm:

  • Persona — which of the 8 personas from knowledge/personas/_persona-index.md?
  • Angle — what's the specific frame? (not just the topic)
  • CTA — what do we want the reader to do?

For ad copy, also confirm the platform so the right policy reference gets loaded.

Step 3: Write

Apply the framework rules. Key universal rules:

  • No banned words (leverage, utilize, synergy, innovative, deep dive, circle back, touch base, moving forward, at the end of the day)
  • No AI slop ("In conclusion", "It's important to note", "In today's rapidly evolving")
  • No X-not-Y binary clichés — every form: "X, not Y" / "isn't X — it's Y" / "It's a Y, not a Z" / "X — not Y". The pattern reads as LinkedIn slop and slips past subjective scoring. Use parallel-positive contrast or a single load-bearing claim instead.
  • Match the persona's language patterns and pain points
  • Single primary CTA
  • Follow word count from the skill contract

For SEO content, also apply Algorithmic Authorship rules:

  1. Conditions AFTER main clause ("Do X if Y")
  2. Instructions start with verbs
  3. Sentences under 20 words
  4. Bold the answer, not query-matching terms

Step 4: Quality Gate

Score and validate before delivering:

  1. Four U's — Unique, Useful, Ultra-specific, Urgent (each 1-4). Min 12/16 for blog/SEO, 10/16 for email/ads.

  2. Banned words — zero Tier 1 violations

  3. AI slop — zero instances

  4. Voice patterns (programmatic — DO NOT skip) — grep the draft with the Grep tool for these regexes. Any hit fails the gate.

    • , not [a-z] (catches "X, not Y")
    • — not [a-z] (catches "X — not Y")
    • \bisn'?t [a-z][^.\n]+ — it'?s\b (catches "isn't X — it's Y")
    • \bIt'?s (a\|the\|an) [^.\n]+, not (a\|the\|an)\b (catches "It's a X, not a Y")
    • \bIf you [a-z][^,.]+, [a-z] (catches "If you X, Y")
    • \bHere'?s the thing\b / \bLet that sink in\b / \bHot take\b / \bI'?ll be honest\b (LinkedIn slop)

    Skip matches inside HTML comments and code fences. Replacements: collapse to a single load-bearing claim, or use parallel-positive contrast where both halves are affirmative.

  5. Format-specific gates — from the skill contract (subject line length, word count, CTA count, etc.).

Hook integration: if the project has .claude/hooks/voice-gate.py, the hook fires PostToolUse on Edit/Write and catches voice violations at draft time. The gate step still runs the regexes — belt and suspenders.

If the piece fails, fix the specific issues and re-score. Max 2 retries. After 2 failures, deliver with failures noted.

Step 5: Deliver

Output the content with quality gate scores visible. Save to workspace/ if requested.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.