ig-reel — Claude Code skill: what it does, how to install
Generates an Instagram Reel script from a rough idea, complete with scored hooks from 26 formulas, timed beats, and safe-zone on-screen text.
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a claude-codeWhat ig-reel does
The skill turns a single concept into a 15 to 45-second script. It pulls three formulas from hooks.json, drafts spoken and on-screen text, and scores them using hookscore.py. Scores below 50 get rejected.
The script follows a strict timeline. You get a two-second hook, a five-second stake, one idea per beat, and an ending loop line. Timing is verified with beats.py. On-screen cards are written separately with six words or fewer to fit the 1080x1920 safe zone.
You need Python 3 installed to run the scoring and timing scripts. The skill never publishes videos. On the first run, it reads ~/.claude/instagram/voice.md or asks for three existing reels to capture your tone.
What it helps with
- turn a raw idea into a scripted Instagram Reel
- score and rank hook candidates across 26 formulas
- calculate spoken cadence and beat timings up to 45 seconds
- format on-screen text cards within 1080x1920 safe zone limits
Example prompts for the agent
- /ig-reel we cut proposal time from 5 hours to 20 minutes with one template
- /ig-reel make a script about why developers should avoid saving passwords in the browser
- /ig-reel give me three hooks for a reel about webhook debugging
How to install ig-reel
1Skills CLI (Vercel)
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a claude-code2Manually: put the files in place
~/.claude/skills/ig-reel/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/ig-reel/
1Skills CLI (Vercel)
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a codex2Manually: put the files in place
.agents/skills/ig-reel/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a cursor2Manually: put the files in place
.cursor/skills/ig-reel/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Jakeschincariol/instagram-agent-skill ig-reel2Manually: put the files in place
.github/skills/ig-reel/SKILL.md1Skills CLI (Vercel)
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a gemini-cli2Platform CLI
gemini skills install https://github.com/Jakeschincariol/instagram-agent-skill --path skills/ig-reelManually: put the files in place
.devin/skills/ig-reel/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about ig-reel
How do I install ig-reel in Claude Code?
Run npx skills add Jakeschincariol/instagram-agent-skill --skill ig-reel -a claude-code in your terminal to install the skill for Claude Code.
What does the ig-reel skill do?
It generates timed Instagram Reel scripts, ranks hooks using 26 formulas, formats on-screen cards, and checks speech pacing.
Why does ig-reel require Python?
The skill relies on local scripts hookscore.py and beats.py to calculate hook quality scores and enforce beat timings before recording.
Source text
SKILL.md · MIT
---
name: ig-reel
description: >-
Write an Instagram Reel from a raw idea - hook options off 26 formulas, the
spoken script, the on-screen text, and a timed beat sheet - in the user's own
voice and scored before they shoot it. Use whenever the user wants a Reel, a
short-form video script, a hook, a voiceover, "make a reel about X", "what
should I say in this video", or is about to record and does not have the
first line yet.
---
# ig-reel
Turns one raw idea into a Reel that somebody finishes.
Two tools live in this folder and they both actually run. Use them. Do not
eyeball the hook and do not guess at the length.
```bash
python3 hookscore.py hooks.txt # rank your hook options
python3 hookscore.py --hook "one line" # score a single one
python3 beats.py script.txt --target 30 # timed beat sheet before you shoot
```
## Before you write
1. Read `~/.claude/instagram/voice.md` if it exists. That is the user's voice
profile: how they talk on camera, what they never say, who they are talking
to. If it does not exist, ask for **three of their own reels**, transcribe or
read them, infer the voice, and write the file. A script in the wrong voice
is unusable, because they have to say it out loud.
2. Read `hooks.json` in this folder. 26 formulas, each with a template, a filled
example, the on-screen version, what it is for, and how it gets ruined.
Four of them are in there because they kept turning up in real hooks, not
because they completed a pattern.
3. If the idea is thin, do not pad it. Ask one batched question: what happened,
to whom, and what did it cost or return. A Reel needs one specific true
thing. Get it before writing.
4. If `~/.claude/instagram/swipe.md` exists, read it. `/ig-viral` writes that
file, and it is the user's own evidence about which formulas are working in
their niche right now. It beats the defaults in this file.
## The shape
A Reel is decided in the first two seconds and kept by the next five.
```
0:00 - 0:02 HOOK the claim. Spoken line and on-screen line, written
separately. Motion in the first frame, not a static face.
0:02 - 0:07 THE STAKE why this matters to the person watching. One line.
0:07 - ... THE BODY one idea per beat, and the frame changes every beat.
LAST 3s THE PAYOFF deliver what the hook promised, then the single ask.
LAST LINE THE LOOP echo one word from the hook so the replay lands clean.
```
Length: 15 to 45 seconds is the working range. Reels run to 3 minutes and
almost nobody should use it. Under 7 seconds the loop counts inflate and
nothing else does.
## The loop
**1. Pick three hooks, not one.** Run the idea through `hooks.json`, choose
three formulas that genuinely fit it, and write the spoken line plus the
on-screen line for each. Different formulas, not three rewrites of one.
**2. Score them.** Put the three spoken lines in a file, one per line, and run
`hookscore.py`. Show the user the ranking. If the top one is under 50, you do
not have the hook yet and no amount of editing fixes that.
**3. Write the script** on the winning hook. Plain spoken language, the way the
user actually talks. Contractions. Short lines. No sentence they would have to
rehearse.
**4. Time it.** Run `beats.py script.txt --target {length}`. Fix every flag:
a hook past 3 seconds, any beat over 4 seconds, a run of beats with nothing
concrete in them, no loop. Re-run until it is clean.
**5. Humanize it.** Run the script through `/ig-human` before showing it. A
written-sounding line is obvious the moment someone says it out loud.
**6. Print the block.** The script in a fenced block, the on-screen text as a
separate list with timings, and then:
```
REEL READY
hook: #3 Nobody Tells You, scored 86 STRONG
length: 28.4s across 9 beats at 165 wpm
on-screen: 6 cards
humanizer: 4 artefacts stripped, human score 81 PASS
caption: run /ig-caption next
Reply "yes" to log it, or tell me what to change.
```
**7. Never publish.** This skill produces a script. The user shoots it and
posts it. On "yes", append to `~/.claude/instagram/log.md` with the date, the
hook formula used and the first line, so `/ig-audit` has a history later.
## On-screen text is a separate script
Write it separately, every time. It is read before it is heard.
- **Six words or fewer per card.** It is being read at arm's length by someone
who is not listening yet.
- **The hook card is up at frame 1**, not after a beat of silence.
- **Keep it inside the safe zone.** On a 1080x1920 frame, nothing above y=230
or below y=1440, and keep the right 230 pixels clear. The interface sits on
top of everything outside that box: the caption, the action rail, the audio
strip.
- **Never put the hook where the caption sits.** That is the bottom of the
frame and it is covered.
- **Burn in captions for the body.** Most people watch muted first.
## Rules that make the difference
- **One idea per Reel.** If the script has two, you have two Reels. Say so.
- **Numbers over adjectives.** "$4,200" beats "a lot". If the user has not
given a number, ask for one rather than writing around the hole.
- **Cut the intro.** No greeting, no "in this video", no name, no logo sting.
The video starts at the sentence you would normally reach at second six.
- **Change the frame every beat.** A static shot for 8 seconds is where people
leave, and `beats.py` will flag it.
- **One ask at the end.** Comment a keyword, save it, or follow. One.
- **Never fabricate.** No invented metrics, clients, revenue or outcomes under
the user's name, even as a placeholder. If a number is needed and unknown,
leave `{{your number}}` in the script and flag it.
- **Do not write a script around a trending audio the user cannot use.** If the
idea needs the user's own voice, say so.
## Example
```
/ig-reel we cut proposal time from 5 hours to 20 minutes with one template
```
```
HOOKS (scored)
86 STRONG #5 Time Collapse "Proposals used to take me five hours. Twenty minutes now."
on screen: 5 HOURS -> 20 MIN
71 STRONG #1 Cost Confession "I billed four hours a week for formatting. For two years."
on screen: 2 YEARS WASTED
54 OK #9 The Steal "Steal the proposal template that did it."
on screen: STEAL THIS
Shooting #5: the ratio is believable, it reads in one glance on screen,
and the number is yours.
```
© Jakeschincariol · MIT · Jakeschincariol/instagram-agent-skill