ingest-performance
Skill43 starsChanged 4 months agoMITView on GitHub
Turn a platform analytics export into per-post performance records and ranked winners. \"which of last month's posts worked\"
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
- 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
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 20
Ask the user for the analytics export covering the month.
- Very specific: line 43
Cumulative exports use
--replace: If the platform's new file repeats the posts of last week's (month-to-date totals), ingest every …
≈ “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:ingest-performance — real numbers into the wins rung
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:ideate-month compounds "what worked last month." Before this
skill, that meant whatever someone remembered in the planning call — and
memory favors the post that felt good, not the one that performed. This skill
turns the platform's own export into the record ideation reads.
Step 1 — Get the export
Ask the user for the analytics export covering the month. Any CSV works if it
has a column identifying the post (post_id, post, id) that matches the
calendar's post ids, plus whichever metrics the platform provides
(impressions/views, likes/reactions, comments, shares/reposts, saves, clicks,
follows — header aliases are normalized automatically). If the export keys
posts by URL or caption instead of the calendar id, help the user add a
post_id column first — matching is by calendar id, deliberately: wins must
map back to the topics and pillars that produced them.
Step 2 — Ingest
python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action ingest \
--brand {brand} --month {YYYY-MM} --csv {export.csv} --source "{platform} export"- Rows matching calendar post ids are stored in
output/{brand}/{month}/performance.json, each row tagged with its source label, and each source records the sha256 of its CSV. Different files append — one CSV per platform is normal. - The same file twice is a no-op. Identical bytes answer
"status": "already_ingested"(exit 0) and name the earlier source; nothing is added. That is not an error — report "no new export". - Cumulative exports use
--replace. If the platform's new file repeats the posts of last week's (month-to-date totals), ingest every snapshot under one constant--sourcelabel with--replace: rows previously ingested under that label are removed first, so only the latest snapshot counts. Other labels are untouched. Ingest only the newest export under--replace: it trusts the file it is given, so an older file ingested after a newer one replaces the newer numbers.--replacerefuses a label ingested before rows carried their source label (use a new label or re-ingest the month), and a file that matches no calendar post leaves the old snapshot in place. - Unmatched rows are listed in the output, never silently dropped. Show the user the unmatched list; a typo'd id is data lost from the wins rung.
- Exit 3 = nothing matched. Stop and reconcile ids before proceeding.
Step 3 — Rank the wins
python "${CLAUDE_PLUGIN_ROOT}/scripts/ingest_performance.py" --action wins \
--brand {brand} --month {YYYY-MM}The ranking is deliberately conservative:
- Sample floor (default 100 impressions): a post nobody saw cannot be a
win, only noise. Below-floor posts are reported as
unrankedwith the reason. - Margin rule (default 1.5× the month's median engagement rate): a "win" must beat the month, not merely top a flat list.
- Unmeasured is not zero: missing impressions →
engagement_rate: null, and the post lands inunranked, not at the bottom of the ranking. - A flat month returns
"status": "no_clear_wins"— report that honestly. Compounding a non-win manufactures a false signal for next month's plan.
Step 4 — Hand off to ideation
Relay the wins output to /socialforge:ideate-month (its "last month's
results" input). Winners carry their topic, pillar, tier, and
vs_month_median multiple, so ideation can design follow-ups that compound
the validated angle — and label each one measured in "What last month
validated". Anything the client reports that is NOT in the ranked output is
still usable, labeled anecdotal.
Pairs with
/socialforge:ideate-month— consumes the wins output; measured beats remembered/socialforge:finalize-month— closing a month is the natural moment to ingest its numbers
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.

