How To Write Hooks For Reels, And Score Them Before You Post
Seven tests, thirty seconds, run on the first line before the video is cut. Six words or fewer, the two of four gate, the first three words, the label test, the tool named, the claim the video can cash, and the ledger so I never ship the same hook twice.
I rendered ten shorts for a Grok Bot launch and every one of them said 'AI' in the title. 'My AI has a computer.' 'I hired nine AI employees.' They looked fine. Then I read the numbers from four hundred and twenty two posts by the creators beating their own average, and the winning titles named the tool almost every time and carried a number or a dollar figure about six times in ten. I re rendered all ten. 'ChatGPT answers you. Grok Bot does the work.' 'Thirty dollar Grok Bot vs six hundred dollar Mac Mini.'
That is the whole reason to score a hook before you post. The mistake was not taste. It was a test I had not run.
The hook is the first line of a post, the on screen title of a reel, the subject line, the headline. It earns the next second or the content dies. Most weak hooks are not bad. They are declarative. They state the topic without tension, without a number, without speaking to anyone.
This guide is the seven tests I run, the difference between a written hook and an on screen title, the ledger that stops me repeating myself, and the prompt that scores a hook and returns three stronger ones. The public hook writing skill is linked. This page is the gate in front of it.
The three levels
You write the first line last, read it once, think 'that's fine', and post.
Every hook and every on screen title runs through the seven tests before render. Under five passes it gets rewritten. Every title that ships is written to a ledger with its pattern and its colour.
An agent scores every draft hook automatically, checks it against the ledger, returns three alternates from different mechanics, and pairs each with the comment keyword and the thing the viewer would receive.
The mental model
Write the hook last, read it once, post if it sounds fine.
Run seven pass or fail tests on the first line before anything is cut. Rewrite under five. Log what ships.
| Role | Talks to you | Job |
|---|---|---|
| Clarity | Test 1 | Six words or fewer written; two lines of two to four words on screen |
| The gate | Test 2 | At least two of: a number, a fight with a common belief, the word you, one relevant emoji where allowed |
| First three words | Test 3 | Surprise, a number, a threat or a name in the first three words |
| Label test | Test 4 | Does it withhold the payoff or name the topic? If the viewer nods 'makes sense', it failed |
| Specific | Test 5 | Names the tool, the price, the person. No 'many businesses', no 'AI' |
| Cash test | Test 6 | The video or post can deliver what the line promises |
| Ledger | Test 7 | Not already shipped, and extends a pattern that earned its place |
The seven tests
1. Write the hook first, not last
The first line is written before the body, before the edit, before the thumbnail. If I cannot write a line that passes the gate, the topic is not ready and I do not film it. Cutting a video around a weak first line is the most expensive mistake in content because everything downstream of it is invisible.
2. Test one: clarity
Written hooks: six words or fewer and understandable in a split second. On screen titles: exactly two lines, two to four words each, all caps, the tension carried by the first three words. If it needs more, it is a sentence from the body pretending to be a hook. Cut.
3. Test two: the two of four gate
A hook must hit at least two of: a specific number (thirty dollars, nine, ninety seconds), a fight with a common belief, direct address with 'you' or 'your', and one relevant emoji where the medium allows it. A stat on its own ('eight thousand in, forty two thousand back') hits one. Add 'your' or a contrarian frame and it clears.
4. Test three: the first three words
Read only the first three words. Do they carry surprise, a number, a threat or a name? 'Here's how I' fails. 'Website designers are' passes. 'Most people still' passes. Cut every filler word in front of the strongest one. On screen this is doubly true because the first line is the only one the eye catches mid scroll.
5. Test four: withhold, don't label
A title that names the topic is a dead title. 'Why a doctor built an agency' tells you what the clip is about and gives you no reason to watch. It went in my ledger as rejected. 'What med school never taught me' opens a loop the clip then closes. The test: if a viewer reads it and nods 'makes sense', it failed. Rewrite until it makes them need the next line.
6. Test five: specific, tool named
Every placeholder filled with a real specific from your material: a number, a name, a tool, a moment. 'Many businesses' and 'a lot of money' fail automatically. In the creator data, the winners named the tool almost every time. That is why ten of my shorts said 'AI' and were wrong, and why they now say 'Grok Bot'.
7. Test six: can the video cash it
If the line makes a claim the content does not deliver, it is a lie with good numbers for one day and a trust problem after. The agent flags any claim I have not given it evidence for. I do not ship a hook the video cannot cash.
8. Test seven: the ledger
Every on screen title that gets rendered goes into an append only ledger: date, line one, line two, accent colour, pattern, project, status shipped or rendered or rejected with the reason. Before writing a new one I read it. Two jobs: never repeat a hook, and extend the patterns that already earned their place instead of reinventing. A rejected title stays in the ledger as a negative example.
9. Score, rewrite, pair
Seven tests, pass or fail. Five or more ships. Under five, rewrite using at least two different mechanics: contrarian, conditional, question, command, list, warning, cost reveal, withheld mechanism, named mechanism, absolution. Then pair the winner with the comment keyword and the exact thing they would receive. A hook without a deliverable is a view. A hook with one is a lead.
Starter prompts
Paste these as written. They are short on purpose, because the long ones drift.
Score this hook before I post it. Hook: "[the line]". Format: [written first line / on screen reel title / subject line / headline]. Angle: [the number, opinion, result or mistake behind it]. Run seven pass or fail tests and give the reason for each: 1 Clarity: six words or fewer (written) or two lines of two to four words, all caps (on screen). 2 Gate: at least two of a specific number, a fight with a common belief, the word you or your, one relevant emoji where allowed. 3 First three words: do they carry surprise, a number, a threat or a name. 4 Label test: does it withhold the payoff, or does it name the topic so the viewer nods 'makes sense'. 5 Specific: names the tool, price, person or moment; 'many', 'a lot', 'AI' as a noun fail. 6 Cash test: can the content deliver the claim with the evidence I gave you; flag any claim without evidence. 7 Ledger: check [ledger file] and fail if this hook or a near duplicate already shipped. Report the score out of seven. If under five, rewrite: three variants from at least two different mechanics (contrarian, conditional, question, command, list, warning, cost reveal, withheld mechanism, named mechanism, absolution), each rerun through tests 1 to 5 with its score. Then pair the best with a one word comment keyword and the exact thing the viewer receives. Never borrow a sentence from another creator. Never invent a number I did not give you.
Write the on screen title for this clip: [one line about what the clip says]. Exactly two lines, two to four words each, ALL CAPS, tension in the first three words, line two carrying the hook type. It must withhold the payoff, not label the topic. Read [ledger file] first and do not repeat or near repeat anything in it. Give me five, each with its pattern (contrarian confession, withheld mechanism, cost reveal, backwards truth, named mechanism, absolution) and its accent colour (red for contrarian or warning, green for how to, blue for reframe, gold for wealth or mechanism). Score each out of seven and pick one.
Append to [ledger file]: date [today], line one [..], line two [..], accent [..], pattern [..], style [..], project [..], status [shipped / rendered / rejected with reason]. Never rewrite an existing row.
Give it to your agent, three ways
Same skill, three worlds. Pick the one you actually use. The skill file at the bottom of this page is the instructions in every case.
An agent with connectors (Claude Desktop, Claude Code, Grok Bot)
Nothing to connect. The skill and a ledger file are the whole system. If you keep the ledger in Notion or a vault, give the agent read and append access to that one page.
- Save the skill file from the bottom of this page as a skill. Create a ledger file (a markdown table works) and put its path in the skill.
- Say "score this hook" with the line, the format and the angle. It returns seven pass or fail results, the score, rewrites if needed, and the keyword pairing.
- For reels, say "title this clip" with one line about the clip. It reads the ledger, returns five two line titles with pattern and colour, and appends the one you pick when you say so.
- Grok Bot and Hermes: same skill, same ledger file. Both can read and append a file.
# ledger.md | Date | Line 1 | Line 2 | Accent | Pattern | Style | Project | Status | |---|---|---|---|---|---|---|---| | 2026-09-07 | WHY A DOCTOR | BUILT AN AGENCY | blue | none | podcast-two-tier | doctor-agency cover | rejected: labels the topic |
ChatGPT (a project or a custom GPT)
This works fully in a chat window. The only thing to add is the ledger, which lives as a file in the Project.
- Create a ChatGPT Project called Hooks and paste the skill below as its instructions. Upload ledger.md as a file.
- Paste the hook, the format and the angle. Say "score this hook". Insist on a pass or fail per test with the reason, not a summary.
- When a title ships, ask it to give you the ledger row and paste it into ledger.md yourself, then re upload. It cannot append the file for you.
- Optional: upload the findings paragraph from your competitor research so test five is calibrated to your niche.
Anything with an API (a token and a curl call)
If your agent only speaks HTTP, this is one model call with the skill as the system prompt and the hook plus the ledger contents as the user message. No other service is involved.
- Read ledger.md into the request so test seven has something to check.
- Send the skill as the system prompt and the hook, format, angle and ledger as the user message. Ask for JSON: tests array with pass, reason; score; rewrites with scores; keyword; deliverable.
- On ship, append the returned ledger row to ledger.md yourself. Never let the model rewrite the file.
export ANTHROPIC_API_KEY=... # env only
curl -s https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'content-type: application/json' \
-d @- <<J
{"model": "[model]", "max_tokens": 1500,
"system": $(jq -Rs . < hook-score.md),
"messages": [{"role": "user", "content": $(jq -Rs . <<< "Hook: $HOOK. Format: $FORMAT. Angle: $ANGLE. Ledger: $(cat ledger.md)")}]}
JFailure modes
Every one of these has happened to me or to someone I set this up for.
| Failure | Fix |
|---|---|
| Ten titles said 'AI' instead of the tool | Test five. Name the tool, the price, the person |
| Title labels the topic and the viewer nods | Test four. Withhold the payoff; open the loop the clip closes |
| A clean stat with no tension | Add 'your' or a contrarian frame to clear two of four |
| 'Here's how I' in the first three words | Cut the filler; put the strongest word first |
| Four word first line on screen wraps to a third line | Two to four words per line, pin the font size, never a third line |
| Same hook shipped twice three weeks apart | Ledger read before writing, appended on every render |
| A claim the video did not cash | Test six. Flag every claim without evidence; do not ship it |
| Three variants that are all the same mechanic reworded | At least two different mechanics per rewrite |
The tools I use for this
| Tool | What it is for here | |
|---|---|---|
| Hooks that stop | The public hook writing skill built from 422 creator posts. The gate on this page sits in front of it. | Read it |
| Claude | Runs the seven tests, checks the ledger, writes the rewrites. | Open |
| A ledger file | Append only. Every title rendered, shipped or rejected, with its pattern and colour. | no link, just use it |
| Submagic | Where the on screen title ends up once it passes. | Get it |
The free skill
It is the gate I run before any first line or on screen title ships, written for an agent. It takes the hook and the angle, runs the seven tests, reports pass or fail on each with the reason, checks the ledger so nothing repeats, rewrites anything under five using at least two different mechanics, runs the first three words test on the rewrites, and pairs the winner with a comment keyword and the deliverable.
--- name: hook-score description: Scores a hook (first line, on screen reel title, subject line, headline) before it posts: seven pass or fail tests with reasons, a ledger check so nothing repeats, rewrites under five from at least two different mechanics, the first three words test on the rewrites, and a comment keyword paired with the deliverable. Trigger on "score this hook", "is this hook good", "title this clip", "my opening is weak". --- # Hook Score The first line earns the next second or the content dies. Most weak hooks are not bad; they are declarative. You test, you do not admire. Public companion for writing hooks: https://marketing.doctorleadflow.com/library/hooks-that-stop/ ## Inputs - The hook. - The format: written first line, on screen reel title, subject line, headline. - The angle: the real number, opinion, result, mistake or tool behind it. If the angle is missing, ask. Never invent one. - The ledger file path (append only record of shipped and rejected titles). ## The seven tests (pass or fail, with the reason) 1. **Clarity.** Written: six words or fewer, understood in a split second. On screen: exactly two lines, two to four words each, ALL CAPS, tension in the first three words. 2. **Two of four gate.** At least two of: a specific number; a fight with a common belief; the word you or your; one relevant emoji where the medium allows it. 3. **First three words.** Read only them. Surprise, a number, a threat or a name passes. "Here's how I", "In today's world", "Let me tell you" fail. 4. **Withhold, don't label.** A title that names the topic is dead. If the viewer would nod "makes sense", fail. It must open a loop the content closes. 5. **Specific.** Every placeholder filled with a real specific: tool name, price, person, moment. "Many businesses", "a lot of money", and "AI" used as the noun instead of the tool's name fail. Winners in the creator data named the tool almost every time. 6. **Cash test.** The content can deliver the claim with the evidence given. Flag any claim without evidence. Never ship what the video cannot cash. 7. **Ledger.** Read the ledger. Fail if the hook or a near duplicate already shipped. Note which existing pattern this one extends. Score = tests passed out of seven. Five or more may ship. Under five, rewrite. ## Rewrite Three variants from at least two different mechanics: contrarian, conditional, question, command, list, warning, cost reveal, withheld mechanism, named mechanism, absolution. Rerun tests 1 to 5 on each and show the score. Generic fills fail automatically. No borrowed sentences from other creators; mechanics are shared, words are not. ## On screen titles Two lines. Line one white, line two coloured by hook type: red for contrarian or warning, green for how to or optimise, blue for framework or reframe, gold for wealth, opportunity or mechanism. Patterns: contrarian confession, withheld mechanism, cost reveal, backwards truth, named mechanism, absolution. Return five with pattern and colour, scored, and pick one. ## Pairing For the winner, propose a one word comment keyword and the exact thing the viewer receives. A hook without a deliverable is a view; with one it is a lead. ## Ledger row When the user says it shipped or was rejected, return the row to append: `| date | line 1 | line 2 | accent | pattern | style | project | status (with reason if rejected) |` Never rewrite an existing row. Rejected titles stay as negative examples.
What done looks like at thirty days
- Every hook posted this month has a score out of seven written next to it
- At least one topic was killed because no hook could pass
- The ledger holds every on screen title rendered this month, including rejections
- No hook was repeated and the agent checked
- The last ten titles each name a tool, a price or a person
- Each posted hook has a keyword and a deliverable paired with it
Want your hooks scored against your own niche's data?
Inside the AI CEO Lab the Content Engine module calibrates the gate to the creators beating their average in your space and runs it on every script before you film.