---
reliability: 3.9  # core 4 gen stages: kit refs .3 + cover .3 + thumbnails edit .2 + hero/keyframes .3; email + social stages OPTIONAL (−.3 each if run)
---

# Online course — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. The agent walks through it with you and stops for your approval at every step that matters.

## What you'll get

A full visual identity for one online course launch — the course cover, the lesson thumbnails (with your face consistent across every one), the sales page hero, and the launch-week social pack:

- **Course cover** — the sales-page hero and the most-clicked image in your launch.
- **6-8 lesson thumbnails** — your face is the same face in every thumbnail. This is the hard part most creators give up on.
- **Sales page hero** — wide-format hero image for the top of your sales page.
- **Intro video keyframes** — 4 still frames for your course intro video to be edited around.
- **Email welcome sequence imagery** — 3 header images, one per email in your 3-day welcome.
- **Social tease pack** — 4 LinkedIn posts, 4 IG posts, captions included.

**Time**: ~25 minutes wall clock. **Your attention**: about 7 minutes across 6 quick approvals. **Cost**: $1.50 – $3.00 end to end.

## Tell the agent about the course

```yaml
course_name:        # e.g. The Quiet PM
instructor_name:    # e.g. Maya Chen
course_topic:       # e.g. how product managers without titles drive shipped outcomes
target_student:     # e.g. ICs at Series B-D startups, 2-5 yrs into PM, feeling stuck
lesson_count:       # 4-8
price_point:        # e.g. $480 / $48 monthly
course_aesthetic:   # clean-tech / warm-coaching / academic / creator-bright
instructor_photo_url:  # optional — your best headshot URL. If empty, agent uses a stand-in.
```

## Quality controls (new — auto-applied)

This playbook leverages the closed quality loop. The agent applies these by default; you don't have to ask:

- **Cost upfront.** Before any multi-step batch fires, the agent calls `submit_plan` with `confirm:false` and shows you the proposed steps + total cost. Nothing runs until you approve.
- **Auto-retry on weak shots.** The server default is `quality_threshold: 0.7`. For the course cover and the lesson thumbnails the playbook step tells the agent to pass `quality_threshold: 0.85` so a low-confidence first try gets one auto-retry before you see it.
- **Critic verdict on the result.** When the lesson-thumbnail batch finishes, the agent reads the `critique` field on the response (verdict: ship / iterate, plus per-thumbnail face-consistency flags) and surfaces it for your review. Face drift is the most common failure mode here — the critic catches it.
- **One-click recovery.** If a step fails, `get_plan` returns a `recovery` hint pointing at `replan({plan_id})` — the agent classifies the failure and proposes a recovery plan you can approve.
- **End-of-project scorecard.** The final wrap-up calls `get_scorecard({project_id})` with succeeded count, mean quality score, critic verdict, total cost, and wall time.

You can override any of these per step.

## How the agent should run this (interaction contract)

1. **CONFIRM (one message, then go).** Restate: "{course_name} · {lesson_count} thumbnails · {course_aesthetic} · anchor photo {supplied / stand-in}" + 2-3 real choices (6 vs 8 lessons · core-only vs core + optional email/social steps · stand-in face vs wait for a real headshot). Quote ~$1.50-3.00 / ~25 min. ONE question max — if `instructor_photo_url` is empty, that IS the question; otherwise state assumptions and start.
2. **PREVIEW CHECKPOINT — the cover (Step 2) gates the thumbnail batch.** One $0.20 image proves the look + face anchor + typography. Get it approved before the ~$0.80 thumbnail fanout; a redirect here costs one image, not eight.
3. **NARRATE.** Poll job_ids via `get_create_media` every ~10s; one line per asset group with ETA: "thumbnails 3/7 (~2 min left)". gpt-image runs slow (60-90s/image, occasionally times out) — say so before Step 2. Never silent >2 min.
4. **FAIL GRACEFULLY.** Face drift on a thumbnail (kontext-edit) → re-render JUST that one via `nano-banana`, then `gpt-image-edit`; hallucinated lesson-title text → re-fire on `mai-image-2.5`/`ideogram-v4`, or deliver text-free + the exact title for a Canva overlay; gpt-image timeout → 1 retry, then `flux-dev` for non-text shots. Always a 1-line WHAT/WHY/fallback. ≤2 retries/asset; ship the partial set with the failed one named.
5. **DELIVER.** URLs + scorecard + 1-line honest note ("face consistent on 7/8; lesson 5 ran on the fallback model") + ONE next step ("upload the cover to your course platform first").

## How this works

Six gates. The hardest beat is keeping your face the same face across 6-8 lesson thumbnails — the agent uses the locked instructor photo as a face anchor on every thumbnail render. You approve the anchor once; every downstream thumbnail inherits it.

## The steps

### Step 0 — Confirm the brief

The agent reads back the BRIEF — course name, instructor, topic, lesson count, aesthetic — so you catch typos before any image renders.

**STOP**: "Brief looks right? (approve / edit [field] [new value])"

### Step 1 — Lock the course look + the instructor anchor (~1 min, ~$0.10)

The agent builds a brand kit from your course_aesthetic. It infers a palette (clean-tech → cool blues + warm white; warm-coaching → terracotta + cream; academic → ivory + navy; creator-bright → coral + sage) and 6-8 voice keywords from your topic and target_student.

If you supplied `instructor_photo_url`, the agent fetches it and sets it as the face anchor — this is the photo every lesson thumbnail will be rendered against to keep your face the same face. If you didn't supply one, the agent generates a stand-in face and locks it as the anchor (you can refine it now).

> **For the agent**: this is the identity gate. Build the kit with `brand_kit_create` (palette + voice keywords + reference imagery), then `set_active_brand_kit` so every later step auto-inherits palette + voice. Lock the instructor photo as the face anchor. Every later step inherits both.

**STOP**: "Approve the look + the instructor anchor, or refine? (approve / refine [direction])"

### Step 2 — Course cover (~1 min, ~$0.20)

The course cover — your face (from the anchor) on the right, course name in bold typography on the left, brand-colored background, premium feel. This is the sales-page hero, the most-clicked image in the entire launch.

> **For the agent**: pass `quality_threshold: 0.85` on this — auto-retry fires once on any try Gemini Vision grades below 0.85. Use `mai-image-2.5` (photoreal + readable branding text) or `gpt-image` so the course name renders crisply, not as hallucinated letters. For the face, pass the instructor anchor as `quality_anchor_url`.

**STOP**: "Approve the cover, or refine? (approve / refine [direction])"

### Step 3 — Lesson thumbnails with face consistency (~4 min, ~$0.80)

The agent generates a thumbnail for each lesson — your face from the anchor, a topic-specific composition behind you (whiteboard moment for a strategy lesson, laptop close-up for a tactics lesson, conversation pose for an empathy lesson, etc.), lesson number + lesson title in your typography.

Each thumbnail uses the instructor anchor so your face stays your face across all 6-8 — same hair, same expression posture, same lighting on the face.

> **For the agent**: render each thumbnail through `kontext-edit` with the instructor anchor as `source_url` (image-edit preserves the face far better than text-to-image). Add the lesson title text via `gpt-image` / `mai-image-2.5` overlay if needed. Pass `quality_threshold: 0.85` on every thumbnail — face consistency is non-negotiable. Auto-retry fires once below 0.85, AND the critic checks face-anchor adherence in the cross-thumbnail review.

> **Critic verdict** — the lesson-thumbnail batch returns a `critique` field with per-thumbnail face-drift flags. If verdict=iterate, surface the drifted thumbnails so the user can target a re-render at exactly those 1-2 instead of the whole batch.

**STOP**: "Which thumbnails to keep? (keep all / redo [lesson #] [direction])"

### Step 4 — Sales page hero + intro video keyframes (one approval gate)

Before step 4, the agent calls `submit_plan` with steps {sales hero × 1, intro keyframes × 4} and shows the total cost (~$0.30 typical). You approve once for the whole batch.

The sales hero is a wide-format (1920×1080) image — your face larger, course name + tagline overlay, brand-colored gradient. Goes at the top of your sales page above the fold.

The 4 intro video keyframes are stills your editor will cut your intro video around: (1) you on camera intro pose, (2) the course cover, (3) a "what you'll learn" moment, (4) a "your transformation" moment. All face-anchored to keep you you.

**STOP** (one gate, before the batch fires): "Approve the hero + 4 keyframes at ~$0.30? (approve / skip [which])"

### Step 5 — Email welcome sequence imagery (~2 min, ~$0.20)

Three header images for your 3-email welcome sequence. Each is a 1200×600 banner, brand-colored, with your face from the anchor and a short overlay text. Email 1 = "Welcome to {course_name}" (you waving / open posture). Email 2 = "Day 1 starts now" (you at the whiteboard moment). Email 3 = "Your transformation starts here" (warm forward-looking shot).

**STOP**: "Approve the 3 email headers? (approve / refine [which one] [direction])"

### Step 6 — Social tease pack (~2 min, ~$0.15)

- **4 LinkedIn posts** — each is a 1200×627 image with a one-line hook, your face, course name. Hooks tease 4 different lessons.
- **4 IG posts** — square format, more visual + less text-heavy than LinkedIn. Carousel-friendly.
- Captions for all 8, written in your topic's voice.

Saved to `public/launches/{course-slug}-social.html`.

**STOP**: "Approve the social pack? (approve / refine [which one] [direction])"

### Final step — scorecard wrap-up

After all deliverables ship, call:

```
get_scorecard({ project_id: "{the project id from earlier steps}" })
```

The response is a one-page report card:

```
Scorecard for cjob_xxx
{N}/{N} scenes shipped — critic: SHIP (or ITERATE)
Title: <course_name>
Steps: N/N succeeded (100%)
Quality: mean X.XX · M/N passed · K retries
Critic: SHIP/ITERATE
Cost: $X.XX actual (est $Y.YY) · Ts wall time
Viewer: <project URL>
```

Paste the scorecard into your launch-team channel so the people helping you launch see the quality numbers, not vibes.

## When you're done

The agent prints:

```
✅ Course cover: <URL>
✅ Lesson thumbnails (6-8): <viewer URL>
✅ Sales page hero: <URL>
✅ Intro video keyframes (4): <viewer URL>
✅ Email headers (3): <viewer URL>
✅ Social pack: public/launches/{course-slug}-social.html

Total spent: $X.XX
Total wall-clock: MM:SS
```

## What to do next

1. **Upload the cover to your course platform** (Teachable, Podia, Kajabi, Thinkific) as the main course image.
2. **Push the sales page hero** to the top of your sales page above the fold.
3. **Hand the lesson thumbnails to your video editor** — these are the YouTube/lesson-list thumbnails for every lesson.
4. **Wire the email headers into your welcome sequence** in your ESP (ConvertKit, Beehiiv, Mailchimp).
5. **Schedule the social pack** — ask the agent to `publora_publish_post` each image to your connected accounts, or schedule through your normal tool.
6. **Save the brief + instructor anchor** — when you launch course #2, re-use the same instructor anchor. Your face will be the same face across all your courses. That's a brand.
