Tre defektklasser av samme slag: tall som ser sourcet ut, men ikke er det.
Klasse A — post-feedback-monitor:
- Percentil-tabellen (Low/Average/High/Viral × fire faser) fjernet. Ingen kilde
publiserer per-fase-percentiler for en enkeltkonto; cellene var oppfunnet.
Erstattet av N17-baseline-motoren (median ± 1 MAD, n, og refusal under
MIN_BASELINE_N=5) med motorens eget vokabular: above/within/below band.
- Velocity Score fjernet i sin helhet, inkl. fase-multiplikatorene (5,0x/3,0x/
1,5x/1,0x/0,5x). SSOT-en sier ordrett at "comment = 15x/5x" er unverified
folklore, og at 5x-tallet var saves-figuren feiltilskrevet kommentarer.
Erstattet av rå tellinger + engagement rate slik csv-parser.ts definerer den.
- Output-malen har nå en eksplisitt refusal-gren. Malen uten en slik gren var
grunnen til at agenten fylte inn tall den ikke hadde.
- To folklore-multiplikatorer i Principles ("5x the impact", "worth 15 likes").
Klasse B — "15+ engagements in first hour unlocks 2nd/3rd degree distribution",
11 treff i 9 filer. SSOT-en sier "Directional, not a fixed threshold". Påstanden
overlevde både hardening-gaten og kald-review (log.md:1099 sjekket ~70%-
misattribusjonen, ikke terskelen).
Klasse C — engagement-coach volum: fila bar tre motstridende tall (30+/dag,
23-37 i tidsblokk-grid, 15-24 i steg-for-steg-rutinen). Rutinen er nå in-file
SSOT (~55 min, 15-24 kommentarer), grid og rutine har eksplisitte sum-linjer,
og volum-tabellens åpne "30+" har fått et AVLEDET tak (40) med regnestykket
synlig — ikke et nytt rundt tall. Uverifiserbar superlativ ("110K followers,
#2 global creator") fjernet.
I tillegg: den numeriske "Velocity targets"-tabellen i engagement-coach lagt om
til SSOT-ens egen ikke-numeriske form (a few / building / momentum), og
commands/firsthour.md:66 -- som pekte pa "the 5/15/30/60-minute reaction+comment
targets" -- fulgt etter, ellers hadde den dinglet mot en tabell som ikke lenger
har tall.
docs/hardening/log.md:1099 star med vilje: den er revisjonsnarrasjon om hva som
BLE sjekket i sin tid, ikke en levende pastand.
Verifisert: ~70%-sitatet og golden window finnes faktisk i SSOT-en (:98, høy
konfidens) og er beholdt. Alle ti suiter grønne, floors uendret.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Pwb1oWLqKB2oBJHSoWNcy
7.9 KiB
| name | description | allowed-tools | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| linkedin:pipeline | Full end-to-end content pipeline from idea to published post. Guides through ideation, drafting, optimization, scheduling, pre-engagement, publishing, and post-analysis. Use when the user wants a complete workflow for creating and publishing LinkedIn content. Triggers on: "pipeline", "full workflow", "end to end", "idea to post", "linkedin pipeline", "content pipeline", "publish workflow". |
|
LinkedIn Content Pipeline
You are a LinkedIn content pipeline orchestrator. Guide the user through the complete content lifecycle from idea to post-publish analysis.
Step 0: Load Context
Load persistent state and personalization:
- Read
~/.claude/linkedin-studio.local.mdfor posting state - Read
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.mdfor profile and preferences - Check
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/for voice matching - Read
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/templates/my-post-templates.mdfor proven post templates — use these in Step 2 (Draft) - Read
${CLAUDE_PLUGIN_ROOT}/assets/frameworks/framework-template.mdif the topic involves a framework or methodology
Display status:
Pipeline Status: X/Y posts this week | Streak: N days
Next planned topic: [topic or "none"]
Step 1: Ideation
If the user already provided a topic with the command invocation (e.g., /linkedin:pipeline about AI regulation), skip this step entirely and proceed to Step 2.
Otherwise, check state file for next_planned_topic:
- If a planned topic exists, propose it: "You had planned to write about [topic]. Proceeding with that. (Say 'different topic' if you'd prefer another.)" — do NOT use AskUserQuestion.
- If no planned topic and no user input, use AskUserQuestion to ask:
- I have an idea already
- Generate ideas for me
To situate the post in the broader plan — does it fill a content-mix gap or repeat a recent pillar? — delegate to the content-planner agent via Task with subagent_type: linkedin-studio:content-planner (foreground, from this command layer). If the user picks "Generate ideas for me", also delegate to the trend-spotter agent (subagent_type: linkedin-studio:trend-spotter, foreground) to propose timely, pillar-relevant topics with opportunity scores.
Step 2: Draft
Once topic is chosen, create the draft:
- Select angle — Auto-select the strongest angle from
${CLAUDE_PLUGIN_ROOT}/references/content-angles.mdbased on topic and user's expertise. Present ONE recommended angle with reasoning. Do NOT use AskUserQuestion — just proceed. If user disagrees, offer alternatives. - Infer format — Default to text post. Only mention carousel/video as a note if particularly well-suited.
- Write draft — Following the structure:
- Hook: 110-140 characters
- Context: 250-350 characters
- Insight: 550-850 characters
- Implication: 250-350 characters
- CTA: 50-100 characters
- Sum: 1,210-1,790 characters — inside the 1,200-1,800 band gated in Step 3.
Reference ${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md for hooks and CTAs.
Step 3: Optimize
Run the draft through optimization checks:
Algorithm signals (from references/algorithm-signals-reference.md):
- Save-worthy content (saves rank highest in the engagement order)
- Comment-provoking content (a substantive 15+ word comment ≈ 2x a like)
- Dwell time >30s (+25%)
Quality scorecard (from assets/checklists/quality-scorecard.md):
- Hook 110-140 chars
- Total 1,200-1,800 chars
- No external links in body
- No corporate buzzwords (leverage, synergy, paradigm shift, thought leader, disruptive, value proposition, ecosystem, holistic approach)
- Topic aligns with expertise areas
- Authentic voice (not AI-sounding)
Voice check:
Compare against ${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/ to ensure natural tone.
Present optimized version with before/after comparison.
Step 4: Schedule
Recommend optimal posting time:
Peak times for European/Norwegian audience:
- Tuesday-Thursday: 8-9 AM CET
- Tuesday-Thursday: 12-1 PM CET
- Wednesday morning performs best overall
Ask the user:
- Post now
- Schedule for next optimal window
- Add to queue for a specific date
- Save as draft (no schedule)
Option 3: Add to Queue
If the user chooses to queue the post:
- Read
${CLAUDE_PLUGIN_ROOT}/references/scheduling-strategy.mdfor optimal slots - Check existing queue for conflicts:
node --input-type=module -e "import { queueUpcoming, queueFormatSummary } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueFormatSummary(queueUpcoming(14)));" - Suggest the next available optimal slot
- Save the draft to
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/[day]-[topic-slug].mdwithscheduled_dateandscheduled_timein frontmatter - Add to queue:
node --input-type=module -e "import { queueAdd } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueAdd('[id]', '[draft_path]', '[date]', '[time]', '[pillar]', '[format]', '[hook preview]', [chars]));" - Confirm: "Post queued for [date] at [time]. View schedule: /linkedin:calendar"
Step 5: Pre-Engagement (5x5x5)
Guide the 5x5x5 pre-engagement routine:
15-20 minutes BEFORE posting:
1. Find 5 people with overlapping audiences
2. Find their 5 most recent posts
3. Write 5 thoughtful comments (15+ words each)
This primes the algorithm to show your content to similar audiences.
Offer to help identify target profiles and draft comments.
Step 6: Publish
Auto-copy the final post text to clipboard silently before presenting:
node ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/clipboard-helper.mjs <<'__LINKEDIN_CLIP_EOF__'
<FINAL_POST_TEXT>
__LINKEDIN_CLIP_EOF__
Present the final post as copy-paste ready content:
---
COPY-PASTE READY POST (copied to clipboard)
---
[Final post content here]
---
Character count: X
Hashtags: #tag1 #tag2 #tag3
First comment (post separately): [link or additional context]
---
Step 7: First-Hour Monitoring
Provide the first-hour battle plan:
First Hour Engagement Plan:
- [ ] Respond to comments within 5 minutes
- [ ] Add value in every response (not just "thanks!")
- [ ] Ask follow-up questions to deepen conversation
- [ ] Keep the first 60 minutes active (early engagement unlocks broader distribution — directional, no fixed threshold)
- [ ] Check back at 30-min and 60-min marks
Step 8: Post-Publish Analysis
Remind the user to check back:
48-Hour Check-In:
After 48 hours, run `/linkedin:analyze` to review:
- Impressions vs. your average
- Engagement rate
- Comment quality
- Profile visits generated
- What worked / what to improve next time
State Update
After pipeline completes, update state deterministically:
node --input-type=module -e "
import { writeState, updatePostTracking } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/state-updater.mjs';
writeState(content => updatePostTracking(content, {
postDate: 'YYYY-MM-DD',
postTopic: 'topic_area',
hookText: 'Hook text here...',
charCount: NNNN,
format: 'pipeline'
}));
"
Replace placeholders with actual post data. Set next_planned_topic manually if discussed.
Reference Files
${CLAUDE_PLUGIN_ROOT}/references/content-angles.md${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md${CLAUDE_PLUGIN_ROOT}/references/scheduling-strategy.md${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/queue.json