fix(linkedin-studio): N20 — CLAUDE_PLUGIN_ROOT-normalisering av load-bearing ref-stier [skip-docs]
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
This commit is contained in:
parent
ab091121d9
commit
e7276cf8bb
16 changed files with 81 additions and 81 deletions
|
|
@ -19,9 +19,9 @@ You are a LinkedIn performance analyst. Help the user diagnose why their content
|
|||
## Load Context
|
||||
|
||||
Read these reference files:
|
||||
- `references/troubleshooting-guide.md` - Failure patterns and solutions
|
||||
- `references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `skills/linkedin-studio/SKILL.md` - User's profile and goals
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/troubleshooting-guide.md` - Failure patterns and solutions
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` - User's profile and goals
|
||||
|
||||
## Step 1: Diagnose the Problem
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ Based on their answer, ask relevant follow-up questions:
|
|||
|
||||
## Step 3: Apply Diagnostic Framework
|
||||
|
||||
Based on `references/troubleshooting-guide.md`, diagnose the pattern:
|
||||
Based on `${CLAUDE_PLUGIN_ROOT}/references/troubleshooting-guide.md`, diagnose the pattern:
|
||||
|
||||
### Pattern: Good Content, Low Reach
|
||||
|
||||
|
|
@ -312,6 +312,6 @@ Consider creating a new account if:
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `references/troubleshooting-guide.md` - Complete troubleshooting
|
||||
- `references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `references/growth-roadmaps.md` - Stall points and fixes
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/troubleshooting-guide.md` - Complete troubleshooting
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/growth-roadmaps.md` - Stall points and fixes
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ Use AskUserQuestion:
|
|||
3. **Use existing plan** — Follow the weekly plan already created
|
||||
4. **Mix it up** — Diverse topics across pillars
|
||||
|
||||
If they choose a theme, help them identify 3-5 unique angles from `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.
|
||||
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)
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ You are a LinkedIn carousel content specialist. Create high-engagement carousel
|
|||
|
||||
## Step 1: Choose Template
|
||||
|
||||
Read `assets/templates/carousel-templates.md` for the 5 templates.
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/assets/templates/carousel-templates.md` for the 5 templates.
|
||||
|
||||
Present the options:
|
||||
|
||||
|
|
|
|||
|
|
@ -117,5 +117,5 @@ delayed spike) with the post-feedback monitor — invoke it via `Task` with
|
|||
## Reference Files
|
||||
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/authentic-voice-samples.md` — voice matching for the draft comments
|
||||
- `references/engagement-frameworks.md` — hook types, engagement hierarchy
|
||||
- `references/algorithm-signals-reference.md` — first-hour weighting, signal order, timing data
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` — hook types, engagement hierarchy
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` — first-hour weighting, signal order, timing data
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ You are a LinkedIn analytics data import assistant. Guide the user through impor
|
|||
|
||||
## Reference
|
||||
|
||||
For data format details and directory structure, see `assets/analytics/README.md`.
|
||||
For data format details and directory structure, see `${CLAUDE_PLUGIN_ROOT}/assets/analytics/README.md`.
|
||||
|
||||
> **Why CSV (as of 2026-07).** Post-level analytics via LinkedIn's API is
|
||||
> partner-gated (vetted Community Management app + verified org + Page) and **not
|
||||
|
|
@ -32,7 +32,7 @@ For data format details and directory structure, see `assets/analytics/README.md
|
|||
> percentages, and is absent from the CSV, with export status unverified; dwell is
|
||||
> internal-only for organic posts. Saves and the reach share are therefore
|
||||
> **optional manual columns** the user adds to the CSV (`Saves`,
|
||||
> `Out-of-network` / `In-network`) — see `assets/analytics/README.md` for the
|
||||
> `Out-of-network` / `In-network`) — see `${CLAUDE_PLUGIN_ROOT}/assets/analytics/README.md` for the
|
||||
> entry rules, and the README boundaries for the full data boundary.
|
||||
|
||||
## Step 1: Check for CSV Files in Exports Directory
|
||||
|
|
|
|||
|
|
@ -229,4 +229,4 @@ If the user's intent is clear from context:
|
|||
## Reference
|
||||
|
||||
For full skill documentation, see:
|
||||
- `skills/linkedin-studio/SKILL.md` - Complete skill with personalization settings
|
||||
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` - Complete skill with personalization settings
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ the edition left off before doing anything.
|
|||
4. **None / insufficient** — Step 1 will **define personas interactively**.
|
||||
Exactly one persona is the **primær**. The resolved set feeds BOTH the Step 6
|
||||
resonance sweep AND the Step 6.5 headless package; see
|
||||
`config/personas.template.md` → "Per-artifact personas".
|
||||
`${CLAUDE_PLUGIN_ROOT}/config/personas.template.md` → "Per-artifact personas".
|
||||
6. **Read the series brief** — whatever the series folder defines as its brief /
|
||||
premise / freshness rules (e.g. `<serie>/brief.md`, or the resolved brief
|
||||
recorded in `edition-state.json`). This anchors angle and scope.
|
||||
|
|
@ -421,7 +421,7 @@ Settle these dimensions (most should come from context, not questions):
|
|||
`articles.NN.personas` (each entry: name, tier, the five fields, source) at the
|
||||
**Step 1.5 checkpoint** (the first machine-state write; Step 2 then adds the
|
||||
research notes) — it is then stable across sessions and is the single source
|
||||
every later sweep reads. See `config/personas.template.md` →
|
||||
every later sweep reads. See `${CLAUDE_PLUGIN_ROOT}/config/personas.template.md` →
|
||||
"Per-artifact personas".
|
||||
- **Key points** — the 2–4 load-bearing claims the edition must make.
|
||||
- **Tone** — respected-peer vs. teaching-down; calibrated to the primær.
|
||||
|
|
@ -633,7 +633,7 @@ Next: Step 2 — Research (scoped by the binding: fill ekstern/unresolved, verif
|
|||
1. **Decompose** the binding's `ekstern`/`unresolved` slots + unverified numbers
|
||||
(step 0) into 2–5 *scoped, orthogonal* research sub-questions. Each sub-question
|
||||
must be answerable independently so the calls can run in parallel without
|
||||
overlap. Reuse the multi-source synthesis discipline from `commands/react.md`
|
||||
overlap. Reuse the multi-source synthesis discipline from `${CLAUDE_PLUGIN_ROOT}/commands/react.md`
|
||||
(Comparison Path, Steps 2b–3b): per source, extract claims, stance, data points;
|
||||
then look across sources for common ground, tension, and blind spots.
|
||||
|
||||
|
|
@ -1083,7 +1083,7 @@ turning-points the spine already named.
|
|||
only afterward.)
|
||||
|
||||
3. **Expand with the `content-repurposer` muscle.** Reuse
|
||||
`agents/content-repurposer.md` (its article→long-form conversion discipline)
|
||||
`${CLAUDE_PLUGIN_ROOT}/agents/content-repurposer.md` (its article→long-form conversion discipline)
|
||||
for individual section expansions — invoke it via `Task`
|
||||
(`subagent_type: linkedin-studio:content-repurposer`) when useful, *from this
|
||||
command layer* (foreground, principle 4). The command owns assembly and
|
||||
|
|
@ -1212,7 +1212,7 @@ mechanical noise.
|
|||
> which is the §A/quality reference applied by reasoning.
|
||||
|
||||
> **Adopter note.** The gate is a KTG-internal tool: it needs the contract-gate deps
|
||||
> (`scripts/contract-gate/node_modules` — run `npm install` there once) and, for
|
||||
> (`${CLAUDE_PLUGIN_ROOT}/scripts/contract-gate/node_modules` — run `npm install` there once) and, for
|
||||
> ratify, the maskinrommet contract. If either is absent (a plain adopter ships
|
||||
> neither), this Step is a **no-op** and the §B/§C1 discipline falls back to the Step 4
|
||||
> quality-pass reasoning. It never blocks an adopter.
|
||||
|
|
@ -1496,7 +1496,7 @@ reopening locked texts — the biggest single process error of the series (plan
|
|||
|
||||
1. **Load the active personas** chosen in Step 1, with exactly one marked
|
||||
**primær**. Each persona's five fields (rolle, avkobler, overbeviser,
|
||||
ekspertise, sjargong) come from `config/personas.local.md` (or the template).
|
||||
ekspertise, sjargong) come from `${CLAUDE_PLUGIN_ROOT}/config/personas.local.md` (or the template).
|
||||
|
||||
2. **Fan out one `persona-reviewer` call per persona, in parallel** — issue them
|
||||
in a SINGLE message (multiple `Task` tool-uses, `subagent_type:
|
||||
|
|
@ -1583,7 +1583,7 @@ in-session pass hid. `content-reviewer` is genuinely new (argument integrity,
|
|||
which no in-session gate measures). Do NOT collapse the pairs.
|
||||
|
||||
**Procedure** (this is the same package the standalone `/linkedin:headless-review`
|
||||
command runs — see `commands/headless-review.md` for the full cold contract):
|
||||
command runs — see `${CLAUDE_PLUGIN_ROOT}/commands/headless-review.md` for the full cold contract):
|
||||
|
||||
1. **Freeze the draft.** Snapshot the persona-passed `NN-utkast.md` so the
|
||||
reviewers judge a stable artifact and the report names exactly what was read:
|
||||
|
|
@ -1596,7 +1596,7 @@ command runs — see `commands/headless-review.md` for the full cold contract):
|
|||
default `en` — tells `language-reviewer` and `voice-scrubber` which language's
|
||||
rules to grade against; Norwegian-specific checks fire only when `language: no`),
|
||||
the writing contract *if it ships* (`<serie>/../../docs/skrivekontrakt.md` →
|
||||
plugin mirror → `references/longform-quality-rules.md`; absent for an adopter,
|
||||
plugin mirror → `${CLAUDE_PLUGIN_ROOT}/references/longform-quality-rules.md`; absent for an adopter,
|
||||
the craft agents' in-tree checklists are self-contained), and the active
|
||||
personas (`articles.NN.personas`, primær identified). Nothing else.
|
||||
|
||||
|
|
@ -2269,7 +2269,7 @@ time. Step 11 empties that queue into permanent, enforced homes.
|
|||
|
||||
- **`mechanical-block` / `mechanical-warn`** — provable by string, regex, or
|
||||
count with ~zero false positives. **JA →** promote **atomically**: add the
|
||||
rule to `scripts/contract-gate/src/rules.ts`, the matching row to the
|
||||
rule to `${CLAUDE_PLUGIN_ROOT}/scripts/contract-gate/src/rules.ts`, the matching row to the
|
||||
writing contract, and the manifest row that binds them; set the fold-in's
|
||||
`decision: "promoted"` and `ruleId`. Then prove it:
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ Load persistent state and personalization:
|
|||
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for 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.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 `${CLAUDE_PLUGIN_ROOT}/assets/frameworks/framework-template.md` if the topic involves a framework or methodology
|
||||
|
||||
Display status:
|
||||
```
|
||||
|
|
@ -52,7 +52,7 @@ To situate the post in the broader plan — does it fill a content-mix gap or re
|
|||
|
||||
Once topic is chosen, create the draft:
|
||||
|
||||
1. **Select angle** — Auto-select the strongest angle from `references/content-angles.md` based on topic and user's expertise. Present ONE recommended angle with reasoning. Do NOT use AskUserQuestion — just proceed. If user disagrees, offer alternatives.
|
||||
1. **Select angle** — Auto-select the strongest angle from `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` based on topic and user's expertise. Present ONE recommended angle with reasoning. Do NOT use AskUserQuestion — just proceed. If user disagrees, offer alternatives.
|
||||
2. **Infer format** — Default to text post. Only mention carousel/video as a note if particularly well-suited.
|
||||
3. **Write draft** — Following the structure:
|
||||
- Hook: 110-140 characters
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ You are a LinkedIn content creator. Guide the user through creating a high-quali
|
|||
|
||||
First, load persistent state and personalization:
|
||||
- Read `~/.claude/linkedin-studio.local.md` for posting state (streak, weekly progress, recent topics)
|
||||
- Read `skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
|
||||
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
|
||||
|
||||
**Read `## Do-Next Directives` in the state file and apply them to this draft.** This is what the
|
||||
last measurement pass (`/linkedin:report`, `/linkedin:analyze`, an A/B Adopt verdict, the 48h
|
||||
|
|
@ -46,7 +46,7 @@ Check weekly progress:
|
|||
Check for existing assets:
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/` - Match the user's natural voice
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/examples/high-engagement-posts.md` - Study past successful posts and replicable patterns
|
||||
- `assets/frameworks/framework-template.md` - Reference user's documented frameworks for framework posts
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/frameworks/framework-template.md` - Reference user's documented frameworks for framework posts
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/templates/my-post-templates.md` - User's proven post templates with success rates. **Prefer these over generic structures.**
|
||||
|
||||
## Step 1: Understand the Input
|
||||
|
|
@ -71,7 +71,7 @@ If they provide a URL, use WebFetch to extract the content first.
|
|||
|
||||
## Step 2: Select Content Angle
|
||||
|
||||
Read `references/content-angles.md` for the 8 universal angles.
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` for the 8 universal angles.
|
||||
|
||||
**Industry-specific angles:** If `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/profile/user-profile.md` exists and has an `industry` field, check the "Industry Angle Variants" section in `content-angles.md` for the matching industry table. Use the industry-specific starter questions and example hooks to generate more targeted angle suggestions.
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ Proceed with standard text post format by default. Only mention carousel or othe
|
|||
|
||||
## Step 4: Structure and Write
|
||||
|
||||
Read `references/engagement-frameworks.md` for hook types, story structures, and CTAs.
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` for hook types, story structures, and CTAs.
|
||||
|
||||
Use the Standard Post Structure:
|
||||
|
||||
|
|
@ -113,7 +113,7 @@ Use the Standard Post Structure:
|
|||
|
||||
### Hook Rules
|
||||
|
||||
Reference `assets/quick-post-resources.md` for hooks bank.
|
||||
Reference `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md` for hooks bank.
|
||||
|
||||
- Frontload value - most interesting part first
|
||||
- Be specific with numbers and details
|
||||
|
|
@ -130,7 +130,7 @@ Match the user's voice profile from SKILL.md:
|
|||
|
||||
## Step 5: Quality Check
|
||||
|
||||
Before presenting, verify against `assets/checklists/quality-scorecard.md`:
|
||||
Before presenting, verify against `${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md`:
|
||||
|
||||
- [ ] Hook works in first 110-140 characters
|
||||
- [ ] Character count: 1,200-1,800 (optimal range)
|
||||
|
|
@ -210,9 +210,9 @@ Replace placeholders with actual post data. This replaces manual YAML editing.
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `references/content-angles.md` - 8 universal angles
|
||||
- `references/engagement-frameworks.md` - Hooks, structure, CTAs
|
||||
- `references/linkedin-formats.md` - Format specifications
|
||||
- `references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `assets/quick-post-resources.md` - Hooks and CTAs bank
|
||||
- `assets/checklists/quality-scorecard.md` - Pre-publish check
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` - 8 universal angles
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` - Hooks, structure, CTAs
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md` - Format specifications
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` - Algorithm mechanics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md` - Hooks and CTAs bank
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md` - Pre-publish check
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ You are a LinkedIn profile optimization specialist. Help the user optimize their
|
|||
|
||||
## Critical Context: Profile/Topic Relevance
|
||||
|
||||
Read `references/algorithm-signals-reference.md` for algorithm mechanics.
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` for algorithm mechanics.
|
||||
|
||||
**The Fundamental Shift:**
|
||||
- **In the older feed model:** Post something → a slice of your network sees it → the algorithm tracks engagement to decide wider reach
|
||||
|
|
@ -239,6 +239,6 @@ If the answer is no, fix the profile FIRST before posting.
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `references/algorithm-signals-reference.md` - relevance-model mechanics and signals
|
||||
- `references/troubleshooting-guide.md` - Recovery if reach is already down
|
||||
- `skills/linkedin-studio/SKILL.md` - User's expertise areas and topics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` - relevance-model mechanics and signals
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/troubleshooting-guide.md` - Recovery if reach is already down
|
||||
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` - User's expertise areas and topics
|
||||
|
|
|
|||
|
|
@ -32,12 +32,12 @@ Read `~/.claude/linkedin-studio.local.md` for:
|
|||
Apply the ones that fit and name the applied directive in one line with the draft. Never edit
|
||||
or clear the section (each source manages its own rows; rows older than 60 days expire).
|
||||
|
||||
Read `skills/linkedin-studio/SKILL.md` for:
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for:
|
||||
- User's voice profile and tone preferences
|
||||
- Core expertise areas (for topical alignment)
|
||||
- Phrases they commonly use
|
||||
|
||||
Read `assets/quick-post-resources.md` for:
|
||||
Read `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md` for:
|
||||
- Hooks bank
|
||||
- CTAs bank
|
||||
- Quality checklist
|
||||
|
|
@ -61,7 +61,7 @@ Only ask if truly ambiguous (no discernible intent). Otherwise, state: "This rea
|
|||
|
||||
These 8 post types ARE the template library. Each maps to a hook pattern (Step 3),
|
||||
an auto-selected CTA (Step 4), and a full fill-in-the-blank structure with per-type
|
||||
character targets in `assets/templates/post-type-templates.md`. If the user explicitly
|
||||
character targets in `${CLAUDE_PLUGIN_ROOT}/assets/templates/post-type-templates.md`. If the user explicitly
|
||||
wants to browse template structures rather than draft now, present that asset's
|
||||
per-type structures and let them pick before applying the 3-line formula.
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ Use this structure for all quick posts:
|
|||
|
||||
## Step 3: Select Hook Pattern
|
||||
|
||||
Based on post type, use appropriate hook from `assets/quick-post-resources.md`:
|
||||
Based on post type, use appropriate hook from `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md`:
|
||||
|
||||
### Reaction Post
|
||||
- "[Industry event/news - state what happened]"
|
||||
|
|
@ -133,7 +133,7 @@ Auto-select the best CTA based on post type — do NOT ask:
|
|||
| CURATION | "Worth a read — what's your take?" |
|
||||
| ONE-LINER | "Agree or disagree?" |
|
||||
|
||||
Reference `assets/quick-post-resources.md` for additional CTA options if the default doesn't fit.
|
||||
Reference `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md` for additional CTA options if the default doesn't fit.
|
||||
|
||||
## Step 5: Write and Check
|
||||
|
||||
|
|
@ -189,7 +189,7 @@ Replace placeholders with actual post data. This replaces manual YAML editing.
|
|||
|
||||
## Common Mistakes to Avoid
|
||||
|
||||
From `assets/quick-post-resources.md`:
|
||||
From `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md`:
|
||||
|
||||
1. **Too many ideas** - Pick ONE. Save others for separate posts.
|
||||
2. **Burying the hook** - Lead with the most interesting element.
|
||||
|
|
@ -226,6 +226,6 @@ If during creation you realize:
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `assets/quick-post-resources.md` - Hooks and CTAs bank
|
||||
- `assets/templates/post-type-templates.md` - Template examples
|
||||
- `references/engagement-frameworks.md` - Hook psychology
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/quick-post-resources.md` - Hooks and CTAs bank
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/templates/post-type-templates.md` - Template examples
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` - Hook psychology
|
||||
|
|
|
|||
|
|
@ -272,6 +272,6 @@ Same as Step 8 — run `state-updater.mjs` with actual post data.
|
|||
## Reference Files
|
||||
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/authentic-voice-samples.md` — Voice matching
|
||||
- `references/content-angles.md` — 8 universal angles
|
||||
- `references/engagement-frameworks.md` — Hooks, structure, CTAs
|
||||
- `assets/checklists/quality-scorecard.md` — Pre-publish check
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` — 8 universal angles
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` — Hooks, structure, CTAs
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md` — Pre-publish check
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ You are a LinkedIn analytics performance reporter. Generate actionable weekly pe
|
|||
|
||||
## Reference
|
||||
|
||||
For data format details and directory structure, see `assets/analytics/README.md`.
|
||||
For data format details and directory structure, see `${CLAUDE_PLUGIN_ROOT}/assets/analytics/README.md`.
|
||||
|
||||
## Step 1: Check for Imported Data
|
||||
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ Conduct a 6-question interview:
|
|||
5. **What were the results?** -- Quantitative and qualitative outcomes
|
||||
6. **What's the key takeaway?** -- The non-obvious lesson others can apply
|
||||
|
||||
After the interview, read `assets/case-studies/case-study-template.md` for structure reference, then create a new file:
|
||||
After the interview, read `${CLAUDE_PLUGIN_ROOT}/assets/case-studies/case-study-template.md` for structure reference, then create a new file:
|
||||
|
||||
**Filename:** `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/case-studies/[slug].md` (derive slug from the challenge topic, e.g., `ai-procurement-transformation.md`)
|
||||
|
||||
|
|
@ -182,7 +182,7 @@ Conduct a 5-question interview:
|
|||
4. **How does someone apply it?** -- Step-by-step or decision process
|
||||
5. **What makes this different from standard approaches?** -- Your unique angle
|
||||
|
||||
After the interview, read `assets/frameworks/framework-template.md` for structure reference, then create:
|
||||
After the interview, read `${CLAUDE_PLUGIN_ROOT}/assets/frameworks/framework-template.md` for structure reference, then create:
|
||||
|
||||
**Filename:** `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/frameworks/[slug].md` (e.g., `ai-maturity-model.md`)
|
||||
|
||||
|
|
@ -341,7 +341,7 @@ Guide through each section of the profile:
|
|||
- Record exactly what they name. If they have none, that's fine — WebSearch + WebFetch are the always-available floor.
|
||||
- This populates the **Research Tooling** section of the profile; the trend/research engine routes to a declared MCP first and falls back to the floor. Do not invent MCP names — store only what the user declares.
|
||||
|
||||
8. Read `config/user-profile.template.md` for structure
|
||||
8. Read `${CLAUDE_PLUGIN_ROOT}/config/user-profile.template.md` for structure
|
||||
9. Write the completed profile to `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/profile/user-profile.md`
|
||||
|
||||
**Important:** This file is gitignored (`.local.md` pattern), so personal data stays private.
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@ You are a LinkedIn growth strategist. Help the user create a personalized growth
|
|||
## Load Context
|
||||
|
||||
Read these files:
|
||||
- `references/growth-roadmaps.md` - Detailed phase roadmaps
|
||||
- `references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics
|
||||
- `references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments
|
||||
- `skills/linkedin-studio/SKILL.md` - User's goals and context
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/growth-roadmaps.md` - Detailed phase roadmaps
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments
|
||||
- `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` - User's goals and context
|
||||
|
||||
## Step 0.5: Auto-Detect from State
|
||||
|
||||
|
|
@ -262,7 +262,7 @@ From the state file, compare current growth rate vs `growth_rate_needed`:
|
|||
|
||||
### Present Trajectory Overlay
|
||||
|
||||
Using `references/trajectory-strategy-adjustments.md` as the source, show how the phase strategy should be adjusted:
|
||||
Using `${CLAUDE_PLUGIN_ROOT}/references/trajectory-strategy-adjustments.md` as the source, show how the phase strategy should be adjusted:
|
||||
|
||||
```markdown
|
||||
### Trajectory Adjustment: [STATUS]
|
||||
|
|
@ -513,10 +513,10 @@ Remind them of the long-term view:
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `references/growth-roadmaps.md` - Detailed phase roadmaps
|
||||
- `references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics
|
||||
- `references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments
|
||||
- `references/algorithm-signals-reference.md` - topic-relevance signals (authority audit)
|
||||
- `references/collaborations-guide.md` - Partnership strategies
|
||||
- `references/opportunity-generation.md` - Business development
|
||||
- `references/newsletter-strategy-guide.md` - For 5K+ followers
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/growth-roadmaps.md` - Detailed phase roadmaps
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/linkedin-growth-playbook-2025-2026.md` - Comprehensive tactics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/trajectory-strategy-adjustments.md` - Trajectory-based strategy adjustments
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` - topic-relevance signals (authority audit)
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/collaborations-guide.md` - Partnership strategies
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/opportunity-generation.md` - Business development
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/newsletter-strategy-guide.md` - For 5K+ followers
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ You are a LinkedIn video scripting assistant. Guide the user through creating a
|
|||
|
||||
First, load persistent state and personalization:
|
||||
- Read `~/.claude/linkedin-studio.local.md` for posting state (streak, weekly progress, recent topics)
|
||||
- Read `skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
|
||||
- Read `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` for user profile, voice settings, and preferences
|
||||
|
||||
Check state for topic planning:
|
||||
- Compare intended topic against "Recent Posts" in state file
|
||||
|
|
@ -35,14 +35,14 @@ Check weekly progress:
|
|||
- If `posts_this_week == weekly_goal - 1`, note: "This video will hit your weekly goal."
|
||||
|
||||
Load video-specific references:
|
||||
- Read `references/video-strategy-guide.md` for script templates, pacing, and production guidance
|
||||
- Read `references/linkedin-formats.md` (Video Content Deep Dive section) for algorithm data and technical specs
|
||||
- Read `${CLAUDE_PLUGIN_ROOT}/references/video-strategy-guide.md` for script templates, pacing, and production guidance
|
||||
- Read `${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md` (Video Content Deep Dive section) for algorithm data and technical specs
|
||||
|
||||
Check for existing assets:
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/` — Match the user's natural voice (read before scripting)
|
||||
- `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/examples/high-engagement-posts.md` — Study successful patterns
|
||||
|
||||
**Graceful degradation (fresh adopter):** if `voice-samples/` is empty or absent, don't block — fall back to the voice settings in `skills/linkedin-studio/SKILL.md` (or neutral defaults), note that the script uses a default voice, and proceed. The voice-guardian is suppressed under 5 samples, so there is no hard gate to satisfy.
|
||||
**Graceful degradation (fresh adopter):** if `voice-samples/` is empty or absent, don't block — fall back to the voice settings in `${CLAUDE_PLUGIN_ROOT}/skills/linkedin-studio/SKILL.md` (or neutral defaults), note that the script uses a default voice, and proceed. The voice-guardian is suppressed under 5 samples, so there is no hard gate to satisfy.
|
||||
|
||||
## Step 1: Choose Video Type
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ Default recommendation: **60 seconds** is the 2026 sweet spot — shorter videos
|
|||
Follow the same flow as `/linkedin:post`:
|
||||
|
||||
1. Ask what they want the video to be about (if not already clear)
|
||||
2. Read `references/content-angles.md` for the 8 universal angles
|
||||
2. Read `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` for the 8 universal angles
|
||||
3. Present 2-3 angle options via AskUserQuestion
|
||||
4. Verify topic doesn't duplicate recent posts (check state file)
|
||||
5. Confirm topic aligns with user's 5 core expertise areas
|
||||
|
|
@ -83,7 +83,7 @@ Follow the same flow as `/linkedin:post`:
|
|||
Delegate script generation to the `video-scripter` agent — invoke it via `Task` with `subagent_type: linkedin-studio:video-scripter` (foreground, from this command layer). The agent will:
|
||||
|
||||
1. Calculate word budget based on selected length (duration × 2.5 wps)
|
||||
2. Select the appropriate script template from `references/video-strategy-guide.md`
|
||||
2. Select the appropriate script template from `${CLAUDE_PLUGIN_ROOT}/references/video-strategy-guide.md`
|
||||
3. Write the full script with:
|
||||
- Timing markers (`[0:00-0:03]`, etc.)
|
||||
- Visual cues (`[CAM:]`, `[SCREEN:]`, `[SLIDE:]`, `[TEXT:]`)
|
||||
|
|
@ -232,9 +232,9 @@ Replace placeholders with actual post data. This replaces manual YAML editing.
|
|||
|
||||
## Reference Files
|
||||
|
||||
- `references/video-strategy-guide.md` — Script templates, pacing, production
|
||||
- `references/linkedin-formats.md` — Video specs, algorithm, technical requirements
|
||||
- `references/engagement-frameworks.md` — Hook types, CTAs
|
||||
- `references/content-angles.md` — 8 universal angles
|
||||
- `references/algorithm-signals-reference.md` — Algorithm mechanics
|
||||
- `assets/checklists/quality-scorecard.md` — Pre-publish check
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/video-strategy-guide.md` — Script templates, pacing, production
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/linkedin-formats.md` — Video specs, algorithm, technical requirements
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md` — Hook types, CTAs
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/content-angles.md` — 8 universal angles
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/algorithm-signals-reference.md` — Algorithm mechanics
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/checklists/quality-scorecard.md` — Pre-publish check
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue