
Social Media Manager
Generate a weighted multi-platform social content calendar from JSON config without installing extra Python packages.
Overview
Social Media Manager is an agent skill for the Grow phase that generates weighted, multi-platform social content calendars from a JSON config using a stdlib-only Python CLI.
Install
npx skills add https://github.com/alirezarezvani/claude-skills --skill social-media-managerWhat is this skill?
- stdlib-only Python CLI—demo mode or --config config.json
- Pillar weights and per-platform posts_per_week and best_days scheduling
- Exports via --json or --markdown for agent or human editing
- --start and --weeks overrides for rolling campaign windows
- 100% Python stdlib—no pip installs required
- Configurable pillars with per-platform posts_per_week and best_days
Adoption & trust: 755 installs on skills.sh; 17.5k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You know your pillars and channels but lack a repeatable weekly schedule that balances themes without another subscription tool.
Who is it for?
Indie founders planning 2–8 weeks of LinkedIn and X cadence from pillar strategy before hiring or automating social ops.
Skip if: Teams needing AI-written posts, ad creative, or live API scheduling into Buffer or Hootsuite—use integrations or copy skills instead.
When should I use this skill?
User needs a multi-week social content calendar from pillars and platforms, or runs social_calendar_generator.py with config.json, --json, or --markdown.
What do I get? / Deliverables
You get a dated calendar aligned to pillar weights and platform rules, exportable as JSON or Markdown for copy and publishing workflows.
- Console or JSON structured calendar
- Markdown calendar export via --markdown
Recommended Skills
Journey fit
Canonical shelf is Grow because the output is an ongoing editorial calendar for distribution channels, not product build or launch-day ops. Content subphase fits pillar-based posting plans across LinkedIn, X, and similar surfaces.
How it compares
A local calendar generator, not a full social suite or referral-growth playbook.
Common Questions / FAQ
Who is social-media-manager for?
Solo and indie builders shipping products who want a structured posting rhythm across platforms without paid scheduling software or extra pip dependencies.
When should I use social-media-manager?
Use it in Grow when you are planning content calendars, balancing educational vs product pillars, or exporting a month of slots before launch distribution ramps.
Is social-media-manager safe to install?
Review the Security Audits panel on this Prism page and inspect the script locally; it uses argparse and filesystem reads for config only—no network calls in the documented usage.
SKILL.md
READMESKILL.md - Social Media Manager
#!/usr/bin/env python3 """ social_calendar_generator.py — Social Media Content Calendar Generator 100% stdlib, no pip installs required. Usage: python3 social_calendar_generator.py # demo mode python3 social_calendar_generator.py --config config.json python3 social_calendar_generator.py --config config.json --json python3 social_calendar_generator.py --config config.json --markdown > calendar.md python3 social_calendar_generator.py --start 2026-04-01 --weeks 4 config.json format: { "pillars": [ {"name": "Educational", "description": "Tips, tutorials, how-tos", "emoji": "🎓", "weight": 3}, {"name": "Inspirational", "description": "Success stories, quotes", "emoji": "✨", "weight": 2}, {"name": "Product", "description": "Features, demos", "emoji": "🛠", "weight": 2}, {"name": "Community", "description": "UGC, shoutouts, polls", "emoji": "🤝", "weight": 1} ], "platforms": [ {"name": "LinkedIn", "posts_per_week": 3, "best_days": ["Monday","Tuesday","Wednesday","Thursday"]}, {"name": "Twitter/X", "posts_per_week": 5, "best_days": ["Monday","Tuesday","Wednesday","Thursday","Friday"]} ], "start_date": "2026-04-07", "weeks": 4 } """ import argparse import json import sys from datetime import date, timedelta from collections import defaultdict # --------------------------------------------------------------------------- # Defaults / sample data # --------------------------------------------------------------------------- DEMO_CONFIG = { "pillars": [ {"name": "Educational", "description": "Tips, tutorials, how-tos", "emoji": "🎓", "weight": 3}, {"name": "Inspirational", "description": "Success stories & quotes", "emoji": "✨", "weight": 2}, {"name": "Product", "description": "Feature demos & updates", "emoji": "🛠 ", "weight": 2}, {"name": "Community", "description": "UGC, polls & shoutouts", "emoji": "🤝", "weight": 1}, ], "platforms": [ { "name": "LinkedIn", "posts_per_week": 3, "best_days": ["Monday", "Tuesday", "Wednesday", "Thursday"], "content_type_hint": "Long-form insights, carousels, thought leadership", }, { "name": "Twitter/X", "posts_per_week": 5, "best_days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "content_type_hint": "Threads, quick tips, hot takes, polls", }, ], "start_date": None, # defaults to next Monday "weeks": 4, } CONTENT_TYPE_HINTS = { "Educational": ["How-to thread", "Quick tip", "Carousel: 5 steps", "Tutorial link"], "Inspirational": ["Quote image", "Success story", "Before/after", "Motivational thread"], "Product": ["Feature demo GIF", "Changelog post", "Use-case spotlight", "Behind the scenes"], "Community": ["Poll", "User shoutout", "Question post", "Community highlight"], } WEEKDAY_NAMES = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] # --------------------------------------------------------------------------- # Pillar scheduler — weighted round-robin # --------------------------------------------------------------------------- def build_pillar_sequence(pillars: list, length: int) -> list: """ Build a balanced pillar rotation of `length` posts using weighted distribution. Uses a deterministic greedy algorithm (no random, reproducible). """ names = [p["name"] for p in pillars] weights = [p.get("weight", 1) for p in pillars] total_w = sum(weights) # Target proportion per pillar targets = [w / total_w for w in weights] sequence = [] counts = [0] * len(pillars) for _ in range(length): # Pick pillar most "behind" its target proportion scores = [] for i, name in enumerate(names):