# Workflow Guide — running the creative pipeline, step by step

Pipeline v4 · 2026-09-11. Follow this in order for every client. The one-page cheat sheet is at
the bottom; the changelog is in `CHANGELOG.md`.

**The golden rule for attachments:** each run hands one file to the next. You never retype
client info — the file carries it.

| Run | App | You type | You attach | You get back |
|---|---|---|---|---|
| 1 | Codex | `$brand-standards` | **nothing** | `<Client>-Brand-Standards.md` |
| 2 | Claude Cowork | `/creative-strategy` | the Brand-Standards `.md` | `<Client>-Creative-Package.md` |
| 3 | Codex | `$meta-ad-creative-generator` | the Creative-Package `.md` (just that one) | review-ready ads + `<Client>-Ad-Index.md` |

**Optional — remaking rejected ads.** Not part of the normal workflow. The default after a client
review is to go live with what they approved and build a whole new set at the next creative
refresh. Use these two extra runs only if you want to keep some of this round's copy or artwork
and remake just the rejected ads.

| Revision | App | You type | You attach | You get back |
|---|---|---|---|---|
| Run 2 again | Claude Cowork | `/creative-strategy replace` | the Creative-Package `.md` — then describe the rejected ads in plain words | the same package, round 2 — approved ads preserved, rejected ones replaced |
| Run 3 again | Codex | `$meta-ad-creative-generator` | the round-2 Creative-Package `.md` | only the new, revised, or corrected ads |

---

## Install the skills (once, ~5 minutes)

Two files, two chats, two pastes. Both files are on the site's download buttons (or in the
Skills Package zip).

**1. Codex — two skills.** New Codex chat → attach `codex-skills.zip` → paste:

```
Attached is codex-skills.zip. It contains updated versions of two skills I already use:
brand-standards (v4.0) and meta-ad-creative-generator (v4.1). Please:
1. Back up my current versions of both skills, if I have them.
2. Install the attached versions into my Codex skills folder, keeping the folder
   structure exactly as it is inside the zip (brand-standards/ and
   meta-ad-creative-generator/, each with its SKILL.md and subfolders).
3. Confirm both skills are installed and show me the version number from each SKILL.md.
Do not rewrite or summarize the skill files — install them as-is.
```

Then type `$` in a new chat — both skills should be listed. First time only: ask Codex where to
put your OpenAI API key for the ad generator.

**2. Claude Cowork — one skill.** New Cowork chat → attach `creative-strategy-SKILL.md` → paste:

```
Attached is the updated SKILL.md for a skill called creative-strategy (v4.3). Please
update my creative-strategy skill with this file exactly as written — do not rewrite,
shorten, or reformat it. If I don't have a creative-strategy skill yet, create it from
this file. Show me the review card so I can save it.
```

A card appears in the chat — click **Save**. After that `/creative-strategy` works in any Cowork
chat.

---

## RUN 1 — Research the brand (Codex)

**1.** Open the Codex app. Start a **new chat**. Attach nothing.

**2.** Type `$` and pick **brand-standards**.

**3.** It asks for what it can't find. Answer in one message:
   - Business name — exactly as you want it spelled on folders and files
   - The client's website
   - Any extra sources, one per line — Facebook, Instagram, Google Business Profile, Yelp,
     other sites — or "none"

   Don't tell it the industry. It figures that out from the site.

**4.** It asks **where the client folder should live.** Point it at the folder where you keep
   this client's work, or let it create one (Mac or Windows — any path works). Everything for
   this client lands there: the .md files, assets, work files, and finished ads. If the folder
   already had artwork in it, it asks before organizing anything.

**5.** It asks: **Scan your Google Drive for client assets? Yes / No.** On Yes it looks for
   `<Client Name> Creative Folder` and downloads **usable ad assets only**: common image types
   and videos up to 100 MB each. Audio and project files never come down. Over 1 GB of qualifying
   files, it asks first. It reports what actually arrived versus what it only saw listed.

**6.** It researches and writes **`<Client>-Brand-Standards.md`** into `brand/`. Every rule is
   tagged by how much weight it carries — client requirement, verified fact, **observed website
   styling**, or recommendation — so a weak website doesn't become the ceiling for the ads. Each
   asset is graded: usable as-is, needs enhancement, identity reference, or missing.

**7.** *Optional:* a brand tile in `brand/`, marked `reference` until you approve it. A missing
   tile never stops production; the real logo file and written color values always outrank it.

**8.** ⚠️ **Before Run 2: put your assets in.** Drop the client's photos, logo, and any files you
   have into the client folder's `assets/` subfolders. If you have ads the client already loves or
   hated, drop them into `brand/benchmarks/approved/` or `rejected/` — Run 3 judges its renders
   against them.

---

## RUN 2 — Build the strategy (Claude Cowork)

**1.** Open Claude. **Open the client's Project first** — don't use a blank chat. Inside the
   Project, the skill reads your meeting transcripts and call summaries.

**2.** Start a new chat in that Project. **Attach `<Client>-Brand-Standards.md`**. Type
   `/creative-strategy` and send.

**3.** *If a permission box pops up on your desktop* asking to access your client folder —
   approve it. It asks once.

**4.** It asks for anything it couldn't find on its own — usually the offer — plus three questions
   it asks every time:

   ```
   1. Concepts per bucket — 5 or 10? (or type a number)
      Reserve ideas per bucket — 2 or 3? (or a number, or 0)
   2. Seasonality — run dates, a season, a promo window, or "none"
   3. Visual benchmarks — ads to match or avoid that aren't already in brand/benchmarks/
   ```

   Your number is the ceiling, not a quota — a concept it can't defend gets cut, not padded.

**5.** **The bucket gate — your decision point.** It shows the client's full service menu, marks
   which services the proposed buckets cover and which they don't, then proposes 5–8 buckets
   ranked with reasons. **Read the ✗ not-covered list first.** Then answer: build these, cut,
   add, swap, reorder, or change the count. Whatever you approve is the entire scope.

**6.** *Only if some approved buckets have thin or weak assets:* it asks whether real photos are
   still coming, whether to **enhance what's there** (lighting, perspective, background cleanup,
   extension) and generate scenes where nothing usable exists, or whether to plan fully
   AI-generated imagery. AI never fakes proof: no client trucks, uniforms, signage, staff, or
   testimonial imagery, and the logo always has to be a real file.

**7.** It writes the concepts at your count per bucket. Each carries a **visual idea** (what stops
   the scroll and what the image says), how the image proves the headline, why it fits this
   client, the copy with character counts, CTA, destination, and a four-line asset plan:
   **Keep real / Enhance / Generate / Must accomplish**. Layout is a suggestion at most — Codex
   decides the execution. Each bucket also gets a short **reserve** of alternate ideas, not for
   production, held for the replacement round.

**8.** It delivers **`<Client>-Creative-Package.md`** (also saved to `brand/`). Section 4 is the
   **resolved production brief** — the rules that govern this run, each tagged client-approved,
   strategist-approved, verified fact, recommendation, or unresolved. The brand standards ride
   along as Appendix A.

---

## RUN 3 — Make the ads (Codex)

**1.** Open Codex. New chat. **Attach `<Client>-Creative-Package.md`** — just that one file.
   Type `$` and pick **meta-ad-creative-generator**.

**2.** It reads the package's `build` list, re-scans the client folder, and actually opens the
   source photos, logo, and benchmarks — not just their filenames.

**3.** It asks the **CTA button question** once: `None / 25% / 50% / 100% / Other`. When in doubt,
   say None. It never re-asks a settled answer.

**4.** For each concept it writes a short **execution brief** — visual idea, hero subject,
   composition, what stays real vs. enhanced vs. generated, and the specific failure to avoid —
   then renders. Route per ad: a fully generated master, or AI imagery finished with the real
   logo file and real fonts for exact type.

**5.** **First look — your decision point.** For a new direction it builds up to **three concepts,
   usually two candidates each**, and runs them through its own visual gate first (full size and
   phone size: idea, composition, typography, brand fidelity, finish). You only see what passed.
   Pick the direction, or say what's wrong — it gets two focused repair rounds per concept before
   it has to tell you the direction isn't working.

**6.** After you approve the direction it builds the rest of the `build` list **in batches of
   five**, pausing after each. The list defines the total — no automatic 45-ad target, and
   reserves are never built.

**7.** Ads land in the client folder, plus **`<Client>-Ad-Index.md`** — every ad with copy,
   computed character counts, CTA, destination, sources, settings, and status. **Review-ready**
   means it passed Codex's gate; **approved** means you or the client said so.

---

## OPTIONAL — Remaking rejected ads (Claude Cowork → Codex)

**You can skip this entirely.** After the client reviews the ads, the normal path is: go live
with what they approved, and build a completely new set at the next creative refresh. If they
approve 30 of 50, you launch 30. Use the steps below only when you want to keep some of this
round's ideas, copy, or artwork and remake just the rejected ads as new options.

**1.** In the client's Project, attach `<Client>-Creative-Package.md` and type
   `/creative-strategy replace`.

**2.** It asks which ads the client rejected and what they said. **Answer in plain words** — the
   filename, the headline on the ad, "the two testimonial ones," whatever is easiest. No ID
   numbers needed; it matches them for you.

**3.** **Confirm the table.** It shows each rejected ad, what it matched it to, and what it
   proposes: **replace** (wrong idea — a new one), **revise** (good idea, weak render — rebuild
   it), or **correct** (a wrong word, price, logo, or crop — fix that only). Change any row, then
   say go. Approved ads are never touched.

**4.** Take the round-2 package to Codex and run `$meta-ad-creative-generator` on it. It builds
   only the ads that changed and saves them separately — approved originals stay exactly as they
   were.

---

## Common mistakes

- **Attaching the wrong file to Run 3.** Run 3 takes the *Creative Package*, not the Brand
  Standards file — the package already contains the brand standards.
- **Running Run 2 in a blank chat** instead of the client's Project.
- **Skipping the assets step** between Runs 1 and 2.
- **Rubber-stamping the bucket gate.** The ✗ list is where the mistakes hide.
- **Asking for 10 per bucket out of habit.** Five strong plus a reserve beats ten you'll cut.
- **Hand-editing a rejected ad.** Either let it go and build fresh next refresh, or use
  `/creative-strategy replace` so the copy and approved originals stay intact.
- **Calling a render "approved" because it looks fine.** Codex's gate makes it *review-ready*.
  Approved is what you or the client say.

---

## Cheat sheet

```
RUN 1  Codex   $brand-standards          attach NOTHING
       → answer: name, website, sources → confirm folder → Drive scan Y/N
       → get Brand-Standards.md   → drop assets into assets/ (+ benchmarks/ if you have them)

RUN 2  Cowork  /creative-strategy        attach BRAND-STANDARDS.md  (in client Project!)
       → approve folder popup → answer: COUNT PER BUCKET, seasonality, benchmarks
       → APPROVE THE BUCKETS  ← your big decision
       → get Creative-Package.md (visual idea + asset plan per concept, reserve per bucket)

RUN 3  Codex   $meta-ad-creative-generator   attach CREATIVE-PACKAGE.md only
       → CTA buttons? (None is fine)
       → FIRST LOOK: up to 3 concepts × 2 candidates, already through Codex's visual gate
       → approve the direction → rest of the build list in batches of 5 → Ad-Index.md

THEN   client reviews → approved ads go LIVE → new set at next refresh. Done.

OPTIONAL  only if you want to remake the rejected ads instead of waiting for next refresh:
       Cowork  /creative-strategy replace   attach CREATIVE-PACKAGE.md, describe rejected ads in plain words
       → confirm replace / revise / correct per ad → round-2 package
       Codex   $meta-ad-creative-generator → builds only what changed; approved originals untouched
```

---

*Author: Jeremy Howard — Drive Social Media creative pipeline · v4 · 2026-09-11.*
