refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0)

BREAKING CHANGE: the marketplace slug, the agent namespace
(linkedin-studio:<agent>), and the runtime state-file path
(~/.claude/linkedin-studio.local.md) all change. Reinstall required;
existing state migrated in place (post metrics, streak, history preserved).
The /linkedin:* commands are unchanged — the command namespace is set
per-command in frontmatter and was always independent of the plugin slug.
Functionality is byte-identical to v2.4.0; this release is pure identity.

- dir + manifests: plugins/linkedin-studio + plugin.json + root marketplace.json
- agent namespace updated in commands/newsletter.md (only functional invoker)
- state path updated in 4 hook scripts + topic-rotation prompt + state template
- catch-all skill dir renamed skills/linkedin-studio (5 functional skills unchanged)
- docs + version bump to 3.0.0 across README badge, CHANGELOG, root README/CLAUDE.md
- historical records (CHANGELOG past entries, docs/ build artifacts,
  config-audit v5.0.0 snapshots) intentionally retain the old slug

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-29 11:32:02 +02:00
commit b6bb61246b
196 changed files with 164 additions and 138 deletions

View file

@ -26,9 +26,9 @@
"description": "Voyage — brief, research, plan, execute, review, continue. Contract-driven Claude Code pipeline with specialized agent swarms, external research triangulation, adversarial review, post-hoc independent review with Handover 6 feedback loop, multi-session resumption, session decomposition, and headless execution. /trekbrief, /trekplan, and /trekreview each end by building a self-contained operator-annotation HTML (scripts/annotate.mjs, modelled on claude-code-100x): pencil-toggle annotation mode, select text or click any element, pick intent (Fiks/Endre/Spørsmål), comment, Copy Prompt, paste back, Claude revises the .md." "description": "Voyage — brief, research, plan, execute, review, continue. Contract-driven Claude Code pipeline with specialized agent swarms, external research triangulation, adversarial review, post-hoc independent review with Handover 6 feedback loop, multi-session resumption, session decomposition, and headless execution. /trekbrief, /trekplan, and /trekreview each end by building a self-contained operator-annotation HTML (scripts/annotate.mjs, modelled on claude-code-100x): pencil-toggle annotation mode, select text or click any element, pick intent (Fiks/Endre/Spørsmål), comment, Copy Prompt, paste back, Claude revises the .md."
}, },
{ {
"name": "linkedin-thought-leadership", "name": "linkedin-studio",
"source": "./plugins/linkedin-thought-leadership", "source": "./plugins/linkedin-studio",
"description": "Build LinkedIn thought leadership with algorithmic understanding, strategic consistency, and authentic engagement. Updated for the January 2026 360Brew algorithm change." "description": "LinkedIn Studio — a full-spectrum LinkedIn content engine: feed posts, carousels, video scripts, and long-form newsletter editions, built on algorithmic understanding, strategic consistency, and authentic engagement. Updated for the January 2026 360Brew algorithm change."
}, },
{ {
"name": "graceful-handoff", "name": "graceful-handoff",

View file

@ -2,4 +2,4 @@
plugins/llm-security/examples/malicious-skill-demo/evil-project-health/lib/telemetry.mjs:generic-api-key:18 plugins/llm-security/examples/malicious-skill-demo/evil-project-health/lib/telemetry.mjs:generic-api-key:18
# False positive: word "conversational" matches linkedin-client-id entropy pattern # False positive: word "conversational" matches linkedin-client-id entropy pattern
plugins/linkedin-thought-leadership/hooks/prompts/content-quality-gate.md:linkedin-client-id:14 plugins/linkedin-studio/hooks/prompts/content-quality-gate.md:linkedin-client-id:14

View file

@ -9,7 +9,7 @@ plugins/
ai-psychosis/ v1.0.0 — Interaction awareness (sycophancy, reinforcement loops) ai-psychosis/ v1.0.0 — Interaction awareness (sycophancy, reinforcement loops)
config-audit/ v3.1.0 — Configuration intelligence (health, opportunities, auto-fix, whats-active) 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) graceful-handoff/ v2.1.0 — Auto-trigger handoff via Stop hook (skill + JSON pipeline + 4-step model-aware context resolution)
linkedin-thought-leadership/ v2.4.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. v2.1.0 added skeleton-gate BEFORE prose (Step 2.5 + Step 3a) + third `persona-reviewer` mode (`skjelett`); pipeline 11→13 phases. v2.2.0 hardened the longform gates (2nd production run): blocking persona hard-fails, fact-check post-cutoff web-search mandate + orthogonal-to-narrative rule, new `voice-scrubber` agent (Opus, de-AI + Norwegian-chronicle voice; gold standard = approved Norwegian editions NOT English post corpus), render+annotate operator gates (2.5/3a), edition-state reconciled with STATE.md (`edition-HANDOVER.md` deleted); agents 14→15. v2.3.0 added **Step 7.5 (visual-assets)** to `/linkedin:newsletter` — cover (+ inline figures) or carousel deck, generated (default mcp-image; external `cover-raw.png` accepted) + operator-gated via `SendUserFile` BEFORE lock so `build-linkedin.mjs` picks up `cover.png` without a post-lock re-render; pipeline 13→14 phases, new `config/image-credit-caption.template.md`, additive `visualAssets` state. v2.4.0 adds **Step 5.5 (editorial-review)** to `/linkedin:newsletter` — new `editorial-reviewer` agent (Opus) judging craft (prosa-håndverk + narrativ-arkitektur), not reader-response, ≤10 flags BLOCK/REWORK/NICE as direction, operator-gated via `SendUserFile` between fact-check (5) and persona-sweep (6), mirroring Maskinrommet skrivekontrakt §C2; motivated by Del 4 (every persona PASS yet 8 fresh editor points, ~6/8 craft/architecture blind spots). Pipeline 14→15 phases; agents 15→16; additive `editorialReview` state; doc/orchestration-only (new agent + fasit fixture + lint test the only new files). Commands unchanged (24); agents 16. Render pipeline self-hosted (OFL-1.1 fonts). linkedin-studio/ v3.0.0 — Full-spectrum LinkedIn content engine (short-form feed + long-form newsletter). **v3.0.0 renamed from `linkedin-thought-leadership`** (LinkedIn Thought Leadership → LinkedIn Studio): slug + agent namespace (`linkedin-studio:<agent>`) + runtime state path (`~/.claude/linkedin-studio.local.md`) all change; the `/linkedin:*` commands are unchanged (frontmatter-namespaced, slug-independent). Breaking — reinstall required; functionality byte-identical to v2.4.0. v2.0.0 consolidated surface (27→24 commands, 16→14 agents) + added `/linkedin:newsletter` orchestrator with fact-check + persona-sweep gates BEFORE lock. v2.1.0 added skeleton-gate BEFORE prose (Step 2.5 + Step 3a) + third `persona-reviewer` mode (`skjelett`); pipeline 11→13 phases. v2.2.0 hardened the longform gates (2nd production run): blocking persona hard-fails, fact-check post-cutoff web-search mandate + orthogonal-to-narrative rule, new `voice-scrubber` agent (Opus, de-AI + Norwegian-chronicle voice; gold standard = approved Norwegian editions NOT English post corpus), render+annotate operator gates (2.5/3a), edition-state reconciled with STATE.md (`edition-HANDOVER.md` deleted); agents 14→15. v2.3.0 added **Step 7.5 (visual-assets)** to `/linkedin:newsletter` — cover (+ inline figures) or carousel deck, generated (default mcp-image; external `cover-raw.png` accepted) + operator-gated via `SendUserFile` BEFORE lock so `build-linkedin.mjs` picks up `cover.png` without a post-lock re-render; pipeline 13→14 phases, new `config/image-credit-caption.template.md`, additive `visualAssets` state. v2.4.0 adds **Step 5.5 (editorial-review)** to `/linkedin:newsletter` — new `editorial-reviewer` agent (Opus) judging craft (prosa-håndverk + narrativ-arkitektur), not reader-response, ≤10 flags BLOCK/REWORK/NICE as direction, operator-gated via `SendUserFile` between fact-check (5) and persona-sweep (6), mirroring Maskinrommet skrivekontrakt §C2; motivated by Del 4 (every persona PASS yet 8 fresh editor points, ~6/8 craft/architecture blind spots). Pipeline 14→15 phases; agents 15→16; additive `editorialReview` state; doc/orchestration-only (new agent + fasit fixture + lint test the only new files). Commands unchanged (24); agents 16. Render pipeline self-hosted (OFL-1.1 fonts).
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. 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) 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 okr/ v1.0.0 — OKR guidance for Norwegian public sector

View file

@ -206,11 +206,11 @@ Key commands: `/architect`, `/architect:ros`, `/architect:security`, `/architect
--- ---
### [LinkedIn Thought Leadership](plugins/linkedin-thought-leadership/) `v2.4.0` ### [LinkedIn Studio](plugins/linkedin-studio/) `v3.0.0`
Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation. Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
v2.4.0 adds an **editor's craft gate as an explicit pipeline phase** in `/linkedin:newsletter`: a new **`editorial-reviewer` agent** (Opus) + **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6). It judges **craft****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) — not reader-response, returning **≤10 flags** (BLOCK / REWORK / NICE) as *direction* (never copy), operator-gated via `SendUserFile`, mirroring the Maskinrommet writing-contract §C2. Motivated by the Del 4 run, where **every persona reported PASS yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured.** Pipeline 14 → 15 phases; 15 → 16 agents; additive `editorialReview` state. v2.3.0 made **visual assets an explicit pipeline phase** (Step 7.5, between annotation and lock): the cover (+ optional inline figures) or a carousel deck is generated (default `mcp-image`; external `cover-raw.png` accepted) and operator-gated via `SendUserFile` **before lock**. v2.2.0 **hardened the longform gates** (blocking persona hard-fails, post-cutoff fact-check mandate, a Norwegian-chronicle `voice-scrubber`, render+annotate operator gates, STATE.md-reconciled edition state). Commands unchanged (24); 16 agents. v2.1.0's skeleton-gate-before-prose and v2.0.0's full-spectrum surface are preserved. Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content. **v3.0.0 renames the plugin to LinkedIn Studio** (was `linkedin-thought-leadership`): the slug, agent namespace, and runtime state-file path are now `linkedin-studio` — the `/linkedin:*` commands are unchanged. Breaking: reinstall required and the state file moves to `~/.claude/linkedin-studio.local.md`. Functionality is identical to v2.4.0. v2.4.0 adds an **editor's craft gate as an explicit pipeline phase** in `/linkedin:newsletter`: a new **`editorial-reviewer` agent** (Opus) + **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6). It judges **craft****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) — not reader-response, returning **≤10 flags** (BLOCK / REWORK / NICE) as *direction* (never copy), operator-gated via `SendUserFile`, mirroring the Maskinrommet writing-contract §C2. Motivated by the Del 4 run, where **every persona reported PASS yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured.** Pipeline 14 → 15 phases; 15 → 16 agents; additive `editorialReview` state. v2.3.0 made **visual assets an explicit pipeline phase** (Step 7.5, between annotation and lock): the cover (+ optional inline figures) or a carousel deck is generated (default `mcp-image`; external `cover-raw.png` accepted) and operator-gated via `SendUserFile` **before lock**. v2.2.0 **hardened the longform gates** (blocking persona hard-fails, post-cutoff fact-check mandate, a Norwegian-chronicle `voice-scrubber`, render+annotate operator gates, STATE.md-reconciled edition state). Commands unchanged (24); 16 agents. v2.1.0's skeleton-gate-before-prose and v2.0.0's full-spectrum surface are preserved. Updated for the January 2026 360Brew algorithm change, which validates your creator profile before distributing content.
- **Editorial-review craft gate BEFORE the persona sweep (v2.4)** — Step 5.5 runs the new `editorial-reviewer` (Opus) on the fact-checked draft, two axes (prosa-håndverk + narrativ-arkitektur), ≤10 flags severity-ranked BLOCK/REWORK/NICE, surfaced to the operator via `SendUserFile`. It runs *before* the persona sweep so the personas measure resonance instead of stumbling on craft noise; `persona-reviewer` is unchanged (one measures craft, one measures response). Mirrors Maskinrommet §C2. - **Editorial-review craft gate BEFORE the persona sweep (v2.4)** — Step 5.5 runs the new `editorial-reviewer` (Opus) on the fact-checked draft, two axes (prosa-håndverk + narrativ-arkitektur), ≤10 flags severity-ranked BLOCK/REWORK/NICE, surfaced to the operator via `SendUserFile`. It runs *before* the persona sweep so the personas measure resonance instead of stumbling on craft noise; `persona-reviewer` is unchanged (one measures craft, one measures response). Mirrors Maskinrommet §C2.
- **Visual-assets gate BEFORE lock (v2.3)** — Step 7.5 decides image needs from the article type (method-heavy → 12 inline figures; diagnosis-heavy → cover only), briefs each image, generates via mcp-image or an external `cover-raw.png`, surfaces candidates with `SendUserFile`, and copies the approved one to the fixed `cover.png` name. Explicit `format: "carousel"` branch reusing `build-carousel.mjs`. - **Visual-assets gate BEFORE lock (v2.3)** — Step 7.5 decides image needs from the article type (method-heavy → 12 inline figures; diagnosis-heavy → cover only), briefs each image, generates via mcp-image or an external `cover-raw.png`, surfaces candidates with `SendUserFile`, and copies the approved one to the fixed `cover.png` name. Explicit `format: "carousel"` branch reusing `build-carousel.mjs`.
@ -237,7 +237,7 @@ Key commands: `/linkedin:onboarding`, `/linkedin:post`, `/linkedin:quick`, `/lin
15 specialized agents · 24 commands · 6 skills · 9 hooks · 24 reference docs 15 specialized agents · 24 commands · 6 skills · 9 hooks · 24 reference docs
→ [Full documentation](plugins/linkedin-thought-leadership/README.md) → [Full documentation](plugins/linkedin-studio/README.md)
--- ---

View file

@ -172,7 +172,7 @@ If you need:
- **Persona shaping** (Cosmo Skyberg / specific advisor voices) — see `ms-ai-architect` - **Persona shaping** (Cosmo Skyberg / specific advisor voices) — see `ms-ai-architect`
- **Behavioral overrides** (anti-sycophancy, reinforcement-loop detection) — see `ai-psychosis` - **Behavioral overrides** (anti-sycophancy, reinforcement-loop detection) — see `ai-psychosis`
- **Voice training** (your own LinkedIn writing style) — see `linkedin-thought-leadership` - **Voice training** (your own LinkedIn writing style) — see `linkedin-studio`
- **Domain-specific workflows** (OKR, security audits, planning pipelines) — see the other plugins - **Domain-specific workflows** (OKR, security audits, planning pipelines) — see the other plugins
Those are domain plugins. This one is the shared chassis underneath them. Those are domain plugins. This one is the shared chassis underneath them.

View file

@ -0,0 +1,11 @@
{
"name": "linkedin-studio",
"version": "3.0.0",
"description": "LinkedIn Studio — full-spectrum LinkedIn content engine: feed posts, carousels, video scripts, and long-form newsletter editions, with the January 2026 360Brew algorithm baked in. v3.0.0 renames the plugin (was `linkedin-thought-leadership`): the slug, agent namespace, and runtime state-file path are now `linkedin-studio` — the `/linkedin:*` commands are unchanged. Breaking: reinstall required and the state file moves to `~/.claude/linkedin-studio.local.md`.",
"author": {
"name": "Kjell Tore Guttormsen"
},
"license": "MIT",
"repository": "https://git.fromaitochitta.com/open/ktg-plugin-marketplace",
"keywords": ["linkedin", "content-creation", "newsletter", "analytics", "360brew"]
}

View file

@ -5,6 +5,22 @@ 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/), 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). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.0.0] - 2026-05-29
### Summary
**Plugin renamed `linkedin-thought-leadership``linkedin-studio`** ("LinkedIn Thought Leadership" → **LinkedIn Studio**). The old display title read as pompous; the new name is plain and matches how the plugin already describes itself ("LinkedIn content engine"). This is a **breaking change** — the marketplace slug, the agent namespace (`linkedin-studio:<agent>`), and the runtime state-file path all change — so it bumps to a major version. Functionality is byte-for-byte identical to v2.4.0; this release is pure identity.
### Changed (breaking)
- **Slug / directory / manifests:** `plugins/linkedin-thought-leadership/``plugins/linkedin-studio/`; `plugin.json` and root `marketplace.json` `name`/`source` updated. **Reinstall required.**
- **Agent namespace:** commands invoke plugin agents as `linkedin-studio:<name>` (was `linkedin-thought-leadership:<name>`). Functional change in `commands/newsletter.md`; docs updated to match.
- **Runtime state path:** `~/.claude/linkedin-thought-leadership.local.md``~/.claude/linkedin-studio.local.md`. Hardcoded in `hooks/scripts/{state-updater,session-start,posting-reminder,user-prompt-context}.mjs`, `hooks/prompts/topic-rotation-gate.md`, and `config/state-file.template.md`. **Existing state migrated in place** (post metrics, streak, content history preserved).
- **Catch-all skill** `skills/linkedin-thought-leadership/``skills/linkedin-studio/` (frontmatter `name: linkedin-studio`); the five functional skills (`linkedin-analytics`, `-content-creation`, `-networking`, `-strategy`, `-voice`) are unchanged.
### Not changed (explicit non-deltas)
- **Command namespace `/linkedin:*`** — set per-command in frontmatter (`name: linkedin:post`), already independent of the plugin slug. Every command (`/linkedin:post`, `/linkedin:newsletter`, …) is invoked exactly as before. 24 commands, 16 agents — counts unchanged.
- **All hooks, scripts, renderers, agent contracts, content** — bit-for-bit identical to v2.4.0.
- **History preserved:** `config-audit` v5.0.0 test snapshots and the `docs/` build artifacts retain the old slug as point-in-time records and were intentionally not rewritten.
## [2.4.0] - 2026-05-29 ## [2.4.0] - 2026-05-29
### Summary ### Summary

View file

@ -1,10 +1,10 @@
# LinkedIn Thought Leadership Plugin (v2.4.0) # LinkedIn Studio Plugin (v2.4.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 hardened the longform gates with the lessons from the second production run (Seres-serien): blocking persona hard-fails, a post-cutoff fact-check mandate, a `voice-scrubber` agent, render+annotate operator gates, and STATE.md-reconciled edition state. v2.3.0 made **visual assets an explicit pipeline phase** — Step 7.5 (visual-assets) between annotation (Step 7) and lock (Step 8): cover (+ optional inline figures) or a carousel deck, generated (default `mcp-image`, external `cover-raw.png` accepted) and operator-gated BEFORE lock so `render/build-linkedin.mjs` picks up `cover.png` at lock without a post-lock re-render. **v2.4.0** makes an **editor's craft gate an explicit pipeline phase** — new **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6): a new **`editorial-reviewer` agent** (Opus) judges **craft** (prosa-håndverk + narrativ-arkitektur), not reader-response, returning ≤10 flags (BLOCK/REWORK/NICE) as direction, **operator-gated via `SendUserFile` BEFORE the persona sweep** so the personas measure resonance instead of stumbling on craft noise. Motivated by Del 4: every persona reported PASS, yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured. Mirrors the Maskinrommet writing-contract §C2. Pipeline 14 → 15 phases; agents 15 → 16; additive `editorialReview` state. Doc/orchestration-only for the wiring (the new agent + its fasit fixture + lint test are the only new files); commands unchanged (24). 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 hardened the longform gates with the lessons from the second production run (Seres-serien): blocking persona hard-fails, a post-cutoff fact-check mandate, a `voice-scrubber` agent, render+annotate operator gates, and STATE.md-reconciled edition state. v2.3.0 made **visual assets an explicit pipeline phase** — Step 7.5 (visual-assets) between annotation (Step 7) and lock (Step 8): cover (+ optional inline figures) or a carousel deck, generated (default `mcp-image`, external `cover-raw.png` accepted) and operator-gated BEFORE lock so `render/build-linkedin.mjs` picks up `cover.png` at lock without a post-lock re-render. **v2.4.0** makes an **editor's craft gate an explicit pipeline phase** — new **Step 5.5 (editorial-review)** between fact-check (Step 5) and the persona sweep (Step 6): a new **`editorial-reviewer` agent** (Opus) judges **craft** (prosa-håndverk + narrativ-arkitektur), not reader-response, returning ≤10 flags (BLOCK/REWORK/NICE) as direction, **operator-gated via `SendUserFile` BEFORE the persona sweep** so the personas measure resonance instead of stumbling on craft noise. Motivated by Del 4: every persona reported PASS, yet the editor found 8 fresh points on first reading, ~6/8 of them craft/architecture blind spots no agent measured. Mirrors the Maskinrommet writing-contract §C2. Pipeline 14 → 15 phases; agents 15 → 16; additive `editorialReview` state. Doc/orchestration-only for the wiring (the new agent + its fasit fixture + lint test are the only new files); commands unchanged (24).
## Architecture ## Architecture
- **State file:** `~/.claude/linkedin-thought-leadership.local.md` (YAML frontmatter, auto-initialized from `config/state-file.template.md`) - **State file:** `~/.claude/linkedin-studio.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 - **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 - **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 - **iCal generator:** `hooks/scripts/ical-generator.mjs` — RFC 5545 calendar file generation for batch scheduling. Standalone CLI + importable module
@ -87,7 +87,7 @@ All content commands (post, quick, react, pipeline, first-post, video, multiplat
**Rule:** Always read `assets/voice-samples/` before generating content. **Rule:** Always read `assets/voice-samples/` before generating content.
**Invocation form:** Commands invoke plugin agents by their **namespaced** type — **Invocation form:** Commands invoke plugin agents by their **namespaced** type —
`subagent_type: linkedin-thought-leadership:<name>` — never the bare `<name>` (a bare `subagent_type: linkedin-studio:<name>` — never the bare `<name>` (a bare
type does not resolve and the `Task` call fails). type does not resolve and the `Task` call fails).
**Reload requirement:** Adding a NEW agent file under `agents/` registers it only after **Reload requirement:** Adding a NEW agent file under `agents/` registers it only after

View file

@ -1,4 +1,4 @@
# Contributing to linkedin-thought-leadership # Contributing to linkedin-studio
This is a solo project. Bug reports and feature requests are welcome, but pull requests are not accepted. This is a solo project. Bug reports and feature requests are welcome, but pull requests are not accepted.
@ -29,7 +29,7 @@ Changes to this plugin must preserve:
## Testing locally ## Testing locally
```bash ```bash
claude plugin add /path/to/linkedin-thought-leadership claude plugin add /path/to/linkedin-studio
# In a Claude Code session: # In a Claude Code session:
/linkedin # Check status and command menu /linkedin # Check status and command menu

View file

@ -1,4 +1,4 @@
# LinkedIn Thought Leadership Plugin for Claude Code # LinkedIn Studio Plugin for Claude Code
> Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation. > Build authentic LinkedIn authority through algorithmic understanding, strategic consistency, and AI-assisted content creation.
@ -6,7 +6,7 @@
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)* *AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
![Version](https://img.shields.io/badge/version-2.4.0-blue) ![Version](https://img.shields.io/badge/version-3.0.0-blue)
![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple) ![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple)
![Commands](https://img.shields.io/badge/commands-24-green) ![Commands](https://img.shields.io/badge/commands-24-green)
![Agents](https://img.shields.io/badge/agents-16-orange) ![Agents](https://img.shields.io/badge/agents-16-orange)
@ -20,6 +20,7 @@ A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-
## Table of Contents ## Table of Contents
- [What's New in v3.0.0](#whats-new-in-v300)
- [What's New in v2.4.0](#whats-new-in-v240) - [What's New in v2.4.0](#whats-new-in-v240)
- [What's New in v2.3.0](#whats-new-in-v230) - [What's New in v2.3.0](#whats-new-in-v230)
- [What's New in v2.2.0](#whats-new-in-v220) - [What's New in v2.2.0](#whats-new-in-v220)
@ -43,6 +44,14 @@ A comprehensive Claude Code plugin that turns LinkedIn from a chore into a full-
--- ---
## What's New in v3.0.0
**The plugin is renamed `linkedin-thought-leadership``linkedin-studio` ("LinkedIn Thought Leadership" → LinkedIn Studio).** The old display title read as pompous; the new name is plain and matches how the plugin already describes itself — a *LinkedIn content engine*. This is a **breaking** release because the identity changes at three levels, but **no functionality changes** — v3.0.0 is byte-for-byte v2.4.0 under a new name.
- **What changed:** the marketplace **slug** (`linkedin-studio`), the **agent namespace** (`linkedin-studio:<agent>`, used by `/linkedin:newsletter`), and the **runtime state-file path** (`~/.claude/linkedin-studio.local.md`, migrated in place — your post metrics, streak, and content history are preserved).
- **What did *not* change:** the **commands**. `/linkedin:post`, `/linkedin:newsletter`, `/linkedin:quick`, and every other command are invoked exactly as before — the `/linkedin:` namespace is set per-command in frontmatter and was always independent of the plugin slug. 24 commands, 16 agents, 9 hooks — all unchanged.
- **Action required:** **reinstall the plugin** so Claude Code registers the new slug and agent namespace, then reload the session. Until reload, the renamed agents won't resolve.
## What's New in v2.4.0 ## 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. **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.
@ -165,7 +174,7 @@ Or enable directly in `~/.claude/settings.json`:
```json ```json
{ {
"enabledPlugins": { "enabledPlugins": {
"linkedin-thought-leadership@ktg-plugin-marketplace": true "linkedin-studio@ktg-plugin-marketplace": true
} }
} }
``` ```
@ -288,7 +297,7 @@ Parallel support agents: `strategy-advisor`, `analytics-interpreter`, `network-b
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). 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** > **Note (agent invocation + reload):** Commands invoke agents by their **namespaced**
> type — `subagent_type: linkedin-thought-leadership:<name>`, never the bare name. And a > type — `subagent_type: linkedin-studio:<name>`, never the bare name. And a
> **newly added** agent file under `agents/` only becomes invokable after a Claude Code > **newly added** agent file under `agents/` only becomes invokable after a Claude Code
> **session reload** (the plugin agent set is built at session start). Add the agent, then > **session reload** (the plugin agent set is built at session start). Add the agent, then
> reload before invoking it. > reload before invoking it.
@ -355,7 +364,7 @@ Six domain-specific skills organize the plugin's knowledge and route commands to
| Skill | Domain | Commands Routed | | Skill | Domain | Commands Routed |
|-------|--------|-----------------| |-------|--------|-----------------|
| `linkedin-thought-leadership` | Router + shared knowledge (algorithm, quality rules) | `/linkedin`, `/linkedin:setup` | | `linkedin-studio` | 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-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-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-strategy` | Growth, authority (absorbed), competitive, monetization | `/linkedin:strategy`, `:competitive`, `:monetize` |
@ -548,7 +557,7 @@ Edit with your name, expertise areas, target audience, voice preferences, and Li
### State File ### State File
The plugin tracks posting metrics in `~/.claude/linkedin-thought-leadership.local.md`: The plugin tracks posting metrics in `~/.claude/linkedin-studio.local.md`:
```yaml ```yaml
--- ---
@ -595,6 +604,7 @@ Scheduled posts are tracked in `assets/drafts/queue.json`:
| Version | Date | Highlights | | Version | Date | Highlights |
|---------|------|-----------| |---------|------|-----------|
| **3.0.0** | 2026-05-29 | **Renamed** `linkedin-thought-leadership``linkedin-studio` ("LinkedIn Thought Leadership" → **LinkedIn Studio**). Breaking (slug + agent namespace `linkedin-studio:<agent>` + runtime state path `~/.claude/linkedin-studio.local.md` all change; reinstall required, state migrated in place), but **functionality byte-identical to v2.4.0**. The `/linkedin:*` commands are unchanged (frontmatter-namespaced, slug-independent). Catch-all skill dir renamed to match (`skills/linkedin-studio/`); the five functional skills unchanged. |
| **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.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.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.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). |

View file

@ -70,7 +70,7 @@ Always load these for pattern comparison:
## Manual Data Sources (fallback) ## Manual Data Sources (fallback)
When structured analytics aren't available: When structured analytics aren't available:
- `~/.claude/linkedin-thought-leadership.local.md` — Posting history, streaks, weekly stats - `~/.claude/linkedin-studio.local.md` — Posting history, streaks, weekly stats
- `${CLAUDE_PLUGIN_ROOT}/assets/plans/` — Planned vs. actual content - `${CLAUDE_PLUGIN_ROOT}/assets/plans/` — Planned vs. actual content
- `${CLAUDE_PLUGIN_ROOT}/assets/drafts/` — Draft history - `${CLAUDE_PLUGIN_ROOT}/assets/drafts/` — Draft history
- See `${CLAUDE_PLUGIN_ROOT}/assets/analytics/README.md` for data format and directory structure. - See `${CLAUDE_PLUGIN_ROOT}/assets/analytics/README.md` for data format and directory structure.

View file

@ -28,13 +28,13 @@ You are a LinkedIn content planning specialist. You create strategic content pla
Read these files before planning: Read these files before planning:
``` ```
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md → expertise areas, voice ${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md → expertise areas, voice
${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles ${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles
${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → growth strategies ${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → growth strategies
${CLAUDE_PLUGIN_ROOT}/references/low-frequency-posting-strategy.md → sustainable posting ${CLAUDE_PLUGIN_ROOT}/references/low-frequency-posting-strategy.md → sustainable posting
${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md → format options ${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md → format options
${CLAUDE_PLUGIN_ROOT}/assets/templates/weekly-content-calendar-2-3x.md → calendar template ${CLAUDE_PLUGIN_ROOT}/assets/templates/weekly-content-calendar-2-3x.md → calendar template
~/.claude/linkedin-thought-leadership.local.md → user state + recent posts ~/.claude/linkedin-studio.local.md → user state + recent posts
``` ```
Also scan `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for previous plans to avoid repetition. Also scan `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for previous plans to avoid repetition.
@ -469,7 +469,7 @@ Create the `plans/` directory if it doesn't exist.
### Update State File ### Update State File
After plan approval, update `~/.claude/linkedin-thought-leadership.local.md`: After plan approval, update `~/.claude/linkedin-studio.local.md`:
- Set `next_planned_topic` to the first upcoming topic - Set `next_planned_topic` to the first upcoming topic
- Add planned topics to the recent topics list for dedup - Add planned topics to the recent topics list for dedup
- Update `last_plan_date` - Update `last_plan_date`

View file

@ -37,7 +37,7 @@ ${CLAUDE_PLUGIN_ROOT}/references/newsletter-strategy-guide.md → newslette
${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles ${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles
${CLAUDE_PLUGIN_ROOT}/assets/case-studies/case-study-template.md → case study structure + 4 LinkedIn post angles ${CLAUDE_PLUGIN_ROOT}/assets/case-studies/case-study-template.md → case study structure + 4 LinkedIn post angles
${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → proven patterns to replicate ${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → proven patterns to replicate
~/.claude/linkedin-thought-leadership.local.md → user state + performance data ~/.claude/linkedin-studio.local.md → user state + performance data
``` ```
## Step 1: Source Content Analysis ## Step 1: Source Content Analysis

View file

@ -34,8 +34,8 @@ ${CLAUDE_PLUGIN_ROOT}/references/collaborations-guide.md → coll
${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md → engagement methods ${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md → engagement methods
${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → growth strategies ${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → growth strategies
${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → conversion + DM strategy ${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → conversion + DM strategy
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md → user expertise + voice ${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md → user expertise + voice
~/.claude/linkedin-thought-leadership.local.md → user state + network data ~/.claude/linkedin-studio.local.md → user state + network data
``` ```
Also check `${CLAUDE_PLUGIN_ROOT}/assets/network/` for existing tracker files. Also check `${CLAUDE_PLUGIN_ROOT}/assets/network/` for existing tracker files.

View file

@ -36,7 +36,7 @@ Before analyzing anything, load these files:
1. **Algorithm knowledge:** Read `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` 1. **Algorithm knowledge:** Read `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md`
2. **Engagement frameworks:** Read `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` 2. **Engagement frameworks:** Read `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md`
3. **State file:** Read `~/.claude/linkedin-thought-leadership.local.md` (if exists) 3. **State file:** Read `~/.claude/linkedin-studio.local.md` (if exists)
4. **Latest analytics:** Use Glob to find the most recent file in `${CLAUDE_PLUGIN_ROOT}/assets/analytics/posts/` and read it 4. **Latest analytics:** Use Glob to find the most recent file in `${CLAUDE_PLUGIN_ROOT}/assets/analytics/posts/` and read it
This gives you the user's baseline performance and algorithm context for accurate benchmarking. This gives you the user's baseline performance and algorithm context for accurate benchmarking.

View file

@ -43,7 +43,7 @@ ${CLAUDE_PLUGIN_ROOT}/assets/audience-insights/demographics.md → audience
${CLAUDE_PLUGIN_ROOT}/assets/audience-insights/engagement-patterns.md → timing, topic, and format patterns ${CLAUDE_PLUGIN_ROOT}/assets/audience-insights/engagement-patterns.md → timing, topic, and format patterns
${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → proven patterns from top posts ${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → proven patterns from top posts
${CLAUDE_PLUGIN_ROOT}/references/trajectory-strategy-adjustments.md → trajectory-to-action mappings ${CLAUDE_PLUGIN_ROOT}/references/trajectory-strategy-adjustments.md → trajectory-to-action mappings
~/.claude/linkedin-thought-leadership.local.md → user state + posting history ~/.claude/linkedin-studio.local.md → user state + posting history
``` ```
Use demographics data to compare the user's **intended** audience vs **actual** engagers when making strategic recommendations. Use demographics data to compare the user's **intended** audience vs **actual** engagers when making strategic recommendations.

View file

@ -36,7 +36,7 @@ ${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md → Hook
${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles ${CLAUDE_PLUGIN_ROOT}/references/thought-leadership-angles.md → 8 universal angles
${CLAUDE_PLUGIN_ROOT}/assets/voice-samples/ → User's authentic voice (ALWAYS read before scripting) ${CLAUDE_PLUGIN_ROOT}/assets/voice-samples/ → User's authentic voice (ALWAYS read before scripting)
${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → Successful content patterns ${CLAUDE_PLUGIN_ROOT}/assets/examples/high-engagement-posts.md → Successful content patterns
~/.claude/linkedin-thought-leadership.local.md → User state, recent topics, streak ~/.claude/linkedin-studio.local.md → User state, recent topics, streak
``` ```
## Step 1: Video Type Selection ## Step 1: Video Type Selection
@ -218,7 +218,7 @@ Examples:
video-2026-01-30-copilot-demo-screen-recording-60s.md video-2026-01-30-copilot-demo-screen-recording-60s.md
``` ```
Update state in `~/.claude/linkedin-thought-leadership.local.md`: Update state in `~/.claude/linkedin-studio.local.md`:
- Update `last_post_date`, `posts_this_week`, streak (same as text posts) - Update `last_post_date`, `posts_this_week`, streak (same as text posts)
- Add to "Recent Posts" section with format note: `[VIDEO/talking-head/90s]` - Add to "Recent Posts" section with format note: `[VIDEO/talking-head/90s]`

View file

@ -40,7 +40,7 @@ ls -1 ${CLAUDE_PLUGIN_ROOT}/assets/analytics/ab-tests/ 2>/dev/null | head -20
ls -1 ${CLAUDE_PLUGIN_ROOT}/assets/analytics/posts/ 2>/dev/null | grep -E '\.json$' | head -10 ls -1 ${CLAUDE_PLUGIN_ROOT}/assets/analytics/posts/ 2>/dev/null | grep -E '\.json$' | head -10
``` ```
If `~/.claude/linkedin-thought-leadership.local.md` exists, read it for user context (posting frequency, follower level, topics). If `~/.claude/linkedin-studio.local.md` exists, read it for user context (posting frequency, follower level, topics).
## Step 1: Determine Intent ## Step 1: Determine Intent

View file

@ -20,7 +20,7 @@ You are a LinkedIn performance analyst. Help the user diagnose why their content
Read these reference files: Read these reference files:
- `references/troubleshooting-guide.md` - Failure patterns and solutions - `references/troubleshooting-guide.md` - Failure patterns and solutions
- `references/algorithm-signals-reference.md` - Algorithm mechanics - `references/algorithm-signals-reference.md` - Algorithm mechanics
- `skills/linkedin-thought-leadership/SKILL.md` - User's profile and goals - `skills/linkedin-studio/SKILL.md` - User's profile and goals
## Step 1: Diagnose the Problem ## Step 1: Diagnose the Problem

View file

@ -20,9 +20,9 @@ You are a LinkedIn content strategy auditor. Conduct a thorough review of the us
## Step 0: Gather Data ## Step 0: Gather Data
Load all available data: Load all available data:
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting history - Read `~/.claude/linkedin-studio.local.md` for posting history
- Read `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for planned content - Read `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for planned content
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md` for strategy reference - Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for strategy reference
- Check for any analytics data in `${CLAUDE_PLUGIN_ROOT}/assets/analytics/` - Check for any analytics data in `${CLAUDE_PLUGIN_ROOT}/assets/analytics/`
- Read `assets/audience-insights/demographics.md` for audience composition — compare intended vs actual audience - Read `assets/audience-insights/demographics.md` for audience composition — compare intended vs actual audience
- Read `assets/audience-insights/engagement-patterns.md` for tracked patterns (timing, topics, formats, hooks) - Read `assets/audience-insights/engagement-patterns.md` for tracked patterns (timing, topics, formats, hooks)
@ -103,7 +103,7 @@ Analyze trajectory:
## Step 5.5: Milestone Progress Check ## Step 5.5: Milestone Progress Check
If `follower_count > 0` in the state file (`~/.claude/linkedin-thought-leadership.local.md`), analyze milestone progress: If `follower_count > 0` in the state file (`~/.claude/linkedin-studio.local.md`), analyze milestone progress:
### Growth Trajectory ### Growth Trajectory

View file

@ -23,8 +23,8 @@ You are a LinkedIn batch content creator. Help the user create an entire week's
## Step 0: Load Context ## Step 0: Load Context
Load state and personalization: Load state and personalization:
- Read `~/.claude/linkedin-thought-leadership.local.md` for recent topics and weekly goals - Read `~/.claude/linkedin-studio.local.md` for recent topics and weekly goals
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md` for profile and preferences - Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for profile and preferences
- Check `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for existing weekly plan - Check `${CLAUDE_PLUGIN_ROOT}/assets/plans/` for existing weekly plan
- Read `assets/templates/my-post-templates.md` for proven templates — vary templates across the batch for format diversity - Read `assets/templates/my-post-templates.md` for proven templates — vary templates across the batch for format diversity

View file

@ -42,7 +42,7 @@ console.log(JSON.stringify(queueCount(), null, 2));
``` ```
Also read state for context: Also read state for context:
- `~/.claude/linkedin-thought-leadership.local.md` for weekly goal and current progress - `~/.claude/linkedin-studio.local.md` for weekly goal and current progress
## Step 2: Display Calendar View ## Step 2: Display Calendar View

View file

@ -22,7 +22,7 @@ You are a LinkedIn carousel content specialist. Create high-engagement carousel
## Step 0: Load Context ## Step 0: Load Context
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state and expertise areas - Read `~/.claude/linkedin-studio.local.md` for posting state and expertise areas
- Read `assets/voice-samples/authentic-voice-samples.md` for voice profile - Read `assets/voice-samples/authentic-voice-samples.md` for voice profile
- Check recent posts to avoid topic repetition - Check recent posts to avoid topic repetition

View file

@ -20,8 +20,8 @@ You are a LinkedIn competitive intelligence analyst. Help the user learn from ot
## Step 0: Load Context ## Step 0: Load Context
Read the user's profile and strategy: Read the user's profile and strategy:
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md` — Expertise areas and positioning - `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` — Expertise areas and positioning
- `~/.claude/linkedin-thought-leadership.local.md` — Current posting patterns - `~/.claude/linkedin-studio.local.md` — Current posting patterns
## Step 1: Identify Competitors ## Step 1: Identify Competitors

View file

@ -23,7 +23,7 @@ The first post doesn't need to be perfect. It needs to EXIST. Every day without
## Step 0: Load Context ## Step 0: Load Context
Read `~/.claude/linkedin-thought-leadership.local.md` for current state. Read `~/.claude/linkedin-studio.local.md` for current state.
Read `assets/voice-samples/authentic-voice-samples.md` for voice profile (if it exists). Read `assets/voice-samples/authentic-voice-samples.md` for voice profile (if it exists).
Check: If `first_post_date` is already set, this user has posted before. Suggest `/linkedin:post` or `/linkedin:quick` instead, and explain this command is for true first-timers. Check: If `first_post_date` is already set, this user has posted before. Suggest `/linkedin:post` or `/linkedin:quick` instead, and explain this command is for true first-timers.

View file

@ -222,7 +222,7 @@ Run /linkedin:report (period: 4w)
`/linkedin:report` will: `/linkedin:report` will:
1. Read `expertise_areas` from `~/.claude/linkedin-thought-leadership.local.md` 1. Read `expertise_areas` from `~/.claude/linkedin-studio.local.md`
2. Call `trends` for impressions and engagement_rate over the last 4 weeks: 2. Call `trends` for impressions and engagement_rate over the last 4 weeks:
```bash ```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 impressions
@ -241,7 +241,7 @@ manually when analytics are ready."
After successful import and analysis, update the state file: After successful import and analysis, update the state file:
``` ```
Read ~/.claude/linkedin-thought-leadership.local.md Read ~/.claude/linkedin-studio.local.md
Set last_import_date to today (YYYY-MM-DD) Set last_import_date to today (YYYY-MM-DD)
Set last_import_week to current ISO week (YYYY-WXX) Set last_import_week to current ISO week (YYYY-WXX)
Write the updated state file Write the updated state file

View file

@ -11,13 +11,13 @@ allowed-tools:
- AskUserQuestion - AskUserQuestion
--- ---
# LinkedIn Thought Leadership Command Router # LinkedIn Studio Command Router
You are a LinkedIn thought leadership assistant. The user has invoked the main `/linkedin` command. Your job is to help them navigate to the right subcommand. You are a LinkedIn thought leadership assistant. The user has invoked the main `/linkedin` command. Your job is to help them navigate to the right subcommand.
## Session Status ## Session Status
If `~/.claude/linkedin-thought-leadership.local.md` exists, read it and show a brief status line: If `~/.claude/linkedin-studio.local.md` exists, read it and show a brief status line:
``` ```
LinkedIn: X/Y posts this week | Streak: N days | Last: YYYY-MM-DD | X/10000 followers (Phase) LinkedIn: X/Y posts this week | Streak: N days | Last: YYYY-MM-DD | X/10000 followers (Phase)
@ -200,4 +200,4 @@ If the user's intent is clear from context:
## Reference ## Reference
For full skill documentation, see: For full skill documentation, see:
- `skills/linkedin-thought-leadership/SKILL.md` - Complete skill with personalization settings - `skills/linkedin-studio/SKILL.md` - Complete skill with personalization settings

View file

@ -28,8 +28,8 @@ ${CLAUDE_PLUGIN_ROOT}/references/linkedin-monetization-strategies.md → pricin
${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → conversion funnels, DM strategy ${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → conversion funnels, DM strategy
${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → algorithm context ${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → algorithm context
${CLAUDE_PLUGIN_ROOT}/references/growth-roadmaps.md → stage progression ${CLAUDE_PLUGIN_ROOT}/references/growth-roadmaps.md → stage progression
~/.claude/linkedin-thought-leadership.local.md → user state + posting data ~/.claude/linkedin-studio.local.md → user state + posting data
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md → expertise areas ${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md → expertise areas
``` ```
## Step 1: Readiness Assessment ## Step 1: Readiness Assessment

View file

@ -22,7 +22,7 @@ You are a multi-platform content strategist. Help the user adapt their LinkedIn
Ask the user to provide their LinkedIn content or read from drafts: Ask the user to provide their LinkedIn content or read from drafts:
- Read `${CLAUDE_PLUGIN_ROOT}/assets/drafts/` for recent content - Read `${CLAUDE_PLUGIN_ROOT}/assets/drafts/` for recent content
- Read `~/.claude/linkedin-thought-leadership.local.md` for recent posts - Read `~/.claude/linkedin-studio.local.md` for recent posts
## Step 1: Select Target Platform ## Step 1: Select Target Platform

View file

@ -60,8 +60,8 @@ This command is **fundamentally different** from the short-form commands:
delegate the fan-out to a nested background agent. delegate the fan-out to a nested background agent.
> **Agent invocation form (required).** Plugin agents resolve only under their > **Agent invocation form (required).** Plugin agents resolve only under their
> namespaced type — `subagent_type: linkedin-thought-leadership:<name>` (e.g. > namespaced type — `subagent_type: linkedin-studio:<name>` (e.g.
> `linkedin-thought-leadership:fact-checker`), never the bare `<name>`. A bare > `linkedin-studio:fact-checker`), never the bare `<name>`. A bare
> `subagent_type` does not resolve and the `Task` call fails. Every > `subagent_type` does not resolve and the `Task` call fails. Every
> `subagent_type` below is written in the namespaced form for this reason. > `subagent_type` below is written in the namespaced form for this reason.
@ -428,7 +428,7 @@ Next: Step 2.5 — Skeleton + section pitch (operator + persona gate BEFORE pros
5. **Persona-skjelett-sweep — fan out `persona-reviewer` in skjelett-mode.** 5. **Persona-skjelett-sweep — fan out `persona-reviewer` in skjelett-mode.**
Issue one `persona-reviewer` call per active persona in parallel — a SINGLE Issue one `persona-reviewer` call per active persona in parallel — a SINGLE
message with multiple `Task` tool-uses, `subagent_type: message with multiple `Task` tool-uses, `subagent_type:
linkedin-thought-leadership:persona-reviewer`, from THIS command layer in linkedin-studio:persona-reviewer`, from THIS command layer in
the foreground (principle 4). Pass each call the persona name, the path to the foreground (principle 4). Pass each call the persona name, the path to
`<serie>/NN-skjelett.md`, and **`mode: skjelett`** (the before-prose mode — `<serie>/NN-skjelett.md`, and **`mode: skjelett`** (the before-prose mode —
five spine axes, ≤3 flags as direction, HOLDER/TVILER/MANGLER scoring). five spine axes, ≤3 flags as direction, HOLDER/TVILER/MANGLER scoring).
@ -622,7 +622,7 @@ turning-points the spine already named.
3. **Expand with the `content-repurposer` muscle.** Reuse 3. **Expand with the `content-repurposer` muscle.** Reuse
`agents/content-repurposer.md` (its article→long-form conversion discipline) `agents/content-repurposer.md` (its article→long-form conversion discipline)
for individual section expansions — invoke it via `Task` (`subagent_type: for individual section expansions — invoke it via `Task` (`subagent_type:
linkedin-thought-leadership:content-repurposer`) when useful, *from this linkedin-studio:content-repurposer`) when useful, *from this
command layer* (foreground, principle 4). The command owns assembly and command layer* (foreground, principle 4). The command owns assembly and
voice; the agent assists with conversion. The draft is voice-matched by voice; the agent assists with conversion. The draft is voice-matched by
THIS session, not self-certified for voice — voice-match remains an THIS session, not self-certified for voice — voice-match remains an
@ -683,7 +683,7 @@ checklist (full detail + pass/flag criteria in the reference file):
**De-AI / voice scrub (sub-pass — `voice-scrubber`).** After the rule pass, run **De-AI / voice scrub (sub-pass — `voice-scrubber`).** After the rule pass, run
the draft through `voice-scrubber` (Opus) — `Task`, `subagent_type: the draft through `voice-scrubber` (Opus) — `Task`, `subagent_type:
linkedin-thought-leadership:voice-scrubber`, from THIS command layer in the linkedin-studio:voice-scrubber`, from THIS command layer in the
foreground (principle 4). Pass it the draft path AND the paths to the **approved foreground (principle 4). Pass it the draft path AND the paths to the **approved
Norwegian editions** as the gold standard (e.g. earlier parts' locked Norwegian editions** as the gold standard (e.g. earlier parts' locked
`linkedin/NN/POST.html` or their approved `NN-utkast.md`). **Do NOT** point it at `linkedin/NN/POST.html` or their approved `NN-utkast.md`). **Do NOT** point it at
@ -742,7 +742,7 @@ because it "feels" right or because it sits in your own research notes.
block can be verified independently without overlap. block can be verified independently without overlap.
3. **Fan out in parallel — issue all N `fact-checker` calls in a SINGLE message** 3. **Fan out in parallel — issue all N `fact-checker` calls in a SINGLE message**
(multiple `Task` tool-uses in one turn, `subagent_type: linkedin-thought-leadership:fact-checker`) so they (multiple `Task` tool-uses in one turn, `subagent_type: linkedin-studio:fact-checker`) so they
run concurrently, from THIS command layer in the foreground (principle 4, plan run concurrently, from THIS command layer in the foreground (principle 4, plan
§3). Each call gets one claim-block and returns the agent's standard §3). Each call gets one claim-block and returns the agent's standard
verification log + risk-sort (🔴/🟡/🟢) + gate decision (PASS/REWORK/BLOCK). verification log + risk-sort (🔴/🟡/🟢) + gate decision (PASS/REWORK/BLOCK).
@ -834,7 +834,7 @@ and `persona-reviewer` never flags em-dash density (that is this step).
settled text, not on a draft still moving under fact fixes. settled text, not on a draft still moving under fact fixes.
2. **Run `editorial-reviewer` (single foreground `Task` call).** Invoke 2. **Run `editorial-reviewer` (single foreground `Task` call).** Invoke
`subagent_type: linkedin-thought-leadership:editorial-reviewer` from THIS `subagent_type: linkedin-studio:editorial-reviewer` from THIS
command layer in the foreground (principle 4), passing the draft path command layer in the foreground (principle 4), passing the draft path
(`<serie>/NN-utkast.md`) and — when the edition is part of a series — the (`<serie>/NN-utkast.md`) and — when the edition is part of a series — the
series title (for the A3 series-title-symmetry check). The agent returns a series title (for the A3 series-title-symmetry check). The agent returns a
@ -924,7 +924,7 @@ reopening locked texts — the biggest single process error of the series (plan
2. **Fan out one `persona-reviewer` call per persona, in parallel** — issue them 2. **Fan out one `persona-reviewer` call per persona, in parallel** — issue them
in a SINGLE message (multiple `Task` tool-uses, `subagent_type: in a SINGLE message (multiple `Task` tool-uses, `subagent_type:
linkedin-thought-leadership:persona-reviewer`), from THIS command layer in the linkedin-studio:persona-reviewer`), from THIS command layer in the
foreground (principle 4). foreground (principle 4).
Pass each call its persona name and **`mode: resonans`** (the before-lock mode Pass each call its persona name and **`mode: resonans`** (the before-lock mode
— all six axes, ≤5 flags as direction). This is NOT conversion mode, which is — all six axes, ≤5 flags as direction). This is NOT conversion mode, which is
@ -1258,7 +1258,7 @@ the post-lock conversion sweep, distinct from the pre-lock resonance sweep
collected post). This is what the reader sees before "…see more". collected post). This is what the reader sees before "…see more".
2. **Run `persona-reviewer` in conversion mode** (`subagent_type: 2. **Run `persona-reviewer` in conversion mode** (`subagent_type:
linkedin-thought-leadership:persona-reviewer`) for the **primær** persona linkedin-studio:persona-reviewer`) for the **primær** persona
only, from THIS command layer in the foreground. Pass only, from THIS command layer in the foreground. Pass
**`mode: konverter`** (the after-lock, hook-only mode — NOT resonans). The **`mode: konverter`** (the after-lock, hook-only mode — NOT resonans). The
agent returns a single binary verdict, **JA / NEI**, on «would YOU click?» — agent returns a single binary verdict, **JA / NEI**, on «would YOU click?» —

View file

@ -18,7 +18,7 @@ You are a LinkedIn thought leadership onboarding guide. Walk the user through pr
## Step 0: Load Context and Check State ## Step 0: Load Context and Check State
Read `~/.claude/linkedin-thought-leadership.local.md` for current state. Read `~/.claude/linkedin-studio.local.md` for current state.
**Already onboarded check:** If `first_post_date` is set (not null) AND personalization score > 50: **Already onboarded check:** If `first_post_date` is set (not null) AND personalization score > 50:
- Show: "You've already completed onboarding (first post: [date], personalization: [score]%)." - Show: "You've already completed onboarding (first post: [date], personalization: [score]%)."

View file

@ -70,8 +70,8 @@ ${CLAUDE_PLUGIN_ROOT}/references/collaborations-guide.md → format
${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → opportunity funnels, DM strategy ${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md → opportunity funnels, DM strategy
${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md → CEA, engagement strategies, content structures ${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md → CEA, engagement strategies, content structures
${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → algorithm context ${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md → algorithm context
~/.claude/linkedin-thought-leadership.local.md → user state + posting data ~/.claude/linkedin-studio.local.md → user state + posting data
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md → expertise areas ${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md → expertise areas
``` ```
## Step 1: Choose Your Outreach Track ## Step 1: Choose Your Outreach Track

View file

@ -24,8 +24,8 @@ You are a LinkedIn content pipeline orchestrator. Guide the user through the com
## Step 0: Load Context ## Step 0: Load Context
Load persistent state and personalization: Load persistent state and personalization:
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state - Read `~/.claude/linkedin-studio.local.md` for posting state
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-thought-leadership/SKILL.md` for profile and preferences - Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for profile and preferences
- Check `assets/voice-samples/` for voice matching - Check `assets/voice-samples/` for voice matching
- Read `assets/templates/my-post-templates.md` for proven post templates — use these in Step 2 (Draft) - Read `assets/templates/my-post-templates.md` for proven post templates — use these in Step 2 (Draft)
- Read `assets/frameworks/framework-template.md` if the topic involves a framework or methodology - Read `assets/frameworks/framework-template.md` if the topic involves a framework or methodology

View file

@ -22,8 +22,8 @@ You are a LinkedIn thought leadership content creator. Guide the user through cr
## Step 0: Load Context ## Step 0: Load Context
First, load persistent state and personalization: First, load persistent state and personalization:
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state (streak, weekly progress, recent topics) - Read `~/.claude/linkedin-studio.local.md` for posting state (streak, weekly progress, recent topics)
- Read `skills/linkedin-thought-leadership/SKILL.md` for user profile, voice settings, and preferences - Read `skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
Check state for topic planning: Check state for topic planning:
- Compare intended topic against "Recent Posts" in state file - Compare intended topic against "Recent Posts" in state file

View file

@ -201,4 +201,4 @@ If the answer is no, fix the profile FIRST before posting.
- `references/algorithm-signals-reference.md` - 360Brew mechanics and signals - `references/algorithm-signals-reference.md` - 360Brew mechanics and signals
- `references/troubleshooting-guide.md` - Recovery if reach is already down - `references/troubleshooting-guide.md` - Recovery if reach is already down
- `skills/linkedin-thought-leadership/SKILL.md` - User's expertise areas and topics - `skills/linkedin-studio/SKILL.md` - User's expertise areas and topics

View file

@ -22,12 +22,12 @@ You are a LinkedIn quick-post assistant. Help the user create a short, impactful
## Load Context ## Load Context
Read `~/.claude/linkedin-thought-leadership.local.md` for: Read `~/.claude/linkedin-studio.local.md` for:
- Weekly posting progress (show "X/Y posts this week") - Weekly posting progress (show "X/Y posts this week")
- Recent topics (avoid repetition within 7 days) - Recent topics (avoid repetition within 7 days)
- Current streak status - Current streak status
Read `skills/linkedin-thought-leadership/SKILL.md` for: Read `skills/linkedin-studio/SKILL.md` for:
- User's voice profile and tone preferences - User's voice profile and tone preferences
- Core expertise areas (for topical alignment) - Core expertise areas (for topical alignment)
- Phrases they commonly use - Phrases they commonly use

View file

@ -23,7 +23,7 @@ You are a LinkedIn content creator specializing in turning external content into
## Step 0: Load Context ## Step 0: Load Context
First, load persistent state and personalization: First, load persistent state and personalization:
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state (streak, weekly progress, recent topics) - Read `~/.claude/linkedin-studio.local.md` for posting state (streak, weekly progress, recent topics)
- Read `assets/voice-samples/authentic-voice-samples.md` for voice profile - Read `assets/voice-samples/authentic-voice-samples.md` for voice profile
- Check recent posts to avoid topic repetition within 7 days - Check recent posts to avoid topic repetition within 7 days

View file

@ -383,7 +383,7 @@ Show detailed metrics for that post and suggest what made it perform well/poorly
After generating report, optionally update user's posting state: After generating report, optionally update user's posting state:
Read `~/.claude/linkedin-thought-leadership.local.md` and suggest: Read `~/.claude/linkedin-studio.local.md` and suggest:
- If week had 0 posts: "Streak broken - consider posting this week to restart" - If week had 0 posts: "Streak broken - consider posting this week to restart"
- If week hit goal: "Goal achieved! Maintaining consistency." - If week hit goal: "Goal achieved! Maintaining consistency."
- If week exceeded goal: "Exceeding goal - strong momentum!" - If week exceeded goal: "Exceeding goal - strong momentum!"
@ -457,7 +457,7 @@ Save to: `${CLAUDE_PLUGIN_ROOT}/assets/analytics/weekly-reports/YYYY-WXX-report.
3. [Actionable recommendation based on data] 3. [Actionable recommendation based on data]
--- ---
*Generated by linkedin-thought-leadership plugin* *Generated by linkedin-studio plugin*
``` ```
**Important notes:** **Important notes:**

View file

@ -27,11 +27,11 @@ Read these files:
- `references/growth-roadmaps.md` - Detailed phase roadmaps - `references/growth-roadmaps.md` - Detailed phase roadmaps
- `references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics - `references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics
- `references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments - `references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments
- `skills/linkedin-thought-leadership/SKILL.md` - User's goals and context - `skills/linkedin-studio/SKILL.md` - User's goals and context
## Step 0.5: Auto-Detect from State ## Step 0.5: Auto-Detect from State
Before asking questions, check `~/.claude/linkedin-thought-leadership.local.md`: Before asking questions, check `~/.claude/linkedin-studio.local.md`:
- If `follower_count > 0`: Auto-detect the user's phase. Skip the "How many followers?" question in Step 1. - If `follower_count > 0`: Auto-detect the user's phase. Skip the "How many followers?" question in Step 1.
- 0-1K → Phase 0: Foundation - 0-1K → Phase 0: Foundation
@ -249,7 +249,7 @@ Based on their phase, provide detailed guidance.
## Step 3.5: Apply Trajectory Adjustments ## Step 3.5: Apply Trajectory Adjustments
If milestone data is available from `~/.claude/linkedin-thought-leadership.local.md`, overlay trajectory-specific adjustments on top of the phase strategy. If milestone data is available from `~/.claude/linkedin-studio.local.md`, overlay trajectory-specific adjustments on top of the phase strategy.
### Determine Schedule Status ### Determine Schedule Status

View file

@ -21,8 +21,8 @@ You are a LinkedIn video scripting assistant. Guide the user through creating a
## Step 0: Load Context ## Step 0: Load Context
First, load persistent state and personalization: First, load persistent state and personalization:
- Read `~/.claude/linkedin-thought-leadership.local.md` for posting state (streak, weekly progress, recent topics) - Read `~/.claude/linkedin-studio.local.md` for posting state (streak, weekly progress, recent topics)
- Read `skills/linkedin-thought-leadership/SKILL.md` for user profile, voice settings, and preferences - Read `skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
Check state for topic planning: Check state for topic planning:
- Compare intended topic against "Recent Posts" in state file - Compare intended topic against "Recent Posts" in state file

View file

@ -1,4 +1,4 @@
# LinkedIn Thought Leadership — Session State # LinkedIn Studio — Session State
**Last updated:** [Auto-filled by session-start hook] **Last updated:** [Auto-filled by session-start hook]

View file

@ -1,7 +1,7 @@
--- ---
# LinkedIn Thought Leadership State # LinkedIn Studio State
# Auto-managed by the linkedin-thought-leadership plugin # Auto-managed by the linkedin-studio plugin
# Copy to ~/.claude/linkedin-thought-leadership.local.md # Copy to ~/.claude/linkedin-studio.local.md
# Posting metrics # Posting metrics
last_post_date: null last_post_date: null

View file

@ -1,6 +1,6 @@
# Brief — LTL som fullspektrum LinkedIn-innholdsmotor (idé → publisering) # Brief — LTL som fullspektrum LinkedIn-innholdsmotor (idé → publisering)
> **Til:** linkedin-thought-leadership-pluginens utviklingsrepo. > **Til:** linkedin-studio-pluginens utviklingsrepo.
> **Skrevet:** 2026-05-26, etter produksjon av den første kronikkserien (Seres-serien, 6 deler). > **Skrevet:** 2026-05-26, etter produksjon av den første kronikkserien (Seres-serien, 6 deler).
> **Type:** retningsbrief — beslutningsgrunnlag før planlegging/bygging. Selvstendig (kan leses uten annen kontekst). > **Type:** retningsbrief — beslutningsgrunnlag før planlegging/bygging. Selvstendig (kan leses uten annen kontekst).

View file

@ -1,11 +1,11 @@
# Integration Test Guide: LinkedIn Thought Leadership Plugin # Integration Test Guide: LinkedIn Studio Plugin
Manual integration testing scenarios for commands, agents, and hooks in the plugin. Manual integration testing scenarios for commands, agents, and hooks in the plugin.
## Prerequisites ## Prerequisites
Before testing, ensure: Before testing, ensure:
- [ ] `~/.claude/linkedin-thought-leadership.local.md` exists (create from `config/state-file.template.md`) - [ ] `~/.claude/linkedin-studio.local.md` exists (create from `config/state-file.template.md`)
- [ ] Voice samples exist in `assets/voice-samples/authentic-voice-samples.md` - [ ] Voice samples exist in `assets/voice-samples/authentic-voice-samples.md`
- [ ] Quality scorecard exists at `assets/checklists/quality-scorecard.md` - [ ] Quality scorecard exists at `assets/checklists/quality-scorecard.md`
- [ ] Plugin is installed: appears in Claude Code's skill/command list - [ ] Plugin is installed: appears in Claude Code's skill/command list
@ -62,7 +62,7 @@ Before testing, ensure:
**Goal:** Graceful handling when state file doesn't exist. **Goal:** Graceful handling when state file doesn't exist.
**Steps:** **Steps:**
1. Temporarily rename `~/.claude/linkedin-thought-leadership.local.md` 1. Temporarily rename `~/.claude/linkedin-studio.local.md`
2. Run `/linkedin:pipeline` 2. Run `/linkedin:pipeline`
3. Verify: no crash, reasonable fallback (e.g., "No posting data found. Starting fresh.") 3. Verify: no crash, reasonable fallback (e.g., "No posting data found. Starting fresh.")
4. Complete the pipeline 4. Complete the pipeline
@ -220,7 +220,7 @@ Before testing, ensure:
1. Run `/linkedin:pipeline` and create a post 1. Run `/linkedin:pipeline` and create a post
2. Note the topic and hook 2. Note the topic and hook
3. End the session (or let Stop hook fire) 3. End the session (or let Stop hook fire)
4. Read `~/.claude/linkedin-thought-leadership.local.md` 4. Read `~/.claude/linkedin-studio.local.md`
5. Verify: 5. Verify:
- `last_post_date` = today - `last_post_date` = today
- `last_post_topic` = the topic used - `last_post_topic` = the topic used

View file

@ -1,6 +1,6 @@
# Plan — LTL som fullspektrum LinkedIn-innholdsmotor # Plan — LTL som fullspektrum LinkedIn-innholdsmotor
> **Type:** Renoverings- og byggeplan for `linkedin-thought-leadership`-pluginen («LTL»). > **Type:** Renoverings- og byggeplan for `linkedin-studio`-pluginen («LTL»).
> **Skrevet:** 2026-05-26. **Status:** Til godkjenning før bygging. **Versjonsmål:** v1.2.0 → v2.0.0. > **Skrevet:** 2026-05-26. **Status:** Til godkjenning før bygging. **Versjonsmål:** v1.2.0 → v2.0.0.
> **Følger av:** [brief-fullspektrum-innholdsmotor.md](./brief-fullspektrum-innholdsmotor.md) (samme mappe). > **Følger av:** [brief-fullspektrum-innholdsmotor.md](./brief-fullspektrum-innholdsmotor.md) (samme mappe).
> >
@ -16,7 +16,7 @@ Denne seksjonen gjør planen selvstendig. Hvis et begrep brukes senere uten fork
| Det | Hva | Absolutt sti | Rolle her | | Det | Hva | Absolutt sti | Rolle her |
|-----|-----|--------------|-----------| |-----|-----|--------------|-----------|
| **LTL-pluginen** | Claude Code-plugin for LinkedIn thought leadership. v1.2.0. 27 kommandoer, 16 agenter, 9 hooks, 6 skills. | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-thought-leadership/` | **DETTE er repoet vi bygger i.** All plugin-endring skjer her. | | **LTL-pluginen** | Claude Code-plugin for LinkedIn thought leadership. v1.2.0. 27 kommandoer, 16 agenter, 9 hooks, 6 skills. | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-studio/` | **DETTE er repoet vi bygger i.** All plugin-endring skjer her. |
| **Marketplace-rot** | Open-source plugin-marketplace (flere plugins + `shared/`). Distribueres via Forgejo: `git.fromaitochitta.com/open/ktg-plugin-marketplace` (aldri GitHub). | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/` | Rot-`README.md` må oppdateres ved feature-endring (doc-plikt). | | **Marketplace-rot** | Open-source plugin-marketplace (flere plugins + `shared/`). Distribueres via Forgejo: `git.fromaitochitta.com/open/ktg-plugin-marketplace` (aldri GitHub). | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/` | Rot-`README.md` må oppdateres ved feature-endring (doc-plikt). |
| **maskinrommet** | Privat, lokalt repo (INGEN git-remote) der operatøren produserer alt LinkedIn-innhold. Inneholder `tools/` (4 render-skript + `fonts/`) og `serier/<slug>/` (én innholdsserie per mappe). | `/Users/ktg/repos/maskinrommet/` | **Annet repo enn pluginen.** Skriving hit krever eksplisitt instruks (cross-repo). Vi leser render-skriptene herfra i S1. | | **maskinrommet** | Privat, lokalt repo (INGEN git-remote) der operatøren produserer alt LinkedIn-innhold. Inneholder `tools/` (4 render-skript + `fonts/`) og `serier/<slug>/` (én innholdsserie per mappe). | `/Users/ktg/repos/maskinrommet/` | **Annet repo enn pluginen.** Skriving hit krever eksplisitt instruks (cross-repo). Vi leser render-skriptene herfra i S1. |
| **Voyage-pluginen** | En annen plugin i samme marketplace. Implementerer en kontrakt-drevet, multi-sesjons pipeline for KODE-prosjekter: kommandoene `/trekbrief``/trekresearch``/trekplan``/trekexecute``/trekreview`, med parallelle spesialist-agenter og adversarielle reviewere. | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/` | **Referanse/inspirasjon, IKKE avhengighet.** Vi løfter *mønsteret* (faset pipeline, parallelle agenter, adversariell review før lås, multi-sesjon), men kopierer ALDRI koden — Voyage er kode-spesifikk (`file:line`, kode-reviewere, RULE_CATALOGUE). Les den for mønster-inspirasjon. | | **Voyage-pluginen** | En annen plugin i samme marketplace. Implementerer en kontrakt-drevet, multi-sesjons pipeline for KODE-prosjekter: kommandoene `/trekbrief``/trekresearch``/trekplan``/trekexecute``/trekreview`, med parallelle spesialist-agenter og adversarielle reviewere. | `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/` | **Referanse/inspirasjon, IKKE avhengighet.** Vi løfter *mønsteret* (faset pipeline, parallelle agenter, adversariell review før lås, multi-sesjon), men kopierer ALDRI koden — Voyage er kode-spesifikk (`file:line`, kode-reviewere, RULE_CATALOGUE). Les den for mønster-inspirasjon. |
@ -441,7 +441,7 @@ Enhver feature-endring oppdaterer i SAMME commit: plugin-`README.md`, plugin-`CL
## 12. Filmanifest ## 12. Filmanifest
Alle stier relativt til pluginen `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-thought-leadership/` med mindre annet er angitt. Alle stier relativt til pluginen `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-studio/` med mindre annet er angitt.
**Nye filer:** **Nye filer:**
- `commands/newsletter.md` — orkestrator-kommandoen (§5) - `commands/newsletter.md` — orkestrator-kommandoen (§5)

View file

@ -8,7 +8,7 @@
## 1. Oppgave ## 1. Oppgave
Løft `linkedin-thought-leadership`-pluginen («LTL», v1.2.0) til **v2.0.0**: en fullspektrum-motor for ALT LinkedIn-innhold — fra kortform-post til nyhetsbrev-edition — samtidig som den totale kommando-/agent-overflaten **reduseres** gjennom konsolidering. Løft `linkedin-studio`-pluginen («LTL», v1.2.0) til **v2.0.0**: en fullspektrum-motor for ALT LinkedIn-innhold — fra kortform-post til nyhetsbrev-edition — samtidig som den totale kommando-/agent-overflaten **reduseres** gjennom konsolidering.
Tre arbeidskropper: Tre arbeidskropper:
1. **Renovering** — konsolider reell redundans (27→~23 kommandoer, 16→~14 agenter). Plan §4. 1. **Renovering** — konsolider reell redundans (27→~23 kommandoer, 16→~14 agenter). Plan §4.
@ -17,7 +17,7 @@ Tre arbeidskropper:
## 2. Orientering (kritisk — repoer og stier) ## 2. Orientering (kritisk — repoer og stier)
- **LTL-pluginen (bygg her):** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-thought-leadership/`. Plugin-i-monorepo: steg-stier er relative til denne mappa (sett Execution Strategy `cwd:` deretter). - **LTL-pluginen (bygg her):** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/linkedin-studio/`. Plugin-i-monorepo: steg-stier er relative til denne mappa (sett Execution Strategy `cwd:` deretter).
- **Marketplace-rot:** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/` (Forgejo, aldri GitHub). - **Marketplace-rot:** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/` (Forgejo, aldri GitHub).
- **maskinrommet (annet repo):** `/Users/ktg/repos/maskinrommet/` — render-skriptene kopieres HERFRA inn i pluginen. Skriving TIL maskinrommet krever eksplisitt instruks (cross-repo, eget spor). - **maskinrommet (annet repo):** `/Users/ktg/repos/maskinrommet/` — render-skriptene kopieres HERFRA inn i pluginen. Skriving TIL maskinrommet krever eksplisitt instruks (cross-repo, eget spor).
- **Voyage:** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/` — harness for denne byggingen. - **Voyage:** `/Users/ktg/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/` — harness for denne byggingen.

Some files were not shown because too many files have changed in this diff Show more