mirror of
https://github.com/alirezarezvani/claude-skills.git
synced 2026-08-28 04:24:58 +00:00
Answers discussion #934, which asked for a strategic assistant for growing a LinkedIn presence organically rather than a post generator. Six skills under marketing/linkedin/: an orchestrator (context: fork) plus profile, strategy, content, engagement, and analytics lanes. 17 stdlib-only tools, 15 references, 2 agents, 8 /cs:* commands. The design constraint is the differentiator: no LinkedIn credentials, no API calls, no scraping, nothing auto-sent. Automated posting, connecting, and commenting are prohibited by LinkedIn's User Agreement 8.2, and a restricted account ends a compounding asset. linkedin_policy_gate.py runs before any drafting and refuses seven request classes — automation, scraping, engagement pods, bulk messaging, fake identity, fabricated proof, named third-party automation platforms — each carrying the policy anchor and a compliant substitute, so the gate never just says no. Refusals are real rather than advisory. A cadence under 90 minutes a week returns a comment-only plan instead of a schedule that dies in week five. A newsletter whose six-month cost exceeds the budget is refused before the promise is made. An experiment needing more posts than a quarter allows is reported infeasible rather than quietly re-sized. The pattern miner refuses to test anything below 10 posts and reports NOTHING_SURVIVED as a finding. Evidence discipline: two widely repeated claims are corrected rather than propagated. The "personalised note triples acceptance" claim is not supported by the largest samples (acceptance is near-identical either way, ~26.4%); what a note moves is the post-accept reply rate (~5.4% to ~9.4%), which is why the message builder refuses an ask in a first-touch note. The ~19% in-body link reach reduction has never been confirmed by LinkedIn as a penalty and has a plausible dwell-time explanation, so it is a warning rather than a block. Every reference carries per-claim confidence levels. Accessibility is a blocking lint finding: Unicode pseudo-bold is announced by screen readers as mathematical symbols and is not indexed by search. All six SKILL.md files are 6/6 PASS on the write-a-skill checklist. Every tool supports --help, --sample, and --output json with typed exit codes. Counters: skills 380 -> 386; plugins 96 -> 97; tools 706 -> 723; refs 823 -> 838; agents 114 -> 116; commands 138 -> 146 (derive_counters.py --check). Also syncs three previously-merged skills (agent-memory, hivemind, skill-doctor) into the .hermes/ and .vibe/ mirror trees, which had drifted behind .codex/. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JSPxUHU6utqme7qC6EwHEh
2.9 KiB
2.9 KiB
| name | description | argument-hint |
|---|---|---|
| cs-linkedin-post | /cs:linkedin-post — Pick the format the material actually supports, draft to the ~140-character mobile fold, and lint 0-100 across mechanics, hook, integrity, and accessibility. Blocking findings for the 3,000-character cap, engagement bait, and Unicode pseudo-bold. | [the post idea, or paste a draft to be reviewed] |
/cs:linkedin-post — Format, draft, lint
Command: /cs:linkedin-post [idea or draft]
When to run
- "Write a LinkedIn post about X" / "review my draft"
- "Is this hook any good?"
- "Should this be a carousel or a text post?"
When NOT to run
- No positioning brief yet →
/cs:linkedin-planfirst - A comment or a DM →
/cs:linkedin-outreach; different craft - Repurposing a long source →
/cs:linkedin-repurpose
What you get
- A format recommendation with the constraint it carries — or one question when the top two score within a point.
- A draft built from your specifics, with a sentence completing inside the first ~140 characters.
- A lint score 0-100 with every finding carrying a fix.
- Accessibility done — alt text written, captions flagged, no pseudo-bold.
Workflow
# 1. Format from the material, not from fashion
python3 ../skills/linkedin-content/scripts/format_picker.py \
--goal authority --material data --material tutorial --minutes 120 --output human
# 2. Draft (the interview comes first: the number, the mistake, the sentence someone said)
# 3. Lint to a clean exit
python3 ../skills/linkedin-content/scripts/post_linter.py \
--input draft.md --has-image --output human
# exit 0 SHIP · exit 2 REVISE (or any blocking finding) · exit 3 REWRITE
Discipline
- Interview before drafting. A post with no specifics cannot be fixed by editing.
- Never fabricate a number, client, result, or quote — not even as a placeholder.
- Write to the mobile fold. A sentence completes before character 140.
- Links in the first comment, and say so in the post.
- No engagement bait. Ask the question the post actually earned.
- One idea per post. If it needs two, it is two posts.
- Cut the first paragraph and check whether the post starts better at paragraph two.
Stop conditions
- Linter at exit 0 → done. Hand over with "you are the author of record; read every line".
- Linter at exit 2 with only warnings the user has knowingly accepted → done, with the accepted warnings restated.
- Three REWRITE passes on the same draft → the problem is the idea, not the wording. Go back to the specifics.
Related
- Agent:
cs-linkedin-editor - Skill:
linkedin-content - Assets:
post_templates.md