Share
SerhiiKorniienko/bullshit-detector
Turn a BS report (or any analysis result) into ready-to-paste posts for X/Twitter, LinkedIn, Facebook, Reddit, Hacker News, or a newsletter issue — plus a branded image carousel (PNGs + PDF) for…
A skill your agent uses when writing or auditing the opening lines of any content — reel hooks, carousel slide 1, video intros, newsletter subject lines, tweet openers — or when a draft's opener…
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install artemnovitckii/content-skills viral-hooks --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/viral-hooks .claude/skills/viral-hooks && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .claude/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/artemnovitckii/content-skills/tree/master/viral-hooksType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install artemnovitckii/content-skills viral-hooks --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/viral-hooks .agents/skills/viral-hooks && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .agents/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install artemnovitckii/content-skills viral-hooks --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/viral-hooks .cursor/skills/viral-hooks && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .cursor/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/artemnovitckii/content-skills.git --path viral-hooks--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install artemnovitckii/content-skills viral-hooks --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/viral-hooks .gemini/skills/viral-hooks && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .gemini/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install artemnovitckii/content-skills viral-hooksInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/viral-hooks .github/skills/viral-hooks && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .github/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add artemnovitckii/content-skills --skill viral-hooks -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install artemnovitckii/content-skills viral-hooks --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artemnovitckii/content-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/viral-hooks .opencode/skills/viral-hooks && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "viral-hooks" agent skill from https://github.com/artemnovitckii/content-skills/tree/master/viral-hooks into .opencode/skills/viral-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "viral-hooks", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
viral-hooksA skill your agent uses when writing or auditing the opening lines of any content — reel hooks, carousel slide 1, video intros, newsletter subject lines, tweet openers — or when a draft's opener…
Viral Hooks is an agent skill from artemnovitckii/content-skills. Use when writing or auditing the opening lines of any content — reel hooks, carousel slide 1, video intros, newsletter subject lines, tweet openers — or when a draft's opener feels flat, vague, or skippable.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Writing & Content, covering Newsletters, Social media posts and Slides and decks. The repository describes itself as: 5 Claude Code skills that fix Claude's writing: dumbify, storytelling, viral-hooks, anti-ai-writing, and a voice-dna build guide. MIT. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1c6e909. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Viral Hooks loads about 2.6k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 1,479 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from artemnovitckii/content-skills at commit 1c6e909, republished under its MIT licence (© artemnovitckii). 1,479 words, ~2,561 tokens.
.claude/skills/viral-hooks/SKILL.md (or your agent's skills folder).A hook has exactly ONE job: help the right viewer decide to keep watching. To do that job it must deliver two things, and only two things:
Everything in this skill exists to make a hook hit both. A hook that's clever but unclear fails. A hook that's clear but flat fails. Both, or it's not done.
Always pair with your voice: before writing hooks, read the hooks from your own top-performing posts. Match their cadence and energy — the patterns below are mechanics, your real posts are the sound. If you have a voice file (see the voice-dna skill in this pack), use it.
If you have no sample of your voice (auditing an outsider's script, a brand-new account, fewer than ~10 posts): proceed on the mechanics alone and say so in the output ("voice unverified — no sample to check against"). Never block, never silently pretend the voice check happened.
Every weak hook fails in one of exactly four ways. Diagnose which one, apply the fix.
Every word spent before the topic lands costs you readers. What "too late" means depends on the platform (see the platform table below): a reel has a ~2-second cliff, a LinkedIn post has the "…see more" fold, a newsletter has the subject line. Same killer, different deadline.
Fix: Delete everything before the topic. No greeting, no throat-clearing, no "let me explain." The first noun phrase should carry the subject — and it must land before that platform's deadline.
Nested clauses, abstract words, passive voice. If a line takes two passes to parse, the viewer is already gone.
Fix: Fewer words. Simpler words (6th-grade level). Active voice. One idea per sentence.
The viewer understands the topic but can't see themselves in it. The #1 cause: creator-POV framing.
Fix: Two moves. Swap me/my → you/your. Frame around a pain the viewer already feels — agitate the problem before offering the solve. Solving MY problem is a need; hearing YOUR story is a nice-to-have.
I-framed pattern exception: some sanctioned patterns are legitimately I-framed — story patterns (confession, in-medias-res, expensive lesson) and contrarian-arc patterns ("I stopped X...", "I'll never X again"). For these, the relevance test becomes: is the pain or payoff in the I-statement unmistakably the VIEWER'S too, and does a you-pivot land within the hook's 2-3 lines (or the very first beat after)? An I-framed hook with no you-pivot in sight is still an IRRELEVANCE flag.
Topic clarity and relevance are there, but no question is left open. The cure is contrast: the gap between what the viewer believes (A) and what you're claiming (B) IS the curiosity. No gap, no pull.
Fix: Name the A (common belief, common method, the viewer's current behavior) and put your B against it. The bigger the believable distance, the stronger the hook.
The four killers are universal. What changes per platform is the unit of attention you're earning and the medium you earn it in. Before writing, know which one you're working in.
| Platform | The hook IS… | DELAY deadline | Medium notes |
|---|---|---|---|
| Reel / TikTok | First 1-2 seconds, spoken + visual | ~2-second scroll cliff | Lead with the striking visual — eyes beat ears. Spoken cadence, contractions. |
| YouTube | Two hooks: title + thumbnail earn the click; first 15-30s confirms it | The click, then the first 30s | Title = curiosity gap + clarity. First 30s restates the promise and raises stakes — tease the payoff, don't deliver it yet. |
| First 1-2 lines before the "…see more" fold | The fold (~2 lines visible in-feed) | That's all the feed shows. Earn the expand. Line breaks and white space help. Pattern-interrupt, not corporate. | |
| X / Twitter | First tweet (thread) or first line | The text scroll-stop | Bold claim or numbered promise. Lower context — say the payoff plainly. |
| Newsletter | Subject line earns the open; first line earns the read | The subject line | Subject = curiosity or benefit, not spammy. Never waste line one on "Hey friends." |
| Carousel | Slide 1 text, ≤9 words | The thumb-stop on slide 1 | Must promise a reason to swipe. |
When a killer's fix references "the first 2 seconds," translate it to the active platform's deadline. Everything else — clarity, relevance, contrast — applies unchanged.
The best hooks do clarity + contrast in one line — keep those. But a complete hook is allowed to be 2-3 spoken lines:
Don't sacrifice clarity to force a one-liner.
These always get flagged — the wrapper words never survive a rewrite. The only judgment call is the blast radius, and the qualifier decides it: if real substance follows the wrapper ("Story time:" followed by an actual stated stake), only the wrapper dies — delete it, it's pure DELAY cost. If the substance is missing, the whole hook dies:
First identify the platform (the caller says, or infer from the content — a subject line vs a spoken open vs a first-tweet). Apply the four killers against that platform's deadline. Score each killer — pass or flag with the exact offending words quoted. Then rewrite. Output format:
HOOK AUDIT: "your meal prep is failing you — let me explain why that is"
Delay: FLAG — "let me explain why that is" postpones the payoff
Confusion: pass
Irrelevance: pass — "your" framing ✓
Disinterest: FLAG — no contrast; what's the A vs B?
Voice: pass — cadence matches your posts (or: "unverified — no sample available")
Rewrite: "Your Sunday meal prep is why you quit by Thursday. The fix isn't more discipline — it's prepping less."Never flag without quoting the words that triggered it. Never rewrite without preserving your voice (check a sample if unsure).
All five pass → the hook is working.
| Mistake | Why it fails |
|---|---|
| Three variants that are one idea reworded | You get no real choice — vary the PATTERN, not the synonyms |
| Hook promises what the script doesn't deliver | Viewers punish bait; retention dies at the reveal |
| Maximizing shock over believability | Contrast only works inside the viewer's belief range — "this one trick doctors hate" is dead on arrival |
| Polishing grammar into stiffness | Spoken hooks need spoken rhythm; read it aloud, keep the contractions |
| Hook for everyone | A hook for everyone stops no one — name the person ("if you've restarted five times this year") |
© artemnovitckii, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in viral-hooks of artemnovitckii/content-skills.
Open the folder on GitHubat commit 1c6e909
Viral Hooks next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Viral Hooks this skillartemnovitckii/content-skills | 102 | — | ~2.6k | Automated safety check: Pass | MIT | |
| ShareSerhiiKorniienko/bullshit-detector | 154 | — | ~857 | Automated safety check: Pass | MIT | |
| Social Media Pro Maxcriptogus/agent-evolve-network | 288 | — | ~1.6k | Automated safety check: Pass | Custom licence | |
| Changelog Social RecapFlorianBruniaux/claude-code-ultimate-guide | 6.1k | — | ~1.8k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| Voice Buildercharlie947/social-media-skills | 3.8k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Humanized Chinese Writing PolisherEthanYoQ/agent-xiaohongshu-workbench | 154 | — | ~1.1k | Automated safety check: Pass | MIT |
SerhiiKorniienko/bullshit-detector
Turn a BS report (or any analysis result) into ready-to-paste posts for X/Twitter, LinkedIn, Facebook, Reddit, Hacker News, or a newsletter issue — plus a branded image carousel (PNGs + PDF) for…
criptogus/agent-evolve-network
State-of-the-art viral content + social design intelligence.
FlorianBruniaux/claude-code-ultimate-guide
Turns CHANGELOG.md entries for a release or a week into LinkedIn, Twitter/X, newsletter and Slack posts in French and English.
charlie947/social-media-skills
Build a personalised voice profile inside a Codex or Claude project from a short interview plus 3 to 5 sample pieces of writing.
EthanYoQ/agent-xiaohongshu-workbench
A skill your agent uses when a user asks to polish, rewrite, humanize, de-AI, localize, or oralize Chinese writing, including short-video scripts, articles, social posts, speeches, newsletters, and…
mastra-ai/mastra
Authoring playbook for building agents that draft written content — blog posts, marketing copy, social media posts, newsletters, product descriptions, landing pages, or ad copy.
artemnovitckii/content-skills
A skill your agent uses when writing or auditing any written content — captions, carousels, newsletters, threads, LinkedIn posts, long-form — and as the FINAL filter on every piece.
artemnovitckii/content-skills
A skill your agent uses when writing or auditing content that has to be easy to follow — explainer reels, teaching carousels, how-to scripts, any piece that teaches or explains something — or when a…
artemnovitckii/content-skills
A skill your agent uses when writing or auditing talking-head / narrative / "yap" content — reel scripts, video scripts, story-driven posts, any piece where someone talks to camera or tells a story.
Categories
A skill your agent uses when writing or auditing the opening lines of any content — reel hooks, carousel slide 1, video intros, newsletter subject lines, tweet openers — or when a draft's opener…. Viral Hooks is an agent skill from artemnovitckii/content-skills. Use when writing or auditing the opening lines of any content — reel hooks, carousel slide 1, video intros, newsletter subject lines, tweet openers — or when a draft's opener feels flat, vague, or skippable.
Viral Hooks fits situations like: auditing the opening lines of any content — reel hooks; carousel slide 1; newsletter subject lines; tweet openers —.
Run `npx skills add artemnovitckii/content-skills --skill viral-hooks -a claude-code`. Or copy the skill folder (viral-hooks in artemnovitckii/content-skills) into .claude/skills/viral-hooks in your project. Claude Code loads it when a task matches its description.
Run `npx skills add artemnovitckii/content-skills --skill viral-hooks -a codex`. Or copy the skill folder (viral-hooks in artemnovitckii/content-skills) into .agents/skills/viral-hooks in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add artemnovitckii/content-skills --skill viral-hooks -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/viral-hooks, .gemini/skills/viral-hooks, .github/skills/viral-hooks and .opencode/skills/viral-hooks in your project.
SKILL.md names no scripts, command-line tools or credentials: Viral Hooks is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Viral Hooks is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Viral Hooks: Share (SerhiiKorniienko/bullshit-detector, 154 stars), Social Media Pro Max (criptogus/agent-evolve-network, 288 stars), Changelog Social Recap (FlorianBruniaux/claude-code-ultimate-guide, 6.1k stars) and Voice Builder (charlie947/social-media-skills, 3.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
artemnovitckii (a GitHub user) maintains it in artemnovitckii/content-skills, which has 102 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on June 20, 2026.
Source: artemnovitckii/content-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.