{
  "markdown": "# being-human\n\n**Your assistant writes like a press release because it doesn't know who you\nare. This tells it.**\n\nbeing-human reads the prompts you've already typed, measures how you actually\nwrite, and hands the model a description of your voice specific enough to\nfollow. It also builds a list of words to avoid, computed by contrast against\nthe model's own output, so it's personal to you rather than borrowed from a blog\npost about ChatGPT tells.\n\nLocal, stdlib Python 3, no dependencies, no network calls.\n\n<p align=\"center\">\n  <a href=\"demo/being-human-demo.mp4\">\n    <img src=\"demo/being-human-demo.gif\" alt=\"being-human demo\" width=\"480\" height=\"480\">\n  </a>\n</p>\n\n<div align=\"center\">\n  <img src=\"assets/voiceprint.svg\" alt=\"my voiceprint, measured by being-human\" width=\"840\">\n</div>\n\n<p align=\"center\"><em>my own writing, measured by this tool. every bar is one real\nsentence. make your own with <code>being-human card</code>.</em></p>\n\n---\n\n## quickstart\n\n```bash\npip install being-human\n\nbeing-human learn --name \"Your Name\"     # harvest your writing, measure it\nbeing-human check draft.md               # AI tells\nbeing-human verify draft.md              # is it statistically you?\nbeing-human export --target chatgpt      # or agents, cursor, system, json\nbeing-human card                         # draw your voiceprint as a shareable svg\n```\n\nNo Claude Code history? Point it at a ChatGPT export or your own files:\n\n```bash\nbeing-human harvest --source chatgpt --path conversations.json --out .being-human/ --contrast\nbeing-human harvest --source files --path ~/Documents/writing --out .being-human/\n```\n\n## what comes out\n\nInstructions with numbers attached, because \"be concise\" is not actionable and\n\"your median message is 12 words\" is:\n\n```\n- Write \"i\" lowercase. They do, 83% of the time.\n- Vary sentence length hard. Theirs average 9 words but deviate 8, up to 81.\n- No exclamation marks. Rate is 0.28 per 1k.\n- Don't hedge. Hedge rate is 1.1 per 1k -- they assert.\n```\n\n## the contrast trick\n\nYour transcripts contain both sides of every conversation. So every word can be\nscored by log-odds: how much more likely you are to use it than the model is, on\nthe same topics, in the same threads. The top of that list is your voice. The\nbottom is the model's.\n\nMine came back `actually, clean, rather, genuinely, exactly, roughly`. None of\nthose appear on any published list of AI words. They're the specific tics this\nmodel has when talking to me. Yours will differ, because the contrast is against\nyour writing.\n\n## two checks, not one\n\nThey catch different failures, and passing one says nothing about the other:\n\n| | |\n| --- | --- |\n| `check` | is this generic AI writing? tells, rhythm, structure |\n| `verify` | is this *you*? authorship distance, Burrows's Delta against a length-matched null resampled from your own corpus |\n\nMeasured on my own corpus:\n\n| | authorship | slop |\n| --- | --- | --- |\n| my own writing | 6th pct, me | 99/100 |\n| generic LinkedIn slop | 19th pct, *me?* | 0/100 |\n| a README by someone else | 94th pct, not me | 97/100 |\n\nRow two is the catch: slop has unremarkable grammar, so authorship distance\npasses it. Row three is clean prose with no tells that is plainly a different\nhand. The second case is the one nobody else tests for, and it's the one that\nbites.\n\nHeld-out chunks of real writing sit at the 49th to 60th percentile, with a 1-6%\nfalse-positive rate above p97. Thresholds are personal. Em dashes get flagged\nagainst *your* measured rate rather than a universal rule, which is why this\ndoesn't punish people who genuinely use them.\n\n## mcp server\n\n```bash\nclaude mcp add being-human -- being-human-mcp\n```\n\nSeven tools, two resources, two prompts. Configs for Claude Desktop, Cursor,\nCodex and Zed are in [mcp/README.md](mcp/README.md).\n\nMCP tools are model-invoked and nothing forces a model to call one, which is\nawkward when the payload is instructional. So every tool returns the voice rules\nalongside its own result. There's no path through the server that hands back a\nscore without the target attached.\n\nThere's a Claude Code plugin too, via\n`/plugin marketplace add Syedomershah99/being-human`. It adds\n`/being-human:learn`, `:check`, `:write`, `:verify`, `:export`, and a hook that\ngrows the corpus as you type.\n\n## privacy\n\nEverything is local. Grep for `urllib`, `requests` or `socket` and you'll find\nnothing. Secrets are redacted at harvest time before anything touches disk, and\n`.being-human/` is gitignored. The voiceprint is safe to share. The corpus it was\nbuilt from is not.\n\n## prior art\n\nThis space got crowded in 2026.\n[inside-lago](https://github.com/getlago/inside-lago-voice-skill) framed the\nthesis, [slop-guard](https://github.com/eric-tramel/slop-guard) is a mature slop\nlinter, [idiolect](https://github.com/nagisanzenin/idiolect) is architecturally\nclosest, and [writer-persona](https://github.com/cosmos-makers/writer-persona)\nhad the best idea of the lot: validate the profile with a backtest instead of\ntrusting it.\n\nTwo things here I couldn't find elsewhere. The user-vs-model contrast, which\nderives the avoid-list from both sides of your own transcripts rather than from a\ncurated list. And a deterministic impostor test. writer-persona uses an LLM judge\nacross 8 axes; this is arithmetic, so it costs nothing and returns the same\nanswer every time.\n\nBurrows's Delta and log-odds with a Dirichlet prior are both established methods.\nThe claim is the application and the calibration, not the statistics.\n\n## license\n\nMIT. The tell list is [data/slop-lexicon.json](data/slop-lexicon.json). If you\nkeep seeing something that isn't in there, send a PR.\n\n<sub>mcp-name: io.github.Syedomershah99/being-human</sub>\n",
  "bytes": 5711,
  "sha": "bea0045d041d3f1b192d6fc1b4b467651adf92867aaa0a05cad4c9bb06ec8716",
  "repo_slug": "syedomershah99/being-human",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_syedomershah99_being_human_ac299884/readme"
}