adapt-copy
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Turn a platform analytics export into per-post performance records and ranked winners. \"which of last month's posts worked\"
Claude Code
$ npx -y skills add indranilbanerjee/socialforge --skill ingest-performance --agent claude-code
Codex
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a codex -y
Cursor
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a cursor -y
Gemini CLI
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a gemini-cli -y
GitHub Copilot
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a github-copilot -y
OpenCode
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a opencode -y
Windsurf
$ npx skills add indranilbanerjee/socialforge --skill ingest-performance -a windsurf -y
name: ingest-performance description: "Turn a platform analytics export into per-post performance records and ranked winners. \"which of last month's posts worked\"" argument-hint: "--brand <name> --month <YYYY-MM> [--csv <export.csv>] [--source <label>] [--replace]" effort: medium user-invocable: true
> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skills/`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).
`/socialforge:ideate-month` compounds "what worked last month." Before this skill, that meant whatever someone remembered in the planning call — and memory favors the post that felt good, not the one that performed. This skill turns the platform's own export into the record ideation reads.
Ask the user for the analytics export covering the month. Any CSV works if it has a column identifying the post (`post_id`, `post`, `id`) that matches the calendar's post ids, plus whichever metrics the platform provides (impressions/views, likes/reactions, comments, shares/reposts, saves, clicks, follows — header aliases are normalized automatically). If the export keys posts by URL or caption instead of the calendar id, help the user add a `post_id` column first — matching is by calendar id, deliberately: wins must map back to the topics and pillars that produced them.
python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action ingest \
--brand {brand} --month {YYYY-MM} --csv {export.csv} --source "{platform} export"`output/{brand}/{month}/performance.json`, each row tagged with its source label, and each source records the sha256 of its CSV. Different files append — one CSV per platform is normal.
`"status": "already_ingested"` (exit 0) and name the earlier source; nothing is added. That is not an error — report "no new export".
the posts of last week's (month-to-date totals), ingest every snapshot under one constant `--source` label with `--replace`: rows previously ingested under that label are removed first, so only the latest snapshot counts. Other labels are untouched. Ingest only the **newest** export under `--replace`: it trusts the file it is given, so an older file ingested after a newer one replaces the newer numbers. `--replace` refuses a label ingested before rows carried their source label (use a new label or re-ingest the month), and a file that matches no calendar post leaves the old snapshot in place.
the user the unmatched list; a typo'd id is data lost from the wins rung.
python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action wins \
--brand {brand} --month {YYYY-MM}The ranking is deliberately conservative:
win, only noise. Below-floor posts are reported as `unranked` with the reason.
must beat the month, not merely top a flat list.
and the post lands in `unranked`, not at the bottom of the ranking.
Compounding a non-win manufactures a false signal for next month's plan.
Relay the wins output to `/socialforge:ideate-month` (its "last month's results" input). Winners carry their topic, pillar, tier, and `vs_month_median` multiple, so ideation can design follow-ups that compound the validated angle — and label each one `measured` in "What last month validated". Anything the client reports that is NOT in the ranked output is still usable, labeled `anecdotal`.
Your client wants 30 days of social content across six platforms with brand-faithful imagery, AI-generated video, and provenance signed for EU markets. You have five days.
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Assemble the month-end delivery manifest: approved posts, copy, files and metadata as one JSON. \"build the delivery manifest\"
Set up or update a brand profile: colors, fonts, logo, voice, platforms, compliance rules. \"update our brand colors\"
Build the shareable HTML review gallery of every generated post for team or client. \"make me a gallery page\"
Embed C2PA content credentials and an AI-disclosure record in AI-generated assets. \"sign these images for AI disclosure\"
Compose just the creative (image or video) for a calendar post, in four modes. \"make the visual for this post\"
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…