Instagram Post Builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Instagram Post Builder (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
Stage: S3 - Build (final skill in the Instagram Trend Post Builder flywheel)
This is where trend awareness becomes an actual post. It takes the trend card from trend-educator as fuel, but the post is built around the user's own message - the trend informs the packaging, it does not dictate the content. The result is a copy-paste-ready package.
The defining behavior of this skill is conversational, one question at a time. Do not interrogate the user with a form. Ask, listen, then ask the next thing - adapting to what they said.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
user_message | string | yes* | - | What the user wants to say / the topic of the post. *If absent, the skill elicits it as the first question rather than failing. |
educator_brief | object | no | - | The output from trend-educator (trend_summary, why_it_works, opportunity_angles, confidence_note). When present, the build is grounded in these trends. When absent, the skill still works in standalone mode. |
tone | string | no | _(asked)_ | Desired voice (e.g. "warm", "punchy", "expert", "playful"). Elicited if not provided. |
audience | string | no | _(asked)_ | Who the post is for. Elicited if not provided. |
cta_goal | string | no | _(asked)_ | The action the post should drive (e.g. "save it", "comment a word", "visit link in bio", "follow"). Elicited if not provided. |
The skill runs as a short guided interview, then generates. Ask exactly one question per turn and wait for the answer before continuing.
educator_brief is present, lead with one line referencing the opportunity it unlocks ("The scout found that contrarian Reels are landing in your niche - let's use that."). If absent, say you'll build from scratch.user_message is missing, ask: "What's the one thing you want this post to say or teach?" If it is present, reflect it back in a sentence and confirm before moving on.audience already supplied.)tone supplied.)cta_goal). (Skip if supplied.)format from the opportunity_angles (or ask, if standalone) and confirm reel vs carousel vs single image - because it changes hook and visual direction.winning_hooks where available (e.g. one curiosity-gap, one contrarian, one direct-promise). Keep each under ~12 words and front-load the stakes - on a reel, the first 3 seconds decide whether the viewer scrolls past, so the hook must land in the first frame, not after an intro.tone for the stated audience. The feed truncates captions at roughly 125 characters before the "…more" fold - the hook payoff and the reason to keep reading must fit above it. The hard ceiling is 2,200 characters; educational carousels can run long, reel captions work best well under that since the video carries the message.cta_goal. Make it specific and low-friction ("comment 'GUIDE' and I'll send it" beats "let me know your thoughts").{
"format": "string - reel | carousel | single_image | story",
"hooks": [
{
"variant": "string - pattern name, e.g. 'curiosity-gap'",
"text": "string - the hook line (on-screen text for reels, first line for static)"
}
],
"caption_body": "string - the full caption, formatted with line breaks",
"cta": "string - the single call to action",
"hashtags": ["string - 15 to 20 tags, '#'-prefixed, mixed reach tiers"],
"alt_text": "string - 1 to 2 sentence accessibility description",
"visual_direction": {
"concept": "string - the core visual idea",
"shot_or_slides": "string - shot list (reel) or slide-by-slide breakdown (carousel)",
"on_screen_text": "string - text overlay guidance",
"cover_idea": "string - first-frame / cover-slide concept tied to the hook"
},
"post_brief": {
"message": "string",
"audience": "string",
"tone": "string",
"cta_goal": "string"
}
}Deliver as labeled, copy-paste-ready blocks under the header 📦 Post Package - {format}:
Want a second angle, a different tone, or a carousel version? Say the word.educator_brief shapes the packaging (format, hook pattern, timing); the user's own message is the content. A post that is all trend and no message performs once and builds nothing.cta_goal.trend-educator - consumes its opportunity_angles, trend_summary, and why_it_works as educator_brief to ground the post in working trends.instagram-trend-scout)._ Optionally hand the published post's performance back into instagram-trend-scout as a future signal.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.