linkedin-launch-video — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited linkedin-launch-video (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.
Produce a LinkedIn-native launch video using HyperFrames.
LinkedIn's autoplay is muted, the feed is scrolled in 2-second chunks, and the audience is allergic to either extreme — too corporate (sounds like a 2010 SaaS press release) or too TikTok (looks unprofessional in front of buyers). This skill targets the middle: caption-driven, conversational founder/operator voice, real numbers, no jargon.
/linkedin-launch-video https://example.com/launch — pulls context from a launch page /linkedin-launch-video "we're shipping inbound CRM scoring for B2B sales teams" — short brief /linkedin-launch-video — interview the user
Making the video needs no accounts. Publishing is optional, and every publish call asks first.
| Job | Primary | Also answers it | What differs |
|---|---|---|---|
| Run as sponsored content | LinkedIn Ads | — | Created PAUSED; the creative is a DRAFT until the user activates it |
| Post organically | LinkedIn Organic (company Page) | X Organic | Personal profiles still out-reach Pages; X takes the same MP4 (≤ 512 MB) |
| What past video posts did (optional) | LinkedIn Organic tool_get_organization_posts + tool_get_post_statistics | — | Use to pick length and hook style before scripting |
node --version # ≥ 22
ffmpeg -version | head -1 # ≥ 6LinkedIn videos die when the audience is "everyone". They work when the first frame names the role.
Try sources in order:
1a. Local file — .agents/product-marketing-context.md or .claude/product-marketing-context.md.
1b. Cogny MCP context tree — if the cogny MCP server is connected:
mcp__cogny__get_context_tree_overview
mcp__cogny__search_context query="ICP" / query="<product>"
mcp__cogny__read_context_node node_id="…"The tree usually contains the actual ICP definition (role, seniority, industry, ARR band) and the most-recent shipped feature — both load-bearing for LinkedIn-grade specificity. Check it before public scraping.
1c. Public web — WebFetch the URL only if 1a/1b are empty.
Then ask:
If the role / proof / goal are vague, push back before writing. LinkedIn ROI lives or dies on these three.
Make this look like the user's brand. LinkedIn's audience is buyers — generic stock styling reads as "untrusted vendor".
Ask for one of: site URL, repo path with tailwind.config.* / CSS variables, an existing brand-kit.json, or manual input (3 hex + font + voice). Save the result as brand-kit.json in the HyperFrames project root.
For full schema, extraction patterns, and voice → composition mapping see references/brand-identity.md.
LinkedIn-specific brand notes:
The composition template reads --bg, --fg, --primary, --accent, --font-display as CSS variables — wire them from your kit and the template's structure stays.
LinkedIn-idiomatic video formats that work in 2025–2026:
| Format | When to use | Structure |
|---|---|---|
| Founder-to-camera | Authentic launches | Founder face + burned-in captions; explain the why, the how, the proof |
| Numbers carousel | Data-led launches | Stat → context → stat → context → stat → "want the breakdown? comment X" |
| Customer quote | Mid/late-stage social proof | Real screenshot of customer message → product clip → CTA |
| "Here's what we shipped" | Feature releases | Plain title → 3 short clips with captions → release-notes-style CTA |
| Anti-pattern teardown | Thought leadership / category creation | "Most teams do X. It doesn't work because Y. Here's what we built instead." |
Pick one. Confirm with the user.
Hand the beat sheet back. Wait for confirmation.
npx -y hyperframes@latest init <product-slug>-linkedin --non-interactive --resolution square
cd <product-slug>-linkedinUse --resolution landscape instead for the 16:9 variant (step 5). There is no --yes flag; --non-interactive is what disables the prompts.
LinkedIn's feed is dominated by square (1:1). 16:9 plays but takes ~25% less vertical space, hurting scroll-stop rate. 9:16 is supported but rarely the right call unless the asset will be repurposed for IG Reels later.
Default to 1080×1080 (1:1). Use 1920×1080 (16:9) only if the user is also embedding on a website / running in YouTube pre-roll.
Reference composition: see references/composition-template.html.
LinkedIn-specific styling rules:
Check dependencies first:
npx hyperframes doctorIf it reports FFmpeg missing, stop before rendering and tell the user to install it (brew install ffmpeg on macOS, sudo apt install ffmpeg on Debian/Ubuntu). Meanwhile, npx hyperframes snapshot captures key frames as PNGs without FFmpeg, so they can review the cards.
npx hyperframes lint
npx hyperframes render --output launch.mp4If any check fails, edit and re-render.
If the user wants to run this as paid sponsored content, LinkedIn's edge is B2B targeting precision. Use it.
The MCP needs the video at a public URL. On Cloud, call mcp__cogny__mcp__cogny-image-gen__tool_request_upload_url and run the returned curl to get a public_url (asks first); otherwise ask the user for a hosted link. Then, after the user approves each write:
mcp__cogny__mcp__LinkedIn_Ads__tool_list_ad_accounts # note the currency
mcp__cogny__mcp__LinkedIn_Ads__tool_search_targeting_entities(facet_urn: "urn:li:adTargetingFacet:industries", query: "<industry>")
mcp__cogny__mcp__LinkedIn_Ads__tool_get_audience_counts(ad_account_id, targeting_criteria: {...}) # confirm reach before launch
mcp__cogny__mcp__LinkedIn_Ads__tool_create_campaign_group(ad_account_id, name, status: "PAUSED")
mcp__cogny__mcp__LinkedIn_Ads__tool_create_campaign(
ad_account_id, campaign_group_id, name,
objective_type: "VIDEO_VIEW" | "WEBSITE_VISIT" | "LEAD_GENERATION",
daily_budget_amount: "<amount the user stated>", daily_budget_currency: "<account currency>",
targeting_criteria: {...}, status: "PAUSED"
)
mcp__cogny__mcp__LinkedIn_Ads__tool_upload_video(ad_account_id, video_url: "<public MP4 URL, ≤ 200 MB>", owner_urn: "urn:li:organization:<page id>")
mcp__cogny__mcp__LinkedIn_Ads__tool_create_creative(
ad_account_id, campaign_id, author_organization_urn: "urn:li:organization:<page id>",
commentary, image_urn: "<urn:li:video:… from upload_video>", destination_url, call_to_action_type,
status: "DRAFT"
)Notes:
PAUSED; the creative is DRAFT (LinkedIn can't create creatives paused). The user activates manually after reviewing.get_audience_counts before create_campaign — LinkedIn won't let an audience smaller than 300 ship.If the user has run /crm-icp-analysis and /linkedin-micro-campaigns, this skill completes the loop by producing the actual creative those targeted campaigns will run.
For organic posting: hand the user launch.mp4 and recommend posting from a personal profile (or both personal + company page). Personal-profile organic reach on LinkedIn beats company-page reach by roughly 5–10x.
If LinkedIn Organic is connected, offer to post or schedule it on the company Page (asks first, needs the public URL): mcp__cogny__mcp__LinkedIn_Organic__tool_schedule_post(scheduled_for, text, author: "<org URN from tool_list_organizations>", video_url, video_title), or tool_create_post with the same fields to post now. If X Organic is connected, offer mcp__cogny__mcp__X_Organic__tool_upload_media(file_url) then tool_create_post(text, media_ids) (posts publicly at once, so confirm the text first).
When you finish, print:
/tiktok-launch-video — same pattern for TikTok/reddit-launch-video — same pattern for Reddit/video-to-gif — convert MP4 to a feed-ready GIF (LinkedIn comments don't render GIFs, but DMs do)/linkedin-micro-campaigns — pair the video with ICP-targeted campaigns/linkedin-ads-audit — diagnose existing LinkedIn campaigns before launching new creative~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.