{"slug": "ai-isn-t-slop-it-s-just-the-generic-average-and-not-you", "title": "AI isn't slop. It's just the generic average. And not you", "summary": "A developer known as the author of voiceprint, a Claude Code plugin now several dozen iterations old, reported that an AI agent's 99-word pull-request description contained 10 AI tells and scored 5 on the tool's style metric, while the author's own rewrite of the same PR contained 0 tells and scored 0. voiceprint builds a personal writing baseline from pre-AI text — 3,017 sent emails from 2006 onward after cutting quotes, signatures and auto-replies, plus 30 of 65 Google Docs from 2015 to 2022 — and checks every PR, commit and Slack message an agent sends against it, flagging AI-associated words at 1 point and em dashes or \"It's not just X\" constructions at 2. The author set a personal pass line of 2, noting that 99% of the 742 texts of 25+ words in the baseline score at or under it.", "body_md": "# AI isn't slop. It's just the generic average. And not you\n\nMy agent's PR description had 10 AI tells in 99 words. My version of the same PR had 0.\n\n## What's in it for you?\n\n**An agent that sounds like you. Not the generic average of everyone.**\n\nvoiceprint is my framework for that, a Claude Code plugin, a few dozen iterations in. It finds how you wrote before AI, and checks every PR, commit and Slack message the agent sends against it.\n\nIt can't do everything. What it will try to do is find your own voice. What makes you you. And make you sound a little better.\n\nI love Claude. I love AI and the power it brings to my hectic ADHD brain. The main problem I have is how other people understand what I wrote. My goal is always to make it sound human. Or more exactly, to sound like me.\n\nSometimes it feels impossible. You ask Claude to write a text a human will want to read, and it writes bullshit. Not slop. Just the generic average. And not you.\n\n## What the average sounds like\n\nThis is what the agent wanted to post, word for word:\n\n```\nThis PR fundamentally addresses a subtle but load-bearing gap in how the hook\nparses shell commands — specifically, how it handles comments. Previously, an\napostrophe inside a comment (e.g. \"# Don't push yet\") would quietly open a\nsingle quote that was never closed, which meant every subsequent command\nsubstitution was treated as plain text. As a result, the PR body was never\nactually scored. This change deliberately strips unquoted comments before\ntokenizing, ensuring that the guard remains robust against this common\npattern. It's not just a bug fix; it's a meaningful step toward a more\ncomprehensive and reliable guard.\n```\n\nNothing in it is wrong. It's just nobody. Same PR, the way I write it:\n\n```\nhook missed PR bodies when a comment came first\n\"# Don't push yet\" on the line before opened a single quote that never closed\nso the $(cat <<EOF) body after it was never read and never scored\nnow comments are dropped before parsing\n```\n\nSame facts. Zero AI tells. The agent's version had 10 in 99 words: fundamentally, load-bearing, quietly, deliberately, robust, comprehensive, an em dash, \"It's not just\", and 2 words from my own list (more on that below).\n\nvoiceprint turns that into a score. Every AI word is 1 point, an em dash or \"It's not just X\" is 2. Only the 3 worst count, per 100 words. The agent's draft scores 5. Mine scores 0. My own writing almost never passes 2, so 2 is my line.\n\n<sub>The line is personal. Mine is 2: 99% of the 742 texts of 25+ words in my baseline, mostly emails I wrote from 2006 to 2022, score at or under it.</sub>\n\n## The secret sauce? How I write without AI\n\nThe data is there. Every Google Doc, WhatsApp message, Slack thread and email. Every old publication and project. It's all there.\n\nRecent text is a trap though. In October the agent drafted a WhatsApp reply for me. Four paragraphs. My median WhatsApp message is 4 words. By 2026, 60 to 70% of my long Slack messages went through an LLM. Build a profile from that and the agent learns its own habits as mine.\n\nSo it had to go back. WhatsApp failed first. The desktop app won't load old history, it only lives on my Pixel. Now the skill tells you how to export it. Then I asked if it searched my Drive. It didn't. It found 65 docs and kept 30, 2015 to 2022. I pulled two that weren't mine: a goals doc someone shared with me and an onboarding plan my manager wrote. Then email. The first pass took 200. I asked for all of it. 4,450 sent emails back to 2006, 3,017 left after cutting quotes, signatures and auto-replies.\n\nIn a 2020 doc of mine I found this:\n\nלא מוותר- שיפור מתמיד\n\n(\"Not giving up- constant improvement\".) Totally me. Down to the hyphen stuck to the word. I never type em dashes. I do type that. So a hyphen pause passes, and an em dash gets flagged.\n\nChat, email and blog are different. Each one gets its own baseline. A one-line reply is never judged against an email, and a blog post is never judged against a chat.\n\n| Email baseline |  | \n|---|---|\n| Texts | 3,068 (3,017 emails, 30 docs, 20 PR descriptions, 1 blog post; the PRs are about 1% of the words) | \n| Words | 74,653 | \n| Median sentence | 5 words | \n| Starts lowercase | 43% | \n\n## What I have here? Weird words = bad score\n\nWe all know the classic AI tells. No human ever wrote spearheaded or load-bearing on their own. voiceprint ships a list: the 2023 ChatGPT words, and the newer ones from a study of 461,121 pull requests. It also learns my own drift, words that got 4x more common in my writing once AI showed up. Mine are passes, stays, step, inferred, plain. Normal English. A pile of them and the hook asks.\n\nThe formula is simple. Weird words, bad score. Only the 3 worst count, so a long post isn't punished for being long. And every word is measured against how often I used it before AI, so my own old habits don't count against me. No model call, so it's FAST and runs before every send.\n\nBlog posts get a second number: how many sentences run longer than mine do. My docs have a median of 7 words a sentence. A post with way more long ones than my docs ever had gets flagged.\n\nWhat a word list can't see, an optional Haiku hook can. It reads every `gh` and `git` command and every chat or mail send before it goes out. It blocks analogies, weird prose, spelling mistakes and the \"What do you think?\" closer. And it judges against a short summary of my voice: does this sound like me on a good day? Funny thing, my own Haiku hooks never checked for any of that. I found out writing this.\n\n## I don't take everything\n\nThe profile isn't a copy of me. My DMs have typos and one-word asks. Nobody needs that in a PR body. I want the AI to talk like I strive to. Clear, concise, excited. Polite but firm. Empathy is important to me. Claude is here to be who I am and who I strive to be. Fix my typos. Make it clearer. Just better, but definitely me.\n\n## Try it\n\nTo make it work you'll have to pour a LOT of personal data into it. That's on you. I'm not building the integrations for you, use your own MCPs. It asks before it reads each source. You decide how far the agent goes: which sources, how far back, and if Haiku checks every send. Everything stays in `~/.voiceprint` on your machine, though building the profile does pass samples through Claude. It's a writing check, not a security boundary. A body from a shell variable gets past it.\n\n```\nclaude plugin marketplace add NahumLitvin/voiceprint && claude plugin install voiceprint@voiceprint\n```\n\nIt needs Python 3.10+. Start a new session and run `/voiceprint:voice-init`. Until you do, the hook scores against general limits, not your voice.\n\nBefore it went public, Claude Opus and Codex reviewed it. Codex said hold, twice. Opus found the bug from the top of this post: an apostrophe in a shell comment hid every PR body after it from the hook. The description with 10 AI tells was the agent's write-up of that fix.\n\nSome bliss is expected.\n\nvoiceprint is open source: [https://github.com/NahumLitvin/voiceprint](https://github.com/NahumLitvin/voiceprint)\n\nNahum Litvin, Lead Platform Engineer.", "url": "https://wpnews.pro/news/ai-isn-t-slop-it-s-just-the-generic-average-and-not-you", "canonical_source": "https://www.catchkill9.dev/posts/voiceprint-open-source.html", "published_at": "2026-11-05 05:53:36+00:00", "updated_at": "2026-11-05 06:20:47.626999+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "generative-ai"], "entities": ["voiceprint", "Claude Code", "Claude", "Google Docs", "WhatsApp", "Slack"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ai-isn-t-slop-it-s-just-the-generic-average-and-not-you", "markdown": "https://wpnews.pro/news/ai-isn-t-slop-it-s-just-the-generic-average-and-not-you.md", "text": "https://wpnews.pro/news/ai-isn-t-slop-it-s-just-the-generic-average-and-not-you.txt", "jsonld": "https://wpnews.pro/news/ai-isn-t-slop-it-s-just-the-generic-average-and-not-you.jsonld"}}