meta-ads-creative
Skill0 starsChanged 44 days agoMITView on GitHub
Generate genuinely different creative angles, hooks, primary text, headlines, descriptions, and CTAs for Meta (Facebook/Instagram) ads, constrained by the brand's voice, banned phrases, and claims policy. Use for "write me three angles", "new ad copy", "variations on the winning ad", "creative concepts for this offer", or when a campaign build needs copy.
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 6 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
1. Meta's official Ads MCP - the execution layer: Look for tools named ads_* in this session.
- Very specific: line 59
If voice.md exists, it governs.
- Distinctive: line 74
If the offer has no proof, write copy that does not need any.
- Distinctive: line 115
Not distinct - one angle, four rewordings:
- Distinctive: line 122
If you produce the second kind, say so: *"these are four executions of one angle, not four angles."* The plan validator warns when every …
- Distinctive: line 164
Always state what proof each angle relies on.
- Distinctive: line 180
When the user wants to promote a post that already exists, do not rewrite it.
- Distinctive: line 191
Do not copy a competitor's text or creative.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Creative: angles and copy
Three genuinely different reasons someone would care beat thirty rewordings of
one. Read meta-ads-core for the safety model; this skill writes, it does not
create objects.
<!-- shared:preflight start - generated from packaging/shared/preflight.md by scripts/sync_skill_blocks.py - edit there -->Preflight: two checks, kept separate
Independent questions; never let one answer stand in for the other.
1. Meta's official Ads MCP - the execution layer. Look for tools named
ads_* in this session. With none, nothing here can reach an account: say so
and help the user connect it - connect-meta-mcp.md under references/ in the
meta-ads-core skill, or
https://github.com/bartlomiejborzucki/meta-ads-agent/blob/master/skills/meta-ads-core/references/connect-meta-mcp.md.
The local CLI does not replace it.
2. The local meta-ads-agent CLI - optional, usually absent. Assume it is
missing until this succeeds:
meta-ads-agent --version"command not found" is the normal answer, not a fault. Show no
meta-ads-agent ... command before that probe has succeeded - a command that
fails at the user's prompt costs more than the step it saves. Say "that step
needs the optional CLI, which is not installed here" and carry on.
The MCP alone covers audits, reporting, Ad Library research, previews,
tracking, creative, optimisation and the changes that follow; .meta-ads/
files can be written directly from the templates in meta-ads-core's
assets/. Only these need the CLI: plan validation (so campaign builds),
local image and video upload, video / existing-post / multi-variant /
carousel creatives, deletion, and the report arithmetic (which has a
by-hand route).
<!-- shared:preflight end -->Read the constraints first
| Source | What it gives you |
.meta-ads/voice.md | tone, vocabulary, examples the user likes and dislikes |
.meta-ads/brand.yaml | banned_phrases (hard bans), claims_policy (binding), profile |
.meta-ads/offers/<slug>.yaml | audience, problem, outcome, proof, restrictions, CTA |
ads_library_search | what the category is already saying - via meta-ads-research |
If voice.md exists, it governs. If it does not, ask for two or three ads or
emails the user likes; examples calibrate tone far faster than adjectives.
Never invent evidence
You may cite only proof that exists in the offer brief or that the user supplied. No invented:
- results or percentages ("cut reporting time by 80%")
- customer counts ("trusted by 10,000 teams")
- testimonials or named customers
- scientific or medical claims
- product capabilities the product does not have
- awards, certifications, or rankings
If the offer has no proof, write copy that does not need any. Specificity can come from the problem rather than from a number - "the Friday afternoon that disappears into the weekly report" is concrete and requires no evidence.
A fabricated ad claim is a legal and reputational problem for the user, not a creative flourish. If you find yourself wanting a statistic, ask for one.
claims_policy in brand.yaml is binding. restrictions in the offer brief
is binding. banned_phrases must not appear verbatim.
Structure
Separate the layers. They are edited independently and they fail independently.
| Layer | What it is |
| Angle | the reason someone would care. The concept. |
| Hook | the first line that earns the second. |
| Primary text | the body. Shown truncated in most placements. |
| Headline | short, below the image. Often the only thing read. |
| Description | optional, shown in some placements only. |
| CTA | Meta's enum. Discover valid values with ads_get_field_context. |
Front-load the primary text: Feed truncates it, and the "see more" cut lands early. Say the thing that matters before the fold.
Angles have to actually differ
An angle is a different reason to care, not a different sentence about the same reason.
Distinct angles for one offer:
| Angle | The reason |
| Time recovered | the hours the work currently costs |
| Error risk | what happens when a manual number is wrong |
| Being the bottleneck | the person everyone waits on |
| Cost of the status quo | what the manual process costs annually |
Not distinct - one angle, four rewordings:
- "Save time on reporting"
- "Cut hours from your reporting"
- "Stop wasting time on reports"
- "Reporting shouldn't take hours"
If you produce the second kind, say so: "these are four executions of one angle, not four angles." The plan validator warns when every variant shares an angle, and calling rewordings a creative test produces a test that cannot teach anything.
For a genuine test, vary one layer at a time. Different angles with the same image tests messaging. The same copy on different images tests visuals. Changing both tells you which combination won and nothing about why.
How many
| Profile | Angles |
conservative | 2 |
standard | 3 |
experimental | 4-5 |
Fewer, better-differentiated angles beat more variants. Each angle needs enough
budget to produce a readable result - see the volume floors in
brand.yaml.thresholds. Splitting a small budget across five angles produces
five inconclusive results.
Output format
Give the user something they can review, then hand the chosen variants to
meta-ads-campaign as plan input.
ANGLE 1 — Time recovered
Hook Friday afternoon, gone again.
Primary text ...
Headline Stop rebuilding the weekly report
Description ...
CTA SIGN_UP
Proof used none - this angle asserts nothing measurable
Test intent does the time framing beat the risk framing
ANGLE 2 — Error risk
...
Proof used "340 attendees at the last session" (offer brief)Always state what proof each angle relies on. It makes an unsupported claim visible before it ships, and it shows the user exactly which claims they are vouching for.
Placement matters to copy
- Feed - primary text truncates early. Headline carries weight.
- Stories and Reels - vertical, sound often off, text overlay competes with UI. Short.
- Right column - image and headline only, tiny.
meta-ads-preview will show you the actual truncation. Do not guess at it -
count characters if you must, but the preview is the evidence.
Existing posts
When the user wants to promote a post that already exists, do not rewrite it. Promoting the real post preserves its likes, comments, and shares; recreating the content as a new dark post starts from zero. If they ask you to "make an ad from this post", find out which they mean.
Competitor research
meta-ads-research and ads_library_search show what a category is saying.
Extract themes: angles in use, offers, formats, positioning, what nobody is
saying.
Do not copy a competitor's text or creative. Beyond the legal problem, ads that sound like the category perform like the category - the gap is usually the opportunity.
More: references/angles-and-copy.md.
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- nowork-studio/notfair-plugin★ 4.1ksame name
- nowork-studio/toprank★ 4ksame name
- vidual-labs/digital-marketing-skills★ 3same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- meta-ads-audiencesSkill
- meta-ads-auditSkill
- meta-ads-campaignSkill
- meta-ads-catalogSkill
- meta-ads-coreSkill
- meta-ads-experimentsSkill
- meta-ads-optimizeSkill
- meta-ads-previewSkill
- meta-ads-reportSkill
- meta-ads-researchSkill
- meta-ads-trackingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

