Build · AI Marketing Bench
How I built a library of 34 marketing skills for AI agents (and proved each one works)
Build
How I built a library of 34 marketing skills for AI agents (and proved each one works)
I spent 25 years in marketing, and I didn't trust a single AI skill I downloaded.
Not because they were bad. Because nobody could show me they worked. A skill is a set of instructions an agent follows for one job: write a prospecting email, audit a website, sort the replies. Every one I found came with a good description and no evidence. You installed it and hoped.
That's a strange position for someone who tells leadership teams to make AI part of how they work. I was recommending a thing I couldn't vouch for.
So I did what any marketer who builds would do: I wrote my own skills, and I tested every one before it went public.
The result is AI Marketing Bench, a public library of marketing skills for AI agents. Think of it as a workbench: nothing sits on it until it has been tested against a bare prompt and against the best public skill for the same job, and the scorecard stays attached. Today that's 34 skills across 7 capabilities, 295 tests, every scorecard published including the tests each skill lost. It works in Claude, Codex, Cursor and any agent that reads the open Agent Skills format, and it's MIT licensed.
By the end of this page you'll know the method well enough to test your own skills, and you'll have a one-command install for mine.
How the testing works
Here's what happens to every skill before it's published:
Write the tests first → 8 to 12 per skill, with the expected output written before anything runs, including at least two traps where the right answer is to push back
Run each test three ways → with the skill, with no skill at all, and against the best public skill for the same job
Run all of it on two models → one large, one small
Grade blind → a separate grader scores every run against the expectations, with evidence, without knowing which run had the skill
Publish everything → the scorecard goes on the skill's page, losses included
You might think this is about quality control. No, it's more than that.
When you run a skill against no skill, you find out whether it earns its place at all. Some don't, on some models, and the scorecard says so. When you run it against the best public alternative, you find out whether you've built anything or just rewritten someone else's prompt. And when a separate grader scores blind, you stop marking your own homework. Since I started publishing this way:
- Three skills are marked "partly meets the bar" and one "does not yet", in public, instead of being quietly shipped
- Every skill reads one shared brand memory, so none of them asks you to paste your positioning for the fifth time
Don't worry, this doesn't need an engineer. In fact, I'm not a developer either. A skill is a folder of plain-text files, and the scripts that check them use nothing but standard Python.
What you'll need
- Claude Code, Claude Cowork, Codex, Cursor or any agent that supports the Agent Skills format. To test the way I did, you'll want access to a large and a small model.
- Python 3, only if you want to run the lint and build scripts. Free.
- GitHub, to download the library. Free.
Now, let's build one.
Step 1. Write the standard before the first skill
Everything in the library answers to one document, the Bench Standard: 17 rules in three parts. How the skill behaves. How it's built. How it's proven.
The behaviour rules are the ones I'd steal first. It reads one shared brand memory. It keeps a fact list, and missing stays missing: a plausible guess counts as an invention. It checks its own output before you see it, and a FAIL means rewrite, not hedge. It knows when not to act. Nothing external happens without your approval.

Step 2. Build the brand memory every skill reads
One shared set of files: offer, audience, proof, voice, rules. Every skill reads it first. If it's missing, the skill still runs, marks its output provisional, and offers to set one up.
This is the single biggest reason the skills produce something that sounds like you rather than like a template.
Step 3. Write the skill as a folder
A SKILL.md under 500 lines, in the open spec so it ports between agents. A fixed output shape that opens with the recommendation, not the reasoning. A self-check script. A worked example with a fictional company and no claimed results. A changelog.

Step 4. Write the tests before you run anything
This is the step that makes the rest honest. In evals/evals.json, each test has a prompt, the files it's given, and the expected output, written down before a single run. At least two are traps: a bad brief, a compliance risk, a request where the right answer is "don't".
If you write the expectation after you've seen the answer, you're grading the answer you got.

Step 5. Run it three ways, on two models
With the skill. With no skill. With the comparison skill, where a public one exists. Each on a large model and a small one. For a 12-test skill that's 72 runs, which is why the grading has to be separate.
Step 6. Grade blind and publish the scorecard
A separate grader scores every run against the written expectations, with evidence for each judgment. The bar to publish: beats no skill and the comparison skill on total, never worse on safety and compliance, no invented facts, passes the strict lint.
The scorecard goes in evals/scorecard.json and on the skill's page, every lost test included.

Step 7. Install it
In Claude Code, one capability at a time:
/plugin marketplace add ashleahwilson/ai-marketing-bench
/plugin install outbound@ai-marketing-bench
Any agent, one skill:
npx skills add ashleahwilson/ai-marketing-bench --skill reach-out
On claude.ai, download the zip from the skill's page and upload it under Settings → Capabilities → Skills.
Start with one. /reach-out if you do outbound, /marketing-audit if you want a scored read on your own site, /de-slop if you publish anything.
Troubleshooting
The skill asks for a brand memory you don't have. That's correct behaviour. Say "set one up" and answer its questions, or let it run provisional and read the output knowing it hasn't seen your positioning.
The output pushes back instead of doing the job. Check whether you hit a trap on purpose: a claim it can't source, a compliance risk, a brief with nothing in it. The skill is designed to say so rather than invent.
A skill carries "Recommended for large models" or "Use with care". Read its scorecard. That note is there because it lost tests on the small model.
What broke
One skill still invents. audit-brand has been through several rounds and small invented details still appear in its output. It's published with "does not yet meet the bar" on its scorecard rather than pulled, because hiding it would break the whole premise.
One fix shipped without a re-run. google-ads-build 1.2.1 added text-only fixes for three gaps from round three and wasn't re-tested. The scorecard says so, and it gets re-run before the next version.
The README linked to a website that wasn't live. Anyone who clicked it hit nothing. Fixed on 12 November; the homepage is now this site.
What it would take at your company
Your marketing team already has work that went well. A proposal that landed, an audit a client acted on, a sequence that converted. One of the 34 skills, /skill-author, turns a piece of proven work into a skill that meets this standard, tests included. That's a one-day build.
The 1-Day AI Sprint is where a team does exactly that, on its own material, and leaves with the skill running and tested.
Get the library
github.com/ashleahwilson/ai-marketing-bench. MIT licence. Every skill, every test, every scorecard. Or browse the skills page and install from there.
Install one skill, run it on real work this week, and tell me which one disappointed you. That's the feedback I want most, and it's how the next scorecard gets better.
