Kai root note:
knowledge/,harness/, andscripts/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 aknowledge/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 referencedscripts/command is not available in this install, say so, skip it, and continue with the file-based guidance — never fabricate its output.
Run the Kai CMO Harness quality gate pipeline on a piece of content.
Gate Pipeline
Run all three checks in order:
1. Four U's Score
Score each dimension 1-4:
| U | Question | Score |
|---|---|---|
| Unique | Can only WE write this? Original data, perspective, or experience? | 1-4 |
| Useful | Can the reader take action immediately? | 1-4 |
| Ultra-specific | Numbers, named tools, concrete examples? | 1-4 |
| Urgent | Is there a reason to engage today? | 1-4 |
Thresholds: 12/16 for blog/SEO/articles. 10/16 for email/ads.
2. Banned Word Check
Instant reject (Tier 1): leverage, utilize, synergy, innovative, deep dive, circle back, touch base, moving forward, at the end of the day
AI slop (also reject): "In conclusion", "It's important to note", "In today's rapidly evolving", "This comprehensive guide", "Without further ado", "It's worth noting that"
Flag exact locations of violations.
3. Voice Pattern Check (programmatic — DO NOT skip)
Binary clichés ("X-not-Y" / "It's not X, it's Y" / "isn't X — it's Y") read as LinkedIn slop and slip past subjective scoring. Run these regexes against the file with the Grep tool. Any match = FAIL.
| Pattern | Catches |
|---|---|
, not [a-z] |
"X, not Y" |
— not [a-z] |
"X — not Y" |
\bisn'?t [a-z][^.\n]+ — it'?s\b |
"isn't X — it's Y" |
\baren'?t [a-z][^.\n]+ — they'?re\b |
"aren't X — they're Y" |
\bIt'?s (a|the|an) [^.\n]+, not (a|the|an)\b |
"It's a/the X, not a/the Y" |
\bThat'?s (a|the|an) [^.\n]+, not (a|the|an)\b |
"That's a/the X, not a/the Y" |
\bIf you [a-z][^,.]+, [a-z] |
"If you X, Y" rhetorical |
\bHere'?s the thing\b |
LinkedIn slop |
\bI'?ll be honest\b |
LinkedIn slop |
\bLet that sink in\b |
LinkedIn slop |
\bHot take\b |
LinkedIn slop |
Skip matches inside HTML comments (<!-- ... -->) and code fences (```) — those are scorecard / metadata blocks.
Replacements that work:
- Collapse to a single load-bearing claim.
- Use parallel-positive contrast where both halves are positive: "Description is passive. State is something the agent can act on."
- Use a metaphor: "expensive webhook" not symmetrical reversal.
Project hook integration: if the project has .claude/hooks/voice-gate.py, that hook fires PostToolUse on Edit/Write and catches these patterns at draft time. The gate step still runs the regexes — belt and suspenders.
4. SEO Lint (search content only)
Apply only if the content targets search engines. Check against Algorithmic Authorship rules:
- Conditions after main clause
- Instructions start with verbs
- Sentences under 20 words
- Bold the answer, not query terms
- No links in first sentence of paragraphs
For full rule set, read knowledge/frameworks/content-copywriting/algorithmic-authorship.md.
5. Optional Panel Scoring (advisory)
Use panel scoring only when the user asks for a second opinion or the artifact is high-stakes. It does not replace Kai gates and cannot override a hard fail from banned words, source gaps, policy risk, or missing approval.
Recommended panel roles:
- Audience reviewer: checks persona fit and plain-language clarity
- Channel reviewer: checks platform fit, format, and norms
- Proof reviewer: checks source locations, attribution, and unsupported claims
- Conversion reviewer: checks CTA clarity and objection handling
Output panel scores as advisory notes:
| Reviewer | Score | Concern | Suggested fix |
|---|---|---|---|
| Audience | 1-5 | ... | ... |
Governance rules:
- Label panel output as simulated review, never expert validation.
- Do not create fake credentials, endorsements, or named reviewers.
- Treat missing source locations as a gate issue, not a panel preference.
- Run panel scoring on drafts first; publishing still requires approval.
Output Format
## Quality Gate Results
**Four U's:** [X]/16 [PASS/FAIL]
- Unique: [X]/4 — [reason]
- Useful: [X]/4 — [reason]
- Ultra-specific: [X]/4 — [reason]
- Urgent: [X]/4 — [reason]
**Banned Words:** [PASS/FAIL]
- [list violations with line numbers, or "None found"]
**AI Slop:** [PASS/FAIL]
- [list violations with line numbers, or "None found"]
**Voice Patterns:** [PASS/FAIL]
- [list X-not-Y / LinkedIn-slop violations with line numbers, or "None found"]
**SEO Lint:** [PASS/FAIL/SKIPPED]
- [list violations, or "All rules pass"]
**Overall:** [PASS/FAIL]
If FAIL: list specific fixes needed. Offer to auto-fix and re-score.
Learning hook
Gate script runs log to data/learning/gate_runs.jsonl automatically. If the same diagnosis fails twice on one piece, append a lesson to memory/lessons.md before escalating (write trigger #3 in memory/MEMORY.md). Recurring failures across pieces get mined by /kai-retro and promoted into new gate checks with golden corpus cases.