
Audio Ad Spot
Produce a short broadcast/podcast audio ad spot (15s/30s/60s) — a tightly-timed script with a hook, value, and a single call-to-action, synthesized into a finished, runtime-accurate voiced spot with optional music bed cue. Scopes the offer, exact runtime, and mandatory disclaimers FIRST, then synthesizes a voiced spot that hits the time target. Locking the runtime and CTA before recording is what makes a spot land in its slot and drive one action instead of overrunning or rambling.
Steps
Entry step: scope. Each step names the specialist role it wants; the full working prompt is expandable.
- Ad scopeplannerentry
offer, exact runtime, single CTA, disclaimers, voice
Show working prompt
Lock the spot BEFORE writing or voicing. Step 1: capture the product/offer, the ONE target action (the single CTA), and the audience. Step 2: pick the EXACT runtime slot (15/30/60s) and derive the word budget (~2.5 words/second for ad reads — record it). Step 3: capture any mandatory disclaimer/legal line and how the brand/CTA must be stated. Step 4: pick the voice and tone, and whether a music bed cue is wanted. Step 5: define the arc: hook (first ~3s) -> value -> CTA -> brand/disclaimer. Write an acceptance-criteria checklist (finished audio within ±1s of the slot, opens with a hook in the first 3s, states exactly one CTA, includes the disclaimer, brand named clearly, not silent) and decisions to `notes/scope.md` via write_task_note AND the produces path.
- Write the spot scriptcopywriter
timed ad script with hook, CTA, disclaimer, cues
Show working prompt
Write the spot to the scope. Step 1: write to the word budget so the read lands in the slot — open with the hook in the first ~3 seconds. Step 2: keep one clear value message and exactly ONE CTA, stated plainly. Step 3: include the brand name and the mandatory disclaimer (a quick read at the end is fine, but it counts against the time). Step 4: add VO cues (`[pause]`, emphasis, pace) and a music-bed cue if scoped, and write numbers/phone/URLs as they should be SPOKEN. Step 5: write the script to `notes/ad-script.md` with a running word count and estimated runtime via write_task_note AND the produces path. On a loop-back, trim/expand only to fix the time or a missing element.
- Produce the spotdeveloper
synthesize the voiced spot to the exact runtime
Show working prompt
Render the finished spot. Step 1: synthesize the approved script with the locked voice/tone via the text-to-speech capability. Step 2: measure the rendered duration; if it is outside ±1s of the slot, adjust pacing or trim the script (loop the copy phase if it cannot fit) until it lands. Step 3: if a music bed was scoped, mix a low ducked bed under the VO and apply gentle fades. Step 4: normalize loudness to a broadcast-sane level so it is not too quiet/hot. Step 5: write the finished audio to `ad-spot.mp3` and note its exact measured duration. write_task_note the path and duration. On a loop-back, fix only the flagged issue (over/under time, missing CTA/disclaimer, silence).
- Evaluatereviewer
Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.
Show working prompt
Time it and listen. Step 1: confirm `ad-spot.mp3` exists, is non-silent, and its duration is within ±1s of the target slot (PASS/FAIL). Step 2: sample-listen (if audio capability exists) or check the script — does it open with a hook in the first ~3s? Step 3: confirm exactly ONE CTA is stated and the brand is named clearly. Step 4: confirm the mandatory disclaimer is present. Step 5: confirm loudness is reasonable (and the music bed, if any, is ducked under the VO). Write PASS/FAIL per criterion. Then route — this is the whole point of the loop: - **Every criterion PASSES →** call `advance_task_step({ ref, stepId: "evaluate", next: "finish" })`. - **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: "evaluate", next: "produce" })` to loop back. The builder fixes exactly those gaps. Never route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in. - Finishdeveloper
All acceptance criteria met. Stamp a short summary and report DONE.
Show working prompt
Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.
Triggers
Phrases that suggest this craftbook to a crew.
- make a radio ad
- audio ad spot
- 30 second commercial
- podcast ad read
- produce an audio ad
Source
View this craftbook on GitHub · MIT license