Del 1 — scaffold-bånd (KTG-beslutning: behold målbåndet, utvid komponentene). Komponentsummen var 960–1 640 mot målbåndet 1 200–1 800: en skjelett-konform draft kunne lande under gulvet og nådde aldri taket. Nye bånd — Context 250–350, Insight 550–850, Implication 250–350 (Hook 110–140 og CTA 50–100 uendret) — summerer til 1 210–1 790, altså INNI 1 200–1 800. Skjelett-konform er nå gate-konform per konstruksjon. Målbåndet 1 200–1 800 er uendret overalt; hooks/prompts/content-quality-gate.md (den kanoniske gaten) er ikke rørt. Alternativet — å heve taket per AuthoredUp D-4 — ville krevd 25 filer / 40 linjer inkl. gate-prompten, begge skills, quality-scorecard, config-malen og brain-fiksturen. Skjelettet fantes i seks kopier, alle rettet på KTG-go: commands/post.md, commands/batch.md, commands/pipeline.md, references/engagement-frameworks.md, agents/content-optimizer.md, skills/linkedin-content-creation/SKILL.md. De tre siste lå utenfor planens scope, men to av dem var internt selvmotsigende på én linje (overskrift 1 200–1 800 over komponenter som summerte til 960–1 640), og engagement-frameworks.md er nettopp fila post.md/pipeline.md instruerer modellen om å LESE for strukturen. Nabofunn tatt med på KTG-go: post.md:95 ga «Personal stories → 1 000–1 400», som motsa post.md:136s egen gate. Kald-review R2a MAJOR — nå 1 200–1 800. D-4 inn i kanonfila: ny «Post length»-seksjon i references/algorithm-signals-reference.md med AuthoredUp-optimumet 1 301–2 500 (372 126 poster, sep 2025–feb 2026), merket single-vendor/ett vindu, med eksplisitt note om at datapunktet gjør det shippede taket konservativt — ikke feil — og at de to AuthoredUp-N-ene i fila (621K vs 372K) er ulike studier. Kilde verifisert mot primærkilden, ikke overført fra planen. Del 2 — ferskhet-rester (begge påstander verifisert mot LinkedIn Help): - D-6 newsletter-strategy-guide.md: «5 000+ følgere» framstilt som terskel er feil — «All LinkedIn members have access to create a newsletter on LinkedIn» (a517914). Omskrevet til redaksjonell modenhetsvurdering (også i Mistakes-tabellen og Bottom Line). E-post er ikke garantert: LinkedIn de-dupliserer på tvers av kanaler — «if you receive an in-app or push notification, you should not expect to also receive an email for the same notification» (a517914). Bringer referansefila i tråd med newsletter.md:2384. Fjernet samtidig den ukildede «Algorithm favors newsletters from established creators» i den omskrevne blokka. - D-7 first-comment-strategy.md: «pinned by default» er uverifisert og feil — pinning er en eksplisitt forfatterhandling (a524166), og standard kommentarsortering er algoritmisk. Lagt til «What this file does not claim»- avsnitt som speiler kanonfilas «contested»/low-confidence-epistemikk. Scope 3 (KTG-go, amend): references/engagement-frameworks.md har FIRE skjeletter, ikke ett. To til brot gulvet i malbandet — Data-Driven Post (1 050-1 400) og Contrarian Post (1 060-1 410) — og er lagt om til samme komponentprofil som Standard, sum 1 210-1 790. Narrative Arc (1 350-1 500) la allerede inni og star urort; alle tre har na en eksplisitt sum-linje. Fila er den post.md:104 sender modellen til for «story structures», sa a sertifisere den som fikset med to odelagte skjeletter igjen ville vaert usant. SUPERSEDED og ikke gjeninnført: gammel B §S6 Del 2 pkt 1 (first-comment −5/−10 %-tall, pods-eskalering, 360Brew-fotnote). Verifisering: bånd-summen ligger inni målbåndet i alle seks kopier av standard-skjelettet og i alle fire skjelettene i engagement-frameworks.md (grep-bevis, 0 gjenværende 200-300/400-800) · D-6/D-7 omformulert (0 treff på «5,000+ followers» / «pinned by default» / «inbox + email») · 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_01LhF1H7ctT5Fk8KkoCQpe5n
8.3 KiB
| name | description | allowed-tools | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| linkedin:batch | Create a full week of LinkedIn content in one session. Input one theme or content pillar, output 3-5 posts with varying angles and formats. Ideal for Sunday content prep. Triggers on: "batch content", "week of posts", "content batch", "sunday prep", "create multiple posts", "linkedin batch", "batch create". |
|
LinkedIn Batch Content Creation
You are a LinkedIn batch content creator. Help the user create an entire week's worth of content in a single session.
Step 0: Load Context
Load state and personalization:
- Read
~/.claude/linkedin-studio.local.mdfor recent topics and weekly goals - Read
## Do-Next Directivesin the same file — the last measurement pass's directives (report / analyze / A/B Adopt / 48h monitor) with their evidence pointers. A batch is where they bite hardest: apply them across the week's posts and name which post carries which directive in the plan. Never edit or clear the section (lifetime is managed per source) - Read
${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.mdfor profile and preferences - Check
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/plans/for existing weekly plan - Read
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/templates/my-post-templates.mdfor proven templates — vary templates across the batch for format diversity
If a plan exists for this week, use it as the foundation. If not, create one first.
Step 1: Choose Theme or Pillar
Ask the user for their starting point:
Use AskUserQuestion:
- One main theme — I have a topic I want to explore from multiple angles
- Content pillar — Focus on one of my expertise areas
- Use existing plan — Follow the weekly plan already created
- Mix it up — Diverse topics across pillars
If they choose a theme, help them identify 3-5 unique angles from ${CLAUDE_PLUGIN_ROOT}/references/content-angles.md. For timely angles, delegate to the trend-spotter agent — invoke it via Task with subagent_type: linkedin-studio:trend-spotter (foreground, from this command layer) — to surface trending topics and score their relevance against the user's pillars.
Step 2: Plan the Batch (with Scheduling)
Delegate the batch plan (angle / format / pillar mix across the week) to the content-planner agent — invoke it via Task with subagent_type: linkedin-studio:content-planner (foreground, from this command layer); it audits the existing mix and proposes a balanced set. This command owns scheduling the result.
Read ${CLAUDE_PLUGIN_ROOT}/references/scheduling-strategy.md for optimal posting slots.
Calculate scheduled dates based on weekly_goal from state:
- Look up the slot template for the user's
weekly_goal(2x, 3x, 4x, 5x) - Find the next available slot after today (skip dates with existing queue entries)
- Assign each post a
scheduled_dateandscheduled_time
Check existing queue to avoid conflicts:
node --input-type=module -e "import { queueUpcoming, queueFormatSummary } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueFormatSummary(queueUpcoming(14)));"
Create a mini-plan for the batch:
Batch Plan: [Theme/Pillar]
Posts to create: [3-5]
Post 1: [Angle] — [Format] — [Day YYYY-MM-DD @ HH:MM]
Post 2: [Angle] — [Format] — [Day YYYY-MM-DD @ HH:MM]
Post 3: [Angle] — [Format] — [Day YYYY-MM-DD @ HH:MM]
[Post 4: optional]
[Post 5: optional]
Ensure variety in:
- Angles — Different perspective per post
- Formats — No consecutive same format (standard → carousel → quick → video rotation)
- Pillars — No consecutive same pillar
- Content types — Educational, inspirational, entertaining (70/20/10)
Get approval before proceeding.
Step 3: Create Each Post
For each post in the batch:
3a. Draft
Follow the standard 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 standard 1,200–1,800 band checked in 3b.
3b. Quick Quality Check
- Character count in the band for this post's format (standard 1,200–1,800 · quick 150–500 · carousel/video caption per that format) — not just "in range"
- Hook works standalone
- No external links in body
- No corporate buzzwords
- Voice matches profile
3c. Save Draft
Write each post to ${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/:
- Create directory if needed:
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/ - Filename:
[day]-[topic-slug].md - Include metadata header:
---
planned_date: YYYY-MM-DD
scheduled_date: YYYY-MM-DD
scheduled_time: "HH:MM"
pillar: [expertise area]
angle: [content angle]
format: [text/carousel/video]
status: scheduled
---
[Post content]
3d. Add to Queue
After saving each draft, add it to the queue:
node --input-type=module -e "import { queueAdd } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueAdd('[YYYY-WXX-day-topic-slug]', '${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/[day]-[topic-slug].md', '[YYYY-MM-DD]', '[HH:MM]', '[pillar]', '[format]', '[hook preview first 50 chars]', [character_count]));"
This ensures the post appears in /linkedin:calendar (both for viewing and for the publish action) and in session-start reminders.
Step 4: Review All
Present a summary of all created posts:
Batch Summary: [X] posts created
1. [Day] — "[Hook preview...]" (X chars) — [format]
2. [Day] — "[Hook preview...]" (X chars) — [format]
3. [Day] — "[Hook preview...]" (X chars) — [format]
Saved to: ${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/
Content mix: X educational / Y inspirational / Z entertaining
Pillars covered: [list]
Ask if they want to:
- Approve all drafts
- Revise a specific post
- Add another post
- Swap an angle
Step 5: Finalize
After approval:
- Confirm all drafts are saved and queued
- Update state file with planned topics (note: state updates for batch posts happen at publish time via the
/linkedin:calendarpublish action, not at batch creation) - Show queue summary:
Queue Summary: [X] posts scheduled
- [Date] [Time]: "[hook preview]" — [pillar] ([format])
- [Date] [Time]: "[hook preview]" — [pillar] ([format])
- [Date] [Time]: "[hook preview]" — [pillar] ([format])
View full schedule + mark as published: /linkedin:calendar
Remember: Run 5x5x5 engagement 15 min before each post!
5b. Generate Calendar File
Generate a .ics calendar file so the user can import posting reminders into their calendar app:
node --input-type=module -e "
import { queueUpcoming } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs';
import { generateIcalFromQueue, writeIcalFile } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/ical-generator.mjs';
const upcoming = queueUpcoming(14);
if (upcoming.length === 0) { console.log('No upcoming posts to schedule.'); process.exit(0); }
const events = generateIcalFromQueue(upcoming);
const icsPath = '${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/schedule.ics';
writeIcalFile(icsPath, events);
console.log('Calendar file: ' + icsPath + ' (' + events.length + ' events)');
"
Replace [WXX] with the actual ISO week number used for the batch directory.
Show the user:
Calendar file generated: ${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/week-[WXX]/schedule.ics
Import this file into your calendar app:
- macOS: Double-click the .ics file → Calendar.app imports it
- Google Calendar: Settings → Import → select .ics file
- Outlook: File → Open → Import → .ics file
Each scheduled post has a 15-minute reminder before posting time.
Reference Files
${CLAUDE_PLUGIN_ROOT}/references/content-angles.md${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md${CLAUDE_PLUGIN_ROOT}/references/low-frequency-posting-strategy.md${CLAUDE_PLUGIN_ROOT}/references/scheduling-strategy.md${CLAUDE_PLUGIN_ROOT}/assets/templates/weekly-content-calendar-2-3x.md${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/queue.json