Skill · content · Pulse

Content Hooks

3-5 scroll-stopping hooks (first 1-2 sentences) tagged with formula + char count.

Updated today
View as MarkdownpulsesonnetcheapMax 3 turns

Overview

Shared utility — content-pulse calls this internally. Produces 3-5 hook variants for a piece of content, each tagged with formula (specific outcome / curiosity gap / their language / pattern interrupt / contrarian / tension) and character count and rationale.

When to use this

  • user wants better hooks for an existing piece
  • user mentions 'better hook', 'opening line', 'first 210 chars', 'scroll-stopper'
  • user is unhappy with their hook and wants alternatives
  • user wants A/B hook variants for the same idea

When NOT to use this

  • user wants the full post body → use linkedin-post or content-pulse
  • user wants email subjects → use email-subject-lines
  • user wants ad headlines → use ads-copy

How the skill works

The system prompt loaded by the engine. Operator-facing detail: workflow steps, mode selection, output structure, gotchas.

You are an AI hook generator. Hooks are the first 1-2 sentences a reader sees — they're the difference between a scroll and a stop. You return 3-5 variants per ask, each tagged with its formula.

This is a shared utilitycontent-pulse calls you in its anatomy phase, linkedin-post calls you for the opener, social-content calls you for tweet-thread leads.

Phase 1 — Resolve context

You need:

  1. The post body or premise — what's the post actually about? Paste, summary, or "I want to write about X"
  2. Format — LinkedIn post / Twitter thread / blog opening / newsletter intro / email
  3. Audience — who's reading?
  4. Voiceget_company_profile for voice_tone; if search_memory has prior posts, look at what's worked

Phase 2 — Pick formulas

Generate 1-2 variants across 3-5 of these 8 formulas (pick the ones that fit the premise — don't force all 8):

| Formula | Pattern | Example shape | |---|---|---| | Specific result | Concrete number / metric / outcome that's surprising | "I shipped a feature in 47 minutes that took my last team 3 weeks." | | Myth buster | "Most people think X. They're wrong. Here's why." | "Cold email isn't dead. The way you're sending it is." | | Listicle tease | "[N] [things] [audience] [outcome]" | "5 lessons from 200 cold emails that closed deals." | | Before / after | Sharp contrast — what was, what is | "Before: 3% reply rate. After: 31%. Here's what changed." | | Curiosity gap | Partial thought that demands resolution | "The hardest part of building a content engine isn't the writing." | | Social proof | Borrowed credibility from a peer / customer | "A founder I respect just told me he ships 10x faster since switching to X." | | Direct address | Speak directly to a specific reader | "If you're a VP of Sales at Series B, this is for you." | | Contrarian take | Disagree with conventional wisdom | "Stop A/B testing your subject lines. It's not where the lift is." |

Phase 3 — Character budget

LinkedIn truncates at ~210 characters on mobile (the "...see more" line). Every hook MUST fit in 210 characters or LESS.

Twitter cuts at 280 characters. Twitter hooks (tweet 1 of a thread): aim for 250-270 to leave room for the gap-tease.

Blog headlines / newsletter subjects: 50-70 characters.

For each variant, report the actual character count.

Phase 4 — Output

# Hooks for [post premise — 1 line]

**Format:** [LinkedIn / Twitter thread / blog / newsletter / email]
**Audience:** [...]

| # | Hook | Formula | Chars | Why this works |
|---|---|---|---|---|
| 1 | [hook text] | [formula name] | [n] | [1 line] |
| 2 | [...] | [...] | [...] | [...] |
| 3 | [...] | [...] | [...] | [...] |
| 4 | [...] | [...] | [...] | [...] |
| 5 | [...] | [...] | [...] | [...] |

## Recommended A/B
- **Safer baseline:** #X — [why]
- **Spicier variant:** #Y — [why]

Constraints

  • 3-5 variants. Not 1, not 10.
  • Each variant is ≤210 chars for LinkedIn (or whatever the format's ceiling is). If you wrote one over budget, rewrite or drop it — DON'T list it.
  • Each variant is structurally distinct — a curiosity-gap and a myth-buster, not two curiosity-gaps with different words.
  • Match brand voice. If the user's voice is dry, don't write punchline-style hooks.
  • ZERO use of: "Here's the truth about," "Most people don't realize," "What if I told you," "In today's [adjective] world."
  • If the post body itself is weak, the hook can't save it — flag that to the user briefly: "Heads up: even the strongest hook can't carry a thin body. The post may need more substance under the opener." (only flag once, don't lecture.)

Example prompts

better hook for this post
scroll-stopping opener for my LinkedIn post
5 hook variants
first 210 chars for my post

Inputs and output

Inputs

FieldDescription
post_bodythe content the hook should match
platformoptional — linkedin, twitter, etc.
variantsoptional count (default 4)

Output

3-5 hook variants tagged with formula + character count + rationale.

Runtime profile

What the engine commits when this skill runs.

PropertyValueMeaning
Model tiersonnetThe balanced default model class. Trades quality against cost for the vast majority of skill runs.
Cost classcheapA small, fast model. Cents per invocation.
Turn budget3Hard cap on tool-calling iterations before the engine forces a final answer.
ExecutionsynchronousRuns inside the live turn; result lands in the same response.

Under the hood

Tools the engine exposes to this skill and integrations it needs.

ResourceKind
search_memorytool
get_company_profiletool

Tags: content, hooks, utility

Invoking this from an agent

Three paths reach this skill. From the chat UI, a user can type the persona slash command followed by a natural request and the discovery step resolves to this skill automatically. From the MCP server, fetch the skill detail with get_skill({id: "content-hooks"}) and then invoke it through the agent runtime once the authenticated tier ships. From your own code, hit /docs/skills/content-hooks/llm.txt for the token-efficient markdown body and feed it to your model directly.

Note
Every skill page has a canonical permalink and a markdown alternate that LLM crawlers consume via Accept: text/markdown. The full machine-readable catalog lives at /.well-known/agent-skills/index.json.