Creative01 / 21

Creative Pipeline Kickoff

Hand Claude a folder of ads you admire plus the facts about your product, and get back a rebuildable template instead of a one-off picture.

01

When to use this

Use this the very first time you point Claude at ad creative. It is the opening move of the whole creative build. You are not trying to get a finished ad here. You are trying to find out whether Claude can copy the shape of an ad you already know works, so that later you can spin that shape hundreds of times.

02

The prompt

My goal is to create a creative pipeline skill. Before we create the skill, I am going to prompt back and forth with you to work out how best to structure it.

Here is the situation. I have a folder of ads called <AD_FORMATS_FOLDER> that I am feeding you. I want you to take the design of those ads and apply information about <PRODUCT_NAME> to them.

About the product:
- What it is: <ONE_LINE_DESCRIPTION>
- Who it is for: <AUDIENCE>
- The offer: <GUARANTEE_OR_OFFER>
- What is included: <BONUSES_OR_INCLUSIONS>

I want to recreate the ads in that folder as closely as possible. I know it will not be perfect on the first pass because we are doing this procedurally, so we will go back and forth until the variant is high quality.

One constraint: we cannot use the original brand's logo or wordmark. Replace it with <YOUR_BRAND>. Everything else should stay visually close. Change the background image so it is ours, not theirs.

If you need more information from me to produce niches, offers, or angles, ask me now. Once this looks right we will turn it into a repeatable engine that generates dozens or hundreds of these quickly.
03

What it is actually doing

This prompt does three jobs at once, and the order matters.

First it tells Claude the destination. You say the words "creative pipeline skill" up front, so Claude knows it is building something reusable, not making one picture. That changes how it structures its answer.

Second it gives Claude real reference material. You are not describing an ad in words, you are handing over screenshots of ads that already work. Claude reads the actual layout: the gradient at the top, the bold short headline, the tiny logo, the single button.

Third it gives Claude the product facts it cannot guess. Every ad it writes has to say something true about what you sell. If you skip this part, Claude invents claims, and invented claims are how ad accounts get shut down.

The last paragraph is the important one. You are telling Claude in advance that the first attempt will be rough and that you plan to iterate. That stops it from over-polishing a single output and gets it to expose the knobs instead.

04

How it flows

No

Yes

Winning ads folder

Claude reads pattern

Product facts by voice

Extracted format spec

First rough render

Structure close enough

Move to tuner app

05

Step by step

  1. Collect winning ad formats

    Screenshot 3 to 5 ads whose layout you want to copy, at the highest resolution you can capture. Ideally these are your own top performers. Drop them in one folder.

  2. Convert the file types

    Ads scraped from ad libraries often download as .webp files, which many tools reject. Convert them to PNG before you feed them in.

  3. Feed the folder, not the files

    Claude Code can take an entire folder as context. Attach the folder so it reads every reference at once and can spot the shared pattern across them.

  4. Brain-dump the product by voice

    Hold the dictation key and talk. You will produce three to four times more context than typing, and context is exactly what this prompt needs. Cover what it is, who it is for, the offer, and the proof.

  5. Answer its clarifying questions

    Claude will ask things like whether you have a real logo file or whether it should typeset the name. Answer plainly. These answers become locked settings later.

  6. Read what it extracted

    Before you let it build, check that its summary of the pattern matches what you see. If it says 'bright gradient, bold benefit headline, tiny wordmark, single call to action' and that is right, you are good to proceed.

  7. Stop at the first rough output

    Do not accept or reject the first image on looks. You only need to confirm the structure is close. Fixing the look is the next note's job.

06

Words explained

Creative
The actual image, video, or graphic in an ad. Marketers say 'creative' the way a builder says 'materials'.
Ad format
The reusable layout of an ad, separate from what it says. Same skeleton, different words and colors.
Procedurally
Built by following rules and settings rather than being drawn by hand or generated by an image model. A recipe, not a painting.
Skill
A saved set of instructions in Claude Code that you can run again later by typing a slash command. Think of it as a program written in plain English.
Variant
One version of an ad that shares the layout but changes something: the headline, the colors, the angle.
07

Watch out for

  • Asking for 'great ads' with no reference produces a wild goose chase. The model sounds confident and delivers nothing usable.
  • If you do not explicitly forbid the original logo, Claude will happily reproduce another company's brand mark.
  • Low resolution screenshots produce mushy templates. Zoom in before you capture.
  • Skipping the product facts means Claude invents numbers and claims. Never ship a figure you cannot back up.
  • Do not let it jump straight to a finished batch. A batch built on an untuned template is fifty copies of the same mistake.
08

How it connects

Design Tuner App
This note produces a rough render, and the tuner is how you turn that rough render into a locked visual profile.
Prompt to Skill Conversion
The whole point of prompting first is that this conversation becomes the skill, so the back and forth here is what gets codified.
Compositing vs Direct Generation Models
This prompt is the compositing path, which is nearly free and lands right about eighty percent of the time. It caps out at recolors of one idea.
Compounding Failure in AI Pipelines
You bring the process and you judge the output, Claude only executes. That is what keeps this from becoming a coin flip.

Credit. Framework and approach by Nick Saraev, from the creative generation section of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Creative02 / 21

Design Tuner App

Stop re-prompting to fix a design and instead have Claude build you a slider page, tune it by hand, then export the settings as JSON.

01

When to use this

Use this right after your first rough render looks structurally close but visually wrong. It is the highest-leverage move in the whole creative build. Reach for it any time you catch yourself typing 'make the gradient a bit darker' for the third time.

02

The prompt

The structure is right but the look is not there yet. Do not try to fix this by regenerating.

Instead, build me a local HTML page that lets me tune the design by hand with live preview. Single file, opens in my browser, no build step, no server.

Expose a slider or dropdown for every knob you are using to render this ad:
- Gradient angle
- Gradient style: linear or radial burst
- Font family: give me <NUMBER> high-end options, not system defaults
- Font size
- Letter spacing
- Line height
- Content padding X
- Block gap
- Grain amount
- Grain size
- Grain blend mode: overlay, soft-light, multiply
- Grain seed
- Call to action style: pill button or plain text
- Call to action text
- Wordmark size

Rules:
1. The preview updates live as I drag. No refresh.
2. Render at the real ad dimensions so I can judge it honestly.
3. Add an Export Settings button that dumps the current state as JSON I can copy.
4. If any knob you use internally is missing from this list, add it. I want every variable exposed.

Once I hand the JSON back to you, treat it as the locked visual profile for <PRODUCT_NAME> and render every future ad against it.
03

What it is actually doing

Design feedback in words is slow and lossy. You say 'warmer', Claude guesses, you say 'not that warm', and you burn twenty minutes on one image.

A slider does that job in two seconds. So you ask Claude to stop being the designer and become the tool builder. It writes a small web page where every setting it uses under the hood becomes a control you can drag.

Now you are the designer. You drag the gradient angle until it feels right. You bump the letter spacing. You watch the ad change in real time. This is fast because your eyes are far better at judging a design than your words are at describing one.

The export button is the part that actually matters. When it looks right, you press it and get a block of JSON. That JSON is the whole design, written down as numbers. You paste it back to Claude and say 'this is locked'. From that point on, taste is no longer a fuzzy variable. It is a config file. That is the only reason a batch of 50 or 500 ads can come out consistent.

04

How it flows

No

Yes

Rough render

Claude builds tuner page

You drag sliders live

Looks right at thumbnail size

Export settings JSON

Paste back as locked profile

Batch renders against it

05

Step by step

  1. Refuse the re-prompt

    The moment you want to tweak a visual detail, do not describe the tweak. Ask for the tuner instead. One build replaces dozens of correction rounds.

  2. Demand every knob

    Tell Claude explicitly that any variable it uses internally must appear as a control. Hidden variables are the ones that drift later.

  3. Ask for real fonts

    Nick asked for 20 high-end font options because the default font made the wordmark blend into the background. Name a number so you get a real menu, not two choices.

  4. Add what is missing mid-build

    Nick noticed the first version had no noise and asked for grain to be added while the tuner was still open. Treat the tuner itself as editable.

  5. Tune for the phone, not the desktop

    Nick tightened letter spacing and pushed the overall scale up, because the biggest problem with ads is that people just cannot see them on a small screen. Judge it at thumbnail size.

  6. Export the settings

    Press the export button and copy the JSON. This is your visual profile. Save it somewhere you can find it again.

  7. Paste it back and lock it

    Hand the JSON to Claude and say these are the locked settings for this brand. Every batch from here renders against that file.

06

Words explained

Procedural knob
One setting the render code reads, like gradient angle or grain amount. Change the number and the picture changes in a predictable way.
Grain
Fine noise laid over an image. It stops a flat gradient from looking cheap and digital.
Blend mode
The rule for how one layer mixes with the layer under it. Overlay, soft-light, and multiply each darken or brighten in a different way.
Seed
A number that decides a random pattern. Same seed, same grain, every time. It is how you make randomness repeatable.
Wordmark
Your brand name set as type, used in place of a logo image.
Visual profile
The exported JSON. A written record of every design decision, so the look survives past this one conversation.
07

Watch out for

  • If you leave a knob out of the tuner, it stays hidden and quietly drifts across the batch later.
  • The first tuner Nick got had no grain at all, so the ads looked flat. Ask for grain by name.
  • Default system fonts make the wordmark disappear into the design. Ask for a real font menu up front.
  • Judging on a big monitor lies to you. Shrink the preview to phone size before you lock anything in.
  • Do not skip the export. If the settings only live in the browser, closing the tab throws the work away.
08

How it connects

Creative Pipeline Kickoff
The kickoff produces the rough render that this tuner exists to fix.
Batch Generation and Contact Sheet
The exported JSON is the input the batch step needs. Without a locked profile, 50 ads come out 50 different ways.
Compositing vs Direct Generation Models
The tuner only works on the compositing path, where every element is a knob you control. A pixel-generating model has no sliders.
Compounding Failure in AI Pipelines
You keep the judging step. Claude executes the render, you decide when it looks right, so taste never becomes a probabilistic step.

Credit. Framework and approach by Nick Saraev, from the tuner-app segment of the creative generation build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Creative03 / 21

Batch Generation and Contact Sheet

Point the locked design profile at fifty combinations of copy and angle, then get one HTML page with checkboxes where you tick the winners and download them.

01

When to use this

Use this once your tuner JSON is locked and you trust the look. This is the step that turns a single good ad into volume. It is also where you build the review screen, because fifty ads with no review screen is worse than five.

02

The prompt

Here is the locked visual profile from the tuner:

<PASTE_TUNER_JSON_HERE>

Apply those settings exactly and generate <COUNT> ad variants for <PRODUCT_NAME>.

Vary these across the batch:
- Call to action text: <CTA_LIST_OR_GENERATE>
- Angle or hook: <ANGLE_LIST_OR_GENERATE>
- Gradient angle: vary it across the batch, do not leave every ad vertical
- <ANY_OTHER_AXIS>

How to build it:
1. Write a script that iterates the combinations and renders them. Do not generate them one at a time in chat.
2. Output every file to <OUTPUT_FOLDER> with clear filenames that say which combination they are.
3. Build me a single HTML contact sheet in that same folder. It shows every ad as a thumbnail in a grid, each with a checkbox, plus a Download Selected button at the top that zips and downloads only what I ticked.
4. Open the contact sheet when it is done.

When that works, package the whole thing as an internal tool anyone on my team can run without asking me how it works.
03

What it is actually doing

Two things make this step work, and neither of them is the ads.

The first is that Claude writes a script instead of drawing fifty pictures by hand. A script loops through your combinations and renders each one. That is why fifty ads take seconds and cost almost nothing. If you let Claude generate them one message at a time, you pay for fifty conversations and get fifty slightly different results.

The second is the contact sheet. Fifty image files in a folder is a chore. One web page with thumbnails and checkboxes is a two minute job. You scroll, you tick six, you press download. That review screen is what makes volume usable instead of overwhelming.

The last line matters too. Packaging it as an internal tool means the creative person on your team runs it without you. You built the machine once. Now it is theirs.

The scale idea behind this: two ad formats is a demo. Five hundred formats crossed with ten brands and ten niches is about fifty thousand combinations. You generate them overnight and a human picks winners each morning.

04

How it flows

Locked tuner JSON

Claude writes render script

Copy and angle lists

Script iterates combinations

Output folder of ads

HTML contact sheet

Tick winners and download

Package as internal tool

05

Step by step

  1. Paste the locked profile first

    Start the message with the tuner JSON. Claude must know the look is settled before it starts multiplying anything.

  2. Name your axes of variation

    Decide what changes across the batch: calls to action, angles, niches, gradient angle. Each axis multiplies the count, so pick deliberately.

  3. Insist on a script

    Say the word script. It forces Claude to write a loop that iterates combinations rather than rendering each ad through a separate generation.

  4. Correct the sameness

    Nick's first batch came out all vertical gradients. He sent one follow-up telling it to vary the gradient angle too. Look at the batch as a whole and name what is not varying.

  5. Demand the contact sheet

    Ask for one HTML page, thumbnails in a grid, a checkbox on each, and a Download Selected button. This is the review UI and it is not optional.

  6. Review at speed

    Open the sheet, scan, tick the winners, download. Human taste applies here and only here.

  7. Package it as a tool

    Ask Claude to wrap the whole thing so a teammate can run it. If only you can run it, you are still the bottleneck.

06

Words explained

Contact sheet
A single page showing every output as a small thumbnail. Photographers used them to pick keepers from a roll of film. Same job here.
Batch
Many outputs produced in one run from one set of rules, instead of one at a time by hand.
Cross-multiply
Combining every option on one list with every option on another. Ten angles and five calls to action gives fifty ads.
Internal tool
A small app your own team uses. Not a product you sell, just something that removes a repeated chore.
Angle
The reason you give someone to care. Same product, different pitch: save time, look better, stop wasting money.
07

Watch out for

  • Nick's first batch was all vertical gradients, so fifty ads looked like one ad. Check what is not varying before you accept a batch.
  • Without a contact sheet you end up opening image files one by one, which kills the speed advantage entirely.
  • If Claude generates ads one message at a time instead of writing a script, it is slow, costly, and inconsistent. Stop it and ask for the script.
  • Vague filenames make winners impossible to trace back to their settings. Ask for names that encode the combination.
  • A batch built before the tuner is locked is fifty copies of the same unfinished design.
08

How it connects

Design Tuner App
The tuner JSON is the required input here. Batching before the look is locked just multiplies one mistake fifty times.
Prompt to Skill Conversion
By this point you have said the same thing twice, which is the signal to stop prompting and codify the whole flow as a skill.
Ad Creative Generation Pipeline
This note is steps three and four of that pipeline: cross-multiply, then review and pick.
Compounding Failure in AI Pipelines
Volume of attempts is the point. You are buying shots on net, then applying human taste cheaply at the selection step.

Credit. Framework and approach by Nick Saraev, from the batch generation and contact sheet segment of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Ladder04 / 21

Prompt to Skill Conversion

Turn the whole back-and-forth conversation into a saved skill you can run with a slash command in a brand new chat.

01

When to use this

Use this the second time you catch yourself typing the same instructions. That is the rule: say it twice, make it a skill. It is rung two of the automation ladder and you never skip it.

02

The prompt

This worked. Consolidate everything we just did into a skill.

Name it <SKILL_NAME>.

The SKILL.md description line should say to use this whenever anyone asks to <TRIGGER_PHRASES, e.g. create ad creative, ad variants, or run a creative pipeline>.

Bake in everything we settled on during this conversation:
- The locked visual profile: <PASTE_TUNER_JSON_OR_PATH>
- The output structure and the contact sheet
- Every correction I made to you along the way

Make it context independent. Assume the person running it has zero history with this conversation. Anything you learned from me that the skill needs, write into the file. Do not leave it implied.

Where I currently supply <VARIABLE_INPUT, e.g. the product>, make that a parameter the skill asks for or researches itself. It should work on a product it has never seen.

Write any helper scripts alongside the SKILL.md rather than putting long code inside it.

When you are done, tell me exactly what to type to run it.
03

What it is actually doing

A prompt is a thing you type. A skill is that same thing, written down and given a name.

The conversation you just had contains a lot of value that is easy to lose. Every correction you made, every setting you locked, every clarifying question you answered. Ask Claude to consolidate it and all of that goes into a file called SKILL.md, plus any scripts it needs. The first line of that file is a description telling Claude when to reach for the skill, which is how it fires on its own later.

The test for whether the skill really worked is simple and strict. Open a brand new chat with zero context. Type the slash command. If it runs correctly, the skill is real. If it needs you to explain things again, the file is incomplete.

Nick proved his ad skill this way. Fresh session, different product, his dialer startup Clarvo. He typed the command and said research clarvo.io. The skill went and found the product information itself, applied the locked format, and produced a contact sheet. That is the real unlock: context independence plus inputs you can swap.

Skills also stack. You can write small ones and have a master skill chain them. Nick's YouTube channel management example runs title candidates, thumbnails, descriptions, keywords, end screen cards, and publishing in sequence. Together they replace an entire role.

04

How it flows

No

Yes

Long back and forth prompt

Say it twice rule fires

Claude writes SKILL.md

Helper scripts alongside

Fresh chat zero context

Runs correctly

Swap in new product

Chain into meta-skill

05

Step by step

  1. Wait for the second repeat

    Do not codify on the first pass. You want the corrections baked in, and corrections only show up once you have run the thing for real.

  2. Ask for consolidation, not a rewrite

    Tell Claude to consolidate this conversation. It has the whole thread including your corrections. Starting fresh throws that away.

  3. Write a sharp description line

    The description tells Claude when to use the skill. Name the phrases a person would actually say, like create ad creative or run a creative pipeline.

  4. Turn your inputs into parameters

    Anywhere you supplied something by hand, make it a slot the skill asks for or researches. That is what lets it work on a product it has never seen.

  5. Push code into scripts

    Long code inside a SKILL.md makes it hard to read and easy to break. Ask for helper scripts stored beside it.

  6. Test in a fresh chat

    Open a new session with zero context. Type the slash command. This is the only test that counts.

  7. Swap the input to prove it

    Run it against a completely different product. If it researches and adapts, you have a skill. If it stalls, something is still living in your head.

  8. Chain into a meta-skill later

    Once you have several small skills for one job, write one master skill that runs them in order. That is how you replace a whole role instead of one task.

06

Words explained

Skill
A saved set of instructions Claude Code can run later with a slash command. Think of it as a program written in plain English.
SKILL.md
The actual file that holds the skill. A description line at the top says when to use it, and the rest says how.
Context independence
The skill works in a brand new chat with no memory of your earlier conversation, because everything it needs lives in the file.
Slash command
Typing a forward slash and the skill name to run it, like typing a shortcut instead of retyping the whole request.
Meta-skill
A skill whose job is to run other skills in order. One command, six jobs done.
Parameter
A blank the skill fills in each run, like which product to use. It is what makes one skill work on many jobs.
07

Watch out for

  • Codifying too early bakes in the version before your corrections, so the skill repeats the mistakes you already fixed.
  • A vague description line means Claude never picks the skill up on its own. Name the real trigger phrases.
  • If it only works in the chat where you built it, it is not a skill. It is a transcript.
  • Hard-coding your one product turns the skill into a single-use script. Make the product a parameter.
  • Long code stuffed inside SKILL.md makes the file unreadable and hard to fix later.
08

How it connects

Batch Generation and Contact Sheet
That batch conversation is exactly the thing you consolidate here. The corrections you made during it become the skill's rules.
Skill to Loop Conversion
A working skill is the only valid starting point for a loop. You cannot schedule something that still needs you to explain it.
Automation Ladder - Prompt Skill Loop Routine
This note is rung two of the four-rung ladder, and the ladder rule is that you never skip a rung.
Creative Pipeline Kickoff
The kickoff deliberately says the words creative pipeline skill up front, because the whole point of prompting first was to produce this file.

Credit. Framework and approach by Nick Saraev, from the prompt to skill rung of the automation ladder in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Ladder05 / 21

Skill to Loop Conversion

Put your working skill on a timer so a fresh batch is waiting on someone's desk before they sit down.

01

When to use this

Use this once a skill runs cleanly in a fresh chat and you want its output to exist without anyone asking for it. It is rung three of the ladder. Good for daily batches, monitoring, and scraping. Not good for anything a teammate needs to share.

02

The prompt

Convert the <SKILL_NAME> skill into a loop that runs on a schedule on this machine.

Schedule: <TIME, e.g. 5:59am> <DAYS, e.g. every weekday>. I want the output sitting there before <PERSON_OR_ROLE> starts work at <START_TIME>.

The important change: the skill can no longer ask me clarifying questions. It has to run unattended. So before you write it, answer these for me and I will confirm:
1. Batch size per run
2. Copy pool: does it iterate a fixed list, or generate fresh copy each run
3. Where the output goes
4. Whether old batches get cleaned up or kept
5. Daily or weekdays only

On point 2, my answer is regenerate. Do not bake a fixed list of <COPY_TYPE> in at build time. Each run the skill should pass through itself and write new <COPY_TYPE>, aware of what it already produced in previous runs, so today's batch is different from yesterday's.

Use the schedule skill and set up cron on this machine. Show me the cron entry when you are done, and tell me how to stop it.
03

What it is actually doing

A loop is just a skill with a clock attached. Same work, nobody has to ask for it.

Nick's default time is 5:59am. A creative specialist walks in at 6:00am and the batch is already there. That one minute is the whole idea: the work finishes before the human arrives.

Converting forces one real change, and it is easy to miss. A skill can stop and ask you a question. A loop cannot. Nobody is awake. So the skill needs enough autonomy to make its own choices and keep going.

The specific trap is copy. If your skill iterates a fixed list of headlines that got baked in on build day, every single run produces the same batch. Forever. You need the skill to pass through itself each run and write fresh copy, while knowing what it already made, so today does not repeat yesterday.

Claude will ask you a set of questions during the conversion: batch size, copy pool, output location, cleanup, and daily versus weekdays. Answer them in your prompt and the conversion takes one pass. It uses the built-in schedule skill and sets up cron on your machine.

Know the ceiling. A loop dies when your laptop sleeps. It breaks when something local changes, like a login expiring, a plugin updating, or an MCP server going down. And you cannot hand it to a teammate. When those limits start to hurt, you climb to a routine.

04

How it flows

Yes

Working skill

Answer autonomy questions

Regenerate copy each run

Schedule skill wires cron

Fires at 5:59am local

Fresh batch waiting at 6am

Laptop off or shared

Climb to cloud routine

05

Step by step

  1. Confirm the skill is solid

    Run it once more in a fresh chat before you schedule it. A broken skill on a timer just breaks quietly every morning.

  2. Pick the time backwards

    Start from when a human needs the output and subtract. Nick uses 5:59am for a 6:00am arrival. The output should already be waiting.

  3. Pre-answer the conversion questions

    Batch size, copy pool, output location, cleanup, and cadence. Put your answers in the prompt so Claude does not stall waiting on you.

  4. Choose regenerate over fixed

    This is the one that matters. Tell it to write new copy each run rather than iterating a list baked in at build time, or every day is a carbon copy.

  5. Give it memory of past runs

    The skill needs to know what it already produced. Otherwise fresh copy still drifts back to the same few ideas.

  6. Let it wire cron

    Claude uses the built-in schedule skill and creates the cron job on your machine. Ask to see the entry so you know what is actually running.

  7. Learn how to stop it

    Before you walk away, get the command that disables the loop. A loop you cannot turn off is a loop you will grow to resent.

06

Words explained

Loop
A skill that fires on a timer on your own computer, without anyone typing a command.
Cron
The scheduler built into your machine. You give it a time and a command, and it runs that command at that time.
Unattended
Runs with nobody watching. It cannot pause to ask a question, so every decision has to be settled in advance.
Copy pool
The set of headlines and calls to action a run draws from. Fixed means the same list forever. Regenerated means new writing each time.
Cadence
How often it runs. Daily, weekdays only, hourly. Pick the slowest one that still gets the job done.
MCP server
A small local service that gives Claude access to an outside tool. If it stops running, anything depending on it stops too.
07

Watch out for

  • A fixed copy list baked in at build time means every run produces the exact same batch. This is the failure people notice on day two.
  • The loop dies with your laptop. Sleep, shutdown, or a closed lid and nothing runs.
  • Local changes break it silently. An expired login, an updated plugin, or a stopped MCP server, and it fails with nobody watching.
  • You cannot share a loop with your team. It lives on your machine only.
  • The loop command has roughly a one minute floor for intervals, so anything faster than that is not a loop problem to solve.
08

How it connects

Prompt to Skill Conversion
A loop is only as good as the skill under it, so the skill has to pass the fresh-chat test before you put a clock on it.
Loop to Cloud Routine Conversion
Every limit of a loop, the dead laptop, the brittle local setup, the team that cannot use it, is the reason the next rung exists.
Automation Ladder - Prompt Skill Loop Routine
This is rung three, and the conversion rule it enforces is that the skill must produce something different each run.
Ad Creative Generation Pipeline
The creative pipeline is the build Nick took up this rung, firing at 5:59am so a fresh batch of ads was ready each morning.

Credit. Framework and approach by Nick Saraev, from the skill to loop rung of the automation ladder in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Ladder06 / 21

Loop to Cloud Routine Conversion

Move the same scheduled work onto Anthropic's servers so it runs with your laptop shut and your team can actually use the output.

01

When to use this

Use this when a local loop has proven itself and the limits start to bite: you close your laptop and nothing runs, or a teammate needs the output and cannot get it. It is rung four, the last one. Do not start here.

02

The prompt

Turn the <LOOP_OR_SKILL_NAME> loop into a cloud routine so it runs without my machine on.

Mirror the structure of <EXISTING_ROUTINE_NAME>. Query that routine first so this one inherits a shape I already know works.

Wire these three things:
1. Connectors. Attach <CONNECTOR_LIST, e.g. Google Drive> to the routine itself. My local connectors do not travel, so do not assume any of them exist.
2. Credentials. Re-add <KEY_NAMES, e.g. OPENAI_API_KEY> under the routine's cloud default environment. Local environment variables do not travel either.
3. Output. Write to a dated subfolder inside the shared Drive folder <DRIVE_FOLDER> instead of a local path, so my team can open it.

Code lives in the private GitHub repo <REPO_URL>. Pull from there rather than from anything on my disk.

Trigger: <schedule | API call | webhook>. If schedule, use <TIME_AND_DAYS>.

Tell me anything you cannot do yourself so I can do it by hand.
03

What it is actually doing

A routine is the same job running on Anthropic's infrastructure instead of your computer. Your laptop can be closed, dead, or on a plane. The work still happens.

Three things have to be wired, and all three fail in the same way: something that exists on your machine simply is not there in the cloud.

Connectors are the first. The connectors you set up locally belong to your machine, not to the routine. You attach them to the routine separately.

Credentials are the second. An API key living in your local environment does not travel. You re-add it under the routine's cloud default environment or the routine runs blind.

Output is the third and the one people forget. A folder on your desktop is useless to a team. Point it at a dated subfolder in a shared Google Drive instead. If code needs to travel too, put it in a repo. Nick used a private GitHub repo.

One gotcha he hit live: the Drive connector cannot change sharing settings. It can write files, but it cannot make them viewable. You set anyone with the link can view by hand, once.

Routines can be triggered three ways: on a schedule, by an API call, or by a webhook. A webhook is strictly better than a schedule when there is a real event to hang off.

And once you have done this once, later conversions collapse into a single sentence. Tell Claude to mirror the structure of an existing routine and it inherits a shape that already works.

04

How it flows

Local loop

Query existing routine

Attach connectors to routine

Re-add keys in cloud env

Code in private repo

Output to dated Drive folder

Set link sharing by hand

Trigger by schedule or webhook

05

Step by step

  1. Confirm the loop earned it

    Only promote a loop that already runs clean locally. A routine multiplies whatever the loop does, including its bugs, and it does it where you are not watching.

  2. Point at a routine you already trust

    Tell Claude to query an existing routine and mirror its structure. Nick's later conversions compressed into one prompt because of this.

  3. Attach connectors to the routine

    Local connectors do not travel. Attach Drive, Gmail, or whatever else the job touches to the routine itself.

  4. Re-add credentials in the cloud environment

    Open the routine's default environment and put the API keys back. Your local environment panel is a different place entirely.

  5. Move the output somewhere shared

    Swap the local folder for a dated subfolder in a shared Drive. Dated means today's run never overwrites yesterday's.

  6. Put the code in a repo

    If the routine runs scripts, they need to exist somewhere the cloud can reach. A private GitHub repo is enough.

  7. Fix sharing by hand

    The Drive connector cannot change sharing settings. Set anyone with the link can view yourself, one time, on the parent folder.

  8. Pick the right trigger

    Schedule, API call, or webhook. If a real event exists to hang off, use the webhook instead of polling on a timer.

06

Words explained

Routine
A scheduled job that runs on Anthropic's servers rather than your computer. It does not care whether your machine is on.
Connector
A saved link between Claude and an outside service like Google Drive or Gmail. It carries the permission to read and write there.
Cloud default environment
The routine's own settings drawer for secrets and variables. Separate from your local one, and it starts empty.
Webhook
An address another service calls the instant something happens. Better than checking on a timer, because it fires on the real event.
Dated subfolder
A folder named for the day it was made. Every run drops into its own folder instead of overwriting the last one.
Repo
A hosted folder of code, usually on GitHub. It is how code gets from your machine to somewhere the cloud can read it.
07

Watch out for

  • Local connectors do not travel. The routine sees none of them until you attach them to the routine itself.
  • Local environment variables do not travel either. An API key left only in your local panel means the routine runs without it.
  • The Google Drive connector cannot change sharing settings. Set anyone with the link can view by hand or your team sees nothing.
  • Writing to a local path from a cloud routine silently produces output nobody can reach.
  • Skipping the repo step leaves the routine pointing at scripts that only exist on your machine.
08

How it connects

Skill to Loop Conversion
Every limit that made the loop hurt, dead laptop, brittle local setup, no team access, is exactly what this rung removes.
Automation Ladder - Prompt Skill Loop Routine
This is rung four, the top of the ladder, and the ladder rule is that you climb it in order rather than jumping here first.
Ad Creative Generation Pipeline
Nick took the creative pipeline all the way to this rung: private repo for the code, dated Drive subfolder for the ads.
Batch Generation and Contact Sheet
The contact sheet is what your team opens in the shared Drive folder, which is why the output destination has to move off your disk.

Credit. Framework and approach by Nick Saraev, from the loop to routine rung of the automation ladder in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Images07 / 21

Image Model Feasibility Check

Prove by hand that the image model can do the thing before you write a single line wiring it up.

01

When to use this

Use this before you build anything on top of an image model. Ten minutes clicking around in the model's own interface tells you whether the pipeline is possible at all. Skip it and you can spend a day automating something the model was never going to do.

02

The prompt

STEP 1, do by hand before prompting Claude:
Open <IMAGE_TOOL> directly. Upload <REFERENCE_AD_IMAGE> and <PRODUCT_PHOTO>. Ask it to apply the product to that ad format. Look at the result. If it is not acceptable, stop here. Do not build anything.

STEP 2, the wiring prompt:

I want to use <IMAGE_MODEL_NAME> in this pipeline. Before you write any code:

1. Go read the official API documentation for <IMAGE_MODEL_NAME>. Fetch every endpoint, function, and parameter I would need to steer this model: image input, reference images, size, quality, output format, and anything else that controls the result.
2. Confirm my API key is available in the environment. It is set as <ENV_VAR_NAME, e.g. OPENAI_API_KEY>. You will be able to use it but not read it back, that is expected.
3. Run exactly ONE live test generation using <REFERENCE_AD_IMAGE> and <PRODUCT_PHOTO>. One. Do not batch anything yet.
4. Show me the output and the exact parameters you used.

Use <IMAGE_MODEL_NAME> specifically. Do not fall back to an older version of the model. If the endpoint you want is not in the docs, tell me instead of guessing.
03

What it is actually doing

There are two prompts here and the first one is not a prompt at all. It is you, clicking, in the model's own interface.

Nick opened the image tool directly, uploaded a reference ad and a product photo, and asked it to put the product into that ad layout. He looked at the result. Only after seeing something acceptable did he go anywhere near wiring it up. That is the whole feasibility check. It costs ten minutes and it can save a day.

The second prompt is the wiring, and it has a specific shape. You tell Claude to go read the real API documentation first. Not remember it, read it. Models have stale memories of APIs and will confidently call an endpoint that no longer exists. Then one live test generation. One. You are checking the plumbing, not making ads yet.

On keys: the API key goes in the local environment panel as OPENAI_API_KEY equals your key. Claude can use that key but cannot read it back to you. That is on purpose. It is a defense against prompt injection, where a malicious web page tells the model to reveal your secrets. The model cannot leak what it cannot see.

One more thing Nick did that is worth copying. He watched the model start reaching for the previous version of the image model and stopped it immediately. Correct errors the moment you see them. Letting a wrong turn run burns tokens and produces a pile of output you then have to unwind.

04

How it flows

No

Yes

No

Yes

Manual test in image tool

Result acceptable

Stop and pick another path

Add key to local environment

Claude reads real API docs

One live test generation

Correct model version used

Stop it immediately

Lock the working parameters

05

Step by step

  1. Test in the interface first

    Open the image tool yourself. Upload a reference ad and a product photo. Ask for the combination. Judge the result with your own eyes.

  2. Check your account tier

    Free tiers often refuse multiple reference images, and this approach needs at least two. A paid plan is a prerequisite, not an upgrade.

  3. Stop if the result is bad

    If the model cannot do it by hand, no amount of code makes it do it automatically. Walk away and try a different model or the compositing path.

  4. Put the key in the local environment

    Open the gear next to the environment selector and add the key as an environment variable. Never paste a key into the chat itself.

  5. Make Claude read the real docs

    Tell it to fetch every endpoint, function, and parameter from the official documentation. Its memory of an API is often out of date.

  6. Run exactly one test generation

    One live call proves the key works, the endpoint is right, and the parameters are correct. Batching before this just multiplies an error.

  7. Watch for the wrong model version

    Nick caught it reaching for the previous version and stopped it on the spot. Read what it is about to call, not just what it produces.

  8. Record the working parameters

    Ask for the exact parameters it used on the successful test. Those become the fixed settings for everything you build next.

06

Words explained

Feasibility check
A quick manual test to answer one question: can this tool do the job at all? Done before any building.
Endpoint
One specific address in an API you call to make it do one specific thing, like generate an image.
Environment variable
A named value stored outside your code, like an API key. Programs read it without the value ever appearing in the code itself.
Prompt injection
An attack where text on a web page or in a file secretly instructs the model, for example telling it to reveal your keys.
Direct generation
A model that paints every pixel from your description, rather than laying out shapes and text you defined.
Reference image
A picture you hand the model to copy from, like the ad layout you want matched or the product you want featured.
07

Watch out for

  • Free-tier accounts often cannot upload multiple reference images, and this whole approach needs at least two. Get on a paid plan first.
  • Claude will happily reach for the previous version of the image model. Nick caught it live and stopped it on the spot.
  • Claude cannot read the key back to you, which is deliberate. Do not read that as the key being missing.
  • Skipping the docs step means it calls endpoints from memory, and model memories of APIs go stale fast.
  • Batching before one test passes turns a single wrong parameter into fifty paid failures.
08

How it connects

Template Conformity with Bands
The feasibility test tells you the model can combine a reference and a product. Bands are how you then stop it from drifting off that reference.
Compositing vs Direct Generation Models
This is the entry point to the direct generation path, which costs real money and lands about a quarter of the time, so proving it first matters.
Compounding Failure in AI Pipelines
Correcting the wrong model version the second you spot it is the cheapest correction there is, and it is exactly what that framework prescribes.
Creative Pipeline Kickoff
Same starting materials, a reference ad plus product facts, but handed to a pixel model instead of a compositor.

Credit. Framework and approach by Nick Saraev, from the direct image generation section of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Images08 / 21

Template Conformity with Bands

Cut the reference ad into horizontal bands by height, declare which bands are locked and which vary, and the image model stops inventing an entirely new ad.

01

When to use this

Use this the moment a generated ad only vaguely resembles your reference. The tell is when the only thing that carried over is one obvious element and everything else was made up. This is the correction prompt, not the first prompt.

02

The prompt

That drifted too far from the reference. The only thing you carried over was <WHAT_SURVIVED>. Everything else you invented.

Start over and do it this way instead.

1. DIGEST the reference ad at <REFERENCE_PATH>. Describe its structure back to me before you generate anything.
2. Identify the specific areas that could be tweaked. Which parts are levers I can pull, and which parts are the identity of the ad.
3. Decompose it into horizontal BANDS by percentage of height. For example:
   - Logo band, 0 to 20 percent
   - Transition and negative space
   - Product band
   - Footer band
   Use the real bands you find, not my example.
4. TEMPLATE OUT the changes. For each band, say explicitly whether it is LOCKED or VARIES, and if it varies, what it varies across.
5. Then generate, demanding much more conformity to the reference than last time.

What I want is a template I can hot swap any product into and be about eighty percent sure the output is okay.

Do NOT overlay procedurally rendered elements on top of the generated image. Keep it a pure prompt template. Stacking a compositor on top of a generation stacks two separate failure modes.

Finally, give each template a VARIATION POOL: <e.g. warm or cool lighting, indoor or outdoor, different skin tones, 3-up or 4-up collage>. I want <N> templates times <M> variants to give me genuinely distinct outputs, not near-identical ones.
03

What it is actually doing

Image models drift. Give one a reference ad and it will take the vibe and invent the rest. Nick's first attempt produced ads where the only thing carried over was two logos facing each other. Everything else was new.

The fix is to re-impose structure. More freedom for the model means more rope to hang itself with. Business wants repeatable output, so you take some of that rope back.

Bands are how you do it. You slice the ad horizontally by percentage of height. Logo band across the top twenty percent. Some negative space. The product band. A footer band. Now the ad is not a vibe, it is four labeled regions.

Then you declare which bands are locked and which vary. The logo band never changes. The product band swaps per product. That declaration is the template. Nick's target, stated right in the prompt, is a template you can hot swap any product into and be about eighty percent sure the output is okay.

One decision worth taking seriously: do not paste procedurally rendered text or logos on top of a generated image. It sounds like the safe hybrid. It is not. You now have two independent things that can go wrong in one output, and the failures multiply. Keep it a pure prompt template.

Last piece is the variation pool. Three templates run five times give you fifteen files, but they can be fifteen near-twins. Attach a pool of real differences to each template, warm or cool light, indoors or out, different skin tones, three items or four, and the same fifteen become genuinely distinct.

04

How it flows

Drifted output

Digest the reference ad

Identify tweakable levers

Cut into height bands

Mark each band locked or varies

Pure prompt template

Attach variation pool

Hot swap any product in

05

Step by step

  1. Name what actually survived

    Tell Claude exactly which element carried over and that everything else was invented. Specific feedback beats saying it does not look right.

  2. Make it digest before it draws

    Ask for a written description of the reference structure first. If its description is wrong, its output was never going to be right.

  3. Ask which parts are levers

    Have it separate the areas that can be tweaked from the parts that are the ad's identity. Same thinking as picking knobs in the compositing workflow.

  4. Cut it into bands

    Decompose the ad into horizontal bands by percentage of height. Logo band, negative space, product band, footer band. Percentages, not vague positions.

  5. Declare locked versus varies

    Go band by band and mark each one. This declaration is the template. Anything unmarked will drift.

  6. State the conformity target

    Say you want a template you can hot swap any product into and be about eighty percent sure it is okay. Naming the bar changes the output.

  7. Refuse the hybrid overlay

    Do not composite procedural elements onto a generated image. Two failure modes stacked in one file is worse than either alone.

  8. Attach a variation pool

    Give each template a list of real differences to draw from, so three templates times five variants produces fifteen distinct ads rather than fifteen twins.

06

Words explained

Conformity
How closely the output sticks to the reference. High conformity means it copied the structure. Low conformity means it improvised.
Band
A horizontal slice of the ad defined by percentage of height, like the top twenty percent. It turns a picture into named regions you can control.
Digest
Read and describe something back before acting on it. A cheap way to catch a misunderstanding before it costs a generation.
Lever
A part of the design you deliberately allow to change. Everything that is not a lever is meant to stay put.
Hot swap
Drop in a different product and get a working ad without rebuilding the template.
Variation pool
A list of real differences a template can draw from, like warm versus cool lighting, so repeat runs do not look like copies.
07

Watch out for

  • Nick's first attempt carried over only two logos facing each other and invented the rest. Vague reference instructions produce vague conformity.
  • Mixing a procedural overlay on top of a generated image stacks two independent failure modes. Do not do it, even though it looks like the safe option.
  • Bands defined by feel rather than percentage of height drift back into improvisation. Use numbers.
  • Leaving a band unmarked means the model treats it as free to reinvent.
  • Without a variation pool, fifteen outputs from three templates come out as fifteen near-identical files.
08

How it connects

Image Model Feasibility Check
Feasibility proves the model can combine a reference and a product. Bands are the fix for the drift you see right after that works.
Design Tuner App
Both notes solve the same problem, turning taste into a fixed spec. The tuner uses sliders, bands use locked regions, because a pixel model has no sliders.
Compositing vs Direct Generation Models
This is the freedom versus reliability tradeoff in practice, including the explicit warning not to stack a procedural overlay on a generated image.
Batch Generation and Contact Sheet
A banded template plus a variation pool is what makes a direct generation batch worth reviewing, since the outputs are actually different from each other.

Credit. Framework and approach by Nick Saraev, from the template conformity segment of the direct image generation build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Video09 / 21

UGC Script Generation

Feed the product image and get short influencer-style scripts whose word count is tuned to the exact video length you are generating.

01

When to use this

Use this before you generate a single frame of video. The script decides the duration, and the duration decides whether the finished clip sounds natural or breaks. Getting the word count wrong here is the most visible failure in the whole video pipeline.

02

The prompt

Here is the product: <PRODUCT_IMAGE_PATH>

About it:
- What it is: <ONE_LINE_DESCRIPTION>
- Who it is for: <AUDIENCE>
- The specific problem it solves: <PROBLEM>
- The specific result: <RESULT>

Write <COUNT> short scripts for an influencer-style video ad, spoken to camera.

HARD RULE on length, this decides the video duration and it is not flexible:
- Under 22 words maps to an 8 second video
- 22 to 30 words maps to a 10 second video
Never go over 30 words. Never go under 15.
Output the word count next to each script so I can check it.

Style:
- First person, casual, the way a real person talks
- Name one specific problem, then one specific result. No vague claims
- No hard sell, no ad voice, no exclamation marks

Structure that works:
1. Hook, something like you need to try this
2. Name the product
3. The specific benefit
4. A short verdict

Give me the scripts as a numbered list with word counts. I will pick and tighten before we generate anything.
03

What it is actually doing

The script is not the creative part of this step. The word count is.

Video models generate a fixed duration. The voice has to fill exactly that much time. If your script is too short, the model pads. Nick's actual failure was the actor saying ten out of ten, would recommend twice, to fill the dead air at the end. If your script is too long, it truncates and cuts off mid sentence.

So he measured. He timed a script that worked cleanly. About 146 characters, roughly 27 words, in a 10 second clip. From that he set the rule: under 22 words means generate an 8 second video, 22 to 30 words means generate a 10 second video. That threshold is the useful thing in this note. Put it in the prompt as a hard rule and ask for the word count printed next to each script so you can check it yourself.

The writing style is simpler than people expect. First person. Casual. One specific problem, one specific result. No hard sell. The structure that worked was a hook like you need to try this, then the product name, then the benefit, then a short verdict.

One move worth copying: Nick took the model's first draft and rewrote it by hand to tighten it, then fed the tightened version back as the pattern to match. Your edit is a better instruction than any adjective you could have written.

04

How it flows

Under 22

22 to 30

Over 30

Product image and facts

Generate 10 short scripts

Word count check

8 second video

10 second video

Rewrite shorter

Tighten by hand

Feed rewrite back as pattern

05

Step by step

  1. Feed the product image

    Give the model the actual product photo along with the facts. It writes more specific copy when it can see what it is describing.

  2. State the word count rule as hard

    Under 22 words for 8 seconds, 22 to 30 for 10 seconds. Call it a hard rule in the prompt or it drifts long.

  3. Ask for word counts in the output

    Make the model print the count beside each script. Now you can check the rule at a glance instead of counting by hand.

  4. Ask for many candidates

    Ten short scripts cost almost nothing. You are buying shots on net, and picking a winner is fast.

  5. Demand specifics over adjectives

    One specific problem and one specific result. Vague benefit language is what makes AI ads sound like AI ads.

  6. Tighten the best one by hand

    Rewrite the strongest draft yourself. You will cut words the model would not have cut.

  7. Feed your rewrite back as the pattern

    Show the model your tightened version and tell it to match that. This teaches tone far better than describing the tone.

  8. Lock the script before generating

    Do not generate video against a script you are still unsure about. Each generation costs real money and you will want three per script.

06

Words explained

UGC
User generated content. Ads shot to look like a normal person filming themselves, not like a studio commercial.
Script
The exact words spoken in the clip. Here it also sets the duration, because the model has to fit the speech into the time.
Hook
The first line, whose only job is to stop the scroll. You need one to try this is a hook.
Truncation
The clip ends before the sentence does, because the script was too long for the duration.
Padding
The model repeating a line to fill leftover time, because the script was too short for the duration.
Verdict
The short closing judgement, like worth it or I am buying another. It gives the clip an ending instead of a stop.
07

Watch out for

  • Too short and the model pads by repeating the last line. Nick's actor said ten out of ten, would recommend twice to fill dead air.
  • Too long and the clip truncates mid sentence, which is unusable no matter how good the writing was.
  • Without word counts printed in the output you will not notice the rule slipping until you have already paid for the video.
  • Vague benefit language reads as an ad instantly. Name the problem and the result in concrete terms.
  • Accepting the model's first draft without a manual tightening pass leaves obvious slack in the script.
08

How it connects

Hero Frame and Video Generation
The locked script pairs with the hero frame at generation time, and its word count is what sets the duration you request.
Cross-Multiply Autonomous Video Spec
The word count rule gets encoded as an explicit threshold in the spec, so the fleet self-selects 8 or 10 seconds per script with nobody watching.
UGC Video Ad Pipeline
This is step three of that chain, and the word count table in that note is the tuning that came out of this prompt.
Compounding Failure in AI Pipelines
You write the rules and you judge the scripts. The model only drafts, which keeps the copy step from becoming a coin flip.

Credit. Framework and approach by Nick Saraev, from the UGC script generation segment of the video ad build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Video10 / 21

Hero Frame and Video Generation

Generate a still of the influencer holding the product first, then hand that still to the video model as the start frame.

01

When to use this

Use this every time you generate AI video with a product in it. Going straight from text to video is where products melt, teleport, and change shape. The hero frame is the single biggest driver of whether the product survives the clip.

02

The prompt

STAGE 1, the hero frame.

Using <PRODUCT_IMAGE_PATH> and <INFLUENCER_IMAGE_PATH>, generate a single still image:
<INFLUENCER_DESCRIPTION> holding <PRODUCT_NAME> in <PLAUSIBLE_SETTING, e.g. a bathroom for a face mask>.

Rules for the hero frame:
- The product must be clearly visible, correctly oriented, and readable
- Upload the product as a reusable element or prop so the model keeps it consistent rather than inventing it
- The setting must be somewhere this product is actually used
- Natural lighting, phone-camera framing, not studio

Show me the hero frame before you go any further. This one image decides the product fidelity of everything downstream.

STAGE 2, the video.

Once I approve the hero frame, generate video with:
- Start frame: the approved hero frame
- Script: <SCRIPT_TEXT>
- Duration: <8 or 10> seconds, chosen by the script word count rule
- Aspect ratio: <9:16>, fixed
- Sound: on
- Candidates: 3 per script

Concurrency: submit a maximum of 3 jobs at a time. The platform queues and caps around 8 concurrent, so firing everything at once fails. Wait for a batch to finish before submitting the next.

If a CLI or MCP connector exists for this platform, use that instead of a raw API key.
03

What it is actually doing

Text to video with a real product in it does not work reliably. The model has never seen your product and will invent something roughly product shaped, then change its mind halfway through the clip.

So you split it in two. First you generate a still image, the hero frame, of the influencer holding the product somewhere the product actually gets used. A face mask goes in a bathroom. You look at that one image and judge it carefully, because it decides the product fidelity of everything that follows.

Then you hand that still to the video model as the start frame. The model is no longer inventing the product. It is animating a picture that already has the product in it, correct and visible.

Nick also generated the influencer herself the same way. He took a reference image, regenerated it different enough to be a new person, and moved her indoors, because she was going to be used in a product shoot. Another useful move: upload the product as a reusable element or prop, so the platform holds onto it instead of guessing again each time.

Two practical settings. Fix your duration and aspect ratio, and turn sound on. Generate three candidates per script, because most generations are unusable and you are buying attempts.

And watch concurrency. These jobs queue. The platform Nick used capped around eight concurrent, so firing twelve at once failed outright. Cap your parallel submissions at three.

On access, prefer a CLI or an MCP connector over raw API keys when the vendor offers one. A login flow beats copying keys around, and there is no key rotation to manage later.

04

How it flows

No

Yes

Product image

Generate hero frame

Influencer image

Product visible and correct

Use as video start frame

Locked script and duration

3 candidates per script

Cap 3 concurrent jobs

05

Step by step

  1. Generate the influencer first if you need one

    Take a reference image, regenerate it different enough to be a new person, and move the setting indoors if she will be used in a product shoot.

  2. Upload the product as an element

    Register the product as a reusable element or prop on the platform. That keeps it consistent instead of reinvented on every generation.

  3. Pick a plausible setting

    Put the product where it is really used. A face mask belongs in a bathroom. A wrong setting reads as fake before anyone hears a word.

  4. Generate and judge the hero frame

    One still image. Check the product is visible, correctly oriented, and readable. Do not move on until this frame is right.

  5. Feed it as the start frame

    Hand the approved hero frame to the video model as the start frame. This is what stops the product from melting mid clip.

  6. Fix duration, ratio, and sound

    Set the duration from the script word count rule, lock the aspect ratio, and turn sound on. Leaving these loose creates variation you did not ask for.

  7. Generate three candidates per script

    Most generations are unusable. Three attempts per script is the working ratio, and it is cheap next to a real shoot.

  8. Cap parallel jobs at three

    Jobs queue and the platform caps around eight concurrent. Nick fired twelve and they failed. Submit three, wait, submit the next three.

06

Words explained

Hero frame
The still image you generate first, showing the influencer holding the product. It becomes the video's opening frame.
Start frame
The image the video model animates outward from. Give it one and it stops inventing the scene from scratch.
Product fidelity
How closely the product in the video matches the real product. Low fidelity means the label warps or the shape changes.
Element or prop
A product image saved on the platform for reuse, so every generation refers to the same object instead of guessing.
Concurrency cap
The most jobs a platform will run at once. Send more than the cap and the extras fail rather than waiting politely.
MCP connector
A ready-made bridge between Claude and an outside tool. You log in once and Claude can use the tool directly, with no API key to manage.
07

Watch out for

  • Skipping the hero frame lets the product vanish, warp, or teleport mid clip. This is the most common video failure there is.
  • Nick fired 12 jobs at once against a platform capped around 8 concurrent and they failed. Cap parallel submissions at 3.
  • A setting the product would never be used in reads as fake instantly, no matter how good the generation is.
  • Not registering the product as a reusable element means the model re-guesses the packaging on every single generation.
  • Raw API keys are worse than a CLI or MCP login when one is offered, because you take on key handling and rotation for no benefit.
08

How it connects

UGC Script Generation
The script sets the duration you request here, and the hero frame supplies the visuals it will be spoken over.
Cross-Multiply Autonomous Video Spec
This is the unit of work the fleet repeats. Cross-multiplying influencers and products means generating one hero frame per pairing.
UGC Video Ad Pipeline
This note is steps one, two, and four of that chain, including the concurrency cap that broke Nick's first parallel run.
Compositing vs Direct Generation Models
Video is the far end of direct generation: high cost, low hit rate, and a ceiling nothing procedural can reach.

Credit. Framework and approach by Nick Saraev, from the hero frame and video generation segment of the UGC video build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Video11 / 21

Cross-Multiply Autonomous Video Spec

Hand Claude a folder of influencers and a folder of products, tell it to cross them, and let it run to delivery without you.

01

When to use this

Use this once a single hero frame and video pairing works end to end. This is the prompt that turns one working clip into a fleet. Do not run it before the unit works, because it multiplies whatever the unit does.

02

The prompt

Inputs:
- Influencers: <INFLUENCER_FOLDER>
- Products: <PRODUCT_FOLDER>

Cross them. Every influencer against every product. Influencer A on product A and product B, influencer B on product A and product B, and so on for everything in those folders.

For each pairing:
1. Generate a hero frame of that influencer with that product in a plausible setting
2. Write <N> scripts using this rule, apply it yourself per script:
   - under 22 words means generate an 8 second video
   - 22 to 30 words means generate a 10 second video
   - never exceed 30 words
3. Generate <K> video candidates per script, using the hero frame as the start frame

Run this autonomously. Do NOT stop to ask me anything until the final delivery step. Parallelize wherever you can, but cap concurrent video jobs at 3, because the platform caps around 8 and larger batches fail. Retry any failures one at a time.

Then run automated frame QA on every clip before I see it:
- Split each clip into 1 second frames and screenshot each one
- Feed the frames to a vision model and ask: is anything malformed, does the product persist across every frame, is the on-pack text legible, do the hands make sense
- Auto-delete any clip that fails
- Cut the first 3 frames of every surviving clip, bad opening frames are common

Deliver the survivors to <OUTPUT_FOLDER> with a contact sheet I can scan.
03

What it is actually doing

Everything before this note produced one clip at a time. This prompt turns that into a fleet.

Cross-multiplying is the core idea. Two influencers and two products is not four separate jobs you set up by hand, it is one instruction: cross them. Add more folders and the count grows on its own. Ten influencers, ten settings, ten scripts gives a thousand candidates.

Autonomy is the second half. You tell Claude not to stop and ask you anything until delivery. That means every rule it might have asked about has to be in the prompt already, including the word count threshold from the script note, so it self-selects eight or ten seconds per script without checking in.

Nick's live run was four pairings times three candidates, twelve jobs. They hit the concurrency cap and failed. He updated the skill to cap at three concurrent and retry failures one at a time. That is the shape of most fixes at this scale: not better prompting, just respecting a limit.

Then there is the part nobody expects to need. A thousand clips is impossible to watch. Ten seconds each is nearly three hours of viewing, and most of it is broken. So you add an automated frame QA layer. Split each clip into one second frames, screenshot them, hand them to a vision model, and ask four blunt questions: is anything malformed, does the product persist across frames, is the on-pack text legible, do the hands make sense. Delete the failures automatically.

That trims a thousand down to maybe two hundred fifty to five hundred. Now you are looking at forty to eighty minutes of human review to pick a top twenty. You have replaced a creative department's throughput and you only paid for generations.

04

How it flows

Influencer folder

Cross-multiply pairings

Product folder

Hero frame per pairing

Scripts pick 8s or 10s

3 concurrent video jobs

Split clips into 1s frames

Vision model QA questions

Auto-delete failures

Human picks top 20

05

Step by step

  1. Prove one pairing first

    Run a single influencer and product end to end before you cross anything. This prompt multiplies whatever the unit does, including its flaws.

  2. Point at folders, not files

    Give Claude an influencer folder and a product folder. Adding one file to a folder grows the matrix without you rewriting the prompt.

  3. Say cross them explicitly

    Spell out that every influencer pairs with every product. Ambiguity here produces one clip per input instead of the full matrix.

  4. Encode the duration rule

    Write the word count threshold into the prompt so it self-selects 8 or 10 seconds per script. It cannot ask you, so it has to decide.

  5. Ban check-ins until delivery

    State that it should not stop to ask anything until the final step. Anything it might have asked about belongs in the prompt already.

  6. Cap concurrency at three

    Nick's 12 jobs hit the platform's roughly 8 job cap and failed. Cap at 3 concurrent and retry failures serially.

  7. Add the frame QA layer

    Split every clip into 1 second frames, screenshot them, ask a vision model the four questions, and auto-delete failures. Then cut the first 3 frames of every survivor, since bad opening frames are common.

  8. Deliver a reviewable set

    Send the survivors plus a contact sheet. Two hundred fifty good clips with a review screen beats a thousand raw files in a folder.

06

Words explained

Cross-multiply
Pair every item on one list with every item on another. Two influencers and two products makes four pairings.
Autonomous run
The agent works from start to finish without stopping to ask you questions. Every decision has to be settled up front.
Frame QA
Checking a video by looking at its individual frames instead of watching it. A machine can do this at a scale no person can.
Vision model
A model that looks at images and answers questions about them, like whether hands look wrong or a product disappeared.
Candidate
One generated attempt. You make many because most are unusable, then keep the few that work.
On-pack text
The words printed on the product itself, like the label. Video models garble it often, which is why QA checks for it by name.
07

Watch out for

  • Nick's 12 jobs hit the platform's roughly 8 job concurrency cap and failed. Cap at 3 and retry failures one at a time.
  • The product vanishes or teleports mid shot. This is common and it is exactly what the frame QA layer is there to catch.
  • Bad opening frames are frequent. Cut the first 3 frames of every clip rather than trying to prevent them.
  • Male generations fail noticeably more often because there is less training data on men, so budget extra attempts for them.
  • Skin that is too smooth reads as AI immediately. Add grain and a light background audio bed to close the gap.
08

How it connects

Hero Frame and Video Generation
That note is the unit of work this one repeats, and its concurrency cap becomes a hard rule in the spec.
UGC Script Generation
The word count rule from that note gets encoded here as an explicit threshold, so the run self-selects duration with nobody watching.
Batch Generation and Contact Sheet
Same pattern as the image side: generate far more than you need, then hand a human one review screen rather than a folder.
Compounding Failure in AI Pipelines
Volume of attempts plus a cheap selection step is the whole strategy, and the frame QA layer is how selection stays cheap at a thousand clips.
UGC Video Ad Pipeline
This is steps five and six of that chain plus the QA layer that makes the scale math actually work.

Credit. Framework and approach by Nick Saraev, from the cross-multiply and frame QA segment of the UGC video build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Copy12 / 21

Newsletter Fuzzy Variable Enrichment

Write the welcome email yourself, then have Claude fill three short AI-written blanks per subscriber so the mail merge stops reading like a mail merge.

01

When to use this

Use this when you have a list with real signup data on it and a welcome email you already trust. It is the first move in the copy half of the course. Reach for it the moment you notice your email says the same thing to two thousand people.

02

The prompt

I have a subscriber list at <SHEET_URL_OR_PATH>. I want you to enrich every row with fuzzy variables that I will use as merge fields in a welcome email.

Product context: <PRODUCT_NAME> is <ONE_LINE_DESCRIPTION> for <AUDIENCE>. The offer is <OFFER>.

Tone for every value you write: casual, direct, first person, no fluff, no em dashes, no marketing language.

Add exactly these three columns, in this exact order, at the end of the row:

1. shortPlausibleReasonWhySignedUp - about 10 words. It has to complete this sentence and read naturally inside it: "Extremely excited to have you with us, especially because ___."
2. shortCustomReasonWhyItsUseful - about 10 words. It has to complete: "I think <PRODUCT_NAME> is going to be useful for you because ___."
3. paraphrasedChallenge - about 5 words. It has to complete: "I know a big challenge for you right now is ___."

Rules:
1. Read EVERY row. Do not sample, do not guess, do not extrapolate from the first few rows. If the list is long, work through it in batches until all rows are done.
2. Write each value from that specific person's row. Use their answers, their company, their role. Do not build a lookup table of five stock phrases and reuse them.
3. Vary the sentence structure row to row. Two people who wrote similar answers should still get different phrasing, drawn from the other fields on their row.
4. Do not modify the original sheet. Create a new sheet named <NEW_SHEET_NAME> with all original columns plus the three new ones.
5. Where a row has almost no data, write something safely general rather than inventing a fact about that person.

When you are done, show me 5 rendered examples with the full sentence around each variable so I can judge fit, not just content.
03

What it is actually doing

There are two kinds of merge field. A hard variable is copied straight out of a column: first name, company, city. It works, but everyone has seen it a thousand times, so it reads as mail merge because it is mail merge.

A fuzzy variable is different. Claude reads the whole row and writes a short phrase custom to that one person. Then that phrase gets dropped into the middle of a sentence you wrote. The reader never sees a slot. They just see a sentence that happens to know something about them.

The trick that makes it work is the variable name. You write it in camelCase as an instruction, like shortPlausibleReasonWhySignedUp. The name is the prompt for that slot. Claude reads the name and knows what to write, which means you do not need a separate instruction block for each one.

The part people get backwards: the human writes the whole email and AI fills a few blanks. Not the other way around. If you let AI write the entire email, you throw away your proven copy, your offer, and your voice, and you get worse results. You are renting the machine for the one job it is better at, which is reading two thousand rows without getting bored.

04

How it flows

Signup form free text fields

Claude reads every row

Three fuzzy columns per row

New sheet not the original

Map to platform custom fields

Preview on a real subscriber

05

Step by step

  1. Collect real signup data

    Your form needs to ask something worth personalizing on. Nick used first name, company, why they signed up, biggest challenge, and favorite tool. Free-text answers are the fuel.

  2. Write the email yourself first

    Draft the full welcome email in your own voice. Decide where the blanks go before you decide what fills them. The email is yours, the blanks are Claude's.

  3. Name the slots as instructions

    Use camelCase names that describe exactly what goes in the hole. shortPlausibleReasonWhySignedUp tells Claude the length, the content, and the framing all at once.

  4. Forbid sampling out loud

    Models will read ten rows and generalize to save effort. Say explicitly that every row must be read and processed. Ask it to work in batches for a long list.

  5. Forbid the lookup table

    Tell it to vary sentence structure row to row and to pull from other fields on the row. Without this, two thousand subscribers get five sentences between them.

  6. Write to a new sheet

    Never let it edit the source. Ask for a new sheet with the original columns plus the three new ones appended in a stated order. Order matters when you map fields later.

  7. Judge the rendered sentence

    Ask for examples shown inside the full surrounding sentence. A value can be a good sentence on its own and still be broken in the socket it has to fill.

06

Words explained

Hard variable
A merge field copied word for word out of a column, like first name or city. Fast, but obviously a merge field.
Fuzzy variable
A short phrase the AI writes from the whole row, built to sit inside a sentence you wrote so the reader cannot spot the seam.
camelCase
Writing a multi-word name with no spaces and each new word capitalized, like shortPlausibleReasonWhySignedUp. It keeps the name valid as a field name.
Merge field
A placeholder in an email that the sending platform swaps for real data before it goes out.
Row context
Everything you know about one person on one line of the sheet. The fuzzy variable is written from all of it, not just one column.
07

Watch out for

  • If you do not say read every row, the model reads a sample and invents the rest with confidence.
  • Without a vary-the-structure instruction the whole list collapses into four or five repeated sentences.
  • Letting Claude edit the source sheet means one bad run destroys your list. Always output to a new sheet.
  • A value that reads fine alone can break the sentence it lands in. Judge it rendered, never bare.
  • Rows with thin data tempt the model to invent facts about the person. Tell it to stay general instead.
08

How it connects

Fuzzy Variable Tightening
The first pass here always comes back too long and sometimes structurally broken, and tightening is the correction pass that fixes it.
Daily Enrichment Skill via API
This note is the one-off sheet job, and the daily skill is the same work running against the live platform every 24 hours.
Cold Email Personalization
Identical machine, different intake. Swap opt-in rows for scraped rows and the technique carries over unchanged.
Fuzzy Variables for Personalized Copy
The framework note that holds the full rule set behind this prompt.

Credit. Framework and approach by Nick Saraev, from the newsletter personalization build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Copy13 / 21

Fuzzy Variable Tightening

The correction pass that cuts every AI-written value down to size and forces it to fit the exact sentence it has to live inside.

01

When to use this

Use this immediately after your first enrichment run, every single time. The first pass is always too wordy and at least one value will be structurally broken. This is the note that teaches the actual craft, because the difference between personalization that works and personalization that gets you marked as a bot is decided here.

02

The prompt

The fuzzy variables you just wrote are too long, and some of them do not fit the sentence they have to sit inside. Rewrite all of them against the rules below and write the result to a new sheet.

Here is the exact copy each variable has to live in. Write for insertion at that point in the sentence, not as a standalone statement about the person:

"Extremely excited to have you with us, especially because {{shortPlausibleReasonWhySignedUp}}."
"I think <PRODUCT_NAME> is going to be useful for you because {{shortCustomReasonWhyItsUseful}}."
"I know a big challenge for you right now is {{paraphrasedChallenge}}."

Rules:
1. Length. A reason slot is about 10 words. A paraphrase slot is about 5 words. Shorter is better than longer every time.
2. Socket fit. Read the value back inside the full sentence before you accept it. It must be grammatically correct and it must not repeat words that already appear in my copy. Never start a value by naming the person or restating the sentence stem.
3. Second person. Write to them as you, not about them in the third person.
4. No em dashes anywhere. They read as AI.
5. No marketing language, no adjectives you would not say out loud.

Example of a broken value: "Marcus's biggest challenge is that leads show up in bursts". That is a report about Marcus, so it collapses the sentence.
Example of a fixed value: "keeping up with how fast AI moves".

Output the new sheet with each variable shown twice: bare, and rendered inside its full sentence, so I can check fit at a glance.
03

What it is actually doing

Two things go wrong on a first enrichment pass, and they are different problems with different fixes.

The first is length. Claude writes fifteen or twenty words when ten would do. This matters more than it sounds. The share of the email that is AI-written is what triggers a reader's suspicion. Fewer AI-written words as a share of the total means a lower chance anyone thinks a bot wrote it. So you cut hard: about ten words for a reason, about five for a paraphrase.

The second is fit. Nick's first run produced the value "Marcus's biggest challenge is that leads show up in bursts". Read it inside the sentence it was built for: "I know a big challenge for you is Marcus's biggest challenge is that leads show up in bursts". It is broken. The model wrote a report about the person instead of a fragment for a hole.

The fix is one line of prompt. Paste the actual surrounding sentence from your email and tell the model it is writing for insertion at that exact point. Once the model can see the socket, it writes for the socket.

Then you verify against a real send. Nick previewed the email against a live subscriber and found the platform's merge-field syntax was not what he assumed, so every variable rendered blank. The values were perfect and the email was empty. Preview before you trust it.

04

How it flows

No

Yes

First pass values

Read them inside the real sentence

Cut to 10 words and 5 words

Paste the socket into the prompt

Rewrite for insertion not reporting

Renders correctly on a real record

Fix merge syntax exactly

Ship the send

05

Step by step

  1. Read the first pass rendered

    Paste a few values into the real email and read the whole sentence out loud. Problems that are invisible in a spreadsheet column are obvious in a sentence.

  2. Set a word budget per slot

    About 10 words for a reason slot, about 5 for a paraphrase slot. State the number in the prompt. Vague words like short get you fifteen words back.

  3. Paste the socket into the prompt

    Give the model the full sentence with the placeholder still in it. This is the single change that fixes structurally broken values.

  4. Ban third person and restating

    Tell it to write in second person and never to begin by naming the person or repeating the sentence stem. That is what caused the Marcus failure.

  5. Ban em dashes explicitly

    Em dashes are one of the loudest AI tells in cold and warm email right now. Say no em dashes in the prompt, because the model defaults to them.

  6. Ask for a rendered column

    Have it output each value twice, bare and inside its full sentence. You can then scan a hundred rows for fit in under a minute.

  7. Preview against a real subscriber

    Send or preview the actual email to one real record. Confirm the variables render. Nick found the platform needed exact lowercase merge syntax that differed from what he assumed.

06

Words explained

Socket fit
Whether the AI-written fragment is grammatically correct inside the sentence you built around it. A good phrase in the wrong socket still breaks the email.
Merge syntax
The exact bracket format a sending platform expects for a placeholder. Different platforms use different formats and they are usually case sensitive.
AI tell
A pattern readers now associate with machine writing. Em dashes, flawless grammar, and words like leverage are the current ones.
Second person
Writing to the reader as you, rather than about them as he or she. It keeps the fragment inside the flow of your sentence.
Correction pass
A second run over output you already have, aimed only at fixing it. Cheaper and more reliable than regenerating from scratch.
07

Watch out for

  • The model writes a report about the person unless you show it the surrounding sentence. That is the number one failure.
  • Saying keep it short does nothing. Give a word count per slot or you get long values back.
  • Em dashes appear by default in AI copy and readers now clock them instantly. Ban them by name.
  • Perfect values render blank if the merge syntax is wrong. Nick lost a preview to a case-sensitive format mismatch.
  • Never judge fit from the spreadsheet column. Always judge it inside the sentence it has to fill.
08

How it connects

Newsletter Fuzzy Variable Enrichment
This is the second half of that build. The enrichment prompt produces the values and this prompt makes them usable.
Cold Email Personalization
The same length and socket-fit rules decide whether a cold email reads human, where the stakes are higher because a bad send burns a domain.
Follow-Up Cadence SOP
The no em dashes rule and the preference for short human-shaped lines carry straight into the follow-up template pool.
Fuzzy Variables for Personalized Copy
The framework note where the ten-word and five-word budgets and the write-for-insertion rule are recorded.

Credit. Framework and approach by Nick Saraev, from the fuzzy variable correction pass in the copy personalization build of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Copy14 / 21

Daily Enrichment Skill via API

Turn the one-off spreadsheet job into a daily system that finds new subscribers, writes their fuzzy variables, and sends them the welcome email without you touching it.

01

When to use this

Use this once the sheet version works and you have judged the output with your own eyes. This is the rung where the work stops being a task and becomes a system. Do not climb here first, because you will be automating a process you have not proven.

02

The prompt

I want to turn the enrichment work we just did into a daily skill that runs against <EMAIL_PLATFORM> directly instead of against a spreadsheet.

Before you write anything, research the <EMAIL_PLATFORM> API and tell me whether it exposes the endpoints needed to do all three of these:

1. Every 24 hours, list subscribers who joined since the last run.
2. For each new subscriber, generate the fuzzy variables we defined and write them into that subscriber's custom fields.
3. Add that subscriber to the welcome broadcast and send it, without ever sending twice to the same person.

If any of the three is not possible with the available endpoints, say so plainly and propose the closest workable design. Do not pretend an endpoint exists.

Once you have confirmed the endpoints, design the flow and show it to me before building.

Constraints:
- The fuzzy variable rules are unchanged: <PASTE_YOUR_LOCKED_SLOT_RULES>.
- Double sending is the failure I care about most. Design explicitly against it.
- Credentials: use <PLATFORM>_API_KEY from my environment. You cannot read the value, so to prove it works, make one harmless read-only call, for example fetch my account details, and show me the response.
- Log what you did each run: how many new subscribers, how many enriched, how many sent.
03

What it is actually doing

The sheet version proves the idea works. It does not scale, because you have to be there.

So you point the same job at the live platform. The prompt does not tell Claude how to do it. It tells Claude what has to be true, then asks it to go read the API docs and report whether the platform can actually do it. That ordering matters. If you assume the endpoints exist, Claude will happily build against an endpoint it invented.

The design Claude came back with is worth learning on its own, because it solves the hard part. Create a tag like welcome-pending. Tag each new subscriber. Update the draft broadcast so it filters on that tag. Set the send time to now. Send. Then remove the tag from everyone who just got it. That tag dance is the whole double-send guard: only tagged people receive the broadcast, and nobody stays tagged after they receive it.

The credentials part is a small trick that saves real time. Claude cannot see the value of an API key in your environment, so it cannot check the key by looking at it. Instead you tell it to make one harmless read-only call with the key. If the call returns your account, the key works. If it errors, you fix the key before you build anything on top of it.

04

How it flows

Daily trigger

List new subscribers

Write fuzzy variables to fields

Tag welcome-pending

Broadcast filters on that tag

Send now

Remove the tag

Log counts for the run

05

Step by step

  1. Prove the manual version first

    Run the sheet enrichment, read the output, fix the values. Only automate a process whose output you have already judged as good.

  2. Ask about endpoints before building

    Make Claude research the platform API and confirm all three capabilities exist. Tell it to say so plainly if one does not, rather than inventing an endpoint.

  3. Pick the API key over the connector

    Nick found the platform's MCP connector did not cover what he needed, so he fell back to an API key stored in the local environment. Check the connector first, fall back second.

  4. Disconnect the connector if you go API

    If you use the API-key route, disconnect the MCP connector for that platform. Two access paths to the same service will conflict and produce confusing failures.

  5. Prove the key with a read-only call

    In a fresh chat, ask Claude to make one harmless read call with the key and show the response. That is how you verify a secret Claude cannot see.

  6. Review the tag dance before you run it

    Have Claude explain the tag, filter, send, untag sequence back to you. This is the part that prevents double sends, so understand it before it fires.

  7. Carry context into a new chat

    Long sessions get sloppy. Paste the prior conversation into a fresh thread so the new session starts with the decisions already made instead of relearning them.

  8. Watch the first live run

    Sit through one real 24 hour cycle. Check the platform's sent log against your own count. Do not take the run summary as proof.

06

Words explained

Endpoint
One specific thing a service lets outside software ask it to do, like list subscribers or update a field. If there is no endpoint for it, no amount of prompting makes it possible.
MCP connector
A prebuilt bridge that lets Claude use a service directly. Convenient, but each one only exposes the actions its author chose to expose.
Custom field
An extra slot on a contact record in your email platform where you can store anything you want, including a fuzzy variable.
Broadcast
A one-off email sent to a chosen group, as opposed to an ongoing automated sequence.
Tag
A label you stick on a contact so you can filter for them later. Here it acts as a temporary flag meaning this person has not had the welcome yet.
Environment variable
A secret like an API key stored outside your code so tools can use it without anyone reading it in a chat.
07

Watch out for

  • The platform's MCP connector may not expose what you need. Check its actual actions before you design around it.
  • Running the connector and an API key at the same time causes conflicts. Disconnect the connector if you go the key route.
  • Claude cannot read your API key, so it cannot confirm the key works by inspection. Force a read-only test call instead.
  • Without the untag step at the end, the next run sends the welcome email to the same people again.
  • If you skip the endpoint research, Claude will build against an endpoint that does not exist and only fail at run time.
08

How it connects

Newsletter Fuzzy Variable Enrichment
This is the same enrichment logic, moved off the spreadsheet and pointed at the live platform.
Self-Healing and Error Logging Clauses
A daily job that nobody watches needs both clauses appended, or it will fail silently the first time the API changes.
Automation Ladder - Prompt Skill Loop Routine
This note is the prompt to skill jump for the copy build, and the same ladder rules apply to every other build in the course.
Fuzzy Variables for Personalized Copy
The framework note that records the tag dance as the standard guard against double sends.

Credit. Framework and approach by Nick Saraev, from the daily enrichment skill segment of the copy personalization build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Outbound15 / 21

Cold Email Personalization

Feed Claude a block about who you are plus a list of scraped leads, and get one true thing you have in common with each person written into a short casual email.

01

When to use this

Use this when you have a validated lead list and a cold email that already gets replies. It is the same fuzzy variable machine as the newsletter build with a different intake, so run the newsletter version first if you want to learn the technique on lower stakes.

02

The prompt

I have a scraped lead list at <SHEET_URL_OR_PATH>. I want you to enrich every row with fuzzy variables for a cold email.

Here is who I am. Use this to find genuine overlap with each lead:
<BACKGROUND: where you grew up, cities you have lived in, schools, sports, hobbies, past jobs, current business, the kind of people you like working with>

Here is the email these variables go into:

yo {{first_name}},

saw {{thingInCommon}}. i'm {{myMatchingThing}} too and wanted to say hi.

<ONE LINE OF CREDIBILITY WITH A REAL SUBSTANTIATED NUMBER>
<THE ASK, WITH THE RISK ON ME NOT THEM>
<THE SPECIFIC OUTCOME, QUANTIFIED>

are you open to this?

Add these columns, in this order, to a new sheet:
- thingInCommon - about 8 words, completes "saw ___". Something true from their row: their city, their industry, their company stage, their background.
- myMatchingThing - about 6 words, completes "i'm ___ too". Must be true of me based on my background above.
- paraphrasedCompanyName - short, natural spoken version of their company name.
- prospectsTheyWant - about 6 words, describing who they sell to in their own terminology, not mine.

Style rules:
1. Lowercase. Casual. Slightly imperfect. Do not clean up the grammar.
2. No em dashes. No marketing language. No exclamation marks.
3. Read every row. Vary the phrasing row to row. Do not reuse a handful of stock overlaps.
4. If there is no honest overlap for a row, say so in the column rather than inventing one.
5. Flag any claim in my credibility line that you think I cannot substantiate.

Output 5 fully rendered examples before you process the whole list.
03

What it is actually doing

Cold outreach and newsletter enrichment are the same machine. The only thing that changes is where the rows come from. A newsletter row is someone who opted in and told you about themselves. A cold row is someone a scraper found.

The part that makes cold work is the block about you. You paste in your own background, where you have lived, what you played, what you have built, and Claude looks for the overlap between that and each lead's row. Two people from the same city. Two people who both ran agencies. That overlap is the only thing that makes the first line feel like a person wrote it.

The style rules do a lot of the work. Right now, lowercase and slightly imperfect reads human, and polished reads like a bot. That is a reversal from a few years ago, and it exists because everyone has been trained by a flood of AI spam with perfect grammar and em dashes in it. Do not let Claude tidy the email up.

The numbers are worth knowing. Untemplated cold outreach gets about a 1 to 2 percent reply rate. With this personalization, about 5 percent. For a business whose income is fully outreach driven, that is 250 percent of revenue. Nick's best campaign, conference leads plus this enrichment, hit about a 20 percent positive reply rate.

04

How it flows

No

Yes

Scraped lead rows

Claude finds honest overlap

Block about who you are

Four fuzzy columns per row

Fill the casual skeleton

Every number substantiated

Cut or replace the claim

Upload and preview merge fields

05

Step by step

  1. Start from an email that already works

    Personalization multiplies a good offer. It does not rescue a bad one. Use a skeleton whose credibility line and ask you have already tested.

  2. Write your background block

    Dictate it rather than type it. Cover cities, schools, sports, hobbies, past jobs, current business. The more surface area you give, the more overlaps Claude can find.

  3. Name the slots as instructions

    thingInCommon, myMatchingThing, paraphrasedCompanyName, prospectsTheyWant. Each name states its own job, so you do not need a separate instruction block per slot.

  4. Use their words for their buyers

    prospectsTheyWant should describe who they sell to in their terminology, not yours. A roofer does not call them mid-market accounts.

  5. Lock the casual style in writing

    Lowercase, no exclamation marks, no em dashes, do not fix the grammar. Say it explicitly or the model reverts to polished business English.

  6. Let it flag your claims

    The model will correctly push back on numbers it thinks you cannot support. Take that seriously. Replace the claim or cut it.

  7. Preview five rendered emails

    Read five complete emails before processing the list. It is much easier to catch a broken overlap in a full email than in a column.

  8. Trim and upload

    Cut the sheet to what the send actually needs, then push to your sending platform and preview merge fields against real rows before launching.

06

Words explained

Cold outreach
Emailing people who have never heard of you and never asked to hear from you.
Reply rate
The share of people who write back. The number that decides whether a campaign is worth running at all.
Skeleton
The fixed frame of the email that you wrote and never change. Only the marked slots differ from person to person.
Substantiated claim
A number you can prove with real records if someone asks. Anything else is a made up performance claim.
Sending platform
The tool that actually delivers the campaign and handles merge fields, warmup, and inbox rotation.
07

Watch out for

  • Never ship a figure you cannot substantiate. Fabricated performance claims get sending accounts suspended and cross into deceptive claims territory.
  • The model will correctly flag invented numbers. Do not argue it into keeping them.
  • If Claude cleans up the grammar, the email starts reading like every other AI blast in the inbox.
  • An invented overlap is worse than no overlap. Tell it to say none found rather than guess.
  • Personalization on a bad list still fails. Validate the list against your ICP first.
08

How it connects

ICP Self-Validating Scrape
That prompt produces the list this one enriches. Personalizing a list full of wrong-fit leads just wastes better copy.
Newsletter Fuzzy Variable Enrichment
Same machine, different intake. Learn the technique on your own opt-in list where a bad send costs you far less.
Fuzzy Variable Tightening
The length and socket-fit rules matter more here, because a clumsy cold email burns a domain rather than just reading awkwardly.
Cold Outreach Enrichment Pipeline
The framework note holding the full chain from scrape through trim to send, with the reply rate numbers.

Credit. Framework and approach by Nick Saraev, from the cold outreach enrichment build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Outbound16 / 21

ICP Self-Validating Scrape

Instead of accepting whatever the scraper returns, make the agent grade its own list against your ideal customer profile and rescrape until it passes.

01

When to use this

Use this any time you build a lead list. It is the most novel prompt in the course and the pattern generalizes far past scraping. Reach for it whenever your manual quality check has a number in it, because that number can be written into the skill.

02

The prompt

I want you to build me a lead list, and I want you to check your own work before you hand it to me.

My ICP is:
- Roles: <founder, CEO, co-founder, owner, co-owner, partner>
- Industry: <INDUSTRY>
- Company size: <HEADCOUNT_RANGE>
- Location: <GEOGRAPHY>
- Must have: <DELIVERABLE_EMAIL, PHONE, OR OTHER HARD FILTER>
- Disqualifiers: <WHO IS NOT A FIT AND WHY>

The loop:
1. Scrape 100 leads using <SCRAPER_OR_ACTOR> with filters you think match the ICP above.
2. Randomly sample 20 of the 100.
3. Judge each of the 20 against my ICP one by one. For each, say pass or fail and give one line of reasoning.
4. If fewer than 15 of the 20 pass, adjust the filters based on what specifically failed, and scrape again from step 1.
5. Repeat until a sample scores 15 or better out of 20. Hard cap at <MAX_ROUNDS> rounds, then stop and tell me what is blocking you.

When the sample passes:
- Report the score from every round so I can see how the filters moved.
- Trim the output to these columns only: first name, last name, email, company name, company size. Drop everything else.
- Save it to <OUTPUT_PATH>.

Do not ask me to approve each round. Run the loop yourself.
03

What it is actually doing

Every experienced operator does the same thing after a scrape. They open the file, eyeball twenty rows, and decide whether the list is any good. If it is junk they change the filters and run it again.

That habit is a loop. It has a check and a threshold and a retry. Which means you can write it down and hand the whole thing to the agent, including the judging.

That is what this prompt does. It tells the agent how many to scrape, how many to sample, what counts as a pass, and what number of passes is good enough. Then it tells the agent to fix the filters itself and go again. You invoke it once and walk away.

Nick's live run went 9 out of 20, then 9 out of 20 again, then 15, then 19. Four autonomous rounds from one invocation, ending in a list that actually matched the ICP. He never touched it between rounds.

The general lesson is bigger than scraping. Your existing standard operating procedure almost always contains a checkable threshold somewhere. Find the number, write the number into the skill, and let the agent iterate against it. A goal like until it looks good is not checkable. A goal like 15 of 20 is.

04

How it flows

No

Yes

Written ICP with disqualifiers

Scrape 100 leads

Random sample of 20

Judge each pass or fail

At least 15 of 20 pass

Adjust filters from failures

Trim to five columns

Hand off for enrichment

05

Step by step

  1. Write your ICP down properly

    Roles, industry, size, location, hard filters, and disqualifiers. Nick targeted founder, CEO, co-founder, owner, co-owner, and partner. Vague ICP means the judge step has nothing to judge against.

  2. Pick the sample size and threshold

    Scrape 100, sample 20, require 15 to pass. Those numbers are arbitrary but they are specific, and specific is what makes the loop terminate.

  3. Make it show its reasoning per lead

    Ask for pass or fail plus one line of why on each sampled lead. That reasoning is what it uses to adjust the filters on the next round.

  4. Set a hard round cap

    Always cap iterations. Without a cap, a bad ICP or a thin data source turns into an expensive loop that never converges.

  5. Wire the scraper through a connector

    Nick used an Apify actor steered through MCP. Each actor exposes an MCP configurator URL you paste in as a custom connector, so Claude drives the scraper with no API plumbing.

  6. Trim the columns in the same run

    A raw scrape carries 30 or more fields. Cut to what the send needs. If you skip this you feel the friction on every single run.

  7. Read the round-by-round scores

    The score history tells you whether your ICP was the problem or the filters were. A list that never gets past 10 of 20 is an ICP problem.

06

Words explained

ICP
Ideal Customer Profile. A written description of exactly who you want to sell to, specific enough that someone else could sort a list with it.
Self-validating loop
A process where the agent checks its own output against a stated standard and redoes the work until it passes, with no human in between.
Actor
A prebuilt scraper on a platform like Apify. You give it filters and it returns rows.
Custom connector
A link you paste into Claude that lets it drive an outside tool directly. Apify gives each actor its own configurator URL for this.
Sample
A small random slice of the full list, used to judge the whole thing without reading every row.
Done-criteria
The checkable condition that ends the loop. It has to be a number you can measure, not a feeling like good enough.
07

Watch out for

  • A loop with no round cap can keep scraping against an impossible ICP. Always set a maximum.
  • If the ICP is vague, the judging step is theater and the score means nothing.
  • Raw scrapes carry 30 or more columns. Skip the trim instruction and you fight the file on every run.
  • Scraping is not free. Nick's reference is about 1.50 to 1.80 US dollars per 1000 leads, and one live run of 100 leads with emails cost 18 cents.
  • A score that never improves across rounds means your source or your ICP is wrong, not your filters.
08

How it connects

Cold Email Personalization
This produces the validated list that the personalization prompt enriches. The two run back to back as one pipeline.
Self-Healing and Error Logging Clauses
Both notes hand the agent a rule for what to do when its own work fails, instead of leaving it to stall or hand you garbage.
Cold Outreach Enrichment Pipeline
The framework note recording the four-round live result and the column-trim step.
Automation Ladder - Prompt Skill Loop Routine
A self-validating scrape is what makes the skill safe to run unattended on the loop rung, because it grades itself.

Credit. Framework and approach by Nick Saraev, from the self-validating scrape segment of the cold outreach build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Speed to Lead17 / 21

Speed to Lead Poll and Reply

Watch for new form fills and answer each one within about 30 seconds by SMS and email, personalized from what the person actually wrote.

01

When to use this

Use this when a business already buys leads and answers them slowly. It is the biggest money lever in the course. If the client spends on ads and takes ten minutes to respond, build this before you build anything else.

02

The prompt

Build me a speed to lead routine.

Trigger: new <FORM_NAME> submissions. Preferred trigger is a webhook fired by the form. If that is not available, poll <MAILBOX_OR_INBOX> every 60 seconds for new submission emails.

On each new submission:
1. Dedupe against submissions you have already handled. Keep a record of processed submissions so nothing is answered twice.
2. Extract these fields: first name, phone, email, and the free-text field <FREE_TEXT_FIELD_NAME>.
3. Write one fuzzy variable, shortParaphraseOfTheirRequest, about 8 words, second person, that completes the sentence "I know ___." It must paraphrase what they actually wrote, not restate the form.
4. Wait about 30 seconds from the moment the submission arrived. Do not reply instantly.
5. Send this SMS from <SENDING_NUMBER>:

"Hi {{first_name}}, just got your request. I know {{shortParaphraseOfTheirRequest}}. Calling you in the next 5 mins to sort this out. - <SENDER_NAME>"

6. Send the matching email from <SENDING_ADDRESS> using <EMAIL_TEMPLATE>.

Hard constraints:
- The SMS must be under 160 characters after the variables are filled. Budget for a long first name and a long paraphrase. If the filled message would exceed 160 characters, shorten the paraphrase, never the rest of the copy.
- No em dashes. Casual and human, not corporate.
- Log every send: timestamp in, timestamp out, and the message body.

Before you build, tell me which parts of this you can actually do with my current connectors and which need something provisioned.
03

What it is actually doing

A lead is money you already paid for. The person's interest starts decaying the second they hit submit. Ten minutes later they have moved on, or a competitor called first. That is the whole problem.

So the routine sits and watches. Either the form fires a webhook, which is better, or Claude checks the mailbox every 60 seconds. When something new lands, it pulls out the name, the phone, and the free-text field where the person described their problem in their own words. That free-text field is the entire personalization fuel, which is why you make it a required field on the form.

Then it writes one short paraphrase and drops it into a message you already wrote. Same fuzzy variable technique as the newsletter build. The human writes the frame, the AI writes eight words.

The strange rule is the delay. Replying in five seconds reads as fake and people treat it as spam. So you deliberately slow it down to about thirty seconds and allow a little imperfection. Fast enough to win the lead, human enough to be believed.

Nick's claimed result for a home services company: about 3 million a month up to about 9 million a month, 300 percent growth, from speed to lead alone.

04

How it flows

Form fill submitted

Webhook or 60 second poll

Dedupe against handled leads

Extract fields and free text

Write short paraphrase

Wait about 30 seconds

Send SMS and email

Merged call to rep and lead

05

Step by step

  1. Make the free-text field mandatory

    Add anything we should know about your project as a required field on the form. Without it you have nothing to personalize on and the message reverts to generic.

  2. Prefer a webhook over polling

    If the form can call your routine when it posts, use that. There is a real event to hang off, so you get lower latency and no wasted runs.

  3. Build the dedupe record first

    Store which submissions you have handled. Polling will show you the same email again, and texting a lead twice in one minute is worse than being slow.

  4. Budget the 160 characters

    SMS has a hard 160 character limit. Count the worst case with a long name and a long paraphrase, or the message splits and looks broken.

  5. Add the realism delay

    Wait about 30 seconds instead of firing instantly, and allow slight imperfection in the copy. A perfect five second reply reads as a bot.

  6. Solve the sending path for email

    The Gmail connector exposes draft and update tools but cannot send. Sending needs your own OAuth client against the Gmail API. Claude will scaffold it and walk you through the setup.

  7. Start SMS registration early

    SMS needs a provisioned number, and A2P or 10DLC registration takes roughly 2 to 14 days and can be rejected. Kick it off on day one, not on launch day.

  8. Add the merged call last

    A third number dials the rep and the lead at the same time and the first pickup joins, so the prospect never hears dead air. Highest impact piece, add it once SMS and email are stable.

06

Words explained

Speed to lead
How fast you respond after someone shows interest. Often shortened to S2L. Measured in seconds, not hours.
Polling
Checking for something new on a fixed timer, like looking at the mailbox every 60 seconds. Simple, but wasteful and slower than a webhook.
Webhook
The other system calls you the instant something happens, instead of you asking over and over. Better whenever a real event exists.
Dedupe
Making sure the same submission is only handled once, even if you see it several times.
A2P 10DLC
The registration that lets a business send text messages from a normal ten digit number in the US. It takes days and can be rejected.
Merged call
A third number dials your rep and the lead at the same time. Whoever picks up first waits a moment for the other, so nobody hears silence.
07

Watch out for

  • If the free-text form field is optional, most people skip it and your personalization dies at the source.
  • The Gmail connector cannot send. It only drafts and updates. Plan for your own OAuth client from the start.
  • SMS spills past 160 characters the first time a long name meets a long paraphrase. Test the worst case, not the average.
  • Replying in five seconds reads as fake. Slow it down on purpose to about 30 seconds.
  • A2P and 10DLC registration takes 2 to 14 days and can be rejected, so it is the item most likely to delay your launch.
08

How it connects

Newsletter Fuzzy Variable Enrichment
The SMS uses the same fuzzy variable technique. One AI-written slot inside a human-written message.
Follow-Up Cadence SOP
Speed to lead catches the person at the top of the moment, follow-up catches everyone who did not convert. Stacked, they multiply.
Self-Healing and Error Logging Clauses
A routine that fires every 60 seconds fails silently by default. It needs an errors channel more than any other build in the course.
Speed to Lead System
The framework note holding the full chain, the realism constraint, and the claimed 300 percent growth case.

Credit. Framework and approach by Nick Saraev, from the speed to lead build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Dashboards18 / 21

Dashboard Structure Derivation

Hand the whole dataset to the smartest model you have and make it argue for a page structure from the data instead of guessing a layout.

01

When to use this

Use this before you design a single screen of a dashboard. It is the step people skip, and skipping it is why most internal dashboards are five pages nobody opens. Reach for it whenever the data lives in more than two places.

02

The prompt

I am building a marketing dashboard. Do not design anything yet and do not write any styling.

Here is the full dataset: <PATHS_OR_CONNECTORS_TO_EVERY_TABLE>. Read all of it, not a sample.

First, tell me what you actually see:
1. Which tables logically join, on which keys, and how confident you are in each join.
2. Where the coverage gaps are. Which fields or sources exist for only some of the records, and how many.
3. What the natural primary axis of this data is. By client, by channel, by time, by rep, or something else I have not thought of.

Second, propose <NUMBER> candidate page structures. For each one give me:
- The page list and what lives on each page.
- The argument for it, made from the data you just read, not from dashboard convention.
- What it makes hard to see.

Third, tell me which one you would pick and why, in plain language. Argue against the others.

Do not average the options into a compromise. I want distinct structures I can choose between.
03

What it is actually doing

Most dashboards are laid out the way dashboards are usually laid out. Overview, then acquisition, then traffic, then site. It looks organized and it is often wrong, because the layout came from convention rather than from what is in the data.

So you flip it. You give the model everything and you ask it what shape the data actually is. Which tables join. Where the holes are. What the story is usually about. Then you make it propose several structures and argue for each one, including what each structure hides.

This is the one place in the course where the model tier visibly mattered. A mid-tier model proposed the standard funnel layout. The top-tier model rejected that layout with an argument taken from the data itself: the anomalies were client-scoped, so a funnel layout scatters each client's story across five pages, while a client-centric layout keeps each story on one screen. The coverage gaps backed it up, because ecommerce data existed for only 4 of 12 clients, which punishes any page built to show all clients at once.

The other half of a dashboard worth reading is the signals layer. A chart makes you find the problem. A signal tells you the problem in a sentence. Something like client 10, week of March 9, 3 leads against a 58 lead baseline, critical. That is what people actually read.

Build the pages bare and data-first with no styling. Design comes after the structure is right.

04

How it flows

All sources in one store

Smartest model reads everything

Joins gaps and primary axis

Several candidate structures

You pick one and it argues back

Bare scaffold no styling

Signals layer as sentences

05

Step by step

  1. Get every source into one place

    Ad spend, sessions, revenue, CRM, email. The reason internal dashboards are bad is that the data lives in six systems and nobody joins it.

  2. Use the best model available

    This step rewards intelligence more than any other in the build. Pay for the top tier here and economize somewhere else.

  3. Give it the whole dataset

    Not a schema, not a sample. Coverage gaps only show up when the model can count how many records actually carry a field.

  4. Ask for joins and gaps first

    Make it report what it sees before it proposes anything. The proposals are only as good as its read of the data.

  5. Demand distinct candidates

    Ask for several structures and forbid a compromise blend. Distinct options let you compare tradeoffs. A blend hides them.

  6. Make it argue against the others

    The reasoning is the deliverable. A structure you can defend from the data survives the first client meeting. A guessed one does not.

  7. Add the signals layer

    Specify threshold detection over a rolling window that surfaces anomalies as sentences, not charts. This is what makes the dashboard worth opening.

  8. Scaffold bare, then design

    Build the pages with real data and no styling at all. That scaffold is the shared starting point for the parallel design pass.

06

Words explained

Structure derivation
Working out the right page layout from what the data actually contains, instead of copying a standard dashboard shape.
Primary axis
The main thing every page is organized around. By client, by channel, by time. Pick wrong and every screen fights you.
Coverage gap
A field or source that exists for only some records. Ecommerce data for 4 of 12 clients is a coverage gap, and it kills global pages.
Signals layer
Automatic checks that watch numbers over a rolling window and write out anything unusual as a plain sentence.
Rolling window
A moving stretch of recent time, like the last eight weeks, used as the baseline for what is normal right now.
Scaffold
The unstyled first build. Real data, real pages, no design. It exists so structure and looks are judged separately.
07

Watch out for

  • A mid-tier model gives you a plausible funnel layout with no argument behind it. This is the step to spend on.
  • Feeding a schema instead of the real data hides the coverage gaps, and coverage gaps are what decide the layout.
  • Asking for one recommendation gets you one confident answer. Ask for several so you can see the tradeoffs.
  • Styling the scaffold early makes you defend a layout because it looks nice. Keep it ugly until the structure is settled.
  • Cost reference: full derivation plus scaffold over 50000 to 100000 rows ran about 13 to 18 US dollars.
08

How it connects

Parallel Design Variants
The bare scaffold this note produces is the exact input the parallel design pass forks from.
Self-Healing and Error Logging Clauses
Once the dashboard refreshes on a schedule it becomes an unattended routine, so it needs both clauses to fail loudly.
Marketing Dashboard Build Pipeline
The framework note recording the full chain from ingestion to hosting, plus the model tier comparison.
Automate vs Keep Human Filter
The signals layer generates bad news as well as good. Do not auto-send the bad half to a client.

Credit. Framework and approach by Nick Saraev, from the dashboard structure derivation segment of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Dashboards19 / 21

Parallel Design Variants

Fork the same scaffold into five subagents with five different art directions, then pick one or graft the best parts into a sixth.

01

When to use this

Use this once the dashboard structure is settled and the bare scaffold works. It replaces the loop where you iterate one design five times in a row. Reach for it any time you have branches that do not touch each other.

02

The prompt

The scaffold at <SCAFFOLD_PATH> is structurally correct. Do not change the structure, the data, or the page list.

Spawn <NUMBER> subagents in parallel. Each one produces a complete styled version of this same scaffold in its own directory, working from its own art direction brief. They do not read each other's work and they do not touch each other's files.

Art directions, one per agent:
1. Editorial - magazine typography, generous whitespace, strong headline hierarchy.
2. Terminal - monospace, dark, dense, high contrast, minimal chrome.
3. Swiss - grid discipline, restrained palette, precise alignment, no decoration.
4. Dense ops - maximum information per screen, small type, built for an operator who reads it daily.
5. Warm print - paper tones, soft contrast, printed report feel.

One shared constraint every variant must satisfy: <SHARED_CONSTRAINT, for example every variant must surface the same seven anomalies above the fold>. A variant that fails this constraint is disqualified no matter how it looks.

When all agents are done, show me each variant as a screenshot plus its path, side by side, in one message.

After I pick, I may ask you to graft parts of several variants into a sixth build. Keep every variant on disk until I say otherwise.
03

What it is actually doing

Iterating one design five times means waiting five times. If each pass takes five minutes you have spent twenty plus minutes staring at a progress bar, and you only ever saw one lineage of ideas.

Running five agents at once takes about five minutes for all of them, plus one merge pass at the end. You also see five genuinely different answers instead of five versions of your first idea, which matters because design is a search problem and you want to search wide.

The rule for when this is safe is simple. A task is parallelizable when the branches are independent and do not affect each other. Five design variants of the same scaffold qualify, because each writes to its own directory. Sequential edits to one file do not qualify, because the second write wins and quietly destroys the first.

There is a real price. You burn usage limits several times over, and each branch fails more often because nothing is watching it while it runs. That failure rate is acceptable here for one reason: you only need one of the five to be good.

The last piece is the shared constraint. Give every brief one requirement they all have to meet, so the variants stay comparable. Nick required every variant to surface the same seven anomalies. Without that, you are comparing five different dashboards rather than five treatments of one.

04

How it flows

Frozen scaffold

Five art direction briefs

Shared constraint on every brief

Five subagents run in parallel

Five styled variants on disk

Review side by side

Graft the best parts into a sixth

Deploy and password gate

05

Step by step

  1. Freeze the scaffold first

    Structure, data, and page list are settled before you fork. If the branches can change structure, you cannot compare their designs.

  2. Check the branches are independent

    Each agent writes to its own directory and never reads another's. If two branches would edit the same file, this is the wrong tool.

  3. Write genuinely different briefs

    Editorial, terminal, Swiss, dense ops, warm print. Distinct art directions, not five adjectives that mean the same thing. The point is coverage of the solution space.

  4. Add one shared constraint

    Give every brief the same hard requirement, like surfacing the same seven anomalies. This keeps the variants comparable and disqualifies pretty but useless output.

  5. Accept the failure rate

    Nobody is watching each branch, so some will come back broken. That is fine. You need one good one, not five.

  6. Review them side by side

    Ask for all variants in one message with screenshots and paths. Judging them together is much faster and more honest than one at a time.

  7. Graft into a sixth

    You rarely love one whole variant. Take the header from one and the table treatment from another and have Claude build a sixth from the parts.

  8. Host and gate it

    A static host MCP connector lets Claude deploy and password-protect the build directly. Gate per client with a URL parameter plus a per-client password.

06

Words explained

Subagent
A separate Claude working its own task with its own context. Several can run at the same time on the same project.
Parallelizable
Safe to run at the same time, because the pieces do not depend on or overwrite each other.
Art direction brief
A short description of the visual world a design should live in, given as a starting point rather than a spec.
Wall clock time
How long you actually wait, as opposed to how much total work got done. Parallel work cuts wall clock, not total work.
Usage limits
The cap on how much you can run in a window. Five agents at once spend it about five times faster than one.
Graft
Combining the best pieces of several finished versions into one new build.
07

Watch out for

  • Parallel agents on the same file destroy each other's work. The second write wins. Only fork independent branches.
  • Five vague briefs produce five nearly identical designs. Make the art directions genuinely different.
  • Without a shared constraint you get five incomparable dashboards instead of five treatments of one.
  • Nothing monitors a branch while it runs, so expect some to come back broken. Budget for that instead of debugging each one.
  • This burns usage limits several times faster than working serially. Use it for breadth, not for routine edits.
08

How it connects

Dashboard Structure Derivation
That note produces the frozen scaffold. This one is worthless without it, because there is nothing stable to fork.
Design Tuner App
Both notes solve the same problem, which is that describing a visual change in words is slow. One exposes sliders, the other spawns options.
Marketing Dashboard Build Pipeline
The framework note recording the five art directions, the tradeoff table, and the hosting step.
ICP Self-Validating Scrape
Both are ways to spend compute instead of your attention. One iterates against a threshold, the other searches wide in one shot.

Credit. Framework and approach by Nick Saraev, from the parallel design variant segment of the dashboard build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Follow-Up20 / 21

Follow-Up Cadence SOP

Sweep the CRM once a day, find everyone who has gone quiet for a set number of days, and send one short human-written nudge chosen from a pool.

01

When to use this

Use this when deals or invoices go quiet and nobody chases them. It is the least glamorous build in the course and per Nick it is worth 20 to 30 percent of an organization's revenue on its own. Build it after speed to lead, because the two stack.

02

The prompt

Build me a daily follow-up routine against <CRM_NAME>.

Once per day:
1. Query <CRM_NAME> for every record in <PIPELINE_OR_LIST> with a status of <OPEN_STATUS>.
2. Calculate days outstanding for each record from <DATE_FIELD>.
3. Match against this cadence: 1, 2, 3, 7, 14, 21, 28, 56, 84 days. Only act on an exact match. Past 84 days, stop and flag the record for me.
4. Read the full conversation history with that contact before writing anything.
5. Opt-out check. If the contact has asked to stop, gone hostile, or the invoice is in dispute, set chase stage to closed, add a note explaining why, add an audit comment, and send nothing. This check comes before everything else.
6. Select one template from the pool below. Never send the same template twice in a row to the same contact. Track which template each contact has received.
7. Fill the merge variables from the real record and send by <EMAIL_SMS_OR_BOTH>.

Template pool:
<PASTE 10 HUMAN-WRITTEN ONE-LINE NUDGES HERE>

Rules for using the pool:
- Choose from the pool. Do not write new copy and do not rewrite the templates beyond filling variables.
- Keep my sign-off exactly as written.
- Never mention the invoice number.
- No em dashes.

When the run finishes, report which records you actually sent to, with the message body and the timestamp for each. Then verify against the sent folder and show me what is actually there, not what you intended to send.
03

What it is actually doing

This is a boring loop and that is the point. Once a day the system asks the CRM who has gone quiet, works out how many days it has been, and matches that against a ladder: 1, 2, 3, 7, 14, 21, 28, 56, 84 days. If a record hits one of those numbers exactly, it gets one nudge.

Before it writes anything it reads the conversation history and runs an opt-out check. If the person said stop, or the invoice is in dispute, the system flags the record and sends nothing. That check has to come first, because an automated nudge to someone who asked you to stop is the worst thing this build can do.

The core quality decision is the template pool. You write ten short one-line nudges by hand. The system picks one, fills the names, and sends it. It does not generate fresh copy each time.

That one choice does three things. Your tone stays yours across hundreds of sends. Catastrophic mistakes drop sharply, because the model chooses rather than composes, and choosing from ten known-good lines has a much smaller blast radius than writing. And you still get variety, because it never repeats the last one it sent.

The discipline that matters most here is verification. Claude told Nick it had sent to all three matching records when it had only sent to one. Models economize on tokens by simulating work. Always check the sent folder yourself.

04

How it flows

Yes

No

Daily run queries the CRM

Match days outstanding ladder

Read conversation history

Opted out or disputed

Flag record and send nothing

Pick unused template from pool

Fill variables and send

Check the sent folder

05

Step by step

  1. Write the ten templates by hand

    One line each, in your voice, soft rather than pushy. This fires unattended, so err gentle. No em dashes, no invoice numbers, same sign-off on all of them.

  2. Set the cadence ladder

    1, 2, 3, 7, 14, 21, 28, 56, 84 days. Act only on an exact match so nobody gets nudged twice in a week. Past 84 days you have a bigger problem than cadence.

  3. Put the opt-out check before everything

    If they said stop or the invoice is in dispute, set the chase stage to closed, add a note and an audit comment, and send nothing. Make this step run before template selection.

  4. Read the history first

    Have the agent load the conversation with that contact before it picks anything. Context is what stops a nudge landing on top of a reply you missed.

  5. Track what was sent to whom

    Store the last template used per contact so the same line never goes out twice in a row. Without this the pool collapses to whichever line the model likes.

  6. Forbid rewriting the templates

    Say choose, do not compose. If the model is allowed to improve the copy, you lose the consistency that made the pool worth building.

  7. Force a real run

    Nick had to say run this for real using the info in the CRM. If output looks like a simulation, say the word real and name the data source.

  8. Check the sent folder yourself

    Open the mailbox and count. Do not accept the run summary as evidence. This is the step that catches simulated work.

06

Words explained

Cadence
The fixed schedule of when to follow up, counted in days since the last real contact.
Days outstanding
How long a record has been sitting without a reply. The number that decides whether today is a nudge day.
Template pool
A set of pre-written messages the system chooses from, instead of writing something new each time.
Opt-out check
Looking for any sign the person wants you to stop before you send. If it is there, you flag the record and stay quiet.
Audit comment
A note left on the record explaining why the system did what it did, so a human can reconstruct it later.
Simulated work
When a model reports finishing a job it did not actually do. It saves effort, and it looks exactly like real output.
07

Watch out for

  • Claude claimed it sent to all three matching records when it had only sent to one. Always check the sent folder.
  • If the opt-out check runs after template selection, you will eventually nudge someone who asked you to stop.
  • Letting the model write fresh copy each run destroys your tone and widens the blast radius of a bad send.
  • Without a record of the last template used, the pool collapses to two or three favorites.
  • Nudging a record on a range instead of an exact day match means one contact gets hit several days running.
08

How it connects

Speed to Lead Poll and Reply
Speed to lead roughly doubles leads to calls and follow-up adds about another half again on closes. Stacked they multiply out to roughly 3x.
Fuzzy Variable Tightening
The template pool follows the same copy rules: one line, no em dashes, human voice, short enough that nobody suspects a bot.
Self-Healing and Error Logging Clauses
A daily unattended CRM sweep is exactly the routine that fails silently, so both clauses belong on it.
Follow-Up Cadence Engine
The framework note holding the trigger conditions table, the pool rules, and the verification story.

Credit. Framework and approach by Nick Saraev, from the follow-up cadence build in his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.

Reliability21 / 21

Self-Healing and Error Logging Clauses

Two paragraphs you paste into every skill so a broken automation fixes itself and shouts about it instead of dying quietly.

01

When to use this

Use this on every skill, loop, and routine that runs without you watching. Add it the day you build the thing, not the week after it breaks. If a client depends on the output, these clauses are the difference between a demo and infrastructure.

02

The prompt

Append both of these clauses to <SKILL_OR_ROUTINE_NAME>, and to every production skill I build from now on.

SELF-HEALING CLAUSE
If at any point you hit the same error more than three times, treat that as evidence something has materially changed in the systems you interact with. Do not keep retrying. Evaluate what changed, explore, and solve the problem. You have full agency to do this. After solving it, report back to me and update your own skill file with a change log entry containing the problem, your solution, and the fix. Append a new entry to that change log every future time this happens, so there is always a record of what broke and why.

AUTHENTICATION DEBUG PATH
If the failure is an authentication error, log in to <SERVICE> with the credentials stored in the environment as <SERVICE>_USER and <SERVICE>_PW, navigate to <PATH_TO_DEVELOPER_SETTINGS>, regenerate the API key, and update <SERVICE>_API_KEY in the environment. Then retry the original task.

ERROR LOGGING CLAUSE
If you have any errors, send an error notification to <CHANNEL_NAME> in <SLACK_OR_WHATSAPP_OR_DISCORD> using this format:

ERROR - <service> | env: <production or scheduled task>
what failed: <one line>
tried: <what self-healing attempted>
result: succeeded or failed

Also confirm for me now: is the <CHANNEL_NAME> connector attached to this routine, and are <SERVICE>_USER, <SERVICE>_PW, and <SERVICE>_API_KEY all present in the environment this routine runs in?
03

What it is actually doing

Roughly 70 percent of all maintenance incidents are authentication. The failure script is always the same. A service upgrades, the connector breaks, the flow dies silently, the client notices before you do, and you cannot fix it because re-authorizing needs them on a call.

The fix is less secure and far more operable. You hold the root credential. Store the username and password in the environment next to the API keys, and write an explicit debug path telling the agent to log in with them, go to developer settings, regenerate the key, and update the environment. Modern Claude has a real browser and can genuinely perform that login. The capability sits idle unless the credentials are there.

The self-healing clause covers everything else. Without it the model retries a dead route until it gives up. With it, the system anneals: it investigates the change, solves it, and writes what happened into its own skill file, so future runs start from the fixed version. There is an accepted risk. Given that much autonomy, a transient like a rate limit can occasionally make the agent fix something that was not broken. That is rarer and cheaper than a routine that quietly does nothing for a week.

The error logging clause exists because agentic systems lost the free observability that drag-and-drop tools gave you. Make and n8n hand you execution history, errors highlighted on the canvas, and notifications. Cloud routines hand you none of that, so the default state of a broken routine is silence.

The payoff is measured in hours. A 5:59am routine that fails loudly gives you two hours to fix it before the 8:00am human needs the output. A routine that fails silently costs that person half a day.

04

How it flows

No

Yes

Yes

No

Routine runs unattended

Same error three times

Investigate with full agency

Is it an auth failure

Log in and regenerate key

Solve the changed system

Append change log entry

Post result to errors channel

05

Step by step

  1. Take the root credentials on day one

    Ask for the account login while you are building, not after something breaks. Getting a client back on a call to re-authorize is the expensive part.

  2. Store user and password in the environment

    Put SERVICE_USER and SERVICE_PW next to the API keys. Claude has a real browser, so credentials in the environment turn a dead flow into one it can revive.

  3. Write the auth debug path explicitly

    Spell out the route: log in, go to developer settings, regenerate the key, update the environment, retry. Do not assume the agent will figure the path out.

  4. Paste the self-healing clause into every skill

    Same words every time. Three repeats of one error means something changed, so stop retrying and investigate with full agency.

  5. Make it update its own skill file

    Require a change log entry with the problem, the solution, and the fix, appended on every future occurrence. That is how the system gets more reliable instead of just recovering.

  6. Create one errors channel

    A dedicated channel in the tool your team actually opens. Slack, WhatsApp, Discord, whichever. A log nobody reads is the same as no log.

  7. Attach the connector to every routine

    The channel connector has to be on the routine itself, not just on your local setup. Confirm it before you call the build done.

  8. Test by breaking it on purpose

    Revoke a key and watch. You should see the error message arrive and, if the credentials are in place, a self-repair attempt. This is the only real proof.

06

Words explained

Self-healing
The agent notices its own repeated failure, works out what changed, fixes it, and writes down what it did.
Observability
Being able to see what a system is doing and where it broke. Drag-and-drop tools gave this away free. Agentic systems do not.
Fails silently
The automation stops working and nothing tells anyone. The default state for an unwatched routine.
Change log
A running list inside the skill file of every problem hit and how it was solved, added to each time it happens.
Root credential
The actual account username and password, as opposed to a token that can expire or a connector that can break.
Full agency
Explicit permission for the agent to investigate and act on its own instead of stopping to ask you.
07

Watch out for

  • Roughly 70 percent of maintenance incidents are authentication, and you cannot fix most of them without the root credentials.
  • Claude can genuinely log in and regenerate a key, but only if the username and password are in the environment. Otherwise the capability sits idle.
  • Given full agency, a transient like a rate limit can make the agent fix something that was not broken. Accept it, because silent failure is worse.
  • Cloud routines give you no execution history and no error highlighting. Silence is the default, not a good sign.
  • An errors channel in a tool your team never opens is the same as having no errors channel.
08

How it connects

Daily Enrichment Skill via API
That skill runs every 24 hours against a third party API, which is precisely the shape of automation these clauses exist to protect.
Follow-Up Cadence SOP
An unattended daily CRM sweep that fails silently looks identical to a day with no follow-ups due, so it needs the errors channel.
Speed to Lead Poll and Reply
Speed to lead touches leads a client paid for, so a silent failure there costs real money every hour it goes unnoticed.
Maintaining Autonomous Marketing Systems
The framework note holding all three maintenance pillars and the exact clause wording.

Credit. Framework and approach by Nick Saraev, from the maintenance and reliability section of his Zero to One course on Claude Code for marketing. Written up for the Kape vault by BrewedOps.