agentsclimarketplace

Content retro

Skill cgallic/kai-cmo-harness/legacy/content-retro

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 content-retro

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

Analyze content performance patterns. Extract what works (hook types, formats, personas). Auto-update learned defaults so future content improves.

SKILL.md

4.6 KB, as published. Nobody here has run it

/content-retro — The CMO's Feedback Loop

Analyze what's working across your published content. Extract winner patterns and auto-update the system's learned defaults so future content improves without manual tuning.

This is the skill that closes the loop. Everything upstream — /content-brief, /content-write, /content-gate — reads the defaults this skill updates.

Preamble

source "$(dirname "$0")/../lib/preamble.sh"

The Skill

Step 1: Load Performance Data

Read ~/.kai-marketing/content-log.jsonl and filter for pieces with performance_30d set (not null).

If fewer than 5 graded pieces exist, tell user: "Need 5+ graded pieces for reliable pattern extraction. You have {N}. Run /content-report to grade pending pieces, or publish more content."

Step 2: Pattern Analysis

Analyze the graded pieces for statistical patterns. For each dimension, compare winner rates:

Dimensions to analyze:

  • Hook type: Which hook types (curiosity gap, social proof, pain agitate, contrarian, data-led) produce more winners?
  • Format: Which formats (blog, linkedin, email, etc.) perform best?
  • Persona: Which personas produce winners?
  • Word count range: Is there a sweet spot?
  • Publish day of week: Does timing matter?
  • Quality gate score: What score range correlates with winners?

Statistical threshold: A pattern is significant only when:

  • n >= 5 samples for that dimension value
  • Winner rate delta >= 15% above baseline

Step 3: Display Findings

CONTENT RETRO — Pattern Analysis
══════════════════════════════════════════

Data: {N} pieces analyzed ({winners} winners, {avg} average, {under} underperformers)

SIGNIFICANT PATTERNS (n≥5, delta≥15%):

  Hook Type:
    curiosity_gap:  72% winner rate (n=7)  ← +22% above baseline
    social_proof:   40% winner rate (n=5)  ← baseline
    pain_agitate:   33% winner rate (n=6)  ← -17% below baseline

  Persona:
    Shock Absorber: 80% winner rate (n=5)  ← +30% above baseline
    Competent Cog:  50% winner rate (n=8)  ← baseline

  Format:
    blog:           65% winner rate (n=12) ← +15% above baseline

NOT ENOUGH DATA:
  - Publish day: need 5+ per day (max is 3 for Tuesday)
  - Word count: need 5+ per range

Step 4: Update Learned Defaults

For each significant pattern, propose updating the learned defaults:

"Found {N} significant patterns. Update learned defaults?"

If user approves:

  1. Backup the current defaults: copy ~/.kai-marketing/marketing-defaults.md to ~/.kai-marketing/marketing-defaults.md.bak

  2. Write updated defaults to ~/.kai-marketing/marketing-defaults.md:

# Learned Defaults — Auto-Generated by /content-retro
# Last updated: {date}
# Based on: {N} pieces analyzed

## Hook Preferences
- Prefer curiosity_gap hooks (72% winner rate, n=7)
- Avoid pain_agitate hooks when alternatives exist (33% winner rate, n=6)

## Persona Preferences
- Shock Absorber persona produces strongest results (80% winner rate, n=5)

## Format Preferences
- Blog format outperforms others (65% winner rate, n=12)

## Quality Floor
- Winners average gate score: {avg_winner_score}/100
- Minimum gate score for publish: {recommended_threshold}
  1. Also write findings to ~/.kai-marketing/what-works.md (backup first):
# What Works — Pattern Archive
# Auto-updated by /content-retro

## {date} Analysis ({N} pieces)
{summary of findings}

Step 5: Confirm the Loop

Tell user: "Defaults updated. Next /content-brief and /content-write will use these patterns automatically."

Show the chain:

/content-retro just updated → marketing-defaults.md
  └→ /content-brief reads defaults → better briefs
      └→ /content-write reads defaults → better content
          └→ /content-gate scores → better pass rate
              └→ /content-report grades → more winners
                  └→ /content-retro analyzes → loop continues

Error Handling

  • Not enough data (n<5): Show what data exists, suggest publishing more
  • what-works.md corrupted: Restore from .bak if available, otherwise start fresh
  • No performance data: Direct to /content-report first

Chain State

Reads from: ~/.kai-marketing/content-log.jsonl (graded entries) Writes to: ~/.kai-marketing/marketing-defaults.md, ~/.kai-marketing/what-works.md Read by: /content-brief, /content-write (next cycle)

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.