coreyhaines31/jab-hook
Gary Vaynerchuk's jab-jab-jab-right-hook framework applied to a personal portfolio rotation on X and LinkedIn. Jabs = build-in-public + educational (value). Hooks = promo (the ask). Each property in the user's configured portfolio (see `~/.config/makerskills/jab-hook/properties.yaml`) gets a hook at least once every ~3 weeks; jabs fill the rest. Drafts go into the user's Typefully workspace via MCP. Modes — plan (7-day plan), pick-next (single post), audit (coverage report), draft (specific post). Triggers on "/jab-hook," "what should I post," "plan my socials," "next promo," "next jab," "next hook," "social rotation," "promote [property]," "BIP post," "audit my socials," "what haven't I posted about.
npx skills add https://github.com/coreyhaines31/makerskills --skill jab-hook
Gary Vaynerchuk's framework applied to your configured portfolio: keep the feed mostly *jabs* (value — BIP + educational) so the *hooks* (promo) earn attention when they land. Drafts to your personal Typefully workspace.
One-time setup: see references/properties.md and references/typefully-config.md to configure your real portfolio + workspace. Personal config lives in ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/.
~/.config/makerskills/jab-hook/properties.yaml): one per property you want to promote on rotationDetect from the trigger:
| User says | Mode |
|---|---|
| "plan my socials," "next week's posts" | plan |
| "what should I post," "next promo," "pick next" | pick-next |
| "audit my socials," "what's overdue," "what haven't I posted about" | audit |
| "draft a promo for X," "BIP post about Y," "educational about Z" | draft |
If ambiguous, confirm.
references/properties.md — the 6 rotation slots and angle ideasreferences/voice.md — the user's voice rules per platformreferences/content-types.md — templates for promo / BIP / educationalmcp__typefully__typefully_list_social_sets and ask which social set is your personal (X + LinkedIn). Save the ID to ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/typefully.yaml for future runs (schema in references/typefully-config.example.yaml — never save it inside the skill folder; upgrades wipe it).mcp__typefully__typefully_list_drafts filtered to the last 30 daysDay | Type | Property/Topic | Hook | Draft summaryFollow references/voice.md and references/content-types.md. Default: single post, one per platform (X version + LinkedIn version). Thread only if the second post earns its place.
Link placement (load-bearing): never put a URL in the body. Default is no link at all — let curiosity drive the click. When a link is needed, draft it as a first comment for LinkedIn (Typefully supports auto-comment) or a reply for X. The body always stands alone.
For promo and educational posts, optionally scan inspiration accounts (references/inspiration.md) before drafting:
${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/patterns.local.md (create if missing) so they accumulate — references/patterns.md documents the starter patterns and stays read-onlySkip inspiration scan when the user says "just draft it" or when iterating on an existing post.
Ask: *"Push to Typefully now? (X + LinkedIn, your personal workspace)"*
If yes:
${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/typefully.yaml (setup notes in references/typefully-config.md)mcp__typefully__typefully_create_draft once for X, once for LinkedIn (or once with both platforms if the social set spans both)paste — clean output for pasting into Typefully / LinkedIn / X manually if the MCP path doesn't fitsocial-fetch — pull inspiration-account posts for structural analysis (replaces inline agent-browser)second-brain — the Content Ideas wiki page hoppers hooks, frameworks, stories; /jab-hook drafts pull candidates from theredeep-research — when a promo needs a stat or citation the draft doesn't have yetmarketingskills:social — generic social frameworks, useful when teaching strategy vs shipping your own postsmarketingskills:copywriting — for hook / headline ideation when stuck~/.claude/memory/feedback_social_link_placement.md. Body posts with inline URLs get algorithm-suppressed on both platforms.${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/voice.local.md.~/.claude/memory/feedback_promo_voice.md (if present) — conviction-coded CTAs + reader-perspective framing~/.claude/memory/feedback_social_cadence.md (if present) — cadence cap (e.g., 2 posts/day per platform)Take coreyhaines31/jab-hook from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.