A Claude Code skill that builds a full monthly social media calendar, researched, audited, and production-ready with competitor analysis all in a single command.
SaferSkills independently audited social-calendar-skill (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.
Triggers:
/social-calendar [BrandName] [Month Year] — build monthly content calendar/social-audit [BrandName] — audit brand's social channels/competitor-audit [BrandName] — competitor intelligence + gap analysis/social-suite [BrandName] [Month Year] — run all three modes end to end"analyse my competitors", "do a full social media analysis"
This skill is a complete social media intelligence and content production system. It operates in three modes — run individually or combined:
| Mode | Command | What it does |
|---|---|---|
| A — Calendar | /social-calendar | Research → narrative brief → full monthly content calendar for selected platforms |
| B — Audit | /social-audit | Analyses brand's own social channels, scores performance, outputs recommendations |
| C — Competitor Intel | /competitor-audit | Studies competitor channels, builds comparison matrix, identifies gaps and whitespace |
| Full Suite | /social-suite | Runs B + C first, uses findings to inform A — the most comprehensive output |
The only mandatory pause in any mode is after the narrative brief in Mode A (Phase 4). Everything else runs sequentially without asking for confirmation.
If the user's message is ambiguous (e.g. just "help with social media"), ask:
"What would you like to do? 1. Build a monthly content calendar 2. Audit our existing social channels 3. Analyse competitors and find content gaps 4. All of the above (full suite — recommended)"
Extract from the user's message or ask for anything missing:
BRAND_NAME = [brand name, e.g. "Stripe"]
BRAND_URL = [primary website URL — required for all modes]
TARGET_MONTH = [Month Year — required for Mode A only, e.g. "June 2026"]
ICP_HINT = [optional — who they sell to, e.g. "CTOs at mid-market SaaS"]
COMPETITORS = [list of competitor names/URLs — required for Mode C; discover if not provided]
OUTPUT_DIR = [save path — default: ~/Documents/[BRAND_NAME]/social/]Ask the user which platforms they want content for:
"Which platforms do you want content for this month? Select all that apply: 1. LinkedIn 2. X (Twitter) 3. Instagram (Feed + Reels) 4. Instagram Stories 5. Facebook 6. TikTok 7. YouTube Shorts 8. YouTube (Long-form) 9. Threads 10. Pinterest 11. Reddit (community engagement) 12. All major platforms (LinkedIn, X, Instagram, Facebook, TikTok, YouTube Shorts)"
Store as: ACTIVE_CHANNELS = [list of selected platforms]
If the user says "all" or doesn't specify, default to: LinkedIn, X, Instagram (Feed + Reels), Facebook, TikTok, YouTube Shorts.
For Mode B and C, discover which channels the brand is active on automatically (Phase B1 / C1).
This section is the canonical reference for all content decisions. Every caption, script, hook, and format must follow the rules for its platform. Content is not platform-native if it's just a shorter or longer version of the same sentence.
What it is: Professional network. Primary B2B content platform. High-intent audience — people are in a work mindset.
Audience: Decision-makers, practitioners, industry professionals. Skews 25–54.
What performs:
What doesn't perform:
Caption rules:
Best formats: Carousel (highest saves), static stat cards, short video, text-only opinion posts.
Optimal posting: 3–5x per week. Tue–Thu, 8–10am and 12–2pm local.
What it is: Real-time conversation platform. Audience skews technical, opinionated, media-forward. Organic reach is declining but engagement from the right accounts drives outsized distribution.
Audience: Journalists, developers, founders, investors, power users. High signal-to-noise when done right.
What performs:
What doesn't perform:
Caption rules:
Best formats: Short text takes, threads, images with text, video clips (first 3 sec matters).
Optimal posting: 1–3x per day. Weekdays, 9am–12pm and 5–7pm.
What it is: Visual-first platform. Discovery via Explore and hashtags. Community via comments and DMs.
Audience: Broad consumer and prosumer. B2B brands can work here if the visual output is high quality.
What performs:
What doesn't perform:
Caption rules:
Best formats: Carousel (highest reach), strong static images, Reels.
Optimal posting: 4–7x per week (feed). Daily for Stories.
What it is: Short-form video tab. Highest organic reach on the platform. Algorithm serves Reels to non-followers aggressively.
Audience: Broader than feed — Reels reach new audiences who don't follow the account.
What performs:
What doesn't perform:
Caption rules:
Best formats: Text-on-screen + voiceover, B-roll montage with VO, talking head with captions.
Optimal posting: 4–7x per week. Evenings and weekends perform well.
What it is: Ephemeral 24-hour content. Shown only to followers. High intimacy, low pressure.
Audience: Existing community — people who already follow the account.
What performs:
What doesn't perform:
Content rules:
Format notes: 9:16 vertical (1080×1920px). Text in the safe zone (middle 60% of screen — top and bottom may be cut by UI).
What it is: Largest platform by MAU globally. Organic reach for brand pages is very low (1–5%), but paid amplification is highly effective. Also important for community (Groups) and events.
Audience: Skews older than other platforms (35–65). High use in international markets. Strong for B2C brands and local businesses.
What performs:
What doesn't perform:
Caption rules:
Best formats: Native video, long-form storytelling posts, event posts, Group content.
Optimal posting: 1–2x per day. Weekdays 1–4pm.
What it is: Short-form video-first platform with the most powerful discovery algorithm of any social network. A video can reach millions of non-followers. The algorithm rewards watch time, completion rate, and saves — not follower count.
Audience: Skews 18–34 but expanding to 35–54. Highly engaged. B2B brands are growing fast here — the "TikTok for business" audience is real.
What performs:
What doesn't perform:
Caption rules:
Script rules (TikTok-specific):
Best formats: Text-on-screen + VO, creator-style explainer, B-roll with VO, reaction/commentary.
Optimal posting: 1–4x per day (higher frequency than other platforms). Any time — algorithm matters more than posting time.
What it is: YouTube's short-form vertical video format (<60 seconds). Shown in the Shorts feed and also discoverable via search. The SEO element is stronger than TikTok — YouTube Shorts can rank in Google Search.
Audience: Broader age range than TikTok. High intent (people search for things). Strong for tutorial and educational content.
What performs:
What doesn't perform:
Content rules:
Script rules:
Optimal posting: 2–5x per week. Consistency matters more than frequency here.
What it is: The world's second-largest search engine. Long-form video content that ranks in both YouTube and Google Search. High trust, high intent, long shelf life.
Audience: Research-mode audience. Willing to invest 5–20 minutes for depth. Strong for tutorial, case study, interview, and documentary-style content.
What performs:
What doesn't perform:
Content spec (for each YouTube long-form video):
Optimal posting: 1–2x per week (consistency over volume).
What it is: Meta's text-based platform (launched 2023). Most brand-safe of the Twitter alternatives. Casual, conversational, discovery-oriented. Cross-posts easily from Instagram.
Audience: Instagram's existing users (so skews similar to IG). Early-adopter brands are getting outsized reach now while competition is low.
What performs:
What doesn't perform:
Caption rules:
Optimal posting: 2–4x per week. Building slowly is fine — the platform is still maturing.
What it is: A visual search engine, not a social network. People use Pinterest to plan and discover — they're in a high-intent, aspirational mindset. SEO matters far more than social strategy here.
Audience: Skews female, 25–45 globally. Strong for lifestyle, home, food, fashion, wedding, travel. Growing B2B presence for infographics, marketing tips, design inspiration, and tools.
What performs:
What doesn't perform:
Content spec:
Optimal posting: 5–15 pins per day (Pinterest rewards volume unlike other platforms). Use scheduling tools.
What it is: Community-based discussion platform. Extremely high-quality audience with near-zero tolerance for promotional content. The highest-trust community engagement channel available to brands — if done right.
Audience: Highly specific per subreddit. Generally skews male, 25–40, technically literate. Will immediately call out inauthenticity.
What performs:
What doesn't perform:
Content rules:
WebFetch BRAND_URL (homepage) and up to 5 sub-pages — prioritise: product, solutions, platform, pricing, about.
Extract and store as BRAND_PROFILE:
Core identity:
Tone of voice:
Social presence (study each platform in ACTIVE_CHANNELS):
For each active platform, WebFetch the profile and study the last 10–15 posts. Document:
Store observations per platform within BRAND_PROFILE.
From BRAND_PROFILE, extract and store as RESEARCH_KEYWORDS:
If ICP_HINT was provided, use it to refine extraction.
Run /last30days with a 4-query plan:
| Query | Focus |
|---|---|
| Query 1 | Top 3–4 primary keywords |
| Query 2 | Pain point keywords — what the ICP is actively struggling with |
| Query 3 | Category/industry trends — what's shifting in their space this month |
| Query 4 | Competitor brand mentions — sentiment, claims, community reactions |
Supplement with WebSearch for:
Store as: RESEARCH_OUTPUT
Synthesize BRAND_PROFILE + RESEARCH_OUTPUT into:
# [BRAND_NAME] — [TARGET_MONTH] Social Media Narrative Brief
## What the Community Is Talking About
[3–5 bullet points — most discussed topics, with platform source cited]
## Key Pain Points and Blockers Surfaced
[3–5 specific frustrations from real posts/threads — cite subreddit or platform]
## Landscape Signals
[What's trending, what competitors are doing, what the ICP is worried about]
## How [BRAND_NAME] Addresses This
[For each pain point — one sentence on how the brand responds]
## Recommended Monthly Narrative
[1–2 sentence theme that runs through all content this month]
## Narrative Pillars (3–4 content themes)
1. [Pillar name] — [one line]
2. [Pillar name] — [one line]
3. [Pillar name] — [one line]
4. [Pillar name] — [one line]
## Tone of Voice for This Month
[Specific guidance — assertive? data-led? empathetic? provocative? why?]
## Platform Strategy Notes
[Any platform-specific angle or opportunity this month — e.g. "TikTok: the [trending sound] is relevant to Pillar 2"]
## Suggested Content Mix
[By platform and format — e.g. "LinkedIn: 60% carousel, 40% static | TikTok: daily short-form, mix of POV and explainer"]PAUSE HERE. Present the brief and ask for approval before proceeding.
Only run after narrative brief is approved.
#### 5a: Post Structure
Create content for each ACTIVE_CHANNEL based on the approved brief.
Base volume: 20 social posts + 4 video reels per month (one video per week). Scale per platform as follows:
| Platform | Monthly volume guidance |
|---|---|
| 20 posts (5/week) | |
| X | 25–30 posts (6–7/week, includes thread openers) |
| Instagram Feed | 12–16 posts (3–4/week) |
| Instagram Reels | 8–12 Reels (2–3/week) |
| Instagram Stories | Daily (5–7 frames/day — plan themes not individual frames) |
| 12–16 posts (3–4/week) | |
| TikTok | 20–30 videos (daily or near-daily) |
| YouTube Shorts | 8–12 Shorts (2–3/week) |
| YouTube Long-form | 2–4 videos (1/week or bi-weekly) |
| Threads | 10–15 posts (3–4/week) |
| 20–40 pins (5–10/week, can repurpose from other channels) | |
| 4–8 posts (1–2/week, value-first) |
For the Excel calendar, organise content by week, with each row = one piece of content on one platform. Group by week, then by platform within each week.
#### 5b: Post Data Structure
For each content piece, define all applicable fields:
{
"num": int,
"week": int, # 1–4
"pillar": str, # narrative pillar
"date": str, # "Mon 1 Jun"
"platform": str, # which platform this piece is for
"topic": str, # what this post is about
"format": str, # format specific to that platform (see Platform Profiles)
"hook": str, # scroll-stopping opening — never starts with brand name
"post_copy": str, # creative copy — what goes ON the image/slide/screen
"carousel_slides": str, # slide-by-slide content if carousel (LinkedIn, IG)
"video_script": str, # production script if video/reel/Short
"tiktok_script": str, # TikTok-specific script (distinct format — see TikTok rules)
"youtube_spec": str, # YouTube-specific: title, thumbnail brief, description, chapters
"stories_plan": str, # Instagram/Facebook Stories frame plan
"pinterest_spec": str, # Pinterest: pin title, description, board, link target
"visual": str, # visual direction brief for the designer
"meme_concept": str, # meme format + panel descriptions (if applicable)
"caption": str, # platform-native caption (written per platform's rules above)
"hashtags": str, # hashtags for platforms that use them
"cta": str, # specific CTA for this post
"reddit_sub": str, # target subreddit (Reddit posts only)
"trending_audio_note": str, # TikTok/Reels: note where trending audio should go
"best_time": str, # optimal posting time for this platform
}#### 5c: Content Rules
Universal rules (apply to every piece, every platform):
Platform-native rules (apply per platform):
Meme concept rules: Use meme formats where they would amplify the message:
| Post type | Best format |
|---|---|
| Ironic stat or data gap | Gru's Plan, This is Fine dog |
| Before/after contrast | Drake Pointing, Distracted Boyfriend |
| Challenging market assumption | Change My Mind, Always Has Been |
| Impossible choice | Two Buttons |
| Perception vs reality | Anakin / Padme |
| Escalating insight | Expanding Brain |
| Single impossible-sounding task | One Does Not Simply |
Each meme_concept must include: FORMAT name, panel-by-panel description, Caption line, STYLE notes.
TikTok-specific script rules:
Video script rules (non-TikTok):
DURATION: ~[N] sec
FORMAT: [e.g. Text-on-screen + AI voiceover / Talking head / B-roll + VO]
STYLE: [visual aesthetic]
TONE: [tone guidance]
MUSIC: [music direction]
[0:00–0:XX] SECTION
VISUAL: [what's on screen]
ON-SCREEN: [text overlays]
VO: [voiceover]Story arc: Hook (0–7s) → Problem (7–25s) → Reframe (25–40s) → Answer (40–52s) → CTA (52–60s).
YouTube long-form spec format:
TITLE: [SEO-optimised, under 60 chars, includes keyword]
THUMBNAIL BRIEF: [what appears — person, text overlay, brand element, contrast notes]
DESCRIPTION LINE 1: [hook + keyword — visible in search]
DESCRIPTION LINE 2: [what they'll learn / why to watch]
CHAPTERS:
0:00 Introduction
[1:30] [Chapter 1 name]
[N:NN] [Chapter N name]
TAGS: [keyword1, keyword2, keyword3, keyword4, keyword5]
END SCREEN CTA: [subscribe / watch next video / visit website]
CARDS: [timestamps where to place mid-video cards + what they point to]#### 5d: Generate and Run the Python Build Script
Write build_calendar.py tailored to ACTIVE_CHANNELS. The script:
openpyxl to generate a styled Excel workbookOUTPUT_DIR/[MONTH-YEAR]-[BRAND_NAME]-Social-Calendar.xlsxRun:
PYTHONUTF8=1 python3 build_calendar.pyTrigger: /social-audit [BrandName] or "audit my social media"
This mode produces a comprehensive audit report of the brand's existing social channels. It works from publicly available data (post performance signals, profile completeness, content patterns) and outputs a scored, actionable report.
If ACTIVE_CHANNELS is not specified, discover which platforms the brand is on:
[BRAND_NAME] site:linkedin.com/company[BRAND_NAME] site:x.com OR twitter.com[BRAND_NAME] site:instagram.com[BRAND_NAME] site:tiktok.com[BRAND_NAME] site:youtube.com[BRAND_NAME] site:facebook.com[BRAND_NAME] site:pinterest.com[BRAND_NAME] site:threads.netFor each platform found, WebFetch the profile. Store as: DISCOVERED_CHANNELS = [list with URLs]
Present the list to the user and confirm: "I found [Brand Name] on [platforms]. Shall I audit all of these?"
For each channel in DISCOVERED_CHANNELS, assess:
Profile Completeness (score /10):
Content Performance Assessment (study last 20–30 posts):
Audience Signals:
Generate a structured audit report:
# [BRAND_NAME] — Social Media Audit Report
Audit Date: [date]
Channels Audited: [list]
---
## Executive Summary
**Overall Social Health Score: [X/100]**
[3–5 sentence summary of the brand's overall social media health — what's working,
what's broken, and the #1 priority to fix]
**Top 3 Wins:**
1. [Specific thing that's working well]
2. [Specific thing that's working well]
3. [Specific thing that's working well]
**Top 3 Critical Issues:**
1. [Specific thing that needs fixing, with impact]
2. [Specific thing that needs fixing, with impact]
3. [Specific thing that needs fixing, with impact]
---
## Platform-by-Platform Audit
### [Platform Name] — Score: [X/100]
**Profile Health:** [X/10]
[Bullet list of what's complete / missing / needs updating]
**Content Performance:**
- Posting frequency: [X/week] vs recommended [Y/week]
- Content mix: [% by format]
- Estimated engagement rate: [%] — [Excellent / Good / Average / Poor]
- Hook quality: [Strong / Weak / Absent]
- CTA usage: [Consistent / Occasional / Never]
- Visual consistency: [Strong / Moderate / Inconsistent]
- Original vs cross-posted: [%/%]
**Best Performing Content Patterns:**
[What the top 3 posts have in common — format, topic, tone, hook style]
**What's Not Working:**
[What the lowest-engagement posts have in common]
**Platform-Specific Observations:**
[Anything unique to this platform's audit — e.g. "LinkedIn posts are burying the hook in line 3"
or "TikTok videos have no on-screen text — most views are sound-off"]
**Recommendations for [Platform]:**
1. [Priority 1 — specific, actionable, measurable]
2. [Priority 2]
3. [Priority 3]
[Repeat for each platform audited]
---
## Cross-Platform Analysis
**Brand Voice Consistency:** [Consistent / Varies / Fragmented]
[Observation on whether the brand sounds the same across platforms]
**Visual Consistency:** [Strong / Moderate / Inconsistent]
[Observation on whether the brand looks the same across platforms]
**Content Repurposing:** [Strategic / Ad hoc / None]
[Is the brand smartly adapting content or just copy-pasting?]
**Platform Prioritisation:** [Assessment of whether effort matches platform opportunity]
---
## Priority Action Plan
| Priority | Action | Platform | Expected Impact | Effort |
|----------|--------|----------|-----------------|--------|
| 1 | [Action] | [Platform] | [Impact] | Low/Med/High |
| 2 | [Action] | [Platform] | [Impact] | Low/Med/High |
| 3 | [Action] | [Platform] | [Impact] | Low/Med/High |
| 4 | [Action] | [Platform] | [Impact] | Low/Med/High |
| 5 | [Action] | [Platform] | [Impact] | Low/Med/High |Save the audit report to: OUTPUT_DIR/[BRAND_NAME]-Social-Audit-[DATE].md
Trigger: /competitor-audit [BrandName] or "analyse my competitors"
This mode studies competitor social channels, builds a comparison matrix, and identifies content gaps and whitespace opportunities the brand can own.
If COMPETITORS list is not provided, discover them:
[BRAND_NAME] competitors alternatives [year]best [brand's product category] tools [year][BRAND_NAME] vs [category] comparisonFrom results, identify 3–6 direct competitors. Present the list to the user for confirmation before proceeding.
Store as: COMPETITOR_LIST = [name, website, social handles per platform]
For each competitor in COMPETITOR_LIST, for each relevant platform:
WebFetch their social profiles and study the last 20–30 posts. For each, document:
Store as: COMPETITOR_PROFILES = {competitor_name: {platform: data}}
Compare BRAND_PROFILE + audit data (if Mode B was run) against COMPETITOR_PROFILES to identify:
Content angle gaps:
Format gaps:
Tone gaps:
Platform gaps:
Engagement gaps:
Narrative gaps:
Generate:
# [BRAND_NAME] — Competitor Intelligence Report
Date: [date]
Competitors Analysed: [list]
---
## Executive Summary
[3–5 sentences on the competitive social media landscape — who's winning, why,
and where the biggest opportunity for the brand lies]
---
## Competitor Comparison Matrix
### LinkedIn
| Metric | [Brand] | [Comp A] | [Comp B] | [Comp C] |
|--------|---------|----------|----------|----------|
| Followers | | | | |
| Posts/week | | | | |
| Est. engagement rate | | | | |
| Primary format | | | | |
| Tone | | | | |
| Top content topics | | | | |
| Hashtag strategy | | | | |
[Repeat matrix for each platform where 2+ competitors are active]
---
## What's Working for Competitors
### [Competitor A]
**Platform:** [Platform] | **Format:** [Format] | **Why it works:** [Observation]
[Specific example of their best-performing content type and why it resonates]
### [Competitor B]
[Same structure]
---
## What's Not Working for Competitors
[Common failures or missed opportunities across multiple competitors]
- [Observation 1 — e.g. "All competitors have weak hooks — first line is always the brand name"]
- [Observation 2]
- [Observation 3]
---
## Whitespace Opportunities
### High-Impact Gaps (own these first)
1. **[Gap name]**
- What it is: [Description]
- Why nobody is doing it: [Reason]
- How to own it: [Specific approach]
- Platforms: [Where to execute]
- Effort: Low / Medium / High
2. **[Gap name]**
[Same structure]
### Medium-Impact Gaps (build toward these)
[2–3 more opportunities, lower urgency]
### Emerging Opportunities (monitor these)
[1–2 signals that aren't proven yet but worth watching]
---
## Recommended Competitive Positioning
**Content positioning:** [How the brand should position its content vs competitors]
**Tone positioning:** [The voice the brand should own that nobody else has]
**Platform positioning:** [Which platforms to prioritise and why]
**Format positioning:** [The formats the brand should lead with]
---
## 30-Day Competitive Action Plan
| Week | Action | Platform | Goal |
|------|--------|----------|------|
| Week 1 | [Action] | [Platform] | [Goal] |
| Week 2 | [Action] | [Platform] | [Goal] |
| Week 3 | [Action] | [Platform] | [Goal] |
| Week 4 | [Action] | [Platform] | [Goal] |Save to: OUTPUT_DIR/[BRAND_NAME]-Competitor-Intel-[DATE].md
Trigger: /social-suite [BrandName] [Month Year]
Runs all three modes in sequence, using findings from each to inform the next:
The narrative brief in Phase 4 of Mode A explicitly incorporates:
This is the most powerful way to run the skill — the calendar is not just research-informed, it's also audit-informed and competition-aware.
| Mode | Output file |
|---|---|
| Mode A | OUTPUT_DIR/[MONTH-YEAR]-[BRAND]-Social-Calendar.xlsx |
| Mode B | OUTPUT_DIR/[BRAND]-Social-Audit-[DATE].md |
| Mode C | OUTPUT_DIR/[BRAND]-Competitor-Intel-[DATE].md |
| Mode D | All three files above |
openpyxl (pip install openpyxl), /last30days skill (optional but strongly recommended for Mode A Phase 3).~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.