Hook mining skill

Illustration · not a resultFrom the Ootto-AI/claude-content-skills README — shows the whole collection, not only this skill.source ↗
Mine a CSV of REAL top-performing hooks and generate alternatives that keep what made them work: hold the storytelling psychology and structure fixed, hot-swap only the power words.
by Ootto-AI·MIT license·★ 139 Stars on the repo·GitHub ↗
npx degit Ootto-AI/claude-content-skills/skills/hook-mining#main ~/.claude/skills/hook-miningChecked ·commit main

Illustration · not a resultFrom the Ootto-AI/claude-content-skills README — shows the whole collection, not only this skill.view on GitHub
Files of Hook mining
Show the full text98 lines
Hook mining
Most AI hook writing is slop for one of two reasons: it copy-pastes a hook that worked for someone else, or it "rewrites" it until the English is flat and the psychology is gone.
This does neither. It keeps the data for what worked — the structure, the psychological mechanism, the rhythm — and swaps only the power words. Proven skeleton stays, skin changes.
1. Get real hooks in
You cannot mine what you do not have. The input is a CSV of hooks that actually performed:
- a Sandcastles (sandcastles.ai) export — it analyses the top videos in your niche and ranks the best hooks; export that tab to CSV
- any social-analytics export with a hook/title/caption column and a views/likes/score column
- competitor hooks pulled with the agent-reach skill, or breakdowns from reel-analyzer
Column names are never predictable, so don't hand-parse.
2. Mine it
python skills/hook-mining/mine_hooks.py hooks.csv [--top 40]
Auto-detects the hook column and the performance column, ranks, buckets by pattern, and flags the
power words already present. Writes hooks.mined.json. Run --selftest to verify the parsing.
Patterns it sorts into: result-proof · time-bound · contrarian · secret-gap · listicle ·
how-to · warning-fear · newsjack · comparison · question · curiosity-tease ·
plain-statement.
3. Remix — the part that matters
For each hook worth reusing, produce 3–5 alternatives under one rule:
Keep the psychology. Swap the power words.
Hold fixed: the pattern, the clause order, the specificity (a number stays a number), the rhythm and syllable shape, the tension and where it resolves, the point of view.
Swap only: the charged words — the verb, the intensifier, the noun carrying the emotion.
power_word_frequency in the mined JSON tells you which ones are earning their keep in your niche.
Pull replacements from there, not from a thesaurus.
proven: "You're using Claude wrong" [contrarian · you're + wrong]
✅ "You're prompting Claude backwards" swapped the verb + the charge word
✅ "You're building agents the slow way" same skeleton, same tension
❌ "Many people use Claude incorrectly" psychology gone, flat English → slop
❌ "You're using Claude wrong" verbatim copy → plagiarism, the platform buries it
Then hand the winners to viral-hook-writer to rank, or straight into reel-scripter.
Hard rules
- Never ship a mined hook verbatim. It is someone else's line. Instagram's originality systems bury copies, and it's plagiarism. Model the technique, write your own words.
- Never remix the structure. Change the clause order or drop the number and you have thrown away the only thing the data proved.
- A number in the source stays a number in the remix — and it must be YOURS and real. Swapping in a stat you cannot defend is the fastest way to lose an audience.
- Rank before you mine. Remixing a hook that did not perform just launders a bad idea.
- Small buckets are signal. A pattern with two entries that both went viral beats one with forty mediocre ones. Weight by performance, not by count.
Failure modes
| Symptom | Cause | Fix |
|---|---|---|
| Variants read flat / corporate | rewrote the sentence instead of swapping words | restore the original skeleton, change only the charged words |
| All variants sound identical | swapped one word in one slot | vary the slot — verb, intensifier, or emotional noun |
| Variants lost the tension | resolved the curiosity gap inside the hook | the gap stays open; the payoff belongs after the hook |
| Nothing outperforms | mining unranked or off-niche data | re-export ranked, filter to the actual niche |
Where it sits
agent-reach / reel-analyzer find what's working → hook-mining turns that data into your own
hooks → viral-hook-writer ranks → reel-scripter writes the script → reel-builder builds it.
| 1 | |
| 2 | name hook-mining |
| 3 | description > |
| 4 | Mine a CSV of REAL top-performing hooks and generate alternatives that keep what made them work: |
| 5 | hold the storytelling psychology and structure fixed, hot-swap only the power words. |
| 6 | Use when the user has hook performance data (a Sandcastles / social-analytics export, scraped |
| 7 | competitor hooks, their own analytics) and says "mine hooks", "remix hooks", "hook variations", |
| 8 | "make hooks from this CSV", or "give me hook options from what's working". |
| 9 | NOT for inventing hooks from nothing — that's viral-hook-writer. |
| 10 | user-invokable true |
| 11 | argument-hint "[path to your hooks CSV]" |
| 12 | license MIT |
| 13 | metadata |
| 14 | author Ootto |
| 15 | version "1.0.0" |
| 16 | |
| 17 | |
| 18 | # Hook mining |
| 19 | |
| 20 | Most AI hook writing is slop for one of two reasons: it copy-pastes a hook that worked for someone |
| 21 | else, or it "rewrites" it until the English is flat and the psychology is gone. |
| 22 | |
| 23 | This does neither. It keeps the **data for what worked** — the structure, the psychological |
| 24 | mechanism, the rhythm — and swaps only the **power words**. Proven skeleton stays, skin changes. |
| 25 | |
| 26 | ## 1. Get real hooks in |
| 27 | |
| 28 | You cannot mine what you do not have. The input is a CSV of hooks that **actually performed**: |
| 29 | |
| 30 | a **Sandcastles** (sandcastles.ai) export — it analyses the top videos in your niche and ranks the |
| 31 | best hooks; export that tab to CSV |
| 32 | any social-analytics export with a hook/title/caption column and a views/likes/score column |
| 33 | competitor hooks pulled with the **agent-reach** skill, or breakdowns from **reel-analyzer** |
| 34 | |
| 35 | Column names are never predictable, so don't hand-parse. |
| 36 | |
| 37 | ## 2. Mine it |
| 38 | |
| 39 | |
| 40 | python skills/hook-mining/mine_hooks.py hooks.csv [--top 40] |
| 41 | |
| 42 | |
| 43 | Auto-detects the hook column and the performance column, ranks, buckets by pattern, and flags the |
| 44 | power words already present. Writes `hooks.mined.json`. Run `--selftest` to verify the parsing. |
| 45 | |
| 46 | Patterns it sorts into: `result-proof` · `time-bound` · `contrarian` · `secret-gap` · `listicle` · |
| 47 | `how-to` · `warning-fear` · `newsjack` · `comparison` · `question` · `curiosity-tease` · |
| 48 | `plain-statement`. |
| 49 | |
| 50 | ## 3. Remix — the part that matters |
| 51 | |
| 52 | For each hook worth reusing, produce 3–5 alternatives under one rule: |
| 53 | |
| 54 | > **Keep the psychology. Swap the power words.** |
| 55 | |
| 56 | Hold **fixed**: the pattern, the clause order, the specificity (a number stays a number), the rhythm |
| 57 | and syllable shape, the tension and where it resolves, the point of view. |
| 58 | |
| 59 | Swap **only**: the charged words — the verb, the intensifier, the noun carrying the emotion. |
| 60 | `power_word_frequency` in the mined JSON tells you which ones are earning their keep in *your* niche. |
| 61 | Pull replacements from there, not from a thesaurus. |
| 62 | |
| 63 | |
| 64 | proven: "You're using Claude wrong" [contrarian · you're + wrong] |
| 65 | ✅ "You're prompting Claude backwards" swapped the verb + the charge word |
| 66 | ✅ "You're building agents the slow way" same skeleton, same tension |
| 67 | ❌ "Many people use Claude incorrectly" psychology gone, flat English → slop |
| 68 | ❌ "You're using Claude wrong" verbatim copy → plagiarism, the platform buries it |
| 69 | |
| 70 | |
| 71 | Then hand the winners to **viral-hook-writer** to rank, or straight into **reel-scripter**. |
| 72 | |
| 73 | ## Hard rules |
| 74 | |
| 75 | **Never ship a mined hook verbatim.** It is someone else's line. Instagram's originality systems |
| 76 | bury copies, and it's plagiarism. Model the technique, write your own words. |
| 77 | **Never remix the structure.** Change the clause order or drop the number and you have thrown away |
| 78 | the only thing the data proved. |
| 79 | **A number in the source stays a number in the remix — and it must be YOURS and real.** Swapping in |
| 80 | a stat you cannot defend is the fastest way to lose an audience. |
| 81 | **Rank before you mine.** Remixing a hook that did not perform just launders a bad idea. |
| 82 | **Small buckets are signal.** A pattern with two entries that both went viral beats one with forty |
| 83 | mediocre ones. Weight by performance, not by count. |
| 84 | |
| 85 | ## Failure modes |
| 86 | |
| 87 | | Symptom | Cause | Fix | |
| 88 | |---|---|---| |
| 89 | | Variants read flat / corporate | rewrote the sentence instead of swapping words | restore the original skeleton, change only the charged words | |
| 90 | | All variants sound identical | swapped one word in one slot | vary the slot — verb, intensifier, or emotional noun | |
| 91 | | Variants lost the tension | resolved the curiosity gap inside the hook | the gap stays open; the payoff belongs after the hook | |
| 92 | | Nothing outperforms | mining unranked or off-niche data | re-export ranked, filter to the actual niche | |
| 93 | |
| 94 | ## Where it sits |
| 95 | |
| 96 | `agent-reach` / `reel-analyzer` find what's working → **hook-mining** turns that data into your own |
| 97 | hooks → `viral-hook-writer` ranks → `reel-scripter` writes the script → `reel-builder` builds it. |
| 98 |
Discussion
Alternatives
Browse more free Claude skills or everything in Development.
