ugc-ad — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ugc-ad (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A person holding your product, talking to camera, in a video that looks like it was filmed on a phone. The thing that actually sells on Meta and TikTok.
inReels MCP connected. Verify with get_account.
claude mcp add --transport http --scope user inreels https://www.inreels.ai/api/mcpcreate_ad_video needs a paid plan. If the user is on free, say so before writing a script rather than after.
The ad is built around it — this is not optional and there is no text-only path.
upload_image with base64, anduse the URL it returns.
fake product; the whole point is that their actual product appears.
If the image is cluttered, lit badly, or the packaging is unreadable, say so now. Every frame of the ad inherits it.
One ad makes one claim. Establish, from the product and whatever the user told you:
A landing page's own headline is usually the weakest available angle, because it was written to satisfy everyone. Its FAQ and objection-handling tell you more about the real hesitation. Aim there.
The script sets the length, and the budget is tight:
| Length | Words |
|---|---|
| 5s | up to 10 |
| 10s | up to 20 |
| 15s | up to 30 |
Over budget and the line gets clipped mid-sentence — the model does not speak faster to fit. Cut words rather than hoping.
If you cannot make the claim in the budget, do not submit a long script. Either go up a length, or omit script entirely and pass a brief instead, which lets the model write its own line to fit.
A UGC line is spoken, not written. Contractions, one idea, no brand voice. "I stopped buying the expensive one" beats "Discover our premium formulation".
list_actors returns the roster. Pass creator_actor_id for one of ours, or creator_image_url for the user's own photo.
Omit both and you get a product-led ad — no person, just the product in motion. That is the right choice for a product that demonstrates itself, and for categories where a presenter reads as an advert.
quote_ad_video { "product_image_url": "…", "script": "…", "variations": 3 }create_ad_video {
"product_image_url": "…",
"creator_actor_id": "<from list_actors>",
"script": "<within budget>",
"look": "natural",
"aspect_ratio": "9:16",
"variations": 3
}look: natural reads as real UGC and is the default worth keeping; raw_iphone is deliberately rough; commercial is polished and stops looking like UGC, which is usually the opposite of what was asked for.
Ask for variations. Ads are tested in sets, not shipped one at a time. Three angles beat one angle rendered beautifully. Each variation is charged separately, so quote the set and say the total before submitting.
get_run_status { "run_id": "…", "wait": true }Minutes, not seconds. Keep polling until completed, then give the user the MP4 URLs. Never hand over a URL from a run that has not reported completed.
Signed URLs expire — refresh_asset_url mints a new one.
Open on the friction or the result, never on the company.
thumbnail size it is illegible in the feed.
create_ad_video spends credits and needs a paid plan.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.