Write the words of a short-form video ad (voiceover, dialogue, chat bubbles, on-screen lines) the way performance creative teams do instead of from a blank page. Builds the script from the buyers' own words, the beat sheet of an ad that already works and three deliberately different angles, filters them with a rule check and a second non-Claude model, and takes the strongest into the review with the other two as one-line swaps. Use it in every video ad run before any paid step, and whenever the user asks to write, rewrite or improve a video ad script or says a script sounds generic or AI-written.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the write-video-ad-script skill
A model asked to "write a 30-second ad for this product" writes the average of every ad it has read. That is why AI scripts sound generic. The tools and teams whose scripts perform never start there. They build each script from four things, and so does this skill:
The output is one script in the format's own shape, two runner-up concepts the user can swap to, and a record of what the script was built on.
These answers are the frame. Never ask them again:
If the answer leaves room, the three concepts all work inside it, differing in the person, the pain or the proof.
If it fixes the whole angle (a remix of a finished video, a batch concept with its own hook), write one concept on it and vary only the hooks.
The working files live in the project's working folder, under a script subfolder. Their exact shapes, and how to run the two scripts, are in this skill's files reference: read it before writing them. Run both scripts from the folder that holds the working folder, calling them where this skill's scripts were saved.
Read the recipe's instructions and config, and write the shape file. It lists:
For speech, read pacing. Set the desired cadence from the brief's explicit delivery direction or observed reference audio, then the recipe's default. Preserve explicit recipe limits and record any conflict. Without usable evidence, use a provisional 3 words per second for conversation or 2.5 for slow narration, labelled as a fallback.
Budget each spoken beat from its speech window, excluding pauses, silent demonstrations and end cards. Rates can differ across beats and speakers. Record the rate's source and keep recipe estimates separate from observed rendered delivery. Carry this plan into production direction. Read chat and cards against their own display time; lyric timing follows bars and syllables. A word estimate does not prove that a generated read fits. Do not change the recipe to express one run's target or promise forty words in fifteen seconds.
The format's own rules win on shape. When the recipe says "a 13-sentence testimonial" or "one hook line on screen", the shape says that.
Practitioners name this as the single biggest lever. Real phrases from real buyers replace the model's generic idea of the customer.
Reuse before you collect. Check these in order:
Collect when there is nothing to reuse. Free sources come first:
Then the paid sources, through the GooseWorks data proxy (ScrapeCreators): comments on the brand's own best posts, product reviews, and a category complaint search. Fetch ad-angle-miner and follow its customer-voice section for the exact paths.
Paid calls need one yes from the user, asked with a rough credit count. Inside the video runtime, that question rides in the recipe's choices round; never ask it in a round of its own. Run on its own, ask it once, before the first paid call.
Aim for 20 to 30 quotes. Mix:
Keep each quote verbatim, with its link and a tag: pain, desire, objection, outcome, moment or switching. Never paraphrase one. A quote without a link is not a quote.
Save the bank to the workspace path above with the MCP file tools, so the next video for this brand reuses it for free. If the file tools refuse, skip saving: the bank still lives in this project's working folder. Never write it into the user's own folders.
When nothing can be found (a new brand with no reviews anywhere), build on the brand's own facts and the category's complaints from competitors' reviews. Tell the user in one line that the scripts aren't built on their buyers' words yet.
Reference one is the format's demo ad. Read its lines and timing from the recipe's instructions and config first; the template's extracted script is often empty. Watch the demo video with the watch skill only when the recipe doesn't carry its lines.
Add up to three more ads in the same format from the evidence already gathered:
Ad libraries show what runs, not what converts, so treat every one as a candidate.
For each reference, write a persuasion record:
Models converge on the same few ideas, and a creative system prompt does little to change that. What works: generate many, rate how obvious each one is, and keep the unobvious ones that have real evidence behind them.
In a batch, build the quotes and the angle list once for the brand. Give every concept whose angle is open a different angle from that list.
For each concept, write the body on the reference's beat map, in the format's shape. Then write 3 or 4 hooks, each from a different family in the hook families reference. At least one hook reuses a buyer's own phrase.
The laws:
Write the candidates file: the concepts with their angle, person, awareness stage, quote ids, reference id, typicality, hooks and beats.
The rule check. Run the lint script on the candidates, with the shape, the brand
rules, buyer quotes and observed references. Use --strict to enforce profiled speech
budgets and explicit word limits exactly; this flag checks timing, not research completion.
It fails on:
It warns on:
Fix every error and read every warning. Run it again until it passes.
The second opinion. Run the critique script with the same files and the brief. A model from a different family (never Claude) judges every concept twice, once in each order, because judges favour whatever they read first. It scores hook, specificity, how spoken it sounds, proof, payoff and freshness, and gives a best hook, line edits and a ranking. It costs about 2 credits and runs without asking.
The script's exit codes:
Apply the edits that hold up. Never apply an edit that adds a claim the facts don't back, or one that only makes a line flatter. Drop a concept the critic killed in both passes, if its reason is real. Then run the rule check again.
The critic raises the floor. It does not pick the winner: the user does, and later the ad's results.
Take the top-ranked concept and its best hook. Put the script into the recipe's own script shape (a thread, beats with voiceover lines, slates, lyrics) and hand it to the runtime's review step. That review's single approval covers it.
In the same review, list the two runner-ups, one line each: the angle and the hook. The user can swap to one in a word. A swap redoes only the cheap pieces built from the script.
Add a note to the review labelled "How this script was made", with:
Never put the quotes themselves or their links in the note. Review sets can be remixed into other brands' videos.
When the user asks to choose ("show me a few scripts"), show the three concepts before the review: the angle and the hook, one line each. Then build the review on the one they pick.
Talk to the user like a creative partner. Never mention files, scripts, scores, models, the rule check or the second opinion unless they ask. If they change a line, their words are kept verbatim. Run the rule check in report-only mode, and raise only what changes something for them.
Keep a script history for the brand in the GooseWorks workspace, next to the buyer quotes, as one JSON line per run. The file tools can't append, so read it, add the line and write it back. Each line records:
The next run reads it first: lean toward what they kept, away from what they passed on, and write the way their edits show.
A standing rule the user states ("never mention price", "we don't say 'cure'") is a brand rule. Save it to the brand the way the runtime says, not only to the history.
| Step | Cost |
|---|---|
| Writing, the rule check, workspace reads | Free |
| The second opinion | About 2 credits, billed to the video project, not asked |
| Paid buyer-research sources | Billed per call, asked once, saved so the brand pays once |
Include the chosen delivery style, per-beat word counts and speech windows, intentional pauses, recipe conflicts and unverified targets in the existing review. Production uses the same plan and preserves recipe limits. Review finished audio for the complete read, pronunciation, naturalness and sync before declaring delivery fixed.
Full video production sequence with script review, actual ingredient choices, controlled generation, editing, evidence-based quality review, polish, captions and delivery. A host binding supplies project storage, authentic approvals, provider access and billing.
Build a vox-pop street interview video ad. An interviewer with a handheld mic asks passers-by one question about the brand's product, they give blunt wrong guesses, one gives the real answer, and the cut lands on a branded end card. Generates the takes through the GooseWorks fal proxy (Seedance 2.0 with native voice), then grades, re-cuts, captions and gates them locally. Use for the street-interview format.
Assemble a whiteboard explainer video ad from a beats file — a narrator explains one idea while a real whiteboard fills up in black marker, with a hand-lettered title, bulleted rows down the left, a drawing filling the right, and a payoff that letters the closing line and rings the claim. The board is a PHOTOGRAPH and the ink is multiplied onto it, so the surface sheen and window light come through the strokes; the drawings are generated as line art and traced to ordered strokes, then revealed in drawing order on the word they belong to. The layout is SOLVED from the beats, never hand-placed. FREE assembly (Pillow plus ffmpeg) apart from one board photo and one drawing per subject, both one-time per brand. Use for the whiteboard format.
Teach your coding agent to build fast, cheap value prop video ads from a brand's logo and product images, using HTML instead of a video model.
An iMessage video ad shows a text conversation on an iPhone screen. Here is how a single skill teaches Claude to build one, with sound and an end card.
A seven-step workflow for turning a concept brief into a finished animated explainer ad with Claude Code, image models and ffmpeg.