attio-deepline-enrich
Enrich records inside Attio with a clear cost gate before any credit is spent. Pull a chosen object (companies, people, or custom) from Attio, fill chosen…
A build-measure-learn loop for your LinkedIn. Ingests your Creator analytics export, keeps a persistent belief model of what drives your reach and engagement, reconciles last cycle's beliefs against the new data, proposes ONE experiment to run next, and hands draft briefs to a
$ npx -y skills add NachoLafuente/5050-gtm --skill linkedin-self-improvement-loop --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/linkedin-self-improvement-loopContext preview
The summary Claude sees to decide when to auto-load this skill.
A build-measure-learn loop for your LinkedIn. Ingests your Creator analytics export, keeps a persistent belief model of what drives your reach and engagement, reconciles last cycle's beliefs against the new data, proposes ONE experiment to run next, and hands draft briefs to a
name: linkedin-self-improvement-loop description: A build-measure-learn loop for your LinkedIn. Ingests your Creator analytics export, keeps a persistent belief model of what drives your reach and engagement, reconciles last cycle's beliefs against the new data, proposes ONE experiment to run next, and hands draft briefs to a drafting skill. Run it on a cadence and it compounds. Use when the user says "/linkedin-self-improvement-loop", "improve my LinkedIn", "what should I post next", "did my last experiment work", or hands over a fresh LinkedIn analytics export. Advisory by design: it proposes and drafts, a human always posts. No API keys.
Most "content analytics" is a noun: a report you read once and forget. This is a verb. It runs the **build-measure-learn loop** on your LinkedIn and keeps **state**, so every cycle compounds on the last instead of starting from zero.
1. MEASURE -> 2. RECONCILE -> 3. UPDATE BELIEFS
(ingest export) (did last (confidence rises if a
^ cycle's bet pattern held, halves if
| hold up?) it broke)
| |
6. WAIT <- 5. DRAFT BRIEFS <- 4. PROPOSE ONE EXPERIMENT
(re-run next (hand to a (biggest effect on the
export) drafting skill) least-settled belief)It is **advisory**: it proposes experiments and emits draft briefs, but a human writes and posts every post. It never touches LinkedIn directly.
| File | What | |---|---| | `beliefs.json` / `beliefs.md` | The model: ranked traits (topic/hook/day/length) with a confidence that updates each cycle. `.md` is git-friendly and readable. | | `ledger.jsonl` | One line per cycle: what was reconciled, discovered, proposed. The audit trail. | | `snapshots/<date>.json` | Parsed metrics from each export, so trends compute across exports (beats the top-50 survivorship trap over time). |
A belief is just: *"posts with this trait beat your average on the chosen metric."* It starts at low confidence, climbs ~0.34 of the way to 1.0 each cycle it survives, and halves when a new export contradicts it. Survive enough cycles and it's a law; break and it's archived.
1. **Creator analytics (required)** - `AggregateAnalytics_<name>_<dates>.xlsx`. LinkedIn -> profile -> **Analytics** -> **Export**. Impressions, engagements, top-50 posts, followers, demographics. (LinkedIn caps it at the top ~50 posts / 365 days.) 2. **Data archive (optional, recommended)** - the `Complete_LinkedInDataExport` zip (**Settings -> Data Privacy -> Get a copy of your data -> larger archive**, email, ~24h). Its `Shares_*.csv` carries full post text so the loop can tag topics and hooks.
ls ~/Desktop ~/Downloads 2>/dev/null | grep -iE "AggregateAnalytics|LinkedInDataExport"
cd skills/linkedin-self-improvement-loop python loop.py \ --analytics "/path/to/AggregateAnalytics_Name_dates.xlsx" \ --archive "/path/to/Complete_LinkedInDataExport_folder" \ --state ./state \ --metric engagements # or impressions | er
`--metric` picks what the loop optimizes. `engagements` is the sane default for a personal brand (reach is mostly downstream of engagement + the algorithm). Use `impressions` only if pure reach is the goal, and read the ER caveat below before you do.
The loop prints its report to stdout and updates `./state`. Read the report straight back to the user, in this order: **RECONCILE** (did last bet hold), **PROPOSE** (the one experiment), **DRAFT BRIEFS**.
For a full one-time report (all the tables, top/bottom posts, correlations) without the loop machinery, run the MEASURE stage directly:
python analyze.py --analytics "...xlsx" --archive "...folder" --out ./out
This writes a styled Excel workbook + tagged CSV. Good for handing a human a static read; the loop is for the recurring improvement cycle.
Take the DRAFT BRIEFS and expand them into real posts. If a drafting skill exists (e.g. `social-content`), hand it each brief's `topic` / `hook` / `post_on` and let it write in the user's voice. Tag each post mentally with the brief's `tests` field so next cycle's reconciliation means something. **Never auto-post** - output drafts, the human ships them.
This is what makes it a loop, not a one-off. After enough posts to measure (~2 weeks), re-run with the next export. Offer to wire it:
/schedule a linkedin-self-improvement-loop run every 2 weeks
Each run tells the user whether the last bet paid off and picks the next one.
than a 900-impression post with equal raw engagement. The loop's default metric (`engagements`) sidesteps this; if you switch to `er`, know it rewards small posts.
loop's `snapshots/` defeat this *across* cycles, but in cycle 1 a "loss" belief just means "weakest of your winners," not "this bombs."
under n=3 and shows n in every row. Treat a 1.6x effect on n=3 as a hint, not a law, until cycles confirm it.
image/carousel posts usually have no `MediaUrl`, so the loop can't judge media vs text. Don't fake a conclusion there.
Topic and hook detection are two regex dicts at the top of `analyze.py` (`TOPICS`, `HOOKS`), tuned for a B2B / GTM / CRM brand. Edit for a different niche. Loop b
A growing collection of GTM skills for Claude Code, built by 5050Growth. Skills you can drop into Claude Code (or run as plain Python) to handle the GTM work that doesn't justify a SaaS subscription.
Enrich records inside Attio with a clear cost gate before any credit is spent. Pull a chosen object (companies, people, or custom) from Attio, fill chosen…
B2B discovery call coach. Paste any transcript — Granola export, Fireflies, Fathom, plain text, a file path — and get a full coaching report: framework flags,…
Read-only CFO data dashboard for bootstrapped startups. Two modes, CSV templates (works with any stack: Attio/HubSpot/Salesforce + Qonto/Mercury/Brex + Stripe…
Build a full SaaS cohort analysis from a CRM (Attio/Stripe/CSV) joined to revenue (Stripe/Attio/CSV). Outputs a styled Excel workbook with conditional…
Generate a tight pre-discovery-call prep brief from an intro email, referral, or company name. Outputs a 3-section scan doc (who they are, ranked questions,…
Pull Google Search Console health (sitemap status, indexing coverage, 28-day search analytics) for a verified GSC property, then run Lighthouse via the…