parse-calendar
Skill43 starsChanged 4 months agoMITView on GitHub
Parse a content calendar or plan from DOCX, XLSX, Notion or pasted text into structured posts. \"load this month's calendar\"
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- adapt-copySkill
- assemble-documentSkill
- brand-managerSkill
- build-review-gallerySkill
- c2pa-signSkill
- compose-creativeSkill
- create-previewsSkill
- finalize-monthSkill
- full-pipelineSkill
- generate-videoSkill
- ideate-monthSkill
- index-assetsSkill
- ingest-performanceSkill
- manage-reviewsSkill
- match-assetsSkill
- model-checkSkill
- price-checkSkill
- render-carouselsSkill
- research-monthSkill
- setupSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 28
Every post in the calendar must have (or the system will ask for missing ones):
- Distinctive: line 73
Ask: "Would you like to:
- Distinctive: line 82
If format is unrecognized: Ask user to describe the structure, then parse adaptively.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/socialforge:parse-calendar — Calendar Parser
Parse a monthly social media content calendar into structured JSON that drives the entire production pipeline.
Context efficiency
Asset-heavy skill. Grep before Read the asset catalog (${CLAUDE_PLUGIN_DATA}/socialforge/brands/<brand>/asset-index.json) — never list the asset directory. Reference generated images / videos by path, not by loading metadata. Brand profile loads once per session.
Supported Formats
| Format | How It Works |
| DOCX | Read tables and structured text from Word documents |
| XLSX | Read rows from Excel spreadsheets (one row per post) |
| Notion | Read from Notion database via MCP (requires Notion connector) |
| Structured text | Parse markdown or plain text with consistent formatting — pasted inline (--paste) or from a .txt path |
Required Fields Per Post
Every post in the calendar must have (or the system will ask for missing ones):
| Field | Required | Description |
| post_id | Auto-generated | Unique identifier (e.g., P01, P02) |
| date | Yes | Publishing date (YYYY-MM-DD) |
| platform | Yes | Target platform(s) — linkedin, instagram, x, facebook, etc. |
| content_type | Yes | static, carousel, video, story, reel, text_only |
| tier | Yes | HERO, HUB, or HYGIENE |
| topic | Yes | What the post is about |
| caption_brief | Yes | Brief description of the copy direction |
| visual_brief | Recommended | What the image should show |
| hashtags | Optional | Post-specific hashtags (brand hashtags added automatically) |
| cta | Optional | Call-to-action text or link |
| campaign | Optional | Campaign this post belongs to |
| notes | Optional | Special instructions |
Process
- Detect format — Check file extension or URL pattern
- Extract posts — Parse each post entry from the source
- Validate fields — Check required fields present. For missing fields, ask the user.
- Normalize — Standardize dates, platform names, content types to schema format
- Assign post IDs — Sequential (P01, P02, ...) if not already present
- Cross-reference platforms — Check all platforms exist in brand's platform-config.json
- Flag issues — Duplicate dates, missing briefs, unsupported content types
- Save — Write calendar-data.json to
${CLAUDE_PLUGIN_DATA}/socialforge/output/{brand}/{YYYY-MM}/(falls back to~/socialforge-workspace/output/...when${CLAUDE_PLUGIN_DATA}is unset)
Output
Calendar parsed: 28 posts for April 2026
LinkedIn: 12 posts (4 carousels, 6 static, 2 video)
Instagram: 10 posts (3 carousels, 4 reels, 3 static)
X: 6 posts (all text+image)
Issues found: 2
- P14: Missing visual_brief (will need manual input during asset matching)
- P22: Date falls on Sunday — confirm intentional weekend post?
Calendar saved: ${CLAUDE_PLUGIN_DATA}/socialforge/output/acme-corp/2026-04/calendar-data.jsonAfter Parsing
Ask: "Would you like to:
- Match assets to posts? (
/socialforge:match-assets) - Review the parsed calendar first? (I'll show the full post list)
- Fix issues? (I'll walk through each flagged item)"
Timeout & Fallback
- DOCX/XLSX parsing: 30-second timeout. If file is too large, suggest splitting by week.
- Notion: 60-second timeout per database query. If Notion is slow, offer to export and parse locally.
- If format is unrecognized: Ask user to describe the structure, then parse adaptively.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

