{"id":"jab-hook","name":"jab-hook","summary":"ゲイリー・ヴェイナーチャックのジャブ・ジャブ・ジャブ・右フックのフレームワークは、XやLinkedInの個人ポートフォリオローテーションに適用されました。","body":"# /jab-hook — Jab-jab-jab-right-hook for a personal portfolio\n\nGary 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.\n\n**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/`.\n\n## Mental model\n\n- **N rotation slots** (configured in `~/.config/makerskills/jab-hook/properties.yaml`): one per property you want to promote on rotation\n- **~2 promo posts/week** → each property cycles every ~3 weeks at equal weight\n- **Non-promo days**: 50/50 build-in-public vs educational\n- **Target weekly rhythm**: ~2 promo + ~2–3 BIP + ~2–3 educational\n- **Platforms**: X + LinkedIn via your personal Typefully workspace\n\n## Step 1 — Pick the mode\n\nDetect from the trigger:\n\n| User says | Mode |\n|---|---|\n| \"plan my socials,\" \"next week's posts\" | **plan** |\n| \"what should I post,\" \"next promo,\" \"pick next\" | **pick-next** |\n| \"audit my socials,\" \"what's overdue,\" \"what haven't I posted about\" | **audit** |\n| \"draft a promo for X,\" \"BIP post about Y,\" \"educational about Z\" | **draft** |\n\nIf ambiguous, confirm.\n\n## Step 2 — Load context\n\n1. Read `references/properties.md` — the 6 rotation slots and angle ideas\n2. Read `references/voice.md` — the user's voice rules per platform\n3. Read `references/content-types.md` — templates for promo / BIP / educational\n4. Pull recent posts from your personal Typefully workspace:\n   - First run: call `mcp__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).\n   - Call `mcp__typefully__typefully_list_drafts` filtered to the last 30 days\n   - Classify each as promo / BIP / educational by content\n5. Compute **days since last promo** for each of the 6 slots\n\n## Step 3 — Mode logic\n\n### plan (7-day plan)\n- Slot the 1–2 most overdue properties as **promo** posts\n- Fill remaining 5 days with **alternating** BIP and educational (50/50)\n- Output as a table: `Day | Type | Property/Topic | Hook | Draft summary`\n- Don't stack two promo on consecutive days\n- After the user approves the plan, offer to draft each one in sequence\n\n### pick-next\n- Identify the most overdue property\n- If most overdue < 14 days, suggest a BIP or educational instead (whichever is less recent)\n- Draft 1 post; ask before syndicating\n\n### audit\n- Report: days since last promo per property, ordered by most overdue\n- Flag any property >21 days as overdue\n- Suggest the next 1–2 moves\n\n### draft\n- Skip rotation logic — draft the requested post\n- Use the right content-type template\n\n## Step 4 — Draft\n\nFollow `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.\n\n**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.\n\n### Optional: inspiration scan\n\nFor `promo` and `educational` posts, optionally scan inspiration accounts (`references/inspiration.md`) before drafting:\n\n1. Pick 1–2 accounts whose audience overlaps with the property\n2. Pull recent posts (agent-browser if it works on LinkedIn; otherwise ask the user to paste examples or fall back to their X/newsletter)\n3. Extract structural patterns: hook openers, post length, line-break rhythm, CTA styles\n4. Apply ONE pattern to the user's voice — never mimic phrasing\n5. Log new patterns in `${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-only\n\nSkip inspiration scan when the user says \"just draft it\" or when iterating on an existing post.\n\n## Step 5 — Syndicate to Typefully\n\nAsk: *\"Push to Typefully now? (X + LinkedIn, your personal workspace)\"*\n\nIf yes:\n1. Read social set ID from `${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/typefully.yaml` (setup notes in `references/typefully-config.md`)\n2. Call `mcp__typefully__typefully_create_draft` once for X, once for LinkedIn (or once with both platforms if the social set spans both)\n3. If the draft has a first-comment link, configure Typefully to add it automatically (LinkedIn auto-comment / X reply). If the MCP doesn't support auto-comment for one of the platforms, surface the comment text so the user can paste it after publishing.\n4. Default to **draft** state (not scheduled) — the user reviews in Typefully UI before sending\n5. Return the Typefully draft URLs\n\n## Composes with\n\n- `paste` — clean output for pasting into Typefully / LinkedIn / X manually if the MCP path doesn't fit\n- `social-fetch` — pull inspiration-account posts for structural analysis (replaces inline agent-browser)\n- `second-brain` — the `Content Ideas` wiki page hoppers hooks, frameworks, stories; `/jab-hook` drafts pull candidates from there\n- `deep-research` — when a promo needs a stat or citation the draft doesn't have yet\n- `marketingskills:social` — generic social frameworks, useful when teaching strategy vs shipping your own posts\n- `marketingskills:copywriting` — for hook / headline ideation when stuck\n\n## Notes on quality\n\n- **1 promo per week per property is the floor, not the ceiling.** Rotation compounds when it's predictable — 4 properties × 1 promo/week = 4 promo weeks/month. Educational + BIP + community fill the rest.\n- **Never mimic phrasing from inspiration accounts.** Extract *structure* (hook opener type, line-break rhythm, CTA style) and apply to your own voice. Voice is the moat; copying phrasing destroys it.\n- **Links belong in first comments, not the body** for LinkedIn + X. Documented in `~/.claude/memory/feedback_social_link_placement.md`. Body posts with inline URLs get algorithm-suppressed on both platforms.\n- **Draft state, not scheduled state.** Every Typefully push defaults to draft — human review in the Typefully UI before publish is non-negotiable. Automated scheduling of unreviewed drafts has repeatedly produced posts the user regrets.\n- **Reader-perspective framing.** *\"You'll know X\"* not *\"we'll teach you X.\"* *\"What you're guaranteed\"* not *\"what we'd guarantee.\"*\n- **Voice.local.md overrides the shipped voice.md.** Personal voice rules never live in the public repo — always in `${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/jab-hook/voice.local.md`.\n- **Cadence cap: 2 posts/day per platform, per account.** More than that degrades reach + reads as spam.\n\n## Memory references\n\n- `~/.claude/memory/feedback_promo_voice.md` (if present) — conviction-coded CTAs + reader-perspective framing\n- `~/.claude/memory/feedback_social_cadence.md` (if present) — cadence cap (e.g., 2 posts/day per platform)","author":"@coreyhaines31","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/coreyhaines31/makerskills/tree/main/skills/jab-hook","license":"MIT","category":"document","lang":"en","tokens":1806,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/content-types.md","size":3448,"sha256":"9e4b177793c743ecbc245ef9547b35a85ef0ab9668bb8015c9293ca9e6ebb8f9"},{"path":"references/inspiration.example.md","size":3374,"sha256":"103e160c24e265c3238d7b418055a88ac9fe4fc18c7975ca113f5fcd0127d63f"},{"path":"references/inspiration.md","size":3712,"sha256":"7f82571ef0a970ac36f8f4a96e7332308bcd2a3e62c6fa7b7df36cc420285096"},{"path":"references/patterns.md","size":1644,"sha256":"4efe2dcdf62335571448a421dfd94aa5f987454ca775fd8f241acf7b45598545"},{"path":"references/properties.example.yaml","size":1720,"sha256":"2ea8811c33ccc699672cbda296dc9bbe237fa90f6274e209187b24211a029df2"},{"path":"references/properties.md","size":1609,"sha256":"33341f2ffd592037fba4863810e1e6162e388af077b13828eca654ae616636e1"},{"path":"references/typefully-config.example.yaml","size":1039,"sha256":"1304f9d504877c736b3d97a45b17c1c70c4bc95dc1f6913f4131a37ef505c5e7"},{"path":"references/typefully-config.md","size":1212,"sha256":"6715871afb97aa1223cafd083a7c20909f1d4ecf6de43c382404ff327f871d4a"},{"path":"references/voice.md","size":3217,"sha256":"cb479bce39ba8f5937faa7daaedb3a37e2fcdb85c6729a7485824b1872255717"}],"requires":{"mcp":["typefully"],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":["www.instagram.com","www.linkedin.com","x.com"]}}