finalize-month
Skill43 starsChanged 4 months agoMITView on GitHub
Finalize the month: package approved content into the delivery folder with copy files and manifest. \"package the month for the client\"
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
- full-pipelineSkill
- generate-videoSkill
- ideate-monthSkill
- index-assetsSkill
- ingest-performanceSkill
- manage-reviewsSkill
- match-assetsSkill
- model-checkSkill
- parse-calendarSkill
- price-checkSkill
- render-carouselsSkill
- research-monthSkill
- setupSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 3 are distinctive, and 3 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.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 33
All posts must be FINAL status (or --force to skip unapproved)
- Distinctive: line 35
All compliance checks passed
- Very specific: line 36
All required approvals obtained per approval-chain.json
- Very specific: line 39
If any posts are not FINAL: "3 posts still pending approval.
- Distinctive: line 62
Verify all approval gates
- Distinctive: line 71
Only if the user asks: the optional scheduler hand-off below
≈ “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:finalize-month — Month Finalizer
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).
Package all approved posts into the organized delivery folder structure.
The user starts this skill: it is not model-invocable (disable-model-invocation: true), because it copies the delivery, can upload it and send a completion message, and offers the scheduler hand-off. An orchestrator that reaches this step tells the user to run /socialforge:finalize (or /socialforge:finalize-month) and stops.
Execution gate
Packaging copies and renames files, and steps 5-6 can upload to a Drive and send a completion message. After the Step 0 delivery audit passes, show an Execution Summary (posts packaged, any force-finalized posts, destination folder, whether a Drive upload and a notification will happen and to whom) and proceed only on an explicit yes; any other reply cancels with nothing written or sent. --force still needs the user to have typed it.
Pre-Finalization Check
Step 0 — run the delivery audit, before any packaging:
python "${CLAUDE_PLUGIN_ROOT}/scripts/delivery_audit.py" --brand {brand} --month {YYYY-MM}It re-derives the month's claims from the ledger and the disk: every status in the vocabulary, revision history landing on the recorded status, no ghost posts the calendar never knew, no gate bypassed on the way to delivery (force_finalized is surfaced loudly, not left as a buried flag), every FINAL post's referenced file existing and non-empty, the failure log loadable, and cost totals honest about incompleteness. Exit 1 means the delivery is claiming something the disk does not support — resolve the findings before packaging, never around them. The verdict lands in delivery-audit.json beside the tracker.
Then:
- All posts must be FINAL status (or --force to skip unapproved)
WARNING:
--forcebypasses ALL approval gates. Use only in emergencies, and only when the user has typed--force(or explicitly said to force-finalize) in this conversation — never add it on your own initiative, including when this skill was invoked without the user typing its command (hosts such as Codex ignoredisable-model-invocation). All force-finalized posts are logged withforce_finalized: truein status-tracker.json for audit trail — and the delivery audit reports every one of them as a violation the client-facing record must acknowledge. - All compliance checks passed
- All required approvals obtained per approval-chain.json
- Calendar document assembled
If any posts are not FINAL: "3 posts still pending approval. Finalize anyway with --force, or resolve pending items first."
Final Folder Structure
FINAL/
├── 00-Calendar-Document/
│ └── {brand}-{month}-calendar.json # delivery manifest; DOCX conversion is a manual step
├── 01-Ready-to-Publish/
│ └── Week-{N}/
│ └── {date}-Post{id}-{title}/
│ └── {platform}/
│ ├── image-{WxH}.png
│ ├── copy.txt
│ └── preview.png
├── 02-Carousels/
├── 03-Video-Production-Kit/
├── 04-Stories-Shorts/
├── 05-Review-Gallery/
├── 06-Publishing-Schedule/
└── 07-Production-Checklist/Process
- Verify all approval gates
- Organize files into folder structure
- Generate publishing schedule (dates + times + platforms)
- Generate production checklist (remaining manual tasks)
- Upload to Google Drive (if connected)
- Send completion notification via Slack/email
- Remind the user: once the month has run, ingest its analytics export with
/socialforge:ingest-performance— that is what lets next month's/socialforge:ideate-monthcompound measured wins instead of memory - Only if the user asks: the optional scheduler hand-off below
Optional: hand off to a scheduler (opt-in)
Finalizing is complete without this. Offer it only when the user asks and a scheduler connector (~~scheduler) is already connected; the catalog entry is postiz in .mcp.json.connectors-reference, and nothing connects by default. SocialForge never schedules or publishes on its own initiative.
- Preconditions. The Step 0 delivery audit passed and every post to be handed off is FINAL. A post that was force-finalized is handed off only after the user re-confirms that post by id.
- Show the exact batch before any scheduler call: per post, the id, the channel/account, the date and time, the copy exactly as it will post, the media file, and which posts used AI generation so the platform-native AI-content label is set where it applies (
references/content-credentials-by-platform.md). - Explicit approval for exactly that batch. The approval names the posts and the times. Changing any post, channel or time is a new approval, and "the folder looks good" is not approval to schedule.
- Say which action you are asking for. The Postiz MCP's scheduling tool can schedule, save a draft, or publish immediately (docs.postiz.com/mcp/introduction, checked 2026-10-04). Default to a draft or a scheduled post; publish immediately only for a post the user named and said to publish now.
- Record what the scheduler returned (post ids, channel, time) next to
06-Publishing-Schedule/. If a call fails, report the failure; never retry blind and never say "scheduled" for a post whose call did not return success.
Connector facts, checked 2026-10-04: Postiz is open source and self-hostable (AGPL-3.0, github.com/gitroomhq/postiz-app), connects to Claude through OAuth at the URL in the catalog entry (postiz.com/claude), and is listed in Anthropic's plugin directory (claude.com/plugins/postiz). Postiz's directory connector leaves out its media-generation tools, per Postiz's own page; SocialForge does not use them.
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.

