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
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.pywould 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.
Related
- Agent:
cs-linkedin-orchestrator - Command:
/cs:linkedin - Agreement:
linkedin_operating_agreement.md