feat(linkedin-thought-leadership): v1.1.0 — Q2 2026 feature release
9 improvements across 3 tracks: Onboarding: /linkedin:onboarding wizard, README Quick Start rewrite Content Quality: voice drift scoring, industry angle variants, /linkedin:carousel, /linkedin:react multi-URL comparison Analytics: automated week-rollover, day-of-week heatmap, month-over-month reports 25→27 commands. All Q2 ROADMAP items completed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
abf7322200
commit
1a8cc1942c
33 changed files with 1726 additions and 236 deletions
138
plugins/linkedin-thought-leadership/commands/carousel.md
Normal file
138
plugins/linkedin-thought-leadership/commands/carousel.md
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
---
|
||||
name: linkedin:carousel
|
||||
description: |
|
||||
Create a LinkedIn carousel post with structured slide-by-slide content and visual layout guidance.
|
||||
Carousels have the highest engagement rate (6.6%) on LinkedIn. Guides template selection,
|
||||
topic definition, and generates copy for each slide plus caption.
|
||||
Triggers on: "carousel", "slide deck", "pdf post", "swipe post", "multi-slide",
|
||||
"linkedin carousel", "document post", "create slides".
|
||||
allowed-tools:
|
||||
- Read
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
# Carousel Post Generator
|
||||
|
||||
You are a LinkedIn carousel content specialist. Create high-engagement carousel posts with structured slide content and visual layout guidance.
|
||||
|
||||
## Step 0: Load Context
|
||||
|
||||
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state and expertise areas
|
||||
- Read `assets/voice-samples/authentic-voice-samples.md` for voice profile
|
||||
- Check recent posts to avoid topic repetition
|
||||
|
||||
## Step 1: Choose Template
|
||||
|
||||
Read `assets/templates/carousel-templates.md` for the 5 templates.
|
||||
|
||||
Present the options:
|
||||
|
||||
```
|
||||
LinkedIn carousels get 6.6% average engagement — highest of all formats.
|
||||
|
||||
Choose a template:
|
||||
|
||||
1. How-To Guide — Teach a process step-by-step (8-10 slides)
|
||||
2. Listicle / Top N — Curated list of tips, tools, or lessons (8-12 slides)
|
||||
3. Story / Before-After — Personal narrative with transformation (8-10 slides)
|
||||
4. Comparison / vs. — Side-by-side analysis of two approaches (8-10 slides)
|
||||
5. Framework / Mental Model — Present an original framework (8-10 slides)
|
||||
```
|
||||
|
||||
Use AskUserQuestion for selection.
|
||||
|
||||
## Step 2: Define Topic and Audience
|
||||
|
||||
Ask:
|
||||
1. "What's the core topic or insight for this carousel?"
|
||||
2. "Who is the primary audience? (e.g., developers, managers, executives)"
|
||||
|
||||
If the user's expertise areas are set in the state file, suggest topics aligned with their pillars.
|
||||
|
||||
## Step 3: Generate Slide Content
|
||||
|
||||
Using the selected template structure from `carousel-templates.md`, generate content for each slide.
|
||||
|
||||
**Output format for each slide:**
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
SLIDE [N] of [TOTAL] — [Purpose from template]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
HEADER:
|
||||
[Bold headline text — max 8 words]
|
||||
|
||||
BODY:
|
||||
[Line 1 — max 50 chars]
|
||||
[Line 2 — max 50 chars]
|
||||
[Line 3 — max 50 chars]
|
||||
[Line 4 — max 50 chars (optional)]
|
||||
[Line 5 — max 50 chars (optional)]
|
||||
|
||||
VISUAL NOTE:
|
||||
[Layout suggestion: e.g., "Icon: lightbulb left of header",
|
||||
"Before/After split layout", "Numbered list with accent color",
|
||||
"Summary table with checkmarks"]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
**Slide content rules:**
|
||||
- Max 5-7 lines of body text per slide (mobile readability)
|
||||
- One idea per slide — if it needs two points, it needs two slides
|
||||
- Use the template's formula for each slide type (cover, step, item, CTA, etc.)
|
||||
- Headlines in sentence case, not ALL CAPS
|
||||
- Include the template-specific patterns (Pro tip, Before/After, Winner, etc.)
|
||||
|
||||
## Step 4: Generate Caption
|
||||
|
||||
Generate a caption following the carousel caption structure from the template file:
|
||||
|
||||
1. **Hook** (first line): Question, bold claim, or surprising stat — 110-140 chars
|
||||
2. **Context** (1-2 lines): Why this matters to the audience
|
||||
3. **Swipe prompt**: Reference a specific slide to create curiosity
|
||||
4. **Engagement CTA**: Question that invites comments
|
||||
5. **Hashtags**: 3-4 maximum
|
||||
|
||||
Target: 300-500 characters total.
|
||||
|
||||
Match the user's voice profile — check against avoid-list and tone markers.
|
||||
|
||||
## Step 5: Quality Check
|
||||
|
||||
Run against the Carousel Quality Checklist from `carousel-templates.md`:
|
||||
|
||||
- [ ] Cover slide has a clear promise or question
|
||||
- [ ] Each slide has one point (not multiple ideas)
|
||||
- [ ] Text is readable on mobile (keep lines short)
|
||||
- [ ] 8-10 slides total
|
||||
- [ ] Last slide has a clear CTA
|
||||
- [ ] Caption hooks attention and prompts swipe
|
||||
- [ ] Consistent structure across all slides
|
||||
|
||||
If any item fails, fix before presenting.
|
||||
|
||||
## Step 6: Present Complete Deck
|
||||
|
||||
Show all slides in order, then the caption, then design guidance:
|
||||
|
||||
```
|
||||
DESIGN GUIDE
|
||||
━━━━━━━━━━━━
|
||||
Dimensions: 1080 × 1350 px (4:5 portrait)
|
||||
Font: Sans-serif, 24pt+ body, 36pt+ headlines
|
||||
Colors: Pick 3 — background, text, accent
|
||||
Export: PDF format, under 100 MB
|
||||
Tools: Canva, PowerPoint, Figma, or Keynote
|
||||
|
||||
Create one slide per page using the content above.
|
||||
Export as PDF and upload directly to LinkedIn.
|
||||
```
|
||||
|
||||
Use AskUserQuestion: "Want to refine any slides, or is this ready for design?"
|
||||
|
||||
## Step 7: State Update
|
||||
|
||||
If the user confirms the carousel is ready:
|
||||
- Note in state file: topic, format=carousel, slide count
|
||||
- Suggest: "After publishing, run the 5x5x5 engagement method for maximum reach."
|
||||
|
|
@ -27,23 +27,6 @@ The follower segment only appears if `follower_count > 0` in the state file.
|
|||
|
||||
If the state file doesn't exist, show: "No LinkedIn state tracked yet. State tracking starts when you create your first post."
|
||||
|
||||
## New User Detection
|
||||
|
||||
After reading the state file, check if `first_post_date` is null/empty AND `posts_this_week` is 0. If so, this is a new user. Show a condensed getting-started menu INSTEAD of the full command list:
|
||||
|
||||
**You haven't posted yet! Here's where to start:**
|
||||
|
||||
| # | Action | Time |
|
||||
|---|--------|------|
|
||||
| 0 | **Profile audit** — optimize for 360Brew algorithm | 10 min |
|
||||
| 1 | **Personalize** — set up your voice, audience, and goals | 15 min |
|
||||
| 2 | **First post** — guided creation with hand-holding | 10 min |
|
||||
| 3 | **Show all commands** — I know what I'm doing |
|
||||
|
||||
Use AskUserQuestion with these 4 options. Route 0 → `/linkedin:profile`, 1 → `/linkedin:setup`, 2 → `/linkedin:first-post`, 3 → continue to the full command list below.
|
||||
|
||||
**Skip this section entirely if `first_post_date` is set or `posts_this_week` > 0.** Proceed to Upcoming Posts and the full command list.
|
||||
|
||||
## Upcoming Posts
|
||||
|
||||
After the status line, show upcoming scheduled posts from the queue:
|
||||
|
|
@ -81,6 +64,7 @@ Present these options to the user:
|
|||
|
||||
| Command | Purpose |
|
||||
|---------|---------|
|
||||
| `/linkedin:onboarding` | Full onboarding wizard — profile, setup, and first post in one flow |
|
||||
| `/linkedin:first-post` | First-post accelerator — zero to published in under 10 minutes |
|
||||
| `/linkedin:setup` | Guided setup to populate empty asset templates with your real voice, case studies, and audience data |
|
||||
|
||||
|
|
@ -93,6 +77,7 @@ Present these options to the user:
|
|||
| `/linkedin:quick` | Fast 5-minute post using the 3-line formula |
|
||||
| `/linkedin:templates` | Browse and apply proven post templates |
|
||||
| `/linkedin:pipeline` | Full end-to-end workflow from idea to post-publish analysis |
|
||||
| `/linkedin:carousel` | Create structured multi-slide carousel with visual layout guidance |
|
||||
| `/linkedin:video` | Create video scripts with hook, body, CTA, captions, and thumbnail suggestions |
|
||||
| `/linkedin:batch` | Create a full week of content in one session |
|
||||
| `/linkedin:calendar` | View and manage your post scheduling queue |
|
||||
|
|
@ -133,7 +118,7 @@ Use AskUserQuestion to ask:
|
|||
|
||||
**What would you like to do?**
|
||||
|
||||
0. **First post** — Never posted? Start here (10 min)
|
||||
0. **Onboarding wizard** — Just installed? Full guided flow: profile → setup → first post
|
||||
1. **Setup & personalize** — Guided setup to populate voice, case studies, frameworks, and audience data
|
||||
2. **Create a post** — Full post workflow with angle selection
|
||||
3. **React to a URL** — Turn an article/news into a post
|
||||
|
|
@ -170,6 +155,7 @@ If the user already has content they want to turn into a post:
|
|||
## Direct Routing
|
||||
|
||||
If the user's intent is clear from context:
|
||||
- Mentions "onboarding" or "just installed" or "walk me through" or "setup wizard" or "start from scratch" → Route to `/linkedin:onboarding`
|
||||
- Mentions "first post" or "never posted" or "get started" or "new to linkedin" or "help me start" → Route to `/linkedin:first-post`
|
||||
- Mentions "setup" or "personalize" or "templates empty" or "score" or "fill in assets" or "configure plugin" → Route to `/linkedin:setup`
|
||||
- Mentions "react" or "this article" or "this url" or "turn this into" or "share this news" → Route to `/linkedin:react`
|
||||
|
|
@ -182,6 +168,7 @@ If the user's intent is clear from context:
|
|||
- Mentions "profile" or "360Brew" → Route to `/linkedin:profile`
|
||||
- Mentions "not working" or "low reach" → Route to `/linkedin:analyze`
|
||||
- Mentions "strategy" or "growth plan" → Route to `/linkedin:strategy`
|
||||
- Mentions "carousel" or "slides" or "slide deck" or "pdf post" or "swipe" or "document post" → Route to `/linkedin:carousel`
|
||||
- Mentions "template" → Route to `/linkedin:templates`
|
||||
- Mentions "audit" or "review strategy" → Route to `/linkedin:audit`
|
||||
- Mentions "authority" or "signature content" → Route to `/linkedin:authority`
|
||||
|
|
|
|||
182
plugins/linkedin-thought-leadership/commands/onboarding.md
Normal file
182
plugins/linkedin-thought-leadership/commands/onboarding.md
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
---
|
||||
name: linkedin:onboarding
|
||||
description: |
|
||||
Multi-step onboarding wizard that guides new users through profile → setup → first-post
|
||||
as one cohesive flow. Designed for users who have just installed the plugin and want a
|
||||
single guided path instead of navigating 25 commands on their own.
|
||||
Triggers on: "onboarding", "get started", "new user", "setup wizard", "start from scratch",
|
||||
"just installed", "how do I start", "walk me through", "linkedin onboarding".
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
# LinkedIn Onboarding Wizard
|
||||
|
||||
You are a LinkedIn thought leadership onboarding guide. Walk the user through profile optimization, plugin personalization, and their first post — all in one session.
|
||||
|
||||
## Step 0: Load Context and Check State
|
||||
|
||||
Read `~/.claude/linkedin-thought-leadership.local.md` for current state.
|
||||
|
||||
**Already onboarded check:** If `first_post_date` is set (not null) AND personalization score > 50:
|
||||
- Show: "You've already completed onboarding (first post: [date], personalization: [score]%)."
|
||||
- Use AskUserQuestion: "Would you like to re-run a specific phase?"
|
||||
1. Re-optimize profile (360Brew) → jump to Phase 1
|
||||
2. Improve personalization → jump to Phase 2
|
||||
3. Create another post → suggest `/linkedin:post` or `/linkedin:quick`
|
||||
4. Exit
|
||||
|
||||
If not already onboarded, continue to Phase 1.
|
||||
|
||||
## Phase 1: Profile Optimization (360Brew)
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════╗
|
||||
║ ONBOARDING — Phase 1 of 3: Profile ║
|
||||
╚═══════════════════════════════════════╝
|
||||
```
|
||||
|
||||
Explain briefly:
|
||||
- LinkedIn's 360Brew algorithm (January 2026) validates your profile BEFORE distributing your content
|
||||
- A weak profile means even great posts get suppressed
|
||||
- This takes 5 minutes and has outsized impact on everything else
|
||||
|
||||
Use AskUserQuestion:
|
||||
1. **Guide me through profile optimization** — I want the full 360Brew checklist
|
||||
2. **Already optimized** — I've already done this, skip ahead
|
||||
3. **Do it later** — Skip for now, I'll run `/linkedin:profile` later
|
||||
|
||||
**If option 1:** Walk through the core 360Brew checklist (condensed from `/linkedin:profile`):
|
||||
- [ ] Professional headshot (face visible, good lighting)
|
||||
- [ ] Headline with expertise + value prop (not just job title)
|
||||
- [ ] About section with story arc + CTA (not a resume)
|
||||
- [ ] Banner image related to expertise
|
||||
- [ ] Featured section with best content or lead magnet
|
||||
- [ ] Creator mode ON (if available)
|
||||
|
||||
After each item, ask if done or needs to skip. Don't block — mark skipped items as "recommended later."
|
||||
|
||||
**If option 2 or 3:** Move to Phase 2.
|
||||
|
||||
## Phase 2: Plugin Personalization
|
||||
|
||||
```
|
||||
╔═════════════════════════════════════════════╗
|
||||
║ ONBOARDING — Phase 2 of 3: Personalization ║
|
||||
╚═════════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
Calculate personalization score:
|
||||
```bash
|
||||
node --input-type=module -e "
|
||||
import { calculateScore } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/personalization-score.mjs';
|
||||
const result = calculateScore('${CLAUDE_PLUGIN_ROOT}');
|
||||
console.log(JSON.stringify(result));
|
||||
"
|
||||
```
|
||||
|
||||
Show the score dashboard:
|
||||
```
|
||||
Personalization Score: [XX]%
|
||||
|
||||
Category Weight Status
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Voice samples 25 [✓ Done / ○ Empty]
|
||||
User profile 20 [✓ Done / ○ Empty]
|
||||
Case studies 15 [✓ Done / ○ Empty]
|
||||
Frameworks 10 [✓ Done / ○ Empty]
|
||||
High-eng. posts 10 [✓ Done / ○ Empty]
|
||||
Demographics 8 [✓ Done / ○ Empty]
|
||||
Engagement patterns 7 [✓ Done / ○ Empty]
|
||||
Post templates 5 [✓ Done / ○ Empty]
|
||||
```
|
||||
|
||||
Identify the **top 2 incomplete categories by weight** and guide through those:
|
||||
|
||||
**Priority setup (2 categories only — keep it focused):**
|
||||
|
||||
Use AskUserQuestion:
|
||||
1. **Set up voice profile** (weight: 25) — 5 questions about your writing style, or paste 3 examples
|
||||
2. **Set up user profile** (weight: 20) — Your name, industry, expertise areas, audience
|
||||
3. **Both** — Do voice + user profile now
|
||||
4. **Skip for now** — I'll run `/linkedin:setup` later for the full setup
|
||||
|
||||
**If voice selected:** Run a quick 5-question voice interview:
|
||||
1. "How would you describe your communication style in one sentence?"
|
||||
2. "What words or phrases do you naturally use?" (give examples)
|
||||
3. "What tone turns you off in LinkedIn content?"
|
||||
4. "Paste a paragraph you've written that sounds like YOU (email, doc, anything)"
|
||||
5. "Any words or phrases you'd NEVER use?"
|
||||
|
||||
Save responses to `assets/voice-samples/authentic-voice-samples.md` under a new section `## Quick Voice Interview` (append, don't overwrite existing content).
|
||||
|
||||
**If user profile selected:** Ask for:
|
||||
1. Full name
|
||||
2. Industry
|
||||
3. Job title / role
|
||||
4. 3-5 expertise areas (these become your content pillars)
|
||||
5. Target audience description
|
||||
|
||||
Save to `config/user-profile.local.md`.
|
||||
|
||||
After setup, recalculate and show updated score.
|
||||
|
||||
## Phase 3: First Post
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ ONBOARDING — Phase 3 of 3: First Post ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
Check `first_post_date` in state file:
|
||||
|
||||
**If null (no first post yet):**
|
||||
- "You're ready to create your first post! This is the most important step — your first post doesn't need to be perfect, it needs to EXIST."
|
||||
- Use AskUserQuestion:
|
||||
1. **Guided first post** (10 min) — Maximum hand-holding, simple format → routes to `/linkedin:first-post` workflow
|
||||
2. **Quick post** (5 min) — You already know what to say → routes to `/linkedin:quick` workflow
|
||||
3. **Not now** — I'll post later
|
||||
|
||||
**If first_post_date is set:**
|
||||
- "You already have your first post (published [date]). Ready to create your next one?"
|
||||
- Use AskUserQuestion:
|
||||
1. **Create a new post** → suggest `/linkedin:post`
|
||||
2. **Quick post** → suggest `/linkedin:quick`
|
||||
3. **Exit onboarding**
|
||||
|
||||
**If user chooses to post (option 1 or 2):** Don't invoke the sub-command directly — instead, tell them:
|
||||
"Run `/linkedin:first-post` to start the guided first-post flow."
|
||||
or
|
||||
"Run `/linkedin:quick` to create a quick post."
|
||||
|
||||
This keeps the onboarding context clean and lets the post commands manage their own workflow.
|
||||
|
||||
## Phase 4: Summary and Next Steps
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ ONBOARDING COMPLETE ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
Show final status:
|
||||
```
|
||||
Profile: [Optimized / Skipped — run /linkedin:profile later]
|
||||
Personalization: [XX]% [↑ from YY% if improved]
|
||||
First post: [Published DATE / Pending — run /linkedin:first-post]
|
||||
```
|
||||
|
||||
**What's next — your first week:**
|
||||
1. Create 2-3 posts this week (`/linkedin:post` or `/linkedin:quick`)
|
||||
2. Engage with 5 posts in your niche before and after publishing (5x5x5 method)
|
||||
3. Import your first analytics data after 7 days (`/linkedin:import`)
|
||||
4. Run `/linkedin:report` after your first week to see what's working
|
||||
|
||||
**Power commands to explore:**
|
||||
- `/linkedin:batch` — Plan a full week of content in one session
|
||||
- `/linkedin:react` — Turn articles and news into posts
|
||||
- `/linkedin:strategy` — Growth strategy tailored to your follower level
|
||||
- `/linkedin` — See all 25 commands anytime
|
||||
|
|
@ -23,16 +23,6 @@ You are a LinkedIn thought leadership content creator. Guide the user through cr
|
|||
First, load persistent state and personalization:
|
||||
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state (streak, weekly progress, recent topics)
|
||||
- Read `skills/linkedin-thought-leadership/SKILL.md` for user profile, voice settings, and preferences
|
||||
- Read `config/user-profile.local.md` (if it exists) for expertise areas and audience
|
||||
|
||||
### Readiness Check
|
||||
|
||||
If `config/user-profile.local.md` doesn't exist OR `assets/voice-samples/authentic-voice-samples.md` contains `[Your Name]` in the title line, show this non-blocking notice:
|
||||
|
||||
> This plugin isn't personalized yet. Content will use generic best practices.
|
||||
> Run `/linkedin:setup` after this session to unlock voice-matched content.
|
||||
|
||||
Then proceed normally — do not block content creation.
|
||||
|
||||
Check state for topic planning:
|
||||
- Compare intended topic against "Recent Posts" in state file
|
||||
|
|
@ -73,6 +63,8 @@ If they provide a URL, use WebFetch to extract the content first.
|
|||
|
||||
Read `references/thought-leadership-angles.md` for the 8 universal angles.
|
||||
|
||||
**Industry-specific angles:** If `config/user-profile.local.md` exists and has an `industry` field, check the "Industry Angle Variants" section in `thought-leadership-angles.md` for the matching industry table. Use the industry-specific starter questions and example hooks to generate more targeted angle suggestions.
|
||||
|
||||
Present 2-3 possible angles for their content:
|
||||
|
||||
```
|
||||
|
|
@ -101,7 +93,7 @@ Based on content type, recommend a format:
|
|||
| Frameworks/processes | Carousel or Native document |
|
||||
| Opinions/takes | Text-only medium post |
|
||||
|
||||
If carousel, outline the slide structure.
|
||||
If carousel is the best format, recommend: "This topic works great as a carousel. Run `/linkedin:carousel` for the full slide-by-slide generator with 5 proven templates."
|
||||
|
||||
## Step 4: Structure and Write
|
||||
|
||||
|
|
|
|||
|
|
@ -27,17 +27,6 @@ Read `skills/linkedin-thought-leadership/SKILL.md` for:
|
|||
- Core expertise areas (for topical alignment)
|
||||
- Phrases they commonly use
|
||||
|
||||
Read `config/user-profile.local.md` (if it exists) for expertise areas and audience.
|
||||
|
||||
### Readiness Check
|
||||
|
||||
If `config/user-profile.local.md` doesn't exist OR `assets/voice-samples/authentic-voice-samples.md` contains `[Your Name]` in the title line, show this non-blocking notice:
|
||||
|
||||
> This plugin isn't personalized yet. Content will use generic best practices.
|
||||
> Run `/linkedin:setup` after this session to unlock voice-matched content.
|
||||
|
||||
Then proceed normally — do not block content creation.
|
||||
|
||||
Read `assets/quick-post-resources.md` for:
|
||||
- Hooks bank
|
||||
- CTAs bank
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ First, load persistent state and personalization:
|
|||
- Read `assets/voice-samples/authentic-voice-samples.md` for voice profile
|
||||
- Check recent posts to avoid topic repetition within 7 days
|
||||
|
||||
## Step 1: Get the URL
|
||||
## Step 1: Get URL(s)
|
||||
|
||||
If the user hasn't provided a URL, ask for one. Accept:
|
||||
- News articles
|
||||
|
|
@ -36,6 +36,17 @@ If the user hasn't provided a URL, ask for one. Accept:
|
|||
- Company announcements
|
||||
- Social media threads
|
||||
|
||||
**Multiple URLs:** If the user provides 2-3 URLs, or if you detect multiple links, use AskUserQuestion:
|
||||
|
||||
```
|
||||
I see multiple URLs. Would you like to:
|
||||
1. React to a single article (pick the most interesting one)
|
||||
2. Compare and contrast 2-3 articles into one post
|
||||
```
|
||||
|
||||
If option 2 → jump to **Comparison Path** (Step 1b below).
|
||||
If option 1 or single URL → continue to Step 2.
|
||||
|
||||
## Step 2: Fetch and Analyze Content
|
||||
|
||||
Use WebFetch to extract the content from the URL. Ask WebFetch to extract:
|
||||
|
|
@ -143,6 +154,96 @@ After the post is finalized, update `~/.claude/linkedin-thought-leadership.local
|
|||
- Update `longest_streak` if current exceeds it
|
||||
- Add entry to "## Recent Posts": [YYYY-MM-DD] "Hook text..." (char count) - topic
|
||||
|
||||
---
|
||||
|
||||
## Comparison Path (Multi-URL)
|
||||
|
||||
When the user wants to compare 2-3 articles into one post.
|
||||
|
||||
### Step 1b: Collect URLs
|
||||
|
||||
Collect 2-3 URLs. Minimum 2, maximum 3. If the user provided them already, confirm the list.
|
||||
|
||||
### Step 2b: Fetch All Sources
|
||||
|
||||
Use WebFetch on each URL. For each, extract:
|
||||
- **Title** and author/source
|
||||
- **Key claims** (3-5 bullet points)
|
||||
- **Stance/argument** — what position does the author take?
|
||||
- **Data points** — any statistics or evidence cited
|
||||
|
||||
### Step 3b: Synthesis Analysis
|
||||
|
||||
Analyze across all sources:
|
||||
|
||||
| Dimension | Analysis |
|
||||
|-----------|----------|
|
||||
| **Common ground** | Where do the sources agree? |
|
||||
| **Tension points** | Where do they disagree or contradict? |
|
||||
| **Blind spots** | What are ALL of them missing? |
|
||||
| **Your unique angle** | Given your expertise, what perspective do you add? |
|
||||
|
||||
### Step 4b: Choose Comparison Angle
|
||||
|
||||
Present 3 angles via AskUserQuestion:
|
||||
|
||||
1. **Synthesis** — "These perspectives seem opposed, but the truth is more nuanced. Here's how I connect them."
|
||||
2. **Contrarian to all** — "Both/all articles miss the real issue. Here's what actually matters."
|
||||
3. **Pattern analysis** — "The fact that [N] experts are all writing about [X] tells us something about [Y]."
|
||||
|
||||
### Step 5b: Generate Comparison Draft
|
||||
|
||||
Structure:
|
||||
|
||||
**Hook (110-140 chars):** Your synthesized perspective — NOT "I read 3 articles about..." Avoid mentioning the number of sources in the hook.
|
||||
|
||||
**The conversation (1-2 sentences):** Briefly describe the debate or trend ("There's a growing conversation about [X]. Perspectives range from [A] to [B].")
|
||||
|
||||
**Your lens (main body):**
|
||||
- What the synthesis reveals that individual pieces miss
|
||||
- Concrete example from your experience that connects the dots
|
||||
- Where you agree and where you push back
|
||||
|
||||
**Implication (1-2 sentences):** What this convergence/divergence means for the audience.
|
||||
|
||||
**CTA:** Question that invites people to take a side or share their own synthesis.
|
||||
|
||||
### Critical Rules (comparison-specific):
|
||||
- **NO URLs in post body** — all links go in first comment
|
||||
- Post must stand alone without reading any of the sources
|
||||
- Don't summarize each article — synthesize across them
|
||||
- Your perspective is the star, not the articles
|
||||
- Character target: 1,200-1,800 chars
|
||||
|
||||
### Step 6b: Quality Check
|
||||
|
||||
Same as Step 6, plus:
|
||||
- [ ] Post is a synthesis, not a summary of each article
|
||||
- [ ] Hook doesn't mention number of sources read
|
||||
- [ ] Each source is credited in the first comment, not the post
|
||||
|
||||
### Step 7b: Present Draft
|
||||
|
||||
Show:
|
||||
1. The main draft with character count
|
||||
2. 2 alternative hooks
|
||||
3. Suggested first comment with ALL URLs:
|
||||
```
|
||||
Sources referenced:
|
||||
1. "[Title]" by [Author] — [URL]
|
||||
2. "[Title]" by [Author] — [URL]
|
||||
3. "[Title]" by [Author] — [URL] (if applicable)
|
||||
```
|
||||
4. Recommended posting time
|
||||
|
||||
Offer same refinement options as Step 7.
|
||||
|
||||
### Step 8b: State Update
|
||||
|
||||
Same as Step 8 — update state file with topic, increment counts, etc.
|
||||
|
||||
---
|
||||
|
||||
## Reference Files
|
||||
|
||||
- `assets/voice-samples/authentic-voice-samples.md` — Voice matching
|
||||
|
|
|
|||
|
|
@ -37,18 +37,32 @@ You need to import your LinkedIn analytics first:
|
|||
1. Run `/linkedin:import` to import CSV data
|
||||
2. Then come back to generate reports
|
||||
|
||||
## Step 2: Determine Week to Report On
|
||||
|
||||
If no week specified, default to current week or most recent available data.
|
||||
## Step 2: Choose Report Type
|
||||
|
||||
**Ask the user** using AskUserQuestion:
|
||||
|
||||
```
|
||||
What kind of report would you like?
|
||||
|
||||
1. Weekly report (default) — performance for a specific ISO week
|
||||
2. Monthly report — month summary with month-over-month comparison
|
||||
3. Day-of-week heatmap — which days perform best
|
||||
|
||||
Enter your choice:
|
||||
```
|
||||
|
||||
**If monthly (option 2):** Ask for month (YYYY-MM format, default to current month), then jump to **Step 2b**.
|
||||
**If heatmap (option 3):** Run the heatmap CLI command and jump to **Step 6c**.
|
||||
**If weekly (option 1 or default):** Continue below.
|
||||
|
||||
### Weekly: Determine Week
|
||||
|
||||
```
|
||||
Which week would you like a report for?
|
||||
|
||||
Available options:
|
||||
- "current" or "this week" - Current ISO week (2026-W05)
|
||||
- "last week" - Previous ISO week (2026-W04)
|
||||
- "current" or "this week" - Current ISO week
|
||||
- "last week" - Previous ISO week
|
||||
- Specific week: "2026-W03", "2025-W52", etc.
|
||||
- "latest" - Most recent week with data
|
||||
|
||||
|
|
@ -62,6 +76,26 @@ To get current ISO week:
|
|||
date +%Y-W%V
|
||||
```
|
||||
|
||||
### Step 2b: Monthly Report
|
||||
|
||||
If the user chose monthly:
|
||||
|
||||
```bash
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" report --month <YYYY-MM>
|
||||
```
|
||||
|
||||
Read the generated JSON from `assets/analytics/monthly-reports/<YYYY-MM>.json`. Present the monthly summary with MoM comparison deltas, weekly breakdown, and top performers. Then jump to Step 7 for deep-dive options.
|
||||
|
||||
### Step 2c: Heatmap
|
||||
|
||||
If the user chose heatmap:
|
||||
|
||||
```bash
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" heatmap
|
||||
```
|
||||
|
||||
Present the day-of-week matrix and best-day findings. Then jump to Step 7 for deep-dive options.
|
||||
|
||||
## Step 3: Run Report Generation
|
||||
|
||||
Execute the report CLI command:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue