/content-retro — The CMO's Feedback Loop

SkillDev tools

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

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /content-retro — The CMO's Feedback Loop skill

What this skill tells your AI

The instructions your AI receives, as published by cgallic/kai-cmo-harness in legacy/content-retro/SKILL.md and read by ahel’s review.

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)

Signals

GitHub stars
47
Forks
6
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
content-retro
Source
github.com/cgallic/kai-cmo-harness