ideate-month
Plan next month's content calendar from a theme, signals and last month's results. "what should we post next month"
- License 许可
- MIT
- 最近更新
- 2026-11-08
- Stars
- ★ 43
- Forks
- 9
01 前言 Front Matter
- name
- ideate-month
- effort
- high
- 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>]
- user-invocable
- true
03 SKILL.md 正文
/socialforge:ideate-month — the month before the calendar exists
Script location. If your host does not set
${CLAUDE_PLUGIN_ROOT}, the scripts are in this plugin'sscripts/folder, next toskills/. Run them with Python 3.10 or newer:python, orpython3wherepythonis 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.
Inputs — use whichever exist, say which were missing
- The brand profile (required) — pillars, voice, platforms, compliance
rules from
brand-config.json. No profile → stop and run/socialforge:brand-setupfirst. Ideating without pillars produces generic content for nobody. - A theme or business context (optional) — a launch, a season, a campaign the client named.
- 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.
- Last month's results (optional) — measured first, anecdote second:
- Measured: run
python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action wins --brand {brand} --month {last-month}. If aperformance.jsonexists (built by/socialforge:ingest-performancefrom 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 honestno_clear_winswhen the month was flat. A win here is validated audience demand: plan its compounding follow-ups. - Anecdotal: the review gallery, status tracker, or anything the client reports as having worked. Usable, but labeled — see the output rules.
- If the measured path has no data, say so and offer to ingest an export first; a two-minute CSV ingest upgrades the whole plan's foundation.
- Measured: run
- A research brief (optional) — if
/socialforge:research-monthwroteoutput/{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.
Process
- Read the brand profile. List pillars, platforms, posting cadence.
- 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: ano_clear_winsverdict is itself a finding — plan from pillars and signals and say the wins rung had nothing; never promote anunrankedpost (below the sample floor) to a win because it felt good. - Mine any signals into angles, each tagged with its pillar. Drop what does not map — and say so.
- 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.
- Fill the remaining cadence with one-off posts across pillars.
- Assign every post a tier honestly: HERO (heavy production, big swing), HUB (core pillar content), HYGIENE (light, frequent presence).
- Balance platforms per the brand's platform config — not everything everywhere.
Output structure
# 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]"
}
]
}
What I did not have
[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-ups, not reposts.** The follow-up answers what the win
opened, from the validated angle — never the same post again slightly
reworded.
- **Tier honestly.** A month of all-HERO is a burnout plan; all-HYGIENE is
invisible. Typical shape: 1–2 HERO, 40–50% HUB, the rest HYGIENE.
- **The draft is a draft.** Output carries `status: DRAFT` and this skill never
writes calendar-data.json to the workspace itself — the client approves, then
`/socialforge:parse-calendar` ingests it as the approved source of truth.
- **State what was missing.** A plan built without performance data or signals
is a weaker plan; the client should know that, not discover it.
## Pairs with
- `/socialforge:ingest-performance` — feeds the wins rung from the platform's own numbers; run it on last month before planning this one
- `/socialforge:parse-calendar` — ingests the approved draft verbatim
- `/socialforge:reactive-post` — mid-month trend response; this skill plans, that one reacts
- `/socialforge:price-check` — quote the month's video load before the client approves it
04 同仓库更多 Skills
setup
One-time setup of image and video generation credentials, verified before use. "set up my API keys"
research-month
Turn supplied comment exports and competitor ads into a what's-working brief before planning a month. "analyse these competitor ads and comments"
render-carousels
Render multi-slide carousels from HTML templates into platform-ready images or PDF. "build the carousel slides"
price-check
Price a generation run from live provider rates before any spend. "how much will this cost"
parse-calendar
Parse a content calendar or plan from DOCX, XLSX, Notion or pasted text into structured posts. "load this month's calendar"
model-check
Find the best current model for a capability from the live catalogue and record its source. "which model should we use"