adapt-copy
Adapt post copy per platform: character limits, hashtags, tone and the right CTA mechanism. \"rewrite this caption for LinkedIn\"
Plan next month's content calendar from a theme, signals and last month's results. \"what should we post next month\"
Claude Code
$ npx -y skills add indranilbanerjee/socialforge --skill ideate-month --agent claude-code
Codex
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a codex -y
Cursor
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a cursor -y
Gemini CLI
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a gemini-cli -y
GitHub Copilot
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a github-copilot -y
OpenCode
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a opencode -y
Windsurf
$ npx skills add indranilbanerjee/socialforge --skill ideate-month -a windsurf -y
name: ideate-month description: "Plan next month's content calendar from a theme, signals and last month's results. \"what should we post next month\"" argument-hint: "[--brand <name>] [--month <YYYY-MM>] [--theme <text>] [--signals <pasted material>]" effort: high 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's pipeline starts at `parse-calendar` — someone hands it a calendar. This skill is for when nobody has: the client asks "what should this month be about?", and that question is the actual work they are paying for.
The output is a **draft calendar in the exact shape `parse-calendar` ingests**, so an approved plan flows into production with zero re-typing.
1. **The brand profile** (required) — pillars, voice, platforms, compliance rules from `brand-config.json`. No profile → stop and run `/socialforge:brand-setup` first. Ideating without pillars produces generic content for nobody. 2. **A theme or business context** (optional) — a launch, a season, a campaign the client named. 3. **Raw signals** (optional) — pasted news, industry threads, competitor moves, sales-call notes, community questions. Mine them; never use them as filler. Every signal either maps to a pillar and a concrete angle, or it is dropped and listed as dropped, with the reason. 4. **Last month's results** (optional) — measured first, anecdote second:
`python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action wins --brand {brand} --month {last-month}`. If a `performance.json` exists (built by `/socialforge:ingest-performance` from the platform's own analytics export), this returns winners ranked with a sample floor and a margin over the month's median engagement rate — plus an honest `no_clear_wins` when the month was flat. A win here is validated audience demand: plan its compounding follow-ups.
reports as having worked. Usable, but labeled — see the output rules.
first; a two-minute CSV ingest upgrades the whole plan's foundation. 5. **A research brief** (optional) — if `/socialforge:research-month` wrote `output/{brand}/{month}/research-brief.md`, read it as evidence (outlier posts, customer language, competitor ad themes) and carry its basis labels into "What last month validated" and "Signals used / dropped"; its hypotheses are leads, not wins.
1. Read the brand profile. List pillars, platforms, posting cadence. 2. Check the measured path first (`ingest_performance.py --action wins`), then fold in anecdotal reports. Identify the 1–3 clear wins and design **follow-ups that compound them** — the deeper dive, the objection it raised, the adjacent question it opened. Not a repost of the same idea. Honesty rules: a `no_clear_wins` verdict is itself a finding — plan from pillars and signals and say the wins rung had nothing; never promote an `unranked` post (below the sample floor) to a win because it felt good. 3. Mine any signals into angles, each tagged with its pillar. Drop what does not map — and say so. 4. Design 1–2 **series** — connected multi-part sequences with an arc (setup → develop → payoff), each part standing alone but rewarding the follower. A month of disconnected posts is a feed; a series builds a habit. 5. Fill the remaining cadence with one-off posts across pillars. 6. Assign every post a tier honestly: HERO (heavy production, big swing), HUB (core pillar content), HYGIENE (light, frequent presence). 7. Balance platforms per the brand's platform config — not everything everywhere.
# Month plan — {brand}, {YYYY-MM}
## The month's spine
[2-3 sentences: the theme, the wins being compounded, what the month should
have achieved by its last post]
## Series ({n})
### Series A: [name] — [pillar]
Arc: [what part 1 sets up, how it develops, where it pays off]
Parts: [P03, P07, P11] — see calendar below
## What last month validated (if performance was provided)
- [win — measured: 4.1% ER, 2.3x month median] → [the compounding follow-up now on the calendar, with post id]
- [win — anecdotal: client-reported] → [follow-up, labeled so the client knows the basis differs]
## Signals used / dropped (if signals were provided)
- USED: [signal] → [P05: the angle]
- DROPPED: [signal] — [why it does not serve this brand's pillars]
## Draft calendar (calendar-data.json compatible)
```json
{
"month": "YYYY-MM",
"brand": "{brand}",
"status": "DRAFT — needs client approval",
"posts": [
{
"post_id": "P01",
"date": "YYYY-MM-DD",
"platform": "linkedin",
"content_type": "carousel",
"tier": "HUB",
"topic": "[specific enough that a stranger could brief a designer from it]",
"pillar": "[brand pillar]",
"series": "[series name or null]",
"rationale": "[one line: why this post, why this day]"
}
]
}[Which optional inputs were missing and what they would have improved]
## Critical rules - **Every post traces to a pillar, a win, or a signal.** A post that traces to none of them is filler; cut it and say the cadence target was not met rather than padding. - **Topics must be briefable.** "5 mistakes agencies make with reporting (carousel, one mistake per slide)" is a topic. "Engagement post" is not. - **At least one series per month.** Disconnected posts build reach at best; a series builds return visits. - **Wins get follow-up
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…