Endring 8 from the change spec (Del 4 production, Maskinrommet). The persona resonance sweep measures reader-response (does it land?); nothing measured prose craft or narrative architecture (is it well-made?). In Del 4 every persona reported PASS, yet the editor found 8 fresh editorial points on first reading — ~6/8 craft/architecture blind spots no agent could see. v2.4.0 adds the missing editor role. New Step 5.5 (editorial-review) runs between fact-check (Step 5) and the persona sweep (Step 6): a new editorial-reviewer agent (Opus) judges two axes — prosa-handverk (em-dash density, verbatim repetition, postulated numbers, contradictions, versal-tic) + narrativ-arkitektur (concrete instantiation, theory-anchored hypotheses, series-title symmetry, equal action per addressee, un-overloaded conclusion). Returns <=10 flags as direction (never copy), each BLOCK/REWORK/NICE, operator-gated via SendUserFile. Runs before the persona sweep so the personas measure resonance instead of stumbling on craft noise. Mirrors the Maskinrommet writing-contract section C2 (bidirectional mirror rule). - agents/editorial-reviewer.md (NEW, Opus, orange) + fasit fixture (editorial-reviewer-cases.md: Del 4 v5 gold standard, 8 points -> 2 axes + severities, 3 BLOCK / 5 REWORK, 6/8 blind spots) + structural lint (7 tests). - Step 5.5 wired into commands/newsletter.md; pipeline 14 -> 15 phases. - editorial-review phase + additive editorialReview state in config/edition-state.template.json; resumption: factcheck-sweep -> Step 5.5, editorial-review -> Step 6 (spec said fact-check; canonical key is factcheck-sweep). - persona-reviewer contract unchanged: editorial-reviewer is supplementary (one measures craft, one measures response). - All doc levels synced (plugin + root README/CLAUDE.md, CHANGELOG, plugin.json 2.3.0 -> 2.4.0; agents 15 -> 16). 94 tests green. Acceptance-criterion #8 (live run on Del 4 v5) delivered as fasit fixture: a live run needs a session reload (new agent not invokable until then) + read access to the Del 4 v5 draft in Maskinrommet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .claude-plugin | ||
| agents | ||
| assets | ||
| commands | ||
| config | ||
| docs | ||
| hooks | ||
| references | ||
| render | ||
| scripts | ||
| skills | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| GOVERNANCE.md | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
LinkedIn Thought Leadership Plugin for Claude Code
Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
Solo-maintained, fork-and-own. This plugin is a starting point, not a vendor product. Issues are welcome as signals; pull requests are not accepted. See GOVERNANCE.md for the full model and what upstream provides.
AI-generated: all code produced by Claude Code through dialog-driven development. Full disclosure →
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. v2.1.0 adds two more gates BEFORE prose to /linkedin:newsletter — a skeleton gate (Step 2.5) and a spine-prose gate (Step 3a) — encoding the Maskinrommet writing-contract §A discipline (premiss / problem / anbefaling / gevinst / vei videre) into the pipeline itself, so spine errors get caught in minutes at the skeleton stage instead of hours at the resonance stage or a full day post-lock. v2.2.0 hardened the longform gates with the lessons from the next production run: blocking persona hard-fails (primær «mistet meg» / doesn't own the action / jargon wall / model-name catalog → BLOCK), a post-cutoff fact-check mandate, a new Norwegian-chronicle de-AI voice-scrubber agent, render+annotate operator gates, and edition state reconciled with the global STATE.md continuity system. v2.3.0 makes visual assets an explicit pipeline phase — Step 7.5 (visual-assets) between annotation and lock: the cover (+ optional inline figures) or a carousel deck is generated and operator-gated before lock, so the renderer picks up cover.png without a post-lock re-render. v2.4.0 adds an editor's craft gate — new Step 5.5 (editorial-review) between fact-check and the persona sweep: a new editorial-reviewer agent (Opus) judges craft (prose-craft + narrative-architecture), not reader-response, returning ≤10 flags (BLOCK / REWORK / NICE) operator-gated via SendUserFile so the personas measure resonance instead of stumbling on craft noise (pipeline 14 → 15 phases). 24 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.
Table of Contents
- What's New in v2.4.0
- What's New in v2.3.0
- What's New in v2.2.0
- What's New in v2.1.0
- What's New in v2.0.0
- What Is This?
- Quick Start
- Commands
- Agent Architecture
- Knowledge Base
- Skills
- Hooks & Automation
- Analytics System
- Personalization Engine
- Workflow Examples
- Content Quality Rules
- Configuration
- What This Plugin Does Not Cover
- Version History
- License
What's New in v2.4.0
An editor's craft gate becomes an explicit pipeline phase. The Del 4 production run exposed a gap the existing gates could not see: the persona resonance sweep returned 15 flags across three personas and every persona reported PASS / ready-to-publish — yet the editor (KTG) found eight fresh editorial points on first reading, and only ~25 % overlapped anything the personas had touched. The other six were craft and narrative-architecture blind spots no agent measured. persona-reviewer measures reader response (does it land?); nothing measured prose craft or narrative architecture (is it well-made?). v2.4.0 adds the missing role.
- New
editorial-revieweragent (Opus, orange) — an editor, not a reader. Two axes: prosa-håndverk (em-dash density, verbatim repetition, postulated numbers without source/hedge, internal contradictions, versal-tic — mostly grep-able) and narrativ-arkitektur (concrete instantiation, theory-anchored hypotheses, series-title symmetry, equally-usable action per addressee, an un-overloaded conclusion). Returns ≤10 flags as direction — never rewritten copy (the jury judges, the writer writes) — each with a quote/line-ref and a severity: BLOCK / REWORK / NICE. The checklist is the operationalized mirror of the Maskinrommet writing-contract §C2. (New agent — requires a session reload before it is invokable.) - New Step 5.5 — Editorial review (
commands/newsletter.md), between fact-check (Step 5) and the persona sweep (Step 6). Runs a single foregroundeditorial-reviewercall, surfaces the report to the operator viaSendUserFile(the same operator-gate pattern as Steps 2.5/3a/7.5), folds approved flags in by tightening → v(n+1), and optionally re-runs on the cleaned version. - Why before the persona sweep, not after — the personas measure response. If the prose is locally messy (an em-dash thicket, a postulated number, a repeated phrase) the persona flags become noise — the reader stumbles on the craft defect instead of judging mobilization. Clean the craft first, and Step 6 measures what it was built to measure.
- Supplementary, not a replacement —
persona-revieweris unchanged. One agent measures craft (5.5), one measures response (6); the role boundary is sharp (editorial-reviewernever flags "this won't resonate";persona-reviewernever flags em-dash density). editorial-reviewphase + additiveeditorialReviewstate inconfig/edition-state.template.json. Pipeline grows 14 → 15 phases; resumption stays deterministic (factcheck-sweepnow resumes at Step 5.5).- Fasit fixture + structural lint —
agents/fixtures/editorial-reviewer-cases.mdencodes the Del 4 v5 gold standard (KTG's eight points mapped to the two axes + severities; 6/8 editorial-only blind spots), withagents/__tests__/editorial-reviewer-fixture.test.mjsasserting its shape (7 tests, green). The calibration target for a live run (which needs a session reload + the Del 4 v5 draft).
Doc/orchestration-only for the wiring — the new agent, its fasit fixture, and the lint test are the only new files; no new runtime code. 16 agents (was 15). Commands (24) unchanged. Backward-compatible: the only state-shape change is additive.
What's New in v2.3.0
Visual assets become an explicit pipeline phase. Until now, images (cover + inline figures) were produced ad-hoc outside the /linkedin:newsletter pipeline and referenced by hand — even though a cover is mandatory and has to coordinate with the text. v2.3.0 adds Step 7.5 — Visual assets between annotation (Step 7) and lock (Step 8), so visuals are resolved before the edition locks.
- New Step 7.5 — Visual assets (
commands/newsletter.md). Decides image needs from the article type (method-heavy → 1–2 inline figures; diagnosis-heavy → cover only), writes a per-image brief, generates, runs an operator-gate, and records credit + caption. It runs before lock on purpose:render/build-linkedin.mjspicks uplinkedin/NN/cover.png+ the edition-config credit/caption at lock, so generating images after lock would force a re-render and break the lock. - Two generation routes, no lock-in — default
mcp__mcp-image__generate_image(Nano Banana Pro) writingcover-v<N>-kandidat.png, or an external route (DALL·E / Midjourney / photographer) via acover-raw.pngthe operator drops in. The interface is pluggable (path-in / path-out); mcp-image is the default, not a hard dependency. - Operator-gate = the Step 2.5/3a pattern, for images — every candidate is surfaced via
SendUserFilefor side-by-side comparison; on approval the chosen candidate is copied to the fixedcover.pngname that the renderer reads. - Explicit carousel branch —
format: "carousel"editions render a typografisk slide-deck via the existingrender/build-carousel.mjsinstead of cover+inline. - New
config/image-credit-caption.template.md— cover motif + credit + caption table (honest-about-AI credit per the verification duty), modelled on the established series convention. Documents thecover.png/cover-v<N>-kandidat.png/cover-raw.png/fig<N>.pngnaming. visual-assetsphase + additivevisualAssetsstate inconfig/edition-state.template.json. Pipeline grows 13 → 14 phases; resumption stays deterministic (annotationnow resumes at Step 7.5).
Doc/orchestration-only — no new code. Commands (24) and agents (15) unchanged. Backward-compatible: the only state-shape change is additive.
What's New in v2.2.0
Longform gates hardened — the second production run (Seres-serien) surfaced six concrete weaknesses; v2.2.0 closes all of them. A chronicle built as a model/name catalog passed review (flags were read as notes, not stop-signs) and nearly shipped; the rewrite was better but introduced fresh factual errors. The gates now make both failure modes blocking.
- Persona gate is blocking, with an explicit hard-fail list (
agents/persona-reviewer.md,config/personas.template.md). The bar is the primær reader's clean JA — «JA med store forbehold» = NEI. Hard fails (= rewrite, not annotate): primær «mistet meg», primær doesn't own the action, sjargong-mur, modell-/navne-katalog. Any one → BLOCK regardless of the other axes. - Fact-check is orthogonal to narrative strength (
agents/fact-checker.md). The more convincing a draft reads, the more verification — not less. Claims dated after the model's knowledge cutoff MUST be web-searched (never confirmed from memory), plus an explicit checklist for the high-frequency error types (person titles, org-varying "standards", over-credited studies, source scope, founding/release years). - New
voice-scrubberagent (Opus) — aggressive de-AI scrub (Pass 1, objective: «la meg være ærlig», reflex rule-of-three, em-dash-spam, self-referential overhead, modell-/navne-katalog) + voice-drift correction (Pass 2, calibrated). Gold standard = the approved Norwegian editions, NOT the Englishauthentic-voice-samples.md(which forbids the em-dash and would degrade chronicle voice). Wired into Step 4 of/linkedin:newsletter. (New agent — requires a session reload before it is invokable.) - Render+annotate operator gates (
commands/newsletter.mdSteps 2.5, 3a). The operator review is HTML annotation in the browser (render/build-html.mjs→file://link), not a multiple-choice prompt — for every write deliverable, skeleton included.AskUserQuestionbecomes a receipt + fallback. - Edition state reconciled with STATE.md (ONE-system).
edition-HANDOVER.mdis gone; narrative state lives in<serie>/STATE.md(overwritten each phase, auto-injected by the session-start hook), machine state (fact-check log, persona verdicts, immutable rules) inedition-state.json.config/edition-HANDOVER.template.mddeleted. - Voice-profile + longform-rules avoid-patterns — modell-/navne-katalog, completeness-over-reader-action, and self-referential overhead openings added to
references/longform-quality-rules.md(rules 1 + 3) andconfig/user-profile.template.md.
15 agents (was 14). No command-count change (24). Backward-compatible: existing editions resume by currentPhase; the only state-shape change is additive (personaSweep.skeleton, immutableRules).
What's New in v2.1.0
Skeleton gate before prose in /linkedin:newsletter — the single most expensive failure mode in long-form (spine errors caught post-prose) is now gated before the first sentence is written. Empirically motivated by the Seres-serien Del 3 + Del 4 production (~1 day lost to spine rework that a 15-minute skeleton gate would have caught).
- New Step 2.5 — Skeleton + section pitch — writes
<serie>/NN-skjelett.mdwith the five-line spine (premiss / problem / anbefaling / gevinst / vei videre) + one-line section pitches. Operator-gate (JA / REVIDER / NEI) AND parallel persona-skjelett-sweep must both return JA before the pipeline can advance. No prose is written until the spine is right. - New Step 3a — Spine prose — one paragraph per section against the gated skeleton, ~20–30 % of final edition length. Operator-gate on whether the axis lands now that there is prose on it. The old Step 3 (Draft) is split into 3a (spine) and 3b (full expansion); 3b owns the multi-session draft-cursor logic, 3a is short enough to restart on interruption.
- New
persona-reviewermode:skjelett— third mode alongsideresonans(before lock) andkonverter(after lock). Five spine axes (Premiss / Problem / Anbefaling / Gevinst / Vei videre) scored HOLDER / TVILER / MANGLER, ≤3 direction-only flags, per-pitch section-pay-in check. Reads the skeleton + pitches only — no prose. - Two new phase strings in
edition-state.template.json—skeleton-pitch+spine-prose. The pipeline grows from 11 to 13 phases; resumption is deterministic across every new phase boundary. - Rule 8 — Skjelett før prosa in
references/longform-quality-rules.md— codifies the skeleton-before-prose pre-condition that all other quality rules implicitly rely on.
Backward-compatible: existing editions with currentPhase: "research" now resume at Step 2.5 (was Step 3) — an intended deterministic improvement; the contract on every other phase is bit-for-bit unchanged.
What's New in v2.0.0
Full-spectrum content engine — feed posts AND long-form newsletter editions in one cohesive surface, with net-fewer commands.
- Long-form
/linkedin:newsletterorchestrator — 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) andpersona-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.mdlets you define reader personas with knowledge level, time-pressure, and resonance criteria.persona-revieweruses these to evaluate every long-form draft - Edition-state schema —
assets/editions/<slug>/state.jsontracks 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,speakingabsorbed into existing commands; 2 added:newsletter,outreach). 16 → 14 agents (4 merged:content-tracker,personalization-scorer,performance-reporter,comment-strategistabsorbed intoanalytics-interpreter+engagement-coach; 2 added:fact-checker,persona-reviewer) - Analytics consolidation —
analytics-interpreternow has interpret + report modes (replaces standaloneperformance-reporter);engagement-coachnow owns 5x5x5 + first-hour tactics + CEA commenting + target selection + daily routine (replaces standalonecomment-strategist) /linkedin:importanalysis delegates to/linkedin:report— both consume the sametrendsCLI; the import flow runs the report inline instead of duplicating the analysis pipeline- Router gating —
/linkedin:monetizeand/linkedin:outreachnow surface "unlocks at ~1K followers" guidance so new creators are pointed at/linkedin:strategyfirst
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
What Is This?
This plugin gives you a complete LinkedIn thought leadership system inside Claude Code. Instead of staring at a blank post editor, you work through structured workflows that handle ideation, drafting, optimization, scheduling, publishing, and post-publish analytics — all calibrated to how LinkedIn's algorithm actually works.
Key capabilities:
- 360Brew profile optimization aligned with LinkedIn's AI-first content distribution (January 2026 update)
- Content Matrix System that generates 40+ post ideas from a single topic using 8 universal thought leadership angles
- Full content pipeline from ideation through post-publish 48-hour monitoring
- Batch content creation — produce a full week of posts in one session
- Analytics pipeline — import LinkedIn CSV exports, parse into structured JSON, generate performance reports
- Voice training — learns your authentic writing style and flags drift
- Growth strategy — phase-specific guidance from foundation (0-1K followers) through authority (10K+)
- Monetization and outreach — readiness assessment, lead magnets, conference CFP templates, collaboration formats and partner pitches
- Video scripting — structured scripts for 30s/60s/90s/2min LinkedIn video
- Multi-platform repurposing — adapt LinkedIn content for Twitter/X, newsletters, blogs, slides
- A/B testing framework — design and track content experiments
Tip
Start with
/linkedin:profileto optimize for 360Brew, then/linkedin:setupto personalize, then/linkedin:postto create your first post.
Quick Start
Prerequisites
- Claude Code with plugin support enabled
- Node.js 18+ (for hooks and analytics CLI; analytics requires
tsx:cd scripts/analytics && npm install)
Installation
Add the marketplace and browse plugins with /plugin:
claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
Or enable directly in ~/.claude/settings.json:
{
"enabledPlugins": {
"linkedin-thought-leadership@ktg-plugin-marketplace": true
}
}
Get Started (5 minutes)
Run the onboarding wizard — it walks you through profile, setup, and your first post in one flow:
/linkedin:onboarding
The wizard handles everything: 360Brew profile checklist, voice and user profile setup, and a guided first post.
Already Set Up?
| Goal | Command |
|---|---|
| Write a post | /linkedin:post |
| Quick 5-min post | /linkedin:quick |
| React to an article | /linkedin:react |
| View your stats | /linkedin:report |
| See all commands | /linkedin |
Commands
All 24 commands use colon notation: /linkedin:post, /linkedin:quick, etc.
Onboarding
| Command | Description |
|---|---|
/linkedin:onboarding |
Multi-step onboarding wizard — guides you through profile optimization, plugin personalization, and your first post in one flow. |
/linkedin:first-post |
First-post accelerator — zero to published in 10 minutes with guided hand-holding. |
/linkedin:setup |
Guided setup to populate empty asset templates with your real voice, case studies, and audience data. |
Content Creation
| Command | Description |
|---|---|
/linkedin:post |
Full interactive post creation with angle selection, format choice, and refinement. Best for substantial posts (1,200-1,800 characters). |
/linkedin:quick |
5-minute quick post using the 3-line formula. Target: 150-500 characters. Best for reactions, observations, tips, and questions. Also the single entry point for the 8 post-type templates (fill-in-the-blank structures). |
/linkedin:pipeline |
Full end-to-end content pipeline from idea to published post. Guides through ideation, drafting, optimization, scheduling, pre-engagement, publishing, and post-analysis. |
/linkedin:batch |
Create a full week of LinkedIn content in one session. Input one theme, output 3-5 posts with varying angles and formats. Writes to scheduling queue. |
/linkedin:calendar |
View and manage the post scheduling queue — upcoming, overdue, published — and run the publish action (mark a scheduled post as published, update state + streak tracking, surface the first-hour engagement plan). |
/linkedin:video |
Video script generator for 30s, 60s, 90s, or 2-minute LinkedIn videos with pacing and visual cues. |
/linkedin:multiplatform |
Adapt LinkedIn content for Twitter/X threads, newsletter sections, blog posts, presentation slides, and YouTube scripts. |
/linkedin:react |
URL-to-post pipeline — paste an article, research paper, or news link and generate a reaction post. |
Analytics
| Command | Description |
|---|---|
/linkedin:analyze |
Analyze content performance and troubleshoot engagement issues. Diagnoses algorithm penalties, profile-content mismatches, and reach drops. |
/linkedin:audit |
Periodic content strategy audit. Reviews top/bottom posts, topic distribution, format mix, and engagement trends. Run quarterly. |
/linkedin:report |
Generate weekly performance report from imported analytics data. Shows key metrics, top performers, trends, and actionable alerts. |
/linkedin:import |
Import LinkedIn analytics CSV export into structured JSON. Auto-detects files in ~/Downloads, parses CSV, detects anomalies. |
/linkedin:competitive |
Competitive analysis of other thought leaders in your niche. Analyzes posting frequency, content types, hooks, and identifies differentiation opportunities. |
/linkedin:ab-test |
Design and manage A/B content tests. Track experiments across post variations. |
Strategy
| Command | Description |
|---|---|
/linkedin:strategy |
Growth strategy + authority building. Phase-specific guidance from foundation (0-1K) through authority establishment (10K+), trajectory-aware adjustments, and signature-content compounding for Phase 2+. The single growth/authority entry point — /linkedin:profile owns 360Brew alignment. |
/linkedin:monetize |
Monetization strategy with scored readiness assessment, stage-specific action plans, lead magnet blueprints, DM conversion workflows, and revenue dashboards. |
/linkedin:outreach |
Outreach orchestrator covering both collaborations and speaking opportunities under one paradigm: readiness assessment (collab thresholds + 100-pt speaker scorecard), partner scoring (25-pt rubric), event/CFP search with Nordic/European conference calendar, 12 collaboration formats across 4 maturity tiers, 4 talk abstract templates, speaker bio variants, co-creation production workflow, unified pipeline tracker, and quarterly results dashboard. |
Profile & Setup
| Command | Description |
|---|---|
/linkedin:profile |
360Brew profile optimization checklist. Audits About section, Experience, Headline, content history alignment, and network patterns. |
/linkedin:setup |
Guided setup to populate asset templates with real data. 6 sub-workflows: voice samples, case studies, frameworks, post analysis, demographics, user profile. Calculates personalization score. |
/linkedin |
Main router. Shows posting status (streak, weekly progress) and lists all available commands with contextual guidance. |
Agent Architecture
The plugin delegates specialized work to 16 purpose-built agents. Each agent has its own model assignment, color identity, and focused responsibility.
| Agent | Model | Color | Primary Responsibility |
|---|---|---|---|
content-optimizer |
Sonnet | Blue | Optimize posts against algorithm signals, hooks, CTAs |
strategy-advisor |
Sonnet | Green | Growth strategy and phase-specific guidance |
analytics-interpreter |
Sonnet | Yellow | Pattern discovery + weekly/monthly performance reports (interpret/report modes) |
engagement-coach |
Sonnet | Magenta | 5x5x5 + first-hour tactics + CEA commenting + target selection |
content-planner |
Sonnet | Cyan | Weekly/monthly content calendars and mix enforcement |
network-builder |
Sonnet | Teal | Strategic networking, connection scoring, DM templates |
content-repurposer |
Sonnet | Purple | Format conversion and evergreen content refresh |
trend-spotter |
Sonnet | White | Trending topics, opportunity scoring, first-mover assessment |
voice-trainer |
Sonnet | Pink | Voice profile building and drift detection |
differentiation-checker |
Sonnet | Gray | Originality scoring and commodity content detection |
post-feedback-monitor |
Haiku | Lime | Post-publish 48h monitoring and real-time interventions |
video-scripter |
Sonnet | Violet | Video script creation with pacing and visual cues |
fact-checker |
Opus | Brown | Factual-claim verification against primary/credible sources, post-cutoff web-search mandate (longform) |
editorial-reviewer |
Opus | Orange | Editor's craft gate (v2.4, Step 5.5, before persona sweep): prosa-håndverk + narrativ-arkitektur, ≤10 flags BLOCK/REWORK/NICE as direction, operator-gated via SendUserFile; mirrors Maskinrommet §C2 (longform) |
persona-reviewer |
Opus | Olive | Reader-persona skeleton (v2.1, before prose) + resonance (before lock) + hook-conversion (after lock) gate, blocking hard-fail list (longform) |
voice-scrubber |
Opus | Red | De-AI scrub + Norwegian-chronicle voice-drift correction; gold standard = approved Norwegian editions, not the English post corpus (longform, v2.2) |
Content Pipeline
Agents collaborate across the end-to-end content lifecycle:
trend-spotter --> content-planner --> differentiation-checker --> content-optimizer --> [PUBLISH]
| |
voice-trainer engagement-coach
(5x5x5 + first-hour
+ CEA commenting)
analytics-interpreter
(interpret + report modes)
Parallel support agents: strategy-advisor, analytics-interpreter, network-builder, content-repurposer, video-scripter.
Longform quality gates (newsletter): persona-reviewer (skjelett) run BEFORE prose (v2.1, Step 2.5) → voice-scrubber de-AI / chronicle-voice scrub (v2.2, Step 4) → fact-checker (Step 5) → editorial-reviewer craft gate run BEFORE the persona sweep (v2.4, Step 5.5) → persona-reviewer (resonance) run BEFORE lock (Step 6) → persona-reviewer (conversion) run AFTER lock on the hook (Step 9).
Note (agent invocation + reload): Commands invoke agents by their namespaced type —
subagent_type: linkedin-thought-leadership:<name>, never the bare name. And a newly added agent file underagents/only becomes invokable after a Claude Code session reload (the plugin agent set is built at session start). Add the agent, then reload before invoking it.
Which Agent Do I Need?
| Scenario | Agent |
|---|---|
| "Make this post better" | content-optimizer |
| "What should I post about?" | content-planner, trend-spotter |
| "Is this original enough?" | differentiation-checker |
| "Plan my week's content" | content-planner |
| "How did I do this week?" | analytics-interpreter (report mode) |
| "Analyze my LinkedIn data" | analytics-interpreter (interpret mode) |
| "Help me engage more" | engagement-coach |
| "Who should I comment on?" | engagement-coach |
| "Build my network" | network-builder |
| "Does this sound like me?" | voice-trainer |
| "Repurpose my best post" | content-repurposer |
| "What's trending in my field?" | trend-spotter |
| "How do I monetize?" | strategy-advisor |
| "How is my latest post doing?" | post-feedback-monitor |
| "How personalized is my plugin?" | /linkedin:setup |
| "Write a LinkedIn video script" | video-scripter |
Knowledge Base
The plugin includes 24 reference documents covering the full LinkedIn thought leadership domain:
| Category | Document | When to Use |
|---|---|---|
| Algorithm | algorithm-signals-reference.md |
Profile setup, troubleshooting reach |
| Angles | thought-leadership-angles.md |
Choosing post angle (8 universal angles) |
| Engagement | engagement-frameworks.md |
Writing hooks, CTAs, 5x5x5 method |
| Formats | linkedin-formats.md |
Choosing content format |
| Growth | linkedin-growth-playbook-2025-2026.md |
Strategy deep-dive |
| Monetization | linkedin-monetization-strategies.md |
Revenue planning |
| Newsletter | newsletter-strategy-guide.md |
Newsletter strategy (5,000+ followers) |
| Articles | articles-strategy-guide.md |
Long-form content |
| Roadmaps | growth-roadmaps.md |
Monthly planning |
| Low-frequency | low-frequency-posting-strategy.md |
2-3x/week strategy |
| Collaborations | collaborations-guide.md |
Partnership strategy |
| Opportunities | opportunity-generation.md |
Business development |
| Analytics | analytics-tools-guide.md |
Finding your edge |
| Troubleshooting | troubleshooting-guide.md |
When reach drops |
| URLs | url-processing-templates.md |
Converting external content |
| AI Content | ai-content-framework.md |
AI-specific angles |
| First Comment | first-comment-strategy.md |
Comment templates and timing |
| Visual Style | linkedin-visual-style.md |
Image and carousel specs |
| Polls | poll-strategy-guide.md |
Poll question types and follow-up |
| A/B Testing | ab-testing-framework.md |
Content experiment design |
| Scheduling | scheduling-strategy.md |
Optimal posting times and rotation |
| Trajectory | trajectory-strategy-adjustments.md |
Growth trajectory adjustments |
| Video | video-strategy-guide.md |
LinkedIn video best practices |
| Glossary | glossary.md |
38 plugin-specific terms |
Skills
Six domain-specific skills organize the plugin's knowledge and route commands to the right context:
| Skill | Domain | Commands Routed |
|---|---|---|
linkedin-thought-leadership |
Router + shared knowledge (algorithm, quality rules) | /linkedin, /linkedin:setup |
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 (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 |
Hooks & Automation
9 hooks across 7 events provide automated quality gates, state management, and proactive reminders. All hooks are Node.js (.mjs) for cross-platform support.
| Event | Type | Purpose |
|---|---|---|
SessionStart |
command | Load persistent state, posting metrics, REMEMBER.md context, and 10K milestone tracker |
PreToolUse (Write|Edit) |
command | Content quality gate — hook length, link check, tone, post length |
PreToolUse (Write|Edit) |
command | Voice guardian — AI authenticity check and voice matching |
PreToolUse (Write|Edit) |
command | Topic rotation gate — no back-to-back same pillar, no pillar >50% in 14-day window |
Stop |
command | Update state file with posting metrics and pre-publish reminders |
UserPromptSubmit |
command | LinkedIn context enrichment based on prompt keywords (two-tier matching) |
PostToolUse (Write) |
command | Post-creation automation: alternative hooks, posting time, 5x5x5 reminder |
PreCompact |
command | Preserve critical LinkedIn context during context compaction |
Notification (idle_prompt) |
command | Proactive posting reminders: streak risk, weekly goals, optimal windows (rate-limited 30min) |
How Hooks Collaborate
PreToolUse hooks use a shared content-gatekeeper (content-gatekeeper.mjs) that first checks isLinkedInContent() before injecting the relevant prompt. This prevents false positives on non-LinkedIn file edits.
Session markers (/tmp/linkedin-hooks/session-active) are set when LinkedIn content is detected. The Stop hook only fires state updates if this marker exists (max 12h staleness). The Notification hook rate-limits via a separate marker with a 30-minute cooldown.
Note
Prompt content lives in
hooks/prompts/*.mdand is loaded dynamically at runtime. The compiledhooks.jsonis generated fromhooks.template.json— do not edit it directly.
Analytics System
A Node.js CLI tool for parsing LinkedIn CSV exports into structured JSON.
Workflow
- Export analytics CSV from LinkedIn
- Place in
assets/analytics/exports/(or use auto-detect from ~/Downloads) - Run
/linkedin:importto parse into structured JSON - Run
/linkedin:reportto generate weekly performance reports
CLI Usage
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" \
node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" import <file>
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" \
node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" report --week <W>
ANALYTICS_ROOT="${CLAUDE_PLUGIN_ROOT}/assets/analytics" \
node --import tsx "${CLAUDE_PLUGIN_ROOT}/scripts/analytics/src/cli.ts" trends --period <P> --metric <M>
Storage
assets/analytics/
├── exports/ # Raw CSV from LinkedIn (drop files here)
├── posts/ # Imported post data as JSON
└── weekly-reports/ # Generated weekly reports
Agents that consume analytics data: analytics-interpreter (interpret/report modes).
Personalization Engine
The plugin tracks how well you've populated asset templates with your own data. A higher personalization score means more tailored content output.
Scoring Categories (100 points total)
| Category | Weight | Source |
|---|---|---|
| Voice samples | 25 | assets/voice-samples/ |
| User profile | 20 | config/user-profile.local.md |
| Case studies | 15 | assets/case-studies/ |
| Frameworks | 10 | assets/frameworks/ |
| High-engagement posts | 10 | assets/examples/ |
| Demographics | 8 | assets/audience-insights/ |
| Engagement patterns | 7 | assets/audience-insights/ |
| Post templates | 5 | assets/templates/ |
Run /linkedin:setup to see your current score and walk through guided workflows for each category. The score is also displayed in your session status line at startup.
Assets Directory
| Directory | Contents |
|---|---|
templates/ |
Post type templates, carousel blueprints, article template, content calendar |
checklists/ |
Quality scorecard for pre-publish checks |
examples/ |
High-engagement post examples |
voice-samples/ |
Your authentic voice reference (add your own) |
audience-insights/ |
Demographics and engagement patterns |
case-studies/ |
Case study template for your real stories |
frameworks/ |
Framework template for your methodologies |
analytics/ |
Imported data, weekly reports (gitignored) |
drafts/ |
Post scheduling queue and weekly drafts (gitignored) |
Workflow Examples
1. Sunday Content Prep
/linkedin:batch
> Theme: AI adoption in government IT
# Creates 3-5 posts with varying angles and formats
# Posts are added to the scheduling queue
/linkedin:calendar
# Review the upcoming week's schedule
2. Quick React Post (5 minutes)
/linkedin:quick
> Just saw Microsoft announce Copilot Studio autonomous agents —
> this changes everything for low-code teams
3. Import Analytics and Review Performance
/linkedin:import
> ~/Downloads/linkedin-analytics-2026-02.csv
/linkedin:report
> Show me last week's performance
/linkedin:audit
> Full quarterly review
4. Grow from 2K to 5K Followers
/linkedin:strategy
> I have about 2,500 followers and want to reach 5K
/linkedin:competitive
> Analyze the top 5 thought leaders in Microsoft AI for government
5. Repurpose a Viral Post
/linkedin:multiplatform
> Take my best-performing post and adapt it for a newsletter intro,
> a Twitter thread, and 3 presentation slides
Content Quality Rules
The plugin enforces quality standards through hooks and agent behavior:
| Rule | Threshold | Enforcement |
|---|---|---|
| Hook length | 110-140 characters | PreToolUse quality gate |
| Post length (standard) | 1,200-1,800 characters | PreToolUse quality gate |
| Post length (quick) | 150-500 characters | PreToolUse quality gate |
| No external links in body | 0 links | PreToolUse quality gate (40-50% reach suppression) |
| No corporate buzzwords | Blocklist: leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach | PreToolUse quality gate |
| Topic alignment | Must align with 5 core expertise areas | 360Brew signal check |
| Topic rotation | No back-to-back same pillar; no pillar >50% in 14 days | Topic rotation gate (warn-only) |
| Voice consistency | AI authenticity check + voice matching | Voice guardian hook |
Configuration
User Profile
cp config/user-profile.template.md config/user-profile.local.md
Edit with your name, expertise areas, target audience, voice preferences, and LinkedIn goals. The more detail you provide, the more personalized the output.
State File
The plugin tracks posting metrics in ~/.claude/linkedin-thought-leadership.local.md:
---
last_post_date: 2026-01-28
posts_this_week: 2
weekly_goal: 3
current_streak: 12
current_week: "2026-W05"
follower_count: 0
follower_target: 10000
target_date: "2026-12-31"
next_planned_topic: ""
---
State is automatically initialized on first session start (from config/state-file.template.md) and updated by the Stop hook after each content session.
Post Queue
Scheduled posts are tracked in assets/drafts/queue.json:
- Managed by
queue-manager.mjs(imported by session-start, posting-reminder, and commands) - Status flow:
draft->scheduled->published(orcancelled) - Created by
/linkedin:batchand/linkedin:pipeline - Viewed via
/linkedin:calendar - Transitioned (marked as published) via the
/linkedin:calendarpublish action
What This Plugin Does Not Cover
| Area | Why | Alternative |
|---|---|---|
| LinkedIn API integration | No official API for content posting | Copy/paste from generated drafts |
| Real-time analytics | LinkedIn doesn't provide streaming data | Periodic CSV import via /linkedin:import |
| Engagement automation | Automated commenting violates LinkedIn ToS | Manual engagement guided by /linkedin:outreach |
| Profile editing | Plugin generates recommendations, not API calls | Apply changes manually on LinkedIn |
| Team/multi-user workflows | Designed for individual thought leaders | Enterprise LinkedIn tools |
| Content scheduling via API | No official scheduling API | Queue management with manual posting via /linkedin:calendar (publish action) |
Version History
| Version | Date | Highlights |
|---|---|---|
| 2.4.0 | 2026-05-29 | Editor's craft gate as an explicit pipeline phase. New editorial-reviewer agent (Opus) + Step 5.5 — Editorial review in /linkedin:newsletter (between fact-check and the persona sweep): two axes — prosa-håndverk (em-dash density, verbatim repetition, postulated numbers, contradictions, versal-tic) + narrativ-arkitektur (concrete instantiation, theory-anchored hypotheses, series-title symmetry, equal action per addressee, un-overloaded conclusion); ≤10 flags BLOCK/REWORK/NICE as direction; operator-gated via SendUserFile; mirrors Maskinrommet §C2. Motivated by Del 4 (every persona PASS, yet 8 fresh editor points, ~6/8 craft/architecture blind spots). editorial-review phase + additive editorialReview state. Pipeline 14 → 15 phases; 15 → 16 agents. New agent + fasit fixture + lint test the only new files; commands (24) unchanged. |
| 2.3.0 | 2026-05-28 | Visual assets as an explicit pipeline phase. New Step 7.5 — Visual assets in /linkedin:newsletter (between annotation and lock): cover (+ optional inline figures) or carousel deck, generated (default mcp-image; external cover-raw.png accepted) and operator-gated via SendUserFile BEFORE lock so build-linkedin.mjs picks up cover.png without a post-lock re-render. Explicit format: "carousel" branch reusing build-carousel.mjs. New config/image-credit-caption.template.md; additive visualAssets state + naming convention (cover.png / cover-v<N>-kandidat.png / cover-raw.png / fig<N>.png). Pipeline 13 → 14 phases. Doc/orchestration-only (no new code); commands (24) + agents (15) unchanged. |
| 2.2.0 | 2026-05-28 | Longform gates hardened (2nd production run). Persona gate blocking with explicit hard-fail list (primær mistet meg / doesn't own action / sjargong-mur / modell-navne-katalog → BLOCK; «JA med forbehold» = NEI). Fact-check post-cutoff web-search mandate + high-frequency-error checklist. New voice-scrubber agent (Opus): de-AI scrub + Norwegian-chronicle voice-drift, gold standard = approved Norwegian editions (NOT the English post corpus). Render+annotate operator gates (Steps 2.5/3a). Edition state reconciled with STATE.md (ONE-system); edition-HANDOVER.template.md deleted. 14 → 15 agents; commands unchanged (24). |
| 2.1.0 | 2026-05-28 | Skeleton gate BEFORE prose in /linkedin:newsletter. New Step 2.5 (skeleton + section pitch, operator-gate + persona-skjelett-sweep) and Step 3a (spine prose, operator-gate) split the old Step 3 into pre-prose stages with their own gates. New persona-reviewer mode (skjelett). Pipeline grows 11 → 13 phases; commands and agents unchanged in count (24, 14). Encodes the Maskinrommet writing-contract §A discipline (premiss / problem / anbefaling / gevinst / vei videre) into the pipeline. Empirically motivated by the Seres-serien Del 3 + Del 4 spine-rework cost. |
| 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. |
| 0.6.0 | 2026-02-07 | First formal version. 20 commands, 15 agents, 8 hooks, analytics system, 360Brew profile optimization, content matrix system, personalization engine, 20 reference documents. |
See CHANGELOG.md for full details and known gaps.
License
This project is licensed under the MIT License.
The plugin architecture, content strategies, and algorithm analysis are original work. LinkedIn is a trademark of LinkedIn Corporation.
The algorithm rewards expertise, consistency, and authenticity. Everything else is noise.