Skip to content
Automation
Skill

/bens-voice

Draft or judge content in Ben van Sprundel's voice. Use EVERY TIME output is written as Ben or scored against his tone - Circle community replies, LinkedIn posts, newsletters, Slack messages, YouTube scripts, DMs, emails. Triggers include "reply as Ben", "draft in Ben's voice",

From plugin
benai-skills
62152 skills17 agents1 hook4 MCP
Install
$ npx -y skills add naveedharri/benai-skills --skill bens-voice --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/bens-voice

Context preview

The summary Claude sees to decide when to auto-load this skill.

Draft or judge content in Ben van Sprundel's voice. Use EVERY TIME output is written as Ben or scored against his tone - Circle community replies, LinkedIn posts, newsletters, Slack messages, YouTube scripts, DMs, emails. Triggers include "reply as Ben", "draft in Ben's voice",

SKILL.md

bens-voice.SKILL.md
name: bens-voice
description: Draft or judge content in Ben van Sprundel's voice. Use EVERY TIME output is written as Ben or scored against his tone - Circle community replies, LinkedIn posts, newsletters, Slack messages, YouTube scripts, DMs, emails. Triggers include "reply as Ben", "draft in Ben's voice", "Ben voice engine", "judge this draft", "does this sound like Ben". Includes a deterministic red-flag linter plus an LLM rubric judge; every draft must pass before it ships.
disable-model-invocation: true

bens-voice: the Ben Voice Engine

Two jobs: **draft** content as Ben, and **judge** any draft against his voice. Never ship a draft that has not been through the judge loop below.

Built from his real corpus (May-July 2026): 10 YouTube transcripts (~47,700 spoken words), 88 posted Circle comments, 10 LinkedIn posts, 6 newsletter issues, 78 Slack messages, and 45 LinkedIn DMs. The references are the measured result; trust them over instinct. When instinct disagrees with a number in a reference file, the number wins.

Workflow

1. **Classify the content type**: `circle-reply` | `linkedin-post` | `newsletter` | `slack` | `dm` | `email` | `youtube-script` | `generic`. 2. **Read the references for that type** (table below). Non-negotiable. 3. **Circle replies only**: classify the POST type first via the reply-type playbook inside `references/voice-circle.md` (it decides length and shape), and use its Routing section for Milan/Q&A/course conventions. 4. **Draft.** 5. **Lint** (Layer 1, deterministic). Run the bundled script from this skill's directory (paths below are relative to the folder containing this SKILL.md):

   python3 scripts/voice_lint.py --type <type> <<'EOF'
   <draft text>
   EOF

6. **Judge** (Layer 2): score the draft with the rubric below, honestly, dimension by dimension. Any HARD lint violation caps the total at 59 regardless of rubric math. 7. **Score below 80**: fix the named failures and redraft. Maximum 2 redrafts, then output the best attempt with its score. 8. **Output** the final draft plus this verdict block:

   --- BEN VOICE ENGINE VERDICT ---
   score: NN/100 (directness N/20, register N/20, opinions N/20, specificity N/15, structure N/15, length N/10)
   lint: PASS|FAIL (N hard, N soft: rule names)
   attempts: N

Reference map

| Type | Read | |---|---| | circle-reply | `references/voice-circle.md` + `references/gold-circle.md` + `references/values.md` | | linkedin-post | `references/voice-linkedin.md` + `references/values.md` | | newsletter | `references/voice-newsletter.md` + `references/values.md` | | slack | `references/voice-slack.md` + `references/values.md` | | dm, email | `references/voice-dm.md` + `references/values.md` | | youtube-script | `references/voice-youtube.md` + `references/values.md` | | generic | closest match above + `references/values.md` |

Gold examples live inside each voice file (LinkedIn §10, newsletter §11, Slack gold section) and in `gold-circle.md` for Circle. Match against them before shipping: if a draft would look out of place next to them, it fails.

The rubric (Layer 2)

| Dimension | Weight | What earns full marks | |---|---|---| | Directness | 20 | Cold open, zero throat-clearing. The answer/claim/hook is sentence one. Newsletter and YouTube never greet; Circle greets per the measured distribution. No preamble, no summary wrap-up. Answers the LAST message in a thread, not the OP. | | Register | 20 | Warm-plain practitioner talk. His tics present where natural ("I think", "actually", "def", "honestly" before pushback, "of course" mid-clause, "far" never "way"). Dutch quirks kept ("softwares", "inside of", "me and my team", "book in a call"). Imperfection preserved: run-ons and comma splices are him; do not sand into corporate smoothness, never inject typos deliberately. | | Opinion alignment | 20 | Matches `references/values.md`. Contradicting a core thesis (e.g. recommending an elaborate 30-file second brain, hyping a tool without cost accounting, teaching theory he doesn't run) is an automatic 0 here and caps total at 59. | | Specificity & honesty | 15 | Real tools, honest numbers (~ tildes, X-Y ranges), effort-based proof ("I tested 100+", "helped dozens"), never revenue bragging. Deflation over hype: "all X really is is just...". Business experience is "we"/"me and my team". Caveats and trade-offs named voluntarily. | | Structure & routing | 15 | The per-type anatomy followed: LinkedIn 6-beat (hook → reframe → insight → ↳ list → stakes → contents-first link CTA), newsletter skeleton (cold open → one idea → "Click here" → "Keep going, / Ben" → optional PS), Circle advice spine and routing conventions (book in with @Milan, #1:1 Live Tech Calls, Q&A invite framing), Slack burst style. | | Length calibration | 10 | Per-type medians from the reference files. Circle 67w median, Slack 5w median, teaching newsletter 245-352w, LinkedIn ~290w. The posted version is almost always shorter than the instinct draft. |

Non-negotiables (memorize before drafting)

  • NEVER an em dash. Use commas, periods, colons, or a spaced " - ". (Zero across all six corpora.)
  • NEVER open a Circle comment with "Hey" (0/88). Default is "Hi [Name]," with a comma, or no greeting. In DMs "Hey [Name]," is fine - keep the channels distinct.
  • NEVER "awesome", "super", "insane" (0 occurrences everywhere). His praise ladder: nice < great < really good < Perfect / Love it < Amazing. His intensifier is "far", never "way".
  • NEVER address YouTube viewers as "guys" (0 in 47.7K words). "Guys" is Slack-only, where it's his default channel address.
  • NEVER sign off anywhere except the newsletter, which ALWAYS closes "Keep going," + "Ben". No "Best,", no "Cheers", no "- Ben".
  • NEVER greet in a newsletter body. Cold open on the hook.
  • NEVER hashtags, @-tags, "link in comments", bio-footer blocks, or engagement bait on LinkedIn. The link goes in the body, last line, selling the video's CONTENTS.
  • NEVER "please"
Read more
Ships withbenai-skills

Expert automation skills for Claude Code, organized by department.

Get the whole plugin

Other skills on benai-skills.