[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K5CGWS9VWERW7Q2VA656WB":3,"skill-same:01M6K5CGWS9VWERW7Q2VA656WB":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":55,"ownerDescription":57,"updatedAt":58,"install":59,"resources":71},"01M6K5CGWS9VWERW7Q2VA656WB","ideate-month",null,"Plan next month's content calendar from a theme, signals and last month's results. \"what should we post next month\"","indranilbanerjee\u002Fsocialforge","indranilbanerjee","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1857369?v=4","01M6K5AJ210R87KXT6WF07RC4T","Indranil Banerjee","01M6K5AJ6FXW6Y1CDESBGX191P",43,"MIT","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fideate-month\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"ideate","ideate month","name","content","high","true","last","mm","theme","post","material","plan","signals","next","content calendar","calendar","results","brand","text","2026-11-10 10:12:30",false,"---\nname: ideate-month\ndescription: \"Plan next month's content calendar from a theme, signals and last month's results. \\\"what should we post next month\\\"\"\nargument-hint: \"[--brand \u003Cname>] [--month \u003CYYYY-MM>] [--theme \u003Ctext>] [--signals \u003Cpasted material>]\"\neffort: high\nuser-invocable: true\n---\n\n# \u002Fsocialforge:ideate-month — the month before the calendar exists\n\n> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts\u002F` folder, next to `skills\u002F`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).\n\nSocialForge's pipeline starts at `parse-calendar` — someone hands it a calendar.\nThis skill is for when nobody has: the client asks \"what should this month be\nabout?\", and that question is the actual work they are paying for.\n\nThe output is a **draft calendar in the exact shape `parse-calendar` ingests**,\nso an approved plan flows into production with zero re-typing.\n\n## Inputs — use whichever exist, say which were missing\n\n1. **The brand profile** (required) — pillars, voice, platforms, compliance\n   rules from `brand-config.json`. No profile → stop and run\n   `\u002Fsocialforge:brand-setup` first. Ideating without pillars produces generic\n   content for nobody.\n2. **A theme or business context** (optional) — a launch, a season, a campaign\n   the client named.\n3. **Raw signals** (optional) — pasted news, industry threads, competitor\n   moves, sales-call notes, community questions. Mine them; never use them as\n   filler. Every signal either maps to a pillar and a concrete angle, or it is\n   dropped and listed as dropped, with the reason.\n4. **Last month's results** (optional) — measured first, anecdote second:\n   - **Measured**: run\n     `python \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fingest_performance.py\" --action wins --brand {brand} --month {last-month}`.\n     If a `performance.json` exists (built by `\u002Fsocialforge:ingest-performance`\n     from the platform's own analytics export), this returns winners ranked\n     with a sample floor and a margin over the month's median engagement rate —\n     plus an honest `no_clear_wins` when the month was flat. A win here is\n     validated audience demand: plan its compounding follow-ups.\n   - **Anecdotal**: the review gallery, status tracker, or anything the client\n     reports as having worked. Usable, but labeled — see the output rules.\n   - If the measured path has no data, say so and offer to ingest an export\n     first; a two-minute CSV ingest upgrades the whole plan's foundation.\n5. **A research brief** (optional) — if `\u002Fsocialforge:research-month` wrote `output\u002F{brand}\u002F{month}\u002Fresearch-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 \u002F dropped\"; its hypotheses are leads, not wins.\n\n## Process\n\n1. Read the brand profile. List pillars, platforms, posting cadence.\n2. Check the measured path first (`ingest_performance.py --action wins`), then\n   fold in anecdotal reports. Identify the 1–3 clear wins and design\n   **follow-ups that compound them** — the deeper dive, the objection it\n   raised, the adjacent question it opened. Not a repost of the same idea.\n   Honesty rules: a `no_clear_wins` verdict is itself a finding — plan from\n   pillars and signals and say the wins rung had nothing; never promote an\n   `unranked` post (below the sample floor) to a win because it felt good.\n3. Mine any signals into angles, each tagged with its pillar. Drop what does\n   not map — and say so.\n4. Design 1–2 **series** — connected multi-part sequences with an arc (setup →\n   develop → payoff), each part standing alone but rewarding the follower. A\n   month of disconnected posts is a feed; a series builds a habit.\n5. Fill the remaining cadence with one-off posts across pillars.\n6. Assign every post a tier honestly: HERO (heavy production, big swing), HUB\n   (core pillar content), HYGIENE (light, frequent presence).\n7. Balance platforms per the brand's platform config — not everything\n   everywhere.\n\n## Output structure\n\n```\n# Month plan — {brand}, {YYYY-MM}\n\n## The month's spine\n[2-3 sentences: the theme, the wins being compounded, what the month should\nhave achieved by its last post]\n\n## Series ({n})\n### Series A: [name] — [pillar]\nArc: [what part 1 sets up, how it develops, where it pays off]\nParts: [P03, P07, P11] — see calendar below\n\n## What last month validated (if performance was provided)\n- [win — measured: 4.1% ER, 2.3x month median] → [the compounding follow-up now on the calendar, with post id]\n- [win — anecdotal: client-reported] → [follow-up, labeled so the client knows the basis differs]\n\n## Signals used \u002F dropped (if signals were provided)\n- USED: [signal] → [P05: the angle]\n- DROPPED: [signal] — [why it does not serve this brand's pillars]\n\n## Draft calendar (calendar-data.json compatible)\n```json\n{\n  \"month\": \"YYYY-MM\",\n  \"brand\": \"{brand}\",\n  \"status\": \"DRAFT — needs client approval\",\n  \"posts\": [\n    {\n      \"post_id\": \"P01\",\n      \"date\": \"YYYY-MM-DD\",\n      \"platform\": \"linkedin\",\n      \"content_type\": \"carousel\",\n      \"tier\": \"HUB\",\n      \"topic\": \"[specific enough that a stranger could brief a designer from it]\",\n      \"pillar\": \"[brand pillar]\",\n      \"series\": \"[series name or null]\",\n      \"rationale\": \"[one line: why this post, why this day]\"\n    }\n  ]\n}\n```\n\n## What I did not have\n[Which optional inputs were missing and what they would have improved]\n```\n\n## Critical rules\n\n- **Every post traces to a pillar, a win, or a signal.** A post that traces to\n  none of them is filler; cut it and say the cadence target was not met rather\n  than padding.\n- **Topics must be briefable.** \"5 mistakes agencies make with reporting\n  (carousel, one mistake per slide)\" is a topic. \"Engagement post\" is not.\n- **At least one series per month.** Disconnected posts build reach at best; a\n  series builds return visits.\n- **Wins get follow-ups, not reposts.** The follow-up answers what the win\n  opened, from the validated angle — never the same post again slightly\n  reworded.\n- **Tier honestly.** A month of all-HERO is a burnout plan; all-HYGIENE is\n  invisible. Typical shape: 1–2 HERO, 40–50% HUB, the rest HYGIENE.\n- **The draft is a draft.** Output carries `status: DRAFT` and this skill never\n  writes calendar-data.json to the workspace itself — the client approves, then\n  `\u002Fsocialforge:parse-calendar` ingests it as the approved source of truth.\n- **State what was missing.** A plan built without performance data or signals\n  is a weaker plan; the client should know that, not discover it.\n\n## Pairs with\n\n- `\u002Fsocialforge:ingest-performance` — feeds the wins rung from the platform's own numbers; run it on last month before planning this one\n- `\u002Fsocialforge:parse-calendar` — ingests the approved draft verbatim\n- `\u002Fsocialforge:reactive-post` — mid-month trend response; this skill plans, that one reacts\n- `\u002Fsocialforge:price-check` — quote the month's video load before the client approves it\n","# \u002Fsocialforge:ideate-month — the month before the calendar exists\n\n> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts\u002F` folder, next to `skills\u002F`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).\n\nSocialForge's pipeline starts at `parse-calendar` — someone hands it a calendar.\nThis skill is for when nobody has: the client asks \"what should this month be\nabout?\", and that question is the actual work they are paying for.\n\nThe output is a **draft calendar in the exact shape `parse-calendar` ingests**,\nso an approved plan flows into production with zero re-typing.\n\n## Inputs — use whichever exist, say which were missing\n\n1. **The brand profile** (required) — pillars, voice, platforms, compliance\n   rules from `brand-config.json`. No profile → stop and run\n   `\u002Fsocialforge:brand-setup` first. Ideating without pillars produces generic\n   content for nobody.\n2. **A theme or business context** (optional) — a launch, a season, a campaign\n   the client named.\n3. **Raw signals** (optional) — pasted news, industry threads, competitor\n   moves, sales-call notes, community questions. Mine them; never use them as\n   filler. Every signal either maps to a pillar and a concrete angle, or it is\n   dropped and listed as dropped, with the reason.\n4. **Last month's results** (optional) — measured first, anecdote second:\n   - **Measured**: run\n     `python \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fingest_performance.py\" --action wins --brand {brand} --month {last-month}`.\n     If a `performance.json` exists (built by `\u002Fsocialforge:ingest-performance`\n     from the platform's own analytics export), this returns winners ranked\n     with a sample floor and a margin over the month's median engagement rate —\n     plus an honest `no_clear_wins` when the month was flat. A win here is\n     validated audience demand: plan its compounding follow-ups.\n   - **Anecdotal**: the review gallery, status tracker, or anything the client\n     reports as having worked. Usable, but labeled — see the output rules.\n   - If the measured path has no data, say so and offer to ingest an export\n     first; a two-minute CSV ingest upgrades the whole plan's foundation.\n5. **A research brief** (optional) — if `\u002Fsocialforge:research-month` wrote `output\u002F{brand}\u002F{month}\u002Fresearch-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 \u002F dropped\"; its hypotheses are leads, not wins.\n\n## Process\n\n1. Read the brand profile. List pillars, platforms, posting cadence.\n2. Check the measured path first (`ingest_performance.py --action wins`), then\n   fold in anecdotal reports. Identify the 1–3 clear wins and design\n   **follow-ups that compound them** — the deeper dive, the objection it\n   raised, the adjacent question it opened. Not a repost of the same idea.\n   Honesty rules: a `no_clear_wins` verdict is itself a finding — plan from\n   pillars and signals and say the wins rung had nothing; never promote an\n   `unranked` post (below the sample floor) to a win because it felt good.\n3. Mine any signals into angles, each tagged with its pillar. Drop what does\n   not map — and say so.\n4. Design 1–2 **series** — connected multi-part sequences with an arc (setup →\n   develop → payoff), each part standing alone but rewarding the follower. A\n   month of disconnected posts is a feed; a series builds a habit.\n5. Fill the remaining cadence with one-off posts across pillars.\n6. Assign every post a tier honestly: HERO (heavy production, big swing), HUB\n   (core pillar content), HYGIENE (light, frequent presence).\n7. Balance platforms per the brand's platform config — not everything\n   everywhere.\n\n## Output structure\n\n```\n# Month plan — {brand}, {YYYY-MM}\n\n## The month's spine\n[2-3 sentences: the theme, the wins being compounded, what the month should\nhave achieved by its last post]\n\n## Series ({n})\n### Series A: [name] — [pillar]\nArc: [what part 1 sets up, how it develops, where it pays off]\nParts: [P03, P07, P11] — see calendar below\n\n## What last month validated (if performance was provided)\n- [win — measured: 4.1% ER, 2.3x month median] → [the compounding follow-up now on the calendar, with post id]\n- [win — anecdotal: client-reported] → [follow-up, labeled so the client knows the basis differs]\n\n## Signals used \u002F dropped (if signals were provided)\n- USED: [signal] → [P05: the angle]\n- DROPPED: [signal] — [why it does not serve this brand's pillars]\n\n## Draft calendar (calendar-data.json compatible)\n```json\n{\n  \"month\": \"YYYY-MM\",\n  \"brand\": \"{brand}\",\n  \"status\": \"DRAFT — needs client approval\",\n  \"posts\": [\n    {\n      \"post_id\": \"P01\",\n      \"date\": \"YYYY-MM-DD\",\n      \"platform\": \"linkedin\",\n      \"content_type\": \"carousel\",\n      \"tier\": \"HUB\",\n      \"topic\": \"[specific enough that a stranger could brief a designer from it]\",\n      \"pillar\": \"[brand pillar]\",\n      \"series\": \"[series name or null]\",\n      \"rationale\": \"[one line: why this post, why this day]\"\n    }\n  ]\n}\n```\n\n## What I did not have\n[Which optional inputs were missing and what they would have improved]\n```\n\n## Critical rules\n\n- **Every post traces to a pillar, a win, or a signal.** A post that traces to\n  none of them is filler; cut it and say the cadence target was not met rather\n  than padding.\n- **Topics must be briefable.** \"5 mistakes agencies make with reporting\n  (carousel, one mistake per slide)\" is a topic. \"Engagement post\" is not.\n- **At least one series per month.** Disconnected posts build reach at best; a\n  series builds return visits.\n- **Wins get follow-ups, not reposts.** The follow-up answers what the win\n  opened, from the validated angle — never the same post again slightly\n  reworded.\n- **Tier honestly.** A month of all-HERO is a burnout plan; all-HYGIENE is\n  invisible. Typical shape: 1–2 HERO, 40–50% HUB, the rest HYGIENE.\n- **The draft is a draft.** Output carries `status: DRAFT` and this skill never\n  writes calendar-data.json to the workspace itself — the client approves, then\n  `\u002Fsocialforge:parse-calendar` ingests it as the approved source of truth.\n- **State what was missing.** A plan built without performance data or signals\n  is a weaker plan; the client should know that, not discover it.\n\n## Pairs with\n\n- `\u002Fsocialforge:ingest-performance` — feeds the wins rung from the platform's own numbers; run it on last month before planning this one\n- `\u002Fsocialforge:parse-calendar` — ingests the approved draft verbatim\n- `\u002Fsocialforge:reactive-post` — mid-month trend response; this skill plans, that one reacts\n- `\u002Fsocialforge:price-check` — quote the month's video load before the client approves it\n",{"name":5,"effort":28,"description":7,"argument-hint":48,"user-invocable":49},"[--brand \u003Cname>] [--month \u003CYYYY-MM>] [--theme \u003Ctext>] [--signals \u003Cpasted material>]",true,"main","552dba358f148de8439795c5e8becb57f9943ec8","skills\u002Fideate-month",9,"https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge","https:\u002F\u002Findranil.in","https:\u002F\u002Fgithub.com\u002Findranilbanerjee","Builder across trustworthy AI, agentic systems, and marketing engineering. Security roots; focused on human capability amplified by software.","2026-11-08 01:03:55",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":49},[61,64,67],{"tool":62,"command":63},"npx","npx skills add indranilbanerjee\u002Fsocialforge --skill ideate-month",{"tool":65,"command":66},"bunx","bunx skills add indranilbanerjee\u002Fsocialforge --skill ideate-month",{"tool":68,"command":69},"pnpm","pnpm dlx skills add indranilbanerjee\u002Fsocialforge --skill ideate-month","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fideate-month\u002FSKILL.md",[],[73,100,120,145,163,189],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":43},"01M6K5E21QEYHCT7Z2HA4AQ804","setup","One-time setup of image and video generation credentials, verified before use. \"set up my API keys\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fsetup\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[75,83,84,85,86,87,29,88,89,90,91,92,93,94,95,96,97,98,99],"video generation","api keys","verified","keys","my","reset","generation","time","fallback","up","use","Video","api","credentials","SET","status","image",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":109,"publishedAt":43},"01M6K5DWRWPF1ZHZ93VE8Z1NB4","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\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fresearch-month\u002FSKILL.md",[106],{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[110,111,112,113,41,42,114,115,116,117,118,26,28,29,119,31],"research month","research","csv","export","ads","brief","planning","screenshots","comments","posts",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":129,"publishedAt":43},"01M6K5DQ47966ZG9N916VA7Y68","render-carousels","Render multi-slide carousels from HTML templates into platform-ready images or PDF. \"build the carousel slides\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Frender-carousels\u002FSKILL.md",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[130,131,132,133,134,135,33,136,28,29,137,138,139,140,141,142,143,144],"render carousels","render","platform","type","id","carousel","multi","template","images","ready","html","slides","templates","PDF","build",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":43},"01M6K5DHDFMZAK4BN2QFEVM614","price-check","Price a generation run from live provider rates before any spend. \"how much will this cost\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fprice-check\u002FSKILL.md",[],[152,153,154,155,29,156,26,134,89,157,158,159,160,161,162],"check","price","price check","live","compare","provider","cost","model","how","batch","run",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":178,"publishedAt":43},"01M6K5DDGBCGTN4SBEHZD5G9H8","parse-calendar","Parse a content calendar or plan from DOCX, XLSX, Notion or pasted text into structured posts. \"load this month's calendar\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fparse-calendar\u002FSKILL.md",[169,170,173],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":171,"categoryName":172,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":174,"categoryName":175,"taxonomyType":176,"taxonomyTypeDesc":177},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[179,39,119,180,181,38,42,35,182,27,183,184,185,186,187,188,29],"parse calendar","URL","structured","file","notion","xlsx","docx","paste","path","load",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":43},"01M6K5D9NZ6QEP1F5M9P8EXM7E","model-check","Find the best current model for a capability from the live catalogue and record its source. \"which model should we use\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fmodel-check\u002FSKILL.md",[],[196,159,152,197,198,199,29,200,26,155,201,157,93,202],"model check","source","for","which","kind","record","find"]