ktg-plugin-marketplace/plugins/linkedin-thought-leadership/CLAUDE.md
Kjell Tore Guttormsen 4ed9717627 feat(linkedin): v2.2.0 — harden longform gates from 2nd production run
Implements the 6-change spec from the Seres-serien production
(linkedin-plugin-endringsspec.md). All acceptance criteria met.

1. Avoid-patterns (modell-/navne-katalog, completeness-over-reader-action,
   self-referential overhead openings) → longform-quality-rules.md (rule 1+3)
   + user-profile.template.md.
2. Persona gate now BLOCKING with explicit hard-fail list (primær mistet meg /
   doesn't own action / sjargong-mur / modell-navne-katalog → BLOCK;
   "JA med store forbehold" = NEI) → persona-reviewer.md + personas.template.md.
3. Fact-check declared orthogonal to narrative strength + post-cutoff
   web-search mandate + high-frequency-error checklist → fact-checker.md.
4. NEW agent voice-scrubber.md (Opus) — de-AI scrub + Norwegian-chronicle
   voice-drift; gold standard = approved Norwegian editions, NOT the English
   post corpus. Wired into newsletter.md Step 4.
5. Operator gates = render+annotate rounds (build-html.mjs to file://) as
   primary flow, AskUserQuestion as receipt/fallback → newsletter.md 2.5+3a.
6. Edition state reconciled with STATE.md (ONE-system). edition-HANDOVER
   template deleted; narrative to <serie>/STATE.md, machine data
   (factcheckLog, personaSweep, immutableRules) to edition-state.json.

Agents 14 to 15; commands unchanged (24). Backward-compatible (additive
state-shape only). Docs updated across all three levels + CHANGELOG.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-28 20:50:56 +02:00

9 KiB

LinkedIn Thought Leadership Plugin (v2.2.0)

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). v2.1.0 added two gates BEFORE prose (Step 2.5 skeleton + Step 3a spine prose) + a third persona-reviewer mode (skjelett). v2.2.0 hardens the longform gates with the lessons from the second production run (Seres-serien): the persona gate is now blocking with an explicit hard-fail list (primær «mistet meg» / doesn't own the action / sjargong-mur / modell-/navne-katalog → BLOCK; «JA med store forbehold» = NEI); fact-check is declared orthogonal to narrative strength with a post-cutoff web-search mandate + high-frequency-error checklist; a new voice-scrubber agent (Opus) does de-AI scrub + Norwegian-chronicle voice-drift correction (gold standard = approved Norwegian editions, NOT the English post corpus) wired into Step 4; operator gates become render+annotate rounds (Steps 2.5/3a); and per-edition production state is reconciled with the global STATE.md continuity system — edition-HANDOVER.md is gone. Agents 14 → 15; commands unchanged (24).

Architecture

  • State file: ~/.claude/linkedin-thought-leadership.local.md (YAML frontmatter, auto-initialized from config/state-file.template.md)
  • State updater: hooks/scripts/state-updater.mjs — deterministic state mutations (post tracking, streak, content history pruning). Pure functions, tested, no AI involvement
  • Clipboard helper: hooks/scripts/clipboard-helper.mjs — cross-platform clipboard integration (macOS pbcopy, Linux xclip/xsel, WSL clip.exe). All content commands auto-copy to clipboard
  • iCal generator: hooks/scripts/ical-generator.mjs — RFC 5545 calendar file generation for batch scheduling. Standalone CLI + importable module
  • Post queue: assets/drafts/queue.json (managed by hooks/scripts/queue-manager.mjs)
  • Analytics CLI: scripts/analytics/ (TypeScript, requires tsx and npm install)
  • Analytics data: assets/analytics/ (gitignored)

Hooks

9 hooks across 7 events. All Node.js (.mjs). PreToolUse/PostToolUse hooks use parameterized content-gatekeeper.mjs with isLinkedInContent() check.

Event Purpose
SessionStart Load state, REMEMBER.md, milestone tracker
PreToolUse (Write|Edit) Content quality gate, voice guardian, topic rotation gate
Stop State update, pre-publish reminders, content history
UserPromptSubmit LinkedIn context enrichment (three-tier matching)
PostToolUse (Write) Post-creation automation (5x5x5, posting time)
PreCompact Preserve LinkedIn context during compaction
Notification Posting reminders (rate-limited 30min)

Session markers: /tmp/linkedin-hooks/session-active (Stop hook gating, 12h staleness). Shared modules: linkedin-content-filter.mjs, queue-manager.mjs, personalization-score.mjs, state-updater.mjs, clipboard-helper.mjs.

State updates: Post tracking, streak management, and content history are handled deterministically by state-updater.mjs (called from Stop hook and commands). Content history entries older than 90 days are auto-pruned at session start.

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 (24)

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
/linkedin Router — status line + command menu
/linkedin:onboarding Multi-step onboarding wizard (profile → setup → first-post)
/linkedin:first-post First-post accelerator (10 min)
/linkedin:setup Guided personalization setup
/linkedin:react URL-to-post pipeline
/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 13-phase pipeline with skeleton + spine-prose gates BEFORE prose (v2.1) and 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 (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 (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 (unlocks at ~1K followers)
/linkedin:outreach Outreach orchestrator — collaborations + speaking opportunities (unlocks at ~1K followers)
/linkedin:profile 360Brew profile optimization

Agents (15)

Agent Model Color Responsibility
content-optimizer Sonnet Blue Optimize existing posts
strategy-advisor Sonnet Green Growth recommendations
analytics-interpreter Sonnet Yellow Audience pattern analysis + weekly/monthly performance reports (interpret/report modes)
engagement-coach Sonnet Magenta 5x5x5 + first-hour tactics + CEA commenting + target selection
content-planner Sonnet Cyan Content audit + weekly/monthly plans
network-builder Sonnet Teal Strategic networking + outreach
content-repurposer Sonnet Purple Format conversion + evergreen refresh
trend-spotter Sonnet White Trending topics + opportunity scores
voice-trainer Sonnet Pink Voice profile building + drift detection
differentiation-checker Sonnet Gray Originality scoring + commodity detection
post-feedback-monitor Haiku Lime Post-publish 48h monitoring
video-scripter Sonnet Violet Video script creation with pacing
fact-checker Opus Brown Factual-claim verification against primary sources, post-cutoff web-search mandate (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)

Rule: Always read assets/voice-samples/ before generating content.

Invocation form: Commands invoke plugin agents by their namespaced type — subagent_type: linkedin-thought-leadership:<name> — never the bare <name> (a bare type does not resolve and the Task call fails).

Reload requirement: Adding a NEW agent file under agents/ registers it only after a Claude Code session reload — the plugin agent set is built at session start, so a freshly-added agent (e.g. fact-checker, persona-reviewer when first added) is not invokable until the session reloads. After adding an agent, reload before invoking it.

Content Quality Rules

  1. Hook: 110-140 characters (mobile cutoff)
  2. Post length: 1,200-1,800 chars (standard), 150-500 chars (quick)
  3. No external links in post body (40-50% reach suppression)
  4. No corporate buzzwords: leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach
  5. Topic must align with user's 5 core expertise areas (360Brew signal)
  6. Topic rotation: no back-to-back same pillar, no pillar >50% in 14 days (warn-only)
  7. Progressive onboarding: personalization score hidden until 3+ posts; voice guardian suppressed until 5+ voice samples