answer-ads-questions
Answer questions about a brand's Meta ads (spend, results, which ad is winning, is it paused, why did Goose do that) only from reads made in the same turn,…
Turn a brand's facts, a campaign brief and the product into a one-minute Meta ad strategy with its reasoning — goal, audience, objective and placements, budget split, how many ads and how different they must be (generate 3x so the user can choose), the test frame, the success
$ npx -y skills add gooseworks-ai/goose-skills --skill ads-north-star-strategy --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ads-north-star-strategyContext preview
The summary Claude sees to decide when to auto-load this skill.
Turn a brand's facts, a campaign brief and the product into a one-minute Meta ad strategy with its reasoning — goal, audience, objective and placements, budget split, how many ads and how different they must be (generate 3x so the user can choose), the test frame, the success
name: ads-north-star-strategy description: Turn a brand's facts, a campaign brief and the product into a one-minute Meta ad strategy with its reasoning — goal, audience, objective and placements, budget split, how many ads and how different they must be (generate 3x so the user can choose), the test frame, the success metric, and safety rules for the user to accept. Decides what launch-meta-ad-campaign then executes, and re-reads the strategy after a deep check to show which assumption changed. Use it after intake and before any creative is generated or any campaign is built.
**What this is for.** Intake produced facts: what the business sells, what a customer is worth, how long they take to buy, what the user wants from this money. This skill turns them into a strategy the user can read in a minute. Each choice comes with its reason, because the deep check re-reads this file weeks later and has to see what was assumed.
**This skill decides. `launch-meta-ad-campaign` executes.** The launch skill already holds the rules for what to optimize for, how big a test the budget buys, and how to structure the campaign. This skill **applies** those rules and records the answer. It does not restate them. When they change, they change in one place.
**The three things most strategies get wrong:**
1. **Optimizing for a cheaper action than the real goal.** Traffic is cheaper than leads. Clicks are cheaper than both. A strategy that picks the cheap action because it is available has decided to buy the wrong people. 2. **Splitting a small budget.** One audience with 2–3 genuinely different ads beats three audiences that each starve. 3. **Ads that differ in colour, not in argument.** Three versions of one message teach nothing. The angles have to differ in *what they say*.
---
Paths are relative to **this skill's own folder**, not your working directory (in GooseWorks: `agent-config/skills/ads-north-star-strategy/`). The harness docs contract ships with the `meta-ad-manager` skill and the Stage 2 and Stage 4 rules with `launch-meta-ad-campaign`; both are installed beside this one.
Use the first mode that is available:
1. **GooseWorks** when the GooseWorks tools are callable. Read [references/gooseworks-adapter.md](references/gooseworks-adapter.md). 2. **Direct Meta** when there is no GooseWorks, but a Meta token and ad account are available. Read [references/direct-meta-adapter.md](references/direct-meta-adapter.md). 3. **Planning only** when neither is available. Read [references/planning-only.md](references/planning-only.md).
**"The adapter"** below means the file for the mode you chose.
Write `strategy.md` for one campaign: goal, audience, objective and placements, budget, creative plan, test frame, success metric and reasoning. Then propose safety rules for the user to accept. Use it after intake and before any creative is generated. Use it again after a deep check, to revise the strategy and say what changed.
<!-- shared:ads-north-star-strategy start --> <!-- This block is maintained in ONE place and copied byte-for-byte into both the maintainers' source copy and the published goose-skills copy. Edit one, copy it to the other, and run the parity script before shipping either. -->
| Input | Where it comes from | If missing | |---|---|---| | **Brand facts**: business type, unit economics (ACV or AOV, margin, LTV, CAC target), sales cycle, other channels, claims rules, safety limits, the user's familiarity with Meta | the brand file intake wrote | read brand research; ask only per the asking rule below | | **Campaign brief**: the goal in the user's words, the offer, the ICP, the destination, total budget and duration | the campaign brief | ask | | **Product**: what is sold, price point | the catalog, by product id | ask which product | | **Account facts**: lifetime spend, tracking present, weekly volume of the target event | read from the ad account (launch skill, Stage 2) | assume a cold account with no tracking, and say so | | **Existing customers** (a customer list or custom audience) | the ad account's audiences | no exclusion; say so | | **Brand record ids**: brand id, the coworker agent that owns the files | the brand record | ask the host; never invent one | | **What the executing host can launch**: which objectives, and how many ads per ad set | the host's launch tool | assume Traffic only, 2–3 ads | | **Deep-check findings** (re-read only) | the deep check's report | not a re-read |
**The asking rule.** Ask only when both are true: the answer cannot be inferred from research, the catalog or existing campaigns, **and** a wrong guess changes money, claims or legal exposure. State everything else as an assumption: "I'm assuming X, Y, Z. Tell me if any are wrong." Ask at most four questions per turn, in plain words.
Things that usually pass the rule at strategy time: the budget ceiling, what a lead or sale is worth (when the brief has no ACV/AOV), and whether a named result may be claimed. Things that never pass it: the objective, the optimization goal, the structure and the placements. Those are yours to decide.
**Facts that came from intake, not from a tool.** An account fact the user or intake stated (lifetime spend, weekly events) has no sync time. Write it as an assumption ("per intake, not yet read from the account"), never as an `- Observed:` line with an invented sync time. Once the account is read, the observation replaces the assumption.
test honestly, structure follows the budget) and its Stage 4 test design. **Read them before deciding. Do not copy them.**
#
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Answer questions about a brand's Meta ads (spend, results, which ad is winning, is it paused, why did Goose do that) only from reads made in the same turn,…
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…