chore(linkedin): v2.0.0 — import trim, router gating, full doc pass (S20)
This commit is contained in:
parent
930836597e
commit
8de481399e
12 changed files with 146 additions and 108 deletions
|
|
@ -9,7 +9,7 @@ plugins/
|
|||
ai-psychosis/ v1.0.0 — Interaction awareness (sycophancy, reinforcement loops)
|
||||
config-audit/ v3.1.0 — Configuration intelligence (health, opportunities, auto-fix, whats-active)
|
||||
graceful-handoff/ v2.1.0 — Auto-trigger handoff via Stop hook (skill + JSON pipeline + 4-step model-aware context resolution)
|
||||
linkedin-thought-leadership/ v1.2.0 — LinkedIn content pipeline + analytics
|
||||
linkedin-thought-leadership/ v2.0.0 — Full-spectrum LinkedIn content engine (short-form feed + long-form newsletter). v2.0.0 consolidated surface (27→24 commands, 16→14 agents) + added `/linkedin:newsletter` orchestrator with fact-check + persona-sweep gates BEFORE lock. Render pipeline migrated in-plugin (self-hosted OFL-1.1 fonts). Built across 21 Voyage sessions.
|
||||
llm-security/ v7.7.2 — Security scanning, auditing, threat modeling. HTML report output for all 18 skill commands (render-report CLI + canonical ESM module mirrored bit-identical into the playground). v7.7.2 translated the remaining Norwegian surface text in the playground UI, the canonical renderer, the agent prompts, and the README/CLAUDE.md state sections to English. v7.7.1 stripped the playground to the catalog as the only routable surface.
|
||||
ms-ai-architect/ v1.15.0 — Microsoft AI architecture (Cosmo Skyberg persona) + manual KB-refresh slash command + v3 project-view (sidebar med 17 artifacts + main + import-modal overlay, v2-surface fjernet i v1.15.0)
|
||||
okr/ v1.0.0 — OKR guidance for Norwegian public sector
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -206,12 +206,15 @@ Key commands: `/architect`, `/architect:ros`, `/architect:security`, `/architect
|
|||
|
||||
---
|
||||
|
||||
### [LinkedIn Thought Leadership](plugins/linkedin-thought-leadership/) `v1.2.0`
|
||||
### [LinkedIn Thought Leadership](plugins/linkedin-thought-leadership/) `v2.0.0`
|
||||
|
||||
Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
|
||||
|
||||
Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content. v1.2.0 reduces friction: auto-clipboard on all content commands, max 2 interactive steps per post, deterministic state management, MCP image carousel pipeline, progressive onboarding, and iCal calendar integration for batch scheduling.
|
||||
v2.0.0 is a full-spectrum content engine: short-form feed posts AND long-form newsletter editions in one cohesive surface, with net-fewer commands and net-stronger pipeline. Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content.
|
||||
|
||||
- **Long-form `/linkedin:newsletter` orchestrator** — multi-session pipeline (research → draft → fact-check sweep → persona sweep → lock → delivery → hook-gate) with maintained edition-state. Newsletter editions, essays, series articles
|
||||
- **Two new longform-quality gates** — `fact-checker` (Opus, verifies every claim against primary sources) and `persona-reviewer` (Opus, reader-persona resonance + hook conversion). Both run BEFORE lock
|
||||
- **Render pipeline in-plugin** — `build-html.mjs`, `build-pdf.mjs`, `build-linkedin.mjs`, `build-carousel.mjs` with self-hosted Newsreader/Inter/JetBrains Mono under OFL-1.1
|
||||
- **Guided onboarding** — `/linkedin:onboarding` walks new users through profile → setup → first post in one flow
|
||||
- **360Brew profile optimization** — audit your profile against LinkedIn's creator validation criteria
|
||||
- **Full content pipeline** — ideation, drafting, publishing, 48-hour monitoring, and analytics
|
||||
|
|
@ -219,10 +222,12 @@ Updated for the January 2026 360Brew algorithm change, which validates your crea
|
|||
- **Voice training** — learns your authentic writing style and detects drift with 6-dimension scoring
|
||||
- **Analytics pipeline** — import LinkedIn CSV exports, weekly/monthly reports, day-of-week heatmap
|
||||
- **Growth strategy** — phase-specific guidance from foundation (0-1K followers) through authority (10K+)
|
||||
- **Router gating** — `/linkedin:monetize` and `/linkedin:outreach` soft-gate at ~1K followers, pointing earlier users at `/linkedin:strategy` first
|
||||
- **Friction reduction (carried from v1.2.0)** — auto-clipboard on all content commands, max 2 interactive steps per post, deterministic state management, iCal batch scheduling
|
||||
|
||||
Key commands: `/linkedin:onboarding`, `/linkedin:post`, `/linkedin:quick`, `/linkedin:carousel`, `/linkedin:react`, `/linkedin:report`
|
||||
Key commands: `/linkedin:onboarding`, `/linkedin:post`, `/linkedin:quick`, `/linkedin:newsletter`, `/linkedin:carousel`, `/linkedin:react`, `/linkedin:report`
|
||||
|
||||
16 specialized agents · 27 commands · 6 skills · 9 hooks · 24 reference docs
|
||||
14 specialized agents · 24 commands · 6 skills · 9 hooks · 24 reference docs
|
||||
|
||||
→ [Full documentation](plugins/linkedin-thought-leadership/README.md)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "linkedin-thought-leadership",
|
||||
"version": "1.2.0",
|
||||
"description": "Build LinkedIn thought leadership with algorithmic understanding, strategic consistency, and authentic engagement. Updated for the January 2026 360Brew algorithm change.",
|
||||
"version": "2.0.0",
|
||||
"description": "Full-spectrum LinkedIn content engine — feed posts, carousels, video scripts, and long-form newsletter editions — with the January 2026 360Brew algorithm baked in. Net-fewer commands, net-stronger pipeline.",
|
||||
"author": {
|
||||
"name": "Kjell Tore Guttormsen"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -5,6 +5,57 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.0.0] - 2026-05-28
|
||||
|
||||
### Summary
|
||||
Full-spectrum LinkedIn content engine — short-form feed posts AND long-form newsletter editions in one cohesive surface, with net-fewer commands and net-stronger pipeline. Built across 21 Voyage sessions (S1..S20+S1a) with 1 step = 1 session discipline. Locked decisions A–H in `docs/voyage-build-brief.md` §3.
|
||||
|
||||
### Added
|
||||
- **`/linkedin:newsletter`** — long-form orchestrator command. Multi-session pipeline: load → calibrate → research fan-out → draft → consistency/quality → fact-check sweep → persona sweep → annotate → lock → delivery → hook-gate → schedule. Maintained `edition-state.json` across sessions. Supports newsletter editions, essays, and series articles
|
||||
- **`/linkedin:outreach`** — outreach orchestrator (absorbed `/linkedin:collab` and `/linkedin:speaking`). Covers collaborations, partner pitches, and CFPs/speaking opportunities in one surface
|
||||
- **`agents/fact-checker.md`** (Opus, brown) — verifies every factual claim in long-form drafts against primary sources. Outputs 🟢/🔴/🟡 verdicts per claim. Runs BEFORE lock
|
||||
- **`agents/persona-reviewer.md`** (Opus, olive) — evaluates reader-persona resonance + hook-conversion gate. Two modes: per-persona deep review, multi-persona scoreboard. Runs BEFORE lock
|
||||
- **`render/` pipeline migrated in-plugin** — `build-html.mjs`, `build-pdf.mjs`, `build-linkedin.mjs`, `build-carousel.mjs`. Self-hosted fonts (Newsreader, Inter, JetBrains Mono) under OFL-1.1 with `render/OFL.txt`. WeasyPrint degradation: missing binary → skip-signal, not throw
|
||||
- **`config/personas.template.md`** — reader persona library. Knowledge level, time-pressure, resonance criteria per persona. Consumed by `persona-reviewer`
|
||||
- **`config/edition-state.template.json`** — schema for long-form edition state across sessions
|
||||
- **`references/longform-quality-rules.md`** — quality bar specific to long-form (different from short-form rules)
|
||||
- **Router gating** — `/linkedin:monetize` and `/linkedin:outreach` surface "unlocks at ~1K followers" guidance and point sub-1K users at `/linkedin:strategy` first
|
||||
- **`docs/agents-capability-matrix.md`** — single source of truth for which agent owns which capability. Pipeline diagram + intent table + model tier table
|
||||
|
||||
### Changed
|
||||
- **Agent merges (16 → 14):**
|
||||
- `performance-reporter` → `analytics-interpreter` (interpret + report modes, same data sources, mode-selector by trigger phrase)
|
||||
- `comment-strategist` → `engagement-coach` (5x5x5 + first-hour + CEA method + target scoring + daily routine + comment quality scorecard; upgraded haiku → sonnet since the agent now handles deeper work)
|
||||
- `content-tracker` → absorbed by `state-updater.mjs` + `analytics-interpreter`
|
||||
- `personalization-scorer` → absorbed by `personalization-score.mjs` (deterministic, no AI)
|
||||
- **Command merges (27 → 24):**
|
||||
- `/linkedin:templates` → mode in `/linkedin:quick` (8 post-type templates)
|
||||
- `/linkedin:publish` → action in `/linkedin:calendar` (mark scheduled posts as published)
|
||||
- `/linkedin:authority` → absorbed into `/linkedin:strategy` (canon for authority building, trajectory dedup)
|
||||
- `/linkedin:collab` + `/linkedin:speaking` → `/linkedin:outreach`
|
||||
- **`/linkedin:import` Step 6 analysis** — delegated to `/linkedin:report` (both consume the same `trends` CLI; no more duplicated analysis pipeline)
|
||||
- **`commands/linkedin.md` router** — newsletter row added, removed-command rows pruned, gating-rule paragraph for monetize/outreach
|
||||
- **All 6 skill catalogs** reconciled — `linkedin-content-creation`, `linkedin-analytics`, `linkedin-strategy`, `linkedin-networking`, `linkedin-thought-leadership`, `linkedin-voice` all reflect the v2.0.0 command/agent set
|
||||
|
||||
### Removed
|
||||
- `commands/templates.md` (absorbed into `commands/quick.md`)
|
||||
- `commands/publish.md` (absorbed into `commands/calendar.md`)
|
||||
- `commands/authority.md` (absorbed into `commands/strategy.md`)
|
||||
- `commands/collab.md` (absorbed into `commands/outreach.md`)
|
||||
- `commands/speaking.md` (absorbed into `commands/outreach.md`)
|
||||
- `agents/content-tracker.md`
|
||||
- `agents/personalization-scorer.md`
|
||||
- `agents/performance-reporter.md`
|
||||
- `agents/comment-strategist.md`
|
||||
|
||||
### Fixed
|
||||
- `references/glossary.md` "Authority Score" entry — corrected stale ref to `commands/authority.md` (removed) → `commands/strategy.md` (canon)
|
||||
- `scripts/test-runner.sh` `EXPECTED_AGENTS` list — reconciled to 14 agents
|
||||
|
||||
### Migration notes
|
||||
- Plugin remains fully backward-compatible from a user-perspective: removed commands now route to their absorbing command via `commands/linkedin.md`
|
||||
- v1.x users who had `commands/templates.md` etc. in muscle memory will be auto-redirected by the router
|
||||
|
||||
## [1.2.0] - 2026-04-11
|
||||
|
||||
### Summary
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# LinkedIn Thought Leadership Plugin (v1.2.0)
|
||||
# LinkedIn Thought Leadership Plugin (v2.0.0)
|
||||
|
||||
Build LinkedIn thought leadership with algorithmic understanding, strategic consistency, and authentic engagement. January 2026 360Brew algorithm update integrated.
|
||||
Full-spectrum LinkedIn content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions — with the January 2026 360Brew algorithm baked in. v2.0.0 consolidated the surface (27 commands → 24, 16 agents → 14) while adding the long-form `/linkedin:newsletter` orchestrator + two longform-quality gate agents (`fact-checker`, `persona-reviewer`).
|
||||
|
||||
## Architecture
|
||||
|
||||
|
|
@ -32,9 +32,9 @@ Build LinkedIn thought leadership with algorithmic understanding, strategic cons
|
|||
|
||||
**Hook editing:** Edit `hooks/hooks.template.json` + `hooks/prompts/*.md`, then run `python3 hooks/scripts/compile-hooks.py`. Do not edit `hooks.json` directly. Prompts are loaded at runtime by gatekeeper scripts; the compile step is only needed when adding `type: prompt` hooks.
|
||||
|
||||
## Commands (27)
|
||||
## Commands (24)
|
||||
|
||||
All content commands (post, quick, react, pipeline, first-post, video, multiplatform, carousel) auto-copy output to clipboard via `clipboard-helper.mjs`. Interactive steps are minimized — angle, format, and post type are inferred from context, with max 2 questions per post.
|
||||
All content commands (post, quick, react, pipeline, first-post, video, multiplatform, carousel, newsletter) auto-copy output to clipboard via `clipboard-helper.mjs`. Interactive steps are minimized — angle, format, and post type are inferred from context, with max 2 questions per post. **v2.0.0 net change:** 5 commands removed (`templates`, `publish`, `authority`, `collab`, `speaking` — absorbed into `quick`, `calendar`, `strategy`, `outreach` respectively) + 2 commands added (`newsletter`, `outreach`) = 27 → 24.
|
||||
|
||||
| Command | Purpose |
|
||||
|---------|---------|
|
||||
|
|
@ -46,20 +46,21 @@ All content commands (post, quick, react, pipeline, first-post, video, multiplat
|
|||
| `/linkedin:post` | Full post creation (10-15 min) |
|
||||
| `/linkedin:quick` | 5-minute quick post (3-line formula) + 8 post-type templates |
|
||||
| `/linkedin:pipeline` | Full end-to-end content pipeline |
|
||||
| `/linkedin:newsletter` | Long-form orchestrator: newsletter edition / essay / series article — multi-session pipeline with fact-check + persona-sweep BEFORE lock |
|
||||
| `/linkedin:batch` | Create a full week of content |
|
||||
| `/linkedin:calendar` | View/manage post scheduling queue + publish action (mark scheduled posts as published) |
|
||||
| `/linkedin:carousel` | Structured multi-slide carousel generator |
|
||||
| `/linkedin:video` | Video script generator (30s-2min) |
|
||||
| `/linkedin:multiplatform` | Adapt content for other platforms |
|
||||
| `/linkedin:multiplatform` | Adapt content for other platforms (short-form/cross-format; long-form → `/linkedin:newsletter`) |
|
||||
| `/linkedin:analyze` | Content/performance analysis |
|
||||
| `/linkedin:audit` | Periodic content strategy audit |
|
||||
| `/linkedin:import` | Import CSV export → structured JSON |
|
||||
| `/linkedin:import` | Import CSV export → structured JSON (delegates analysis to `/linkedin:report`) |
|
||||
| `/linkedin:report` | Generate weekly performance report |
|
||||
| `/linkedin:ab-test` | Design and manage A/B content tests |
|
||||
| `/linkedin:strategy` | Growth strategy + authority building (phase guidance, trajectory, signature content compounding) |
|
||||
| `/linkedin:competitive` | Competitive analysis of niche |
|
||||
| `/linkedin:monetize` | Monetization strategy and funnels |
|
||||
| `/linkedin:outreach` | Outreach orchestrator — collaborations + speaking opportunities |
|
||||
| `/linkedin:monetize` | Monetization strategy and funnels (unlocks at ~1K followers) |
|
||||
| `/linkedin:outreach` | Outreach orchestrator — collaborations + speaking opportunities (unlocks at ~1K followers) |
|
||||
| `/linkedin:profile` | 360Brew profile optimization |
|
||||
|
||||
## Agents (14)
|
||||
|
|
|
|||
|
|
@ -6,21 +6,21 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
A comprehensive Claude Code plugin that turns LinkedIn from a chore into a system. It covers the full content lifecycle — from ideation and drafting through publishing, analytics, and growth strategy — with 27 slash commands, 16 specialized agents, 9 automated hooks, and a 24-document knowledge base grounded in LinkedIn's actual algorithm signals. Updated for the January 2026 **360Brew** algorithm change, where LinkedIn now validates your profile before distributing content.
|
||||
A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-spectrum content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions. v2.0.0 consolidated the surface (27 → 24 commands, 16 → 14 agents) and added `/linkedin:newsletter` as a multi-session long-form orchestrator with fact-check + persona-sweep gates BEFORE lock. 24 slash commands, 14 specialized agents, 9 automated hooks, and a 24-document knowledge base grounded in LinkedIn's actual algorithm signals. Updated for the January 2026 **360Brew** algorithm change, where LinkedIn now validates your profile before distributing content.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [What's New in v1.2.0](#whats-new-in-v120)
|
||||
- [What's New in v2.0.0](#whats-new-in-v200)
|
||||
- [What Is This?](#what-is-this)
|
||||
- [Quick Start](#quick-start)
|
||||
- [Commands](#commands)
|
||||
|
|
@ -39,16 +39,23 @@ A comprehensive Claude Code plugin that turns LinkedIn from a chore into a syste
|
|||
|
||||
---
|
||||
|
||||
## What's New in v1.2.0
|
||||
## What's New in v2.0.0
|
||||
|
||||
**Friction reduction release** — fewer steps, faster output, smarter defaults.
|
||||
**Full-spectrum content engine** — feed posts AND long-form newsletter editions in one cohesive surface, with net-fewer commands.
|
||||
|
||||
- **Auto-clipboard** — All 8 content commands (`post`, `quick`, `react`, `pipeline`, `first-post`, `video`, `multiplatform`, `carousel`) automatically copy finished content to your clipboard. No more manual copy-paste
|
||||
- **Reduced interactive steps** — Angle, format, and post type are inferred from context. Maximum 2 questions per post (down from 4-6)
|
||||
- **Deterministic state management** — Post tracking, streak updates, and content history are handled by `state-updater.mjs` (pure functions, tested, no AI involved). Content history auto-prunes entries older than 90 days
|
||||
- **MCP image carousel pipeline** — `/linkedin:carousel` can generate professional slide images via mcp-image with text overlays (1080x1350, 3:4 ratio). Falls back to Mermaid diagrams or text-based slides
|
||||
- **Progressive onboarding** — New users see a cleaner experience: personalization score hidden until 3+ posts, voice guardian suppressed until 5+ voice samples
|
||||
- **iCal calendar integration** — `/linkedin:batch` generates an `.ics` file importable into macOS Calendar, Google Calendar, or Outlook. Each post gets a calendar event with reminders
|
||||
- **Long-form `/linkedin:newsletter` orchestrator** — multi-session pipeline (load → calibrate → research fan-out → draft → consistency → fact-check sweep → persona sweep → lock → delivery → hook-gate → schedule) with maintained edition-state across sessions. Supports newsletter editions, essays, and series articles
|
||||
- **Two new longform-quality gate agents** — `fact-checker` (Opus, verifies every factual claim against primary sources) and `persona-reviewer` (Opus, evaluates reader-persona resonance + hook-conversion). Both run BEFORE lock — the cost of fixing an error in a published edition is too high
|
||||
- **Render pipeline migrated into the plugin** — `render/build-html.mjs`, `build-pdf.mjs`, `build-linkedin.mjs`, `build-carousel.mjs` + self-hosted fonts (Newsreader, Inter, JetBrains Mono) under OFL-1.1. No more cross-repo render dependency
|
||||
- **Persona library** — `config/personas.template.md` lets you define reader personas with knowledge level, time-pressure, and resonance criteria. `persona-reviewer` uses these to evaluate every long-form draft
|
||||
- **Edition-state schema** — `assets/editions/<slug>/state.json` tracks a long-form piece across many sessions (research notes, draft revisions, fact-check status, persona-review status, lock state)
|
||||
- **Net surface reduction** — 27 → 24 commands (5 removed: `templates`, `publish`, `authority`, `collab`, `speaking` absorbed into existing commands; 2 added: `newsletter`, `outreach`). 16 → 14 agents (4 merged: `content-tracker`, `personalization-scorer`, `performance-reporter`, `comment-strategist` absorbed into `analytics-interpreter` + `engagement-coach`; 2 added: `fact-checker`, `persona-reviewer`)
|
||||
- **Analytics consolidation** — `analytics-interpreter` now has interpret + report modes (replaces standalone `performance-reporter`); `engagement-coach` now owns 5x5x5 + first-hour tactics + CEA commenting + target selection + daily routine (replaces standalone `comment-strategist`)
|
||||
- **`/linkedin:import` analysis delegates to `/linkedin:report`** — both consume the same `trends` CLI; the import flow runs the report inline instead of duplicating the analysis pipeline
|
||||
- **Router gating** — `/linkedin:monetize` and `/linkedin:outreach` now surface "unlocks at ~1K followers" guidance so new creators are pointed at `/linkedin:strategy` first
|
||||
|
||||
### Friction reduction (carried forward from prior release)
|
||||
|
||||
- Auto-clipboard on all content commands · max 2 interactive steps · deterministic `state-updater.mjs` · MCP image carousel · progressive onboarding · iCal calendar integration
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -124,7 +131,7 @@ The wizard handles everything: 360Brew profile checklist, voice and user profile
|
|||
|
||||
## Commands
|
||||
|
||||
All 26 commands use colon notation: `/linkedin:post`, `/linkedin:quick`, etc.
|
||||
All 24 commands use colon notation: `/linkedin:post`, `/linkedin:quick`, etc.
|
||||
|
||||
### Onboarding
|
||||
|
||||
|
|
@ -284,10 +291,10 @@ Six domain-specific skills organize the plugin's knowledge and route commands to
|
|||
| Skill | Domain | Commands Routed |
|
||||
|-------|--------|-----------------|
|
||||
| `linkedin-thought-leadership` | Router + shared knowledge (algorithm, quality rules) | `/linkedin`, `/linkedin:setup` |
|
||||
| `linkedin-content-creation` | Posts, templates, batch, pipeline, video, calendar | `/linkedin:post`, `:quick`, `:templates`, `:pipeline`, `:batch`, `:calendar`, `:publish`, `:video`, `:multiplatform` |
|
||||
| `linkedin-content-creation` | Posts, batch, pipeline, video, calendar, newsletter | `/linkedin:post`, `:quick`, `:pipeline`, `:batch`, `:calendar`, `:video`, `:multiplatform`, `:newsletter`, `:carousel` |
|
||||
| `linkedin-analytics` | Analysis, reporting, import, A/B testing | `/linkedin:analyze`, `:audit`, `:import`, `:report`, `:ab-test` |
|
||||
| `linkedin-strategy` | Growth, authority, competitive, monetization | `/linkedin:strategy`, `:authority`, `:competitive`, `:monetize` |
|
||||
| `linkedin-networking` | Engagement, collaborations, speaking | `/linkedin:outreach` |
|
||||
| `linkedin-strategy` | Growth, authority (absorbed), competitive, monetization | `/linkedin:strategy`, `:competitive`, `:monetize` |
|
||||
| `linkedin-networking` | Engagement, collaborations, speaking (all in `outreach`) | `/linkedin:outreach` |
|
||||
| `linkedin-voice` | Voice training, profile optimization, differentiation | `/linkedin:profile` |
|
||||
|
||||
---
|
||||
|
|
@ -523,6 +530,7 @@ Scheduled posts are tracked in `assets/drafts/queue.json`:
|
|||
|
||||
| Version | Date | Highlights |
|
||||
|---------|------|-----------|
|
||||
| **2.0.0** | 2026-05-28 | Full-spectrum content engine. `/linkedin:newsletter` long-form orchestrator with multi-session edition-state, fact-check + persona-sweep gates BEFORE lock. New agents: `fact-checker`, `persona-reviewer` (both Opus). Render pipeline migrated in-plugin with self-hosted OFL-1.1 fonts. Net-fewer surface: 27 → 24 commands (5 removed, 2 added), 16 → 14 agents (4 merged, 2 added). Router gating on monetize/outreach (unlocks at ~1K). `/linkedin:import` delegates analysis to `/linkedin:report`. |
|
||||
| **1.2.0** | 2026-04-11 | Friction reduction release. Auto-clipboard on all content commands, reduced interactive steps (max 2 per post), deterministic state management (`state-updater.mjs`), MCP image carousel pipeline, progressive onboarding, iCal calendar integration for batch scheduling, auto-prune content history (90 days). |
|
||||
| **1.1.0** | 2026-04-08 | Q2 feature release. 27 commands (+onboarding, +carousel). Week-rollover automation, voice drift scoring, industry content matrix, multi-URL react, day-of-week heatmap, month-over-month reports. |
|
||||
| **1.0.0** | 2026-04-07 | Public release. 25 commands, 16 agents, 9 hooks, 6 skills, 24 reference docs. Agent model tiering (Sonnet/Haiku), all scripts Node.js, comprehensive documentation. |
|
||||
|
|
|
|||
|
|
@ -206,71 +206,37 @@ Import 2-3 more weeks of data for meaningful trend analysis.
|
|||
|
||||
## Step 6: Analytics-to-Strategy Feedback Loop
|
||||
|
||||
After successful import, auto-run a brief analysis to give the user immediate value.
|
||||
After successful import, the analysis fan-out (pillar performance, format
|
||||
performance, day-of-week heatmap, actionable recommendations) is **delegated
|
||||
to `/linkedin:report`** — both commands consume the same `trends` CLI from
|
||||
`scripts/analytics/`, and keeping a second analysis pipeline here drifted
|
||||
out of sync with `report.md`.
|
||||
|
||||
### Step 6a: Content Pillar Performance
|
||||
### Step 6a: Run the report
|
||||
|
||||
Read the user's `expertise_areas` from the state file (`~/.claude/linkedin-thought-leadership.local.md`). Run the trends CLI for impressions and engagement rate:
|
||||
|
||||
```bash
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" trends --period 4w --metric impressions
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" trends --period 4w --metric engagement_rate
|
||||
```
|
||||
|
||||
Cross-reference post topics with expertise_areas. Present a pillar performance table:
|
||||
Invoke the report generator and surface its output inline:
|
||||
|
||||
```
|
||||
### Content Pillar Performance (last 4 weeks)
|
||||
|
||||
| Pillar | Posts | Avg Impressions | Avg Engagement | Trend |
|
||||
|-------------------|-------|-----------------|----------------|-------|
|
||||
| Azure AI | 5 | 2,400 | 4.2% | Up |
|
||||
| Copilot Studio | 3 | 1,800 | 3.1% | Flat |
|
||||
| Power Platform | 4 | 1,200 | 5.8% | Up |
|
||||
| Semantic Kernel | 2 | 3,100 | 2.9% | New |
|
||||
| AI Strategy | 3 | 900 | 2.1% | Down |
|
||||
Run /linkedin:report (period: 4w)
|
||||
```
|
||||
|
||||
### Step 6b: Post Type Analysis
|
||||
`/linkedin:report` will:
|
||||
|
||||
Categorize imported posts by format (text-only, list, story, question, carousel, poll) based on content patterns. Present format performance:
|
||||
1. Read `expertise_areas` from `~/.claude/linkedin-thought-leadership.local.md`
|
||||
2. Call `trends` for impressions and engagement_rate over the last 4 weeks:
|
||||
```bash
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" trends --period 4w --metric impressions
|
||||
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" trends --period 4w --metric engagement_rate
|
||||
```
|
||||
3. Produce the Content Pillar Performance, Format Performance, and
|
||||
Day-of-Week Performance tables, plus exactly 3 actionable recommendations
|
||||
4. Return its summary back to this import flow
|
||||
|
||||
```
|
||||
### Format Performance
|
||||
If `/linkedin:report` is unavailable (analytics dir empty, tsx missing),
|
||||
fall back to a one-line status: "Import complete — run `/linkedin:report`
|
||||
manually when analytics are ready."
|
||||
|
||||
| Format | Posts | Avg Impressions | Avg Engagement | Best Hook |
|
||||
|------------|-------|-----------------|----------------|-----------|
|
||||
| Lists | 4 | 2,800 | 5.1% | "5 things..." |
|
||||
| Stories | 3 | 2,200 | 4.5% | "Last week..." |
|
||||
| Questions | 2 | 1,600 | 6.2% | "What if..." |
|
||||
| Text-only | 5 | 1,100 | 2.8% | — |
|
||||
```
|
||||
|
||||
### Step 6c: Optimal Posting Time
|
||||
|
||||
Analyze publishing dates vs. performance. Present day-of-week performance:
|
||||
|
||||
```
|
||||
### Day-of-Week Performance
|
||||
|
||||
| Day | Posts | Avg Impressions | Avg Engagement |
|
||||
|-----------|-------|-----------------|----------------|
|
||||
| Monday | 2 | 1,400 | 3.2% |
|
||||
| Tuesday | 4 | 2,600 | 4.8% |
|
||||
| Wednesday | 3 | 2,100 | 4.1% |
|
||||
| Thursday | 3 | 2,300 | 3.9% |
|
||||
| Friday | 2 | 1,000 | 2.5% |
|
||||
```
|
||||
|
||||
### Step 6d: Actionable Recommendations
|
||||
|
||||
Based on the analysis above, generate exactly 3 concrete, data-driven recommendations. Examples:
|
||||
|
||||
- "Your list posts average 2.5x the impressions of text-only posts. Consider using list format for your next 2 posts."
|
||||
- "Tuesday is your strongest day (2,600 avg impressions). Schedule your best content for Tuesdays."
|
||||
- "Azure AI posts are trending up (+18% impressions). Double down on this pillar next week."
|
||||
|
||||
### Step 6e: Update State with Import Date
|
||||
### Step 6b: Update State with Import Date
|
||||
|
||||
After successful import and analysis, update the state file:
|
||||
|
||||
|
|
|
|||
|
|
@ -103,11 +103,18 @@ Present these options to the user:
|
|||
|
||||
### Growth & Monetization
|
||||
|
||||
| Command | Purpose |
|
||||
|---------|---------|
|
||||
| `/linkedin:monetize` | Monetization strategy for 10K+ followers |
|
||||
| `/linkedin:outreach` | Outreach orchestrator — collaborations and speaking opportunities (CFPs, partner pitches) |
|
||||
| `/linkedin:multiplatform` | Adapt content for Twitter/X, slides, YouTube (short-form/cross-format; long-form → `/linkedin:newsletter`) |
|
||||
| Command | Purpose | Unlocks at |
|
||||
|---------|---------|-----------|
|
||||
| `/linkedin:monetize` | Monetization strategy (lead magnets, consulting funnel, pricing) | ~1K followers |
|
||||
| `/linkedin:outreach` | Outreach orchestrator — collaborations and speaking opportunities (CFPs, partner pitches) | ~1K followers |
|
||||
| `/linkedin:multiplatform` | Adapt content for Twitter/X, slides, YouTube (short-form/cross-format; long-form → `/linkedin:newsletter`) | Any phase |
|
||||
|
||||
**Gating rule:** the "Unlocks at ~1K followers" commands are deliberately
|
||||
listed but soft-gated — they work at any follower count, but their value
|
||||
compounds once a profile has the audience scale and authority signal that
|
||||
makes lead magnets, partnerships, and speaking pitches realistic. Below
|
||||
~1K followers the router will note the threshold and suggest
|
||||
`/linkedin:strategy` first.
|
||||
|
||||
## Ask the User
|
||||
|
||||
|
|
@ -168,8 +175,8 @@ If the user's intent is clear from context:
|
|||
- Mentions "template" → Route to `/linkedin:quick`
|
||||
- Mentions "audit" or "review strategy" → Route to `/linkedin:audit`
|
||||
- Mentions "competitive" or "learn from others" → Route to `/linkedin:competitive`
|
||||
- Mentions "monetize" or "revenue" → Route to `/linkedin:monetize`
|
||||
- Mentions "speaking" or "conference" or "collaborate" or "partner" or "CFP" or "talk proposal" or "co-author" or "joint post" → Route to `/linkedin:outreach`
|
||||
- Mentions "monetize" or "revenue" → Route to `/linkedin:monetize`. **Gating:** if state-file `follower_count` < 1000, prepend: "Heads-up: monetization compounds at ~1K followers. You're at {N}. Consider `/linkedin:strategy` to plan the path there. Continuing to `/linkedin:monetize` anyway."
|
||||
- Mentions "speaking" or "conference" or "collaborate" or "partner" or "CFP" or "talk proposal" or "co-author" or "joint post" → Route to `/linkedin:outreach`. **Gating:** if state-file `follower_count` < 1000, prepend: "Heads-up: outreach lands better at ~1K followers (authority signal). You're at {N}. Consider `/linkedin:strategy` first. Continuing to `/linkedin:outreach` anyway."
|
||||
- Mentions "adapt" or "cross-post" → Route to `/linkedin:multiplatform`
|
||||
- Mentions "import" or "CSV" or "export data" → Route to `/linkedin:import`
|
||||
- Mentions "report" or "weekly numbers" → Route to `/linkedin:report`
|
||||
|
|
|
|||
|
|
@ -525,7 +525,7 @@ These are verified deviations from the fasit. Each is a correction-in-scope
|
|||
- **Changes:** Remove the newsletter/blog adaptation path from `multiplatform.md` so there is exactly ONE entry to long-form (fasit §4.1). Add the langform trigger to `skills/linkedin-content-creation/SKILL.md` (fasit §5.3) AND sweep the catalog tables in all 6 `skills/*/SKILL.md` (N2). Add a router row for `newsletter` in `commands/linkedin.md`. (codebase analysis)
|
||||
- **Reuses:** existing router-row format in `linkedin.md`; skill trigger format.
|
||||
- **Test first:** *(archetype F)* grep proves only one newsletter entry; router row present; no dead newsletter path in multiplatform.
|
||||
- **Verify:** `grep -Eci 'Step.*newsletter|newsletter (pipeline|workflow|edition)' commands/multiplatform.md && grep -c 'newsletter' commands/linkedin.md` → expected: **0** multi-step newsletter section in multiplatform (a one-line pointer is allowed, any wording); router row present in linkedin.md. (Robust: does not depend on exact pointer phrasing — only that no *pipeline/section* survives.)
|
||||
- **Verify:** `[ "$(grep -Eci 'Step.*newsletter|newsletter (pipeline|workflow|edition)' commands/multiplatform.md)" = "0" ] && grep -q 'newsletter' commands/linkedin.md` → expected: **0** multi-step newsletter section in multiplatform (a one-line pointer is allowed, any wording); router row present in linkedin.md. (Robust: does not depend on exact pointer phrasing — only that no *pipeline/section* survives. **Fix v2.0 doc-pass:** the original `grep -Eci ... && grep -c ...` was `&&`-broken — `grep -c` returns the count as stdout but exits non-zero when count=0, so the chain short-circuited even on the desired "0 matches" outcome. Reworked to an explicit string-equality test.)
|
||||
- **On failure:** revert — `git checkout -- commands/multiplatform.md commands/linkedin.md skills/`
|
||||
- **Checkpoint:** `git commit -m "refactor(linkedin): single newsletter entry + skill trigger + router row (S11)"`
|
||||
- **Manifest:**
|
||||
|
|
@ -749,7 +749,7 @@ These are verified deviations from the fasit. Each is a correction-in-scope
|
|||
- **Reuses:** `report.md` trends CLI; existing version-sync discipline.
|
||||
- **Test first:** *(archetype F)* command count verified down; all version refs = 2.0.0 (grep); all 3 doc levels updated; router gating present.
|
||||
- **Changes (count, corrected):** net command count = **24** = 27 today − 5 removed (`templates`, `publish`, `authority`, `collab`, `speaking`) + 2 added (`newsletter`, `outreach`). (The fasit's "~23" was approximate; the exact arithmetic is 24. This is the binding number.)
|
||||
- **Verify:** `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24" && ! grep -rIn '1\\.2\\.0' .claude-plugin/plugin.json CLAUDE.md README.md CHANGELOG.md` → expected: command count is **exactly 24**; zero `1.2.0` refs remain (all bumped to 2.0.0)
|
||||
- **Verify:** `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24" && grep -q '"version": "2\\.0\\.0"' .claude-plugin/plugin.json && grep -q '^# LinkedIn Thought Leadership Plugin (v2\\.0\\.0)' CLAUDE.md && grep -q 'version-2\\.0\\.0-blue' README.md && grep -q '^## \\[2\\.0\\.0\\]' CHANGELOG.md` → expected: command count is **exactly 24**; every target file carries an **active** v2.0.0 marker (forward-positive assertion). **Fix v2.0 doc-pass:** original `! grep '1\\.2\\.0'` was overly strict — it would have blocked any release that correctly preserves historical changelog entries. Forward-positive form asserts the actual release intent (active version is 2.0.0) without requiring deletion of changelog history.
|
||||
- **On failure:** revert — `git checkout -- commands/ README.md CLAUDE.md .claude-plugin/ CHANGELOG.md`
|
||||
- **Checkpoint:** `git commit -m "chore(linkedin): v2.0.0 — import trim, router gating, full doc pass (S20)"`
|
||||
- **Manifest:**
|
||||
|
|
@ -844,9 +844,9 @@ End-to-end / cross-step checks (per-step Manifests run automatically during exec
|
|||
- [ ] **Antakelse 2 (fonts resolve via `__dirname`, not fallback):** `cd /tmp && node <plugin>/render/build-pdf.mjs <sample.md>` produces a PDF embedding Newsreader/Inter (inspect PDF metadata / visual) — `[OPERATØR]` visual confirm
|
||||
- [ ] `node --test 'agents/__tests__/*.test.mjs'` → fixture-lint tests pass
|
||||
- [ ] `test "$(ls commands/*.md | wc -l | tr -d ' ')" = "24"` → command count is exactly 24 (27 − 5 removed + 2 added)
|
||||
- [ ] `ls agents/*.md | grep -v README | wc -l` → 16 (content-tracker, personalization-scorer, performance-reporter, comment-strategist removed; fact-checker, persona-reviewer added)
|
||||
- [ ] `ls agents/*.md | grep -v README | wc -l` → **14** (content-tracker, personalization-scorer, performance-reporter, comment-strategist removed = −4; fact-checker, persona-reviewer added = +2; net 16 − 4 + 2 = 14). **Fix v2.0 doc-pass:** the original "16" was the pre-S20 figure carried over by mistake. **Correction:** S14 moved `agents/README.md` into the per-agent files, so `agents/README.md` no longer exists; the `grep -v README` filter is a no-op but harmless.
|
||||
- [ ] `grep -rn '1\.2\.0' .claude-plugin/plugin.json CLAUDE.md README.md CHANGELOG.md` → zero matches (all bumped to 2.0.0)
|
||||
- [ ] `grep -rn '/linkedin:templates\|/linkedin:publish\|/linkedin:authority\|/linkedin:collab\|/linkedin:speaking' commands/ agents/ skills/ hooks/ README.md CLAUDE.md agents/README.md` → zero stray route-refs to removed commands
|
||||
- [ ] `grep -rEn '/linkedin:(templates|publish|authority|collab|speaking)\b|commands/(templates|publish|authority|collab|speaking)\.md|`:(templates|publish|authority|collab|speaking)`' commands/ agents/ skills/ hooks/ README.md CLAUDE.md` → zero stray route-refs to removed commands. **Fix v2.0 doc-pass:** original target set included `agents/README.md` (file removed in S14); extended to also match the shorthand backtick form (`` `:templates` ``, etc.) used in the pillar/skill tables — Step 21 doc-pass uncovered three live shorthand refs in `README.md:294` that the original grep would have missed.
|
||||
- [ ] `python3 hooks/scripts/compile-hooks.py --check` → clean (no drift after hook-ref edits)
|
||||
- [ ] `[OPERATØR]` one real edition produced end-to-end with persona-sweep before lock, reviewed in browser
|
||||
- [ ] All 3 doc levels (plugin README + plugin CLAUDE + root README) reflect v2.0.0
|
||||
|
|
@ -855,7 +855,7 @@ End-to-end / cross-step checks (per-step Manifests run automatically during exec
|
|||
|
||||
- **Files to create:** ~13 (newsletter.md, outreach.md, fact-checker.md, persona-reviewer.md, personas.template.md, edition-state.template.json, longform-quality-rules.md, OFL.txt, 4 render scripts under render/ + fonts/, plus test/fixture files)
|
||||
- **Files to modify:** ~15 (multiplatform, linkedin router, quick, calendar, strategy, audit, analyze, import, profile, analytics-interpreter, engagement-coach, 6 skills, agents/README, CLAUDE.md, README.md, plugin.json, CHANGELOG, hook scripts, marketplace docs)
|
||||
- **Files to remove:** 7 (templates, publish, authority, collab, speaking commands; content-tracker, personalization-scorer, performance-reporter, comment-strategist agents)
|
||||
- **Files to remove:** **9** = 5 commands (`templates`, `publish`, `authority`, `collab`, `speaking`) + 4 agents (`content-tracker`, `personalization-scorer`, `performance-reporter`, `comment-strategist`). **Fix v2.0 doc-pass:** original "7" was a stale count from an earlier draft that listed only one of the two outreach precursors. The 5 + 4 arithmetic is binding.
|
||||
- **Complexity:** high (21 sessions, multi-session resumption, cross-repo touchpoint, runtime-assumption checkpoint)
|
||||
|
||||
## Execution Strategy
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ Systematic application of 8 universal thought leadership angles across the same
|
|||
### Authority Score
|
||||
Composite metric measuring a creator's established expertise on a topic, derived from posting consistency, engagement quality, profile alignment (360Brew), and network validation. Higher authority unlocks broader distribution.
|
||||
|
||||
**Used in:** `commands/authority.md`, `references/algorithm-signals-reference.md`
|
||||
**Used in:** `commands/strategy.md` (authority building absorbed in v2.0.0), `references/algorithm-signals-reference.md`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ Prohibited engagement tactics ("Comment YES if...", "Tag someone who...", "Type
|
|||
### Engagement Pod
|
||||
Coordinated group of accounts that artificially boost each other's posts. Actively detected by LinkedIn; risks shadow-ban and engagement penalty. Warned against in multiple plugin references.
|
||||
|
||||
**Used in:** `references/linkedin-growth-playbook-2025-2026.md`, `commands/collab.md`, `agents/network-builder.md`
|
||||
**Used in:** `references/linkedin-growth-playbook-2025-2026.md`, `commands/outreach.md` (collab absorbed in v2.0.0), `agents/network-builder.md`
|
||||
|
||||
### Engagement Quality Hierarchy
|
||||
Weighted valuation system for different engagement types: Saves (10x) > Shares (8x) > Expert Comments (7-9x) > 15+ word comments (2.5x) > Short comments (1x) > Reactions (0.2x). Quality over quantity.
|
||||
|
|
@ -179,7 +179,7 @@ Algorithm penalty of -25-40% reach for external links placed in the post body. L
|
|||
### Network Tiers
|
||||
Three-level connection classification: **Tier 1** (Inner Circle, 5-10 people, daily engagement), **Tier 2** (Active Network, 2-3x weekly engagement), **Tier 3** (Extended Network, monthly engagement). Used for strategic resource allocation.
|
||||
|
||||
**Used in:** `agents/network-builder.md`, `commands/collab.md`
|
||||
**Used in:** `agents/network-builder.md`, `commands/outreach.md` (collab absorbed in v2.0.0)
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -88,5 +88,5 @@ When posts are scheduled via `/linkedin:batch`:
|
|||
1. Each post gets a `scheduled_date` and `scheduled_time` from this algorithm
|
||||
2. Entry is added to `assets/drafts/queue.json`
|
||||
3. Session-start hook shows today's scheduled posts
|
||||
4. `/linkedin:publish` marks posts as published and updates state
|
||||
4. `/linkedin:calendar` (publish action) marks posts as published and updates state
|
||||
5. `/linkedin:calendar` shows the full schedule view
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ Instead of adding volume, optimize what's working:
|
|||
### Related Commands
|
||||
|
||||
- `/linkedin:ab-test` -- optimize what's working
|
||||
- `/linkedin:authority` -- build signature content
|
||||
- `/linkedin:strategy` -- build signature content (authority building absorbed in v2.0.0)
|
||||
- `/linkedin:report` -- track continued progress
|
||||
|
||||
---
|
||||
|
|
@ -179,8 +179,8 @@ When ahead of schedule, invest in:
|
|||
### Related Commands
|
||||
|
||||
- `/linkedin:monetize` -- start monetization planning
|
||||
- `/linkedin:authority` -- build signature frameworks
|
||||
- `/linkedin:speaking` -- speaking opportunity pipeline
|
||||
- `/linkedin:strategy` -- build signature frameworks (authority building absorbed in v2.0.0)
|
||||
- `/linkedin:outreach` -- speaking opportunity pipeline + collaborations (speaking absorbed in v2.0.0)
|
||||
- `/linkedin:multiplatform` -- expand to other platforms
|
||||
|
||||
---
|
||||
|
|
@ -214,7 +214,7 @@ Growth target is met. Strategy shifts from "grow" to "leverage."
|
|||
### Related Commands
|
||||
|
||||
- `/linkedin:monetize` -- revenue strategy
|
||||
- `/linkedin:authority` -- thought leadership deepening
|
||||
- `/linkedin:strategy` -- thought leadership deepening (authority building absorbed in v2.0.0)
|
||||
- `/linkedin:competitive` -- maintain positioning
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue