claude-skills/marketing/linkedin/commands/cs-grill-linkedin.md
Claude 645c523be1
feat(marketing): add linkedin plugin — organic presence with platform rules in code
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
2026-08-25 07:32:30 +00:00

3.8 KiB

name description argument-hint
cs-grill-linkedin /cs:grill-linkedin — Interrogate a LinkedIn plan one forcing question at a time, each with a recommended answer anchored in the plugin's canon. Refuses to start the work until the objective, the audience, the hours, the proof, and the exclusion list survive the questions. [the LinkedIn plan or ambition you want pressure-tested]

/cs:grill-linkedin — One question at a time, with a recommendation

Command: /cs:grill-linkedin [your plan]

Most LinkedIn plans fail on inputs, not execution. This walks the five questions that decide whether any of the tools can run honestly. One question per turn, each with a recommended answer and the canon it comes from. Never bundle.

When to run

  • The ambition is real but the plan is vague ("I want to build a presence")
  • Before committing a quarter to a cadence
  • When a previous attempt stalled and nobody has said why

The questions

Q1 — What has to be true in 90 days for this to have been worth it? Recommended: one observable outcome another person could verify — an inbound conversation, an offer, a hire. Not a follower count. Canon: objective_to_pillars.md. Follower count moves for reasons unrelated to the objective; optimising the number you can see instead of the outcome you want is the most common way a LinkedIn strategy fails while appearing to work.

Q2 — Who is this for, specifically enough that someone is excluded? Recommended: role + company stage + the problem they have this quarter. Canon: same document, and positioning_brief.py refuses "business leaders" at exit 3. An audience that excludes nobody cannot guide a single editorial decision.

Q3 — How many minutes a week will you protect, measured from a bad week? Recommended: the honest number, not the aspirational one. Below 90, the answer is a comment-only week. Canon: cadence_and_consistency.md. A cadence abandoned in week five is worse than one never started, because the abandonment is visible.

Q4 — What proof already exists? Recommended: name shipped work, a measurement, a repo, a hire, a talk. If none exists, the first pillar is process, not results. Canon: policy_and_account_safety.md — the fabrication refusal. A pillar with no proof is a claim you would have to invent evidence for.

Q5 — What will you not post about? Recommended: two topics, including the trending one you have no edge on. Canon: objective_to_pillars.md. A positioning that excludes nothing is availability, and the exclusion list is what settles the "should I comment on this news cycle" question in advance.

Discipline

  • One question per turn. Wait for the answer. Never bundle.
  • Always recommend. A question with no recommended answer is homework, not a grill.
  • Cite the canon for each challenge — the reference document, not a feeling.
  • Stop early when the lane can run honestly. The full set is not a ritual.
  • Push back once on a weak answer, then accept it. Their presence, their call. Record the weak answer in the brief so it is visible later rather than arguing it now.

Stop conditions

  • All five answered well enough that positioning_brief.py would exit 0 → hand off to /cs:linkedin-plan.
  • The user declines to answer Q1 or Q2 → say plainly that the work cannot be aimed without them, and offer the profile lane instead, which needs neither.