81 load-bearing stier i 16 kommandofiler pinnet til ${CLAUDE_PLUGIN_ROOT}/.
Rene prefikser: 81 inn / 81 ut, ingen linje lagt til eller fjernet.
FASIT-VERIFISERING (premiss-sjekk mot BASELINE, ikke bare HEAD): planens
68 linjer / 17 filer er RIKTIG mot sin egen baseline 882f6ee. HEAD ga 73/18 —
altså ekte kode-drift siden baseline (newsletter.md 11→15, calendar.md 0→1),
ikke en telle-feil som i N19.
SCOPE UTVIDET ETTER GO: planens grep (references|hooks/scripts|scripts) har en
blindsone — skills/ assets/ config/ render/ agents/ commands/ er samme defekt-
klasse og allerede anerkjent som pin-verdig av mønsteret (audit.md:24 og
competitive.md:22 pinner skills/, batch.md:214 og pipeline.md:211 pinner
assets/). Under planens scope kunne dens EGEN verifisering ikke passere:
quick.md:229-230 ville stått upinnet rett over en pinnet linje, og setup.md
(3 load-bearing Read, 0 pins) var ikke i settet i det hele tatt.
Full defektklasse: 117 linjer / 19 filer → 81 pinnet, 36 bevisst urørt.
KLASSIFISERINGSREGEL (utledet av mønsteret, ikke oppfunnet):
- PIN = stien skal åpnes/kjøres/skrives — Read/Reference/See-pekere,
ref-fil-lister, Bash/node/npm, edit-mål.
- PROSA = stien står som sitat bak en påstand, eller som beskrivelse av
oppførsel/plassering. Ingen inline «(see …)» er pinnet noe sted i repoet
(0 av 25 filer) — den grensen er arvet, ikke satt her.
36 BEVISST URØRTE, tre klasser:
1. Inline sitat/attribusjon (17): carousel.md:37 · pipeline.md:70,75 ·
newsletter.md:999,1082,1211,1433 · report.md:273 · video.md:69 ·
react.md:115 · calendar.md:87 · profile.md:28,34 · firsthour.md:112 ·
monetize.md:343,492 · outreach.md:922
2. Beskrivelse av oppførsel/plassering (10): newsletter.md:50,1097,1205,1694,
1744,1944 · report.md:45 · linkedin.md:218 · import.md:121,200
3. newsletter.md fase-tabellens Tooling-kolonne (9): :100,102,105,106,111,112,
113,115,116 — tabellen er et register, og hvert steg pinner sitt eget
faktiske kall i brødteksten.
S13-LINTEN (M0 data-dir): alle assets/-stiene som ble pinnet står eksplisitt i
lintens NEGATIVE13-unntaksliste, og lintens egen kommentar (test-runner.sh:552)
sier at shipped read-only assets SKAL bære ${CLAUDE_PLUGIN_ROOT}.
VERIFISERING: 76 unike pinnede stier hentet ut og resolvet med cwd=/tmp —
75 finnes. Den ene som ikke gjør det, config/personas.local.md, er en
gitignored valgfri fallback («else personas.template.md») som var pinnet på
newsletter.md:205 før denne endringen. Re-grep: gjenstående 36 er utelukkende
prosa, listet over.
Alle ti suiter grønne, alle floors uendret: test-runner 270/0 (269 assertions
>= floor 251) · trends 300/0 · analytics 202/0 · hooks 191/0 · brain 134/0 ·
editions 72/0 · render 63/0 · specifics-bank 45/0 · tests 35/0 ·
contract-gate 33/0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M31cw43gqiSSDrKzcwUi7L
232 lines
14 KiB
Markdown
232 lines
14 KiB
Markdown
---
|
|
name: linkedin
|
|
description: |
|
|
Main router for LinkedIn Studio commands. Lists all available subcommands
|
|
and helps the user choose the right workflow. Use when the user mentions "linkedin",
|
|
"linkedin help", "what linkedin commands", or needs guidance on which LinkedIn command to use.
|
|
Triggers on: "linkedin", "/linkedin", "linkedin help", "show linkedin commands".
|
|
allowed-tools:
|
|
- Read
|
|
- Bash
|
|
- AskUserQuestion
|
|
---
|
|
|
|
# LinkedIn Studio Command Router
|
|
|
|
You are the LinkedIn Studio assistant. The user has invoked the main `/linkedin` command. Your job is to help them navigate to the right subcommand.
|
|
|
|
## Session Status
|
|
|
|
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)
|
|
```
|
|
|
|
The follower segment only appears if `follower_count > 0` in the state file.
|
|
|
|
If the state file doesn't exist, show: "No LinkedIn state tracked yet. State tracking starts when you create your first post."
|
|
|
|
## Upcoming Posts
|
|
|
|
After the status line, show upcoming scheduled posts from the queue:
|
|
|
|
```bash
|
|
node --input-type=module -e "
|
|
import { queueUpcoming, queueOverdue, queueFormatSummary } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs';
|
|
console.log('=== UPCOMING ===');
|
|
console.log(queueFormatSummary(queueUpcoming(7)));
|
|
console.log('=== OVERDUE ===');
|
|
console.log(queueFormatSummary(queueOverdue()));
|
|
"
|
|
```
|
|
|
|
If there are upcoming posts, display:
|
|
```
|
|
Upcoming Posts (next 7 days):
|
|
[date] [time]: "[hook preview]" — [pillar] ([format])
|
|
[date] [time]: "[hook preview]" — [pillar] ([format])
|
|
```
|
|
|
|
If there are overdue posts, display with warning:
|
|
```
|
|
OVERDUE (should have been posted):
|
|
[date]: "[hook preview]" — Run /linkedin:calendar to mark as published or reschedule
|
|
```
|
|
|
|
If queue is empty: "No posts scheduled. Run /linkedin:batch to plan your week."
|
|
|
|
## Work in Progress + Open Slots
|
|
|
|
The queue only shows finished posts waiting to go out. Add the production picture —
|
|
long-form editions still being written, and publishing slots nothing covers yet:
|
|
|
|
```bash
|
|
node --input-type=module -e "
|
|
import { activeEditions, slotVacancies, formatSlot, readSlots } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/slots.mjs';
|
|
console.log('=== IN FLIGHT ===');
|
|
console.log(activeEditions().map(e => e.series + ' #' + e.editionId + ' | ' + e.currentPhase + ' | next: ' + (e.nextAction || 'unset') + ' | ' + e.daysInFlight + 'd').join('\n') || 'none');
|
|
console.log('=== OPEN SLOTS ===');
|
|
console.log(readSlots().slots.length ? (slotVacancies({ days: 14 }).map(s => formatSlot(s)).join('\n') || 'none - every planned slot is covered') : 'grid not configured');
|
|
"
|
|
```
|
|
|
|
Show one line per in-flight edition and the next open slot:
|
|
|
|
```
|
|
In flight: [series #NN] — [phase] → [next action] ([N]d)
|
|
Next open slot: [Thu YYYY-MM-DD 12:00 (in N days)] — [X] open in 14 days
|
|
```
|
|
|
|
Both lines are omitted when there is nothing to report (no active editions / no grid
|
|
configured). If the grid is not configured, do **not** nag — `/linkedin:calendar`
|
|
explains the opt-in when the user goes there.
|
|
|
|
## Available Commands
|
|
|
|
LinkedIn Studio is organized as **five journeys**. Each journey has a **front-door**
|
|
command (start here if you're unsure) plus the focused commands it routes to. Type a
|
|
front-door when you know the journey but not the exact command; type a specific command
|
|
directly when you do.
|
|
|
|
### 🟢 Start — get set up and publish your first post
|
|
|
|
| Command | Purpose |
|
|
|---------|---------|
|
|
| `/linkedin:onboarding` | **Front-door.** Full guided flow: profile → setup → first post |
|
|
| `/linkedin:setup` | Populate voice samples, case studies, frameworks, and audience data |
|
|
| `/linkedin:first-post` | First-post accelerator — zero to published in under 10 minutes |
|
|
|
|
### ✍️ Create — make content
|
|
|
|
| Command | Purpose |
|
|
|---------|---------|
|
|
| `/linkedin:create` | **Front-door.** Tells you which creation command fits, then routes you |
|
|
| `/linkedin:post` | Full post creation with angle selection, format choice, and refinement |
|
|
| `/linkedin:quick` | Fast 5-minute post (3-line formula) + the 8 post-type templates |
|
|
| `/linkedin:react` | React to a URL (article, news, research) and turn it into a post |
|
|
| `/linkedin:carousel` | Structured multi-slide carousel with visual layout guidance |
|
|
| `/linkedin:video` | Video scripts with hook, body, CTA, captions, and thumbnail suggestions |
|
|
| `/linkedin:multiplatform` | Adapt content for Twitter/X, slides, YouTube (long-form → newsletter) |
|
|
| `/linkedin:batch` | Create a full week of content in one session |
|
|
| `/linkedin:pipeline` | End-to-end single-post workflow (idea → draft → schedule → analyze) |
|
|
| `/linkedin:trends` | Trend discovery pass — scan your sources, persist candidates + morning brief, triage per id |
|
|
| `/linkedin:newsletter` | **Long-form spine.** Newsletter editions, essays, series articles. The single long-form entry point |
|
|
| `/linkedin:headless-review` | Cold adversarial re-read of a FROZEN long-form draft before lock (ideally in a fresh session) |
|
|
| `/linkedin:pivot` | Re-open a long-form edition after a late change so cleared gates re-run |
|
|
|
|
### 📅 Engage — ship and work the first hour
|
|
|
|
| Command | Purpose |
|
|
|---------|---------|
|
|
| `/linkedin:calendar` | View/manage the queue + the publish action (mark a scheduled post as published) |
|
|
| `/linkedin:firsthour` | Post-publish first-hour sprint: timestamped targets + draft comments + timeline |
|
|
|
|
After publishing, the `post-feedback-monitor` agent tracks performance in the critical
|
|
first 48 hours, detects anomalies, and advises real-time interventions.
|
|
|
|
### 📊 Measure — understand performance
|
|
|
|
| Command | Purpose |
|
|
|---------|---------|
|
|
| `/linkedin:measure` | **Front-door.** Routes you to the right analytics command |
|
|
| `/linkedin:import` | Import LinkedIn CSV exports for analytics |
|
|
| `/linkedin:report` | Weekly/monthly performance report with trends and alerts |
|
|
| `/linkedin:analyze` | Troubleshoot performance (reach dropped, low engagement) |
|
|
| `/linkedin:audit` | Quarterly content strategy audit |
|
|
| `/linkedin:ab-test` | Design and manage A/B tests for content optimization |
|
|
|
|
### 🚀 Grow — authority, reach, and revenue
|
|
|
|
| Command | Purpose | Unlocks at |
|
|
|---------|---------|-----------|
|
|
| `/linkedin:strategy` | **Front-door.** Phase roadmap, trajectory, authority + signature content | Any phase |
|
|
| `/linkedin:profile` | profile/topic-relevance optimization checklist | Any phase |
|
|
| `/linkedin:competitive` | Competitive analysis of other creators in your niche | Any phase |
|
|
| `/linkedin:monetize` | Monetization strategy (lead magnets, consulting funnel, pricing) | ~1K followers |
|
|
| `/linkedin:outreach` | Collaborations and speaking opportunities (CFPs, partner pitches) | ~1K followers |
|
|
|
|
**Gating rule:** the "Unlocks at ~1K followers" commands are deliberately listed but
|
|
soft-gated — they work at any follower count, but their value compounds once a profile
|
|
has the audience scale and authority signal that makes lead magnets, partnerships, and
|
|
speaking pitches realistic. Below ~1K followers the router notes the threshold and
|
|
suggests `/linkedin:strategy` first. (`/linkedin:competitive` is **not** gated —
|
|
competitive analysis helps at any stage, especially early positioning.)
|
|
|
|
## Ask the User
|
|
|
|
Show the five journeys as a menu and let the user pick a journey or jump straight to a
|
|
command. Lead with the front-doors.
|
|
|
|
**What would you like to do?**
|
|
|
|
- **🟢 Start** — `onboarding` (full wizard) · `setup` · `first-post`
|
|
- **✍️ Create** — `create` (guided) · post · quick · react · carousel · video · multiplatform · batch · pipeline · newsletter · headless-review · pivot
|
|
- **📅 Engage** — `calendar` (queue + mark published) · `firsthour` (first-hour sprint)
|
|
- **📊 Measure** — `measure` (guided) · import · report · analyze · audit · ab-test
|
|
- **🚀 Grow** — `strategy` (roadmap) · profile · competitive · monetize ⚿ · outreach ⚿
|
|
|
|
If they name a command, route to it. If they name a journey but not a command, route to
|
|
that journey's front-door (`create` / `measure` / `onboarding` / `strategy`); for Engage,
|
|
ask whether they're scheduling (`calendar`) or have just published (`firsthour`). Use
|
|
`AskUserQuestion` for any sub-choice (≤4 options per question). Based on their answer,
|
|
guide them to the appropriate command or invoke it directly.
|
|
|
|
## If They Have Specific Content
|
|
|
|
If the user already has content they want to turn into a post:
|
|
- If they have a URL, article, or research, recommend `/linkedin:react`
|
|
- Ask if they want the full workflow (`/linkedin:post`) or quick version (`/linkedin:quick`)
|
|
- If they have a quick observation or reaction, recommend `/linkedin:quick`
|
|
|
|
## Direct Routing
|
|
|
|
If the user's intent is clear from context:
|
|
- Mentions "onboarding" or "just installed" or "walk me through" or "setup wizard" or "start from scratch" → Route to `/linkedin:onboarding`
|
|
- Mentions "first post" or "never posted" or "get started" or "new to linkedin" or "help me start" → Route to `/linkedin:first-post`
|
|
- Mentions "setup" or "personalize" or "templates empty" or "score" or "fill in assets" or "configure plugin" → Route to `/linkedin:setup`
|
|
- Mentions "react" or "this article" or "this url" or "turn this into" or "share this news" → Route to `/linkedin:react`
|
|
- Mentions "quick" or "fast" → Route to `/linkedin:quick`
|
|
- Mentions "pipeline" or "end to end" → Route to `/linkedin:pipeline`
|
|
- Mentions "trends" or "trending" or "discovery pass" or "morning brief" or "what should I write about" → Route to `/linkedin:trends`
|
|
- Mentions "batch" or "week of content" → Route to `/linkedin:batch`
|
|
- Mentions "calendar" or "schedule" or "queue" or "upcoming posts" or "what's scheduled" → Route to `/linkedin:calendar`
|
|
- Mentions "slot" or "publishing slots" or "empty slot" or "open slot" or "slot grid" or "what's in flight" or "work in progress" → Route to `/linkedin:calendar` (slot grid, vacancies, editions in flight)
|
|
- Mentions "publish" or "mark as published" or "posted today" or "just published" or "post is live" → Route to `/linkedin:calendar` (publish action)
|
|
- Mentions "plan" → Suggest `content-planner` agent
|
|
- Mentions "profile" or "topic-relevance" → Route to `/linkedin:profile`
|
|
- Mentions "not working" or "low reach" → Route to `/linkedin:analyze`
|
|
- Mentions "strategy" or "growth plan" or "authority" or "build authority" or "signature content" or "greatest hits" or "my best content" → Route to `/linkedin:strategy`
|
|
- Mentions "carousel" or "slides" or "slide deck" or "pdf post" or "swipe" or "document post" → Route to `/linkedin:carousel`
|
|
- Mentions "template" → Route to `/linkedin:quick`
|
|
- Mentions "audit" or "review strategy" → Route to `/linkedin:audit`
|
|
- Mentions "competitive" or "learn from others" → Route to `/linkedin:competitive`
|
|
- Mentions "monetize" or "revenue" → Route to `/linkedin:monetize`. **Gating:** if state-file `follower_count` < 1000, prepend: "Heads-up: monetization compounds at ~1K followers. You're at {N}. Consider `/linkedin:strategy` to plan the path there. Continuing to `/linkedin:monetize` anyway."
|
|
- Mentions "speaking" or "conference" or "collaborate" or "partner" or "CFP" or "talk proposal" or "co-author" or "joint post" → Route to `/linkedin:outreach`. **Gating:** if state-file `follower_count` < 1000, prepend: "Heads-up: outreach lands better at ~1K followers (authority signal). You're at {N}. Consider `/linkedin:strategy` first. Continuing to `/linkedin:outreach` anyway."
|
|
- Mentions "adapt" or "cross-post" → Route to `/linkedin:multiplatform`
|
|
- Mentions "import" or "CSV" or "export data" → Route to `/linkedin:import`
|
|
- Mentions "report" or "weekly numbers" → Route to `/linkedin:report`
|
|
- Mentions "engagement tips" or "5x5x5" or "first hour strategy" or "comment strategy" or "who to comment on" or "CEA method" or "whale posts" → Suggest `engagement-coach` agent
|
|
- Mentions "optimize post" or "improve draft" or "make this better" → Suggest `content-optimizer` agent
|
|
- Mentions "trending" or "what should I post about" → Suggest `trend-spotter` agent
|
|
- Mentions "my voice" or "voice profile" or "voice audit" → Suggest `voice-trainer` agent
|
|
- Mentions "is this original" or "differentiation" or "commodity content" → Suggest `differentiation-checker` agent
|
|
- Mentions "network" or "who to connect with" → Suggest `network-builder` agent
|
|
- Mentions "performance" or "weekly report" or "how did I do" or "analyze my analytics" or "interpret data" → Suggest `analytics-interpreter` agent
|
|
- Mentions "how is my post doing" or "monitor post" or "post performance" or "first hour" or "post-publish" or "boost post" or "post feedback" → Suggest `post-feedback-monitor` agent
|
|
- Mentions "A/B test" or "split test" or "test my hooks" or "compare formats" or "experiment" or "what works better" or "test variations" → Route to `/linkedin:ab-test`
|
|
- Mentions "personalization score" or "how personalized" or "asset completeness" → Route to `/linkedin:setup` (score computed by `hooks/scripts/personalization-score.mjs`)
|
|
- Mentions "milestone" or "10K goal" or "follower target" or "growth tracking" or "am I on track" or "follower progress" → Route to `/linkedin:strategy`
|
|
- Mentions "status" or "on track" → Route to `/linkedin:calendar` (plan-vs-queue diff)
|
|
- Mentions "repurpose" or "reuse" → Suggest `content-repurposer` agent
|
|
- Mentions "video" or "video script" or "film" or "record" or "talking head" or "screen recording" or "slideshow video" → Route to `/linkedin:video`
|
|
- Mentions "create" or "make something" or "what should I make" or "new content" (no specific format named) → Route to `/linkedin:create` (the Create front-door)
|
|
- Mentions "measure" or "how am I doing" or "my performance" or "performance overview" or "how are my posts doing" → Route to `/linkedin:measure` (the Measure front-door)
|
|
- Mentions "first hour" or "I just posted" or "reply loop" or "work my post" or "engage now" → Route to `/linkedin:firsthour` (the worked first-hour sprint plan — distinct from `/linkedin:calendar`'s mark-as-published action)
|
|
- Has a URL to react to → Route to `/linkedin:react`
|
|
- Has substantial content to convert → Route to `/linkedin:post`
|
|
|
|
## Reference
|
|
|
|
For full skill documentation, see:
|
|
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` - Complete skill with personalization settings
|