39-humanizer, for anyone under 40 who would rather not sound like a bot A Claude plugin called 39-humanizer rewrites or writes prose so it reads as though one person chose every word for one reader, while preserving every number, identifier, citation, caveat and claim strength exactly as given. The plugin's README, written with the skill loaded, states that it treats vagueness — rounding numbers, dropping caveats, swapping exact terms for friendlier ones — as a bug, and draws its essay voice from a close reading of Shashi Tharoor's essays. The README's examples show the plugin converting a boilerplate Indian Railways paragraph, a vague commit message and an abstract sentence into tighter prose that keeps figures such as 23 million daily passengers and 68,000 kilometres of track. Note Claude wrote this README with the 39-humanizer skill loaded, so the prose you are reading is itself a sample of the plugin's output. Present tense describes what the plugin does today, and future tense marks plans. 39-humanizer is a Claude plugin that rewrites or writes prose so it reads as though one person chose every word for one reader. The easiest way to make text sound human is to make it vague: round the number, drop the caveat, swap the exact term for a friendlier one. 39-humanizer treats that as a bug pattern 29 below . It keeps every number, identifier, citation, caveat, and claim strength exactly as given, so an engineer can hand it a design doc and a scientist an abstract and get back the same facts in better sentences. Everything else essays, posts, emails, speeches gets a voice of its own, drawn from a close reading of Shashi Tharoor's essays: plain by default, ornate only where a fact can bear the weight. Thirty-nine is the last birthday at which a profile can still call you young without anyone checking. You are too old for the thirty-under-thirty lists and still eligible for the forty-under-forty ones, which is the industry's way of saying it has not given up on you yet. The 39 in the name is that person, whatever the passport says: an engineer, scientist, or artist young enough to speak the next generation's language and not too proud to ask what its newest word means , old enough to have outlived a few hype cycles, and still grinding anyway, shipping the build and rewriting the grant long after the launch party has ended. People like that are making things that deserve to be heard. They cannot afford to sound like a chatbot, because nobody reads AI text anymore. They skim it, hunting for the one sentence a person wrote. If this README ever opens with "In today's fast-paced world", the plugin has turned forty. An essay paragraph: Indian Railways is not just a transportation network; it's the lifeline of the nation. Spanning over 68,000 kilometres of track and carrying more than 23 million passengers every day, it stands as a testament to India's enduring spirit of unity. From bustling metropolises to remote villages, it connects diverse communities, fosters economic growth, and showcases the rich tapestry of Indian culture. As India continues to modernize, the future of Indian Railways looks brighter than ever. becomes Every day, Indian Railways carries more than 23 million passengers over some 68,000 kilometres of track. Call it the nation's lifeline if you must, but the cliché undersells it: a lifeline carries one thing in one direction, and this network carries everyone, everywhere, and frequently all at once in the same compartment. It joins the metropolis to the village, and in doing so it does more for the economy, and for the idea of one country, than most of the speeches made about either. Whether modernisation will brighten its future is a question best put to a passenger on a platform at two in the morning, listening to the announcer explain, with exquisite courtesy, that the train is running late. A commit message, written from a diff that wraps s3.put object in three attempts with a random, growing delay and retries only on HTTP 503: This commit enhances the upload logic to improve robustness and ensure a seamless user experience. becomes Retry S3 uploads on 503 with jittered backoff Call put object up to three times when S3 returns 503, sleeping a random, growing delay between attempts, so one throttled request does not fail the upload. A sentence from an abstract: This study delves into the multifaceted role of gut microbiota in depression by comparing 16S rRNA profiles of 120 patients and 118 matched controls, shedding light on novel therapeutic avenues. becomes We compared 16S rRNA profiles from 120 patients with depression and 118 matched controls to see whether their gut microbiota differ, a question that bears on possible treatments. The 23 million passengers, the 503, the three attempts, and the 120 patients and 118 controls all survive. Only the packaging changes. 39-humanizer writes for human readers. It promises no verdict from any AI detector, and it never resorts to swapped characters, planted typos, or paraphrase churn, which damage the text and fool no careful reader. The repository is its own plugin marketplace, so there is nothing to register with first. In a Claude Code session: /plugin marketplace add OmShiv/39-humanizer /plugin install 39-humanizer@39-humanizer The first command clones this repository and reads its catalog, .claude-plugin/marketplace.json , and the second installs the plugin from it. From a shell, one command does both: claude plugin install 39-humanizer --marketplace OmShiv/39-humanizer Run /reload-plugins in any session that was already open. To update later, run claude plugin marketplace update 39-humanizer , then claude plugin update 39-humanizer@39-humanizer , and restart. Download 39-humanizer.zip from the latest release https://github.com/OmShiv/39-humanizer/releases/latest and upload it as a skill in Claude's settings. Anthropic's guide to skills https://support.claude.com/en/articles/12512180-using-skills-in-claude shows where. The checker runs there only when code execution is on, and the skill works without it. To build the ZIP yourself, run python3 scripts/build-zip.py , which writes dist/39-humanizer.zip . Codex reads the same marketplace: codex plugin marketplace add OmShiv/39-humanizer codex plugin add 39-humanizer@39-humanizer Then mention $39-humanizer in a prompt. This works with Codex CLI 0.163.0, checker included. To pick up a new release, refresh the marketplace with codex plugin marketplace upgrade 39-humanizer and run the add command again. The skill follows the open Agent Skills https://agentskills.io/specification format, which ChatGPT's skills also build on. It has not been tested in ChatGPT yet, and a report either way is welcome. /39-humanizer:39-humanizer paste text Or ask in plain words: Humanize this abstract: text Rewrite the prose in docs/design.md so it reads less like AI. Write a 600-word op-ed on why cities should fund libraries. Review this PR description for AI tells, but don't rewrite it. You get the final text first, then a note of at most five lines with only what you need to act on: a figure to confirm, a claim it changed and why, or a detail the text did not have. Ask it to "show the work" to see the draft and the remaining tells as well. To keep your own voice, include two or three paragraphs of your writing. The sample overrides the default voice, dashes included. 39-humanizer builds on Humanizer https://github.com/blader/humanizer by blader and on Wikipedia's Signs of AI writing https://en.wikipedia.org/wiki/Wikipedia:Signs of AI writing . On top of their catalog of tells, it: - detects the register general, technical, scientific, or mixed and loads the rules for it, so you never pick a mode. - lists every number, unit, identifier, code span, equation, citation, statistical result, caveat, and hedge before editing, then checks that each one survived. - treats simplifying by deletion as a pattern to fix, because readability should come from structure, not from losing a caveat. - reads the diff when it writes a commit message or PR description, and states the real mechanism instead of "improves robustness". - applies five scientific patterns drawn from studies of LLM vocabulary in PubMed and arXiv abstracts and in peer reviews. - writes general prose in a voice built from the 49 essays judged human out of 59 read, with measured sentence rhythm and punctuation, and rules that keep ornament honest. - ships a checker that reports tells with line numbers and measures sentence-length variation, punctuation, and stock-word rates, using only the Python standard library. - writes from scratch as well as rewriting, and marks any fact it could not verify as check: ... instead of guessing. A language model writes the most probable continuation for the widest range of readers, so it reaches for the safe word, the familiar shape, and an emphasis that would fit any subject. The evidence agrees that detectors respond to predictable wording, not to the subject. In a 2023 study, richer word choice cut false AI flags on non-native writers' essays from 61% to 12%. The LLM-era shift in biomedical abstracts is in style words, mostly verbs and adjectives. And once delve became a known tell, its use fell while other model-favored words kept rising, so structure matters more than any word list. The skill works in five steps: read the situation task, register, voice source, and the list of facts that must survive , mark the tells, draft, audit the draft against the original, and return. The evidence, with sources, is in references/detectors.md https://github.com/OmShiv/39-humanizer/blob/main/skills/39-humanizer/references/detectors.md and references/scientific.md https://github.com/OmShiv/39-humanizer/blob/main/skills/39-humanizer/references/scientific.md . | Register | Typical text | Voice | |---|---|---| | General | Essays, op-eds, posts, speeches, letters, emails, bios | The 39 voice, at full strength scaled to the genre | | Technical | Docs, READMEs, design docs, PRs, commits, comments, runbooks, postmortems | Plain and exact | | Scientific | Papers, abstracts, theses, grants, peer reviews | Claim first, hedged to the evidence | | Mixed | Popular science, engineering blogs, talks | The voice for the story, the register's rules for every technical sentence | Patterns 1 to 5 justify an edit on one sighting. Patterns marked weak alone in the skill count only when other tells share the passage. | | Pattern | Example | Fix | |---|---|---|---| | 1 | Not X but Y | "It's not a tooling problem. It's a culture problem." | State the point. Keep a contrast only against a real belief | | 2 | One-line closers and dramatic fragments | "No more waiting. No more guessing. Just shipping." | Cut it, or merge into one specific claim | | 3 | Sayings that sound deep | "Trust is the currency of every team." | Replace with the specific claim | | 4 | Staged run-ups | "Here's the thing:" | Cut the run-up | | 5 | Answering an objection nobody raised | "To be clear, I'm not saying..." | Cut the defense | | | Pattern | Example | Fix | |---|---|---|---| | 6 | Forced triads | "empowers developers, accelerates delivery, and drives innovation" | Use the number of items the meaning has | | 7 | Uniform rhythm | Four sentences of fifteen words each | Let meaning set the length | | 8 | Repeated sentence openings | "She reviewed... She found... She restarted..." | Merge or change the subject | | 9 | Dashes and semicolons as all-purpose connectors | A dash or a semicolon between every pair of clauses | A period, a comma with and or but, or a colon | | 10 | Signposting and stacked transitions | "Additionally... Furthermore... It is important to note..." | Let the logic connect, with but, so, or because | | 11 | Stacked qualifiers | "could potentially possibly" | One hedge, where the evidence needs it | | | Pattern | Example | Fix | |---|---|---|---| | 12 | Stock AI vocabulary | "delves into the intricate interplay" | The plain or the specific word | | 13 | Generic wording where a specific word exists | "Various factors played a significant role" | Name the factors | | 14 | Inflated significance | "marking a pivotal moment" | Keep the fact, drop the significance | | 15 | Sales language | "nestled in the heart of" | Say what the thing is | | 16 | Borrowed authority and vague association | "Studies show..." | Name the source and what it found | | 17 | Avoiding is, are, and has | "serves as... boasts..." | "is... has" | | | Pattern | Example | Fix | |---|---|---|---| | 18 | Bold labels and decorative bold | " Performance: Performance improved" | Remove the bold and write prose | | 19 | Decorative headings and structure for its own sake | " 🚀 Getting Started With The API" | Sentence case, no emoji, paragraphs for reasoning | | 20 | Curly quotation marks | Curly quotes in Markdown | Match the target format | | | Pattern | Example | Fix | |---|---|---|---| | 21 | Chatbot residue | "Great question ... I hope this helps " | Remove the wrapper | | 22 | Knowledge-limit disclaimers and guesses | "While specific details are limited..." | State what the source shows | | 23 | Writing about the document instead of its subject | "The table below shows..." | Describe the subject | | | Pattern | Example | Fix | |---|---|---|---| | 24 | Re-explaining what the reader knows | A reply that rebuilds the diagnosis before the decision | Lead with the decision | | | Pattern | Example | Fix | |---|---|---|---| | 25 | Marketing voice in engineering text | "seamlessly integrates, blazing fast" | Keep the measurable fact | | 26 | Claims with no measurement | "significantly improves performance" | Give the number, or ask for it | | 27 | Narrating code and changes | "This PR introduces..." | State the mechanism from the diff | | 28 | Changing the term for one concept | worker, node, executor for one thing | One term, repeated | | 29 | Flattened complexity | Dropping a caveat to sound simpler | Keep the hard part and add a gloss | | 30 | Template sections with nothing in them | " Key Takeaways" | Cut it, or fill it with real content | | | Pattern | Example | Fix | |---|---|---|---| | 31 | Stock research phrasing | "sheds light on, paves the way" | Say what was done or found | | 32 | Grand openings | "In recent years, X has garnered significant attention" | Start from the problem | | 33 | "Significant" without a test | "a significant improvement 61 to 68 " | Use it only with the test, otherwise the number | | 34 | Miscalibrated hedging | "clearly demonstrates" from a survey | Match the claim to the design, and say so | | 35 | Generic limitations and future work | "Further studies are needed" | Name the limitation from the design | python3 skills/39-humanizer/scripts/check.py draft.md python3 skills/39-humanizer/scripts/check.py - < draft.txt python3 skills/39-humanizer/scripts/check.py draft.md --json It skips front matter, fenced code, inline code, URLs, and link targets, and each hit names a pattern id from the skill. On a sample of Shashi Tharoor's essays, the ones judged human had a median sentence-length variation of 0.54 and 0.3 stock words per 1,000. The four judged AI-assisted had 0.41 and 5.3. A hit is a prompt to look, not a verdict. The evals/ directory holds five cases: an essay paragraph, a commit message from a diff, a journal abstract, a design-doc paragraph that must keep its caveats, and a causal claim on cross-sectional data. claude plugin eval runs each case twice with the plugin and twice without, and graders score both. In the latest run October 2026, Claude Opus 5.5 : | Case | With the plugin | Without | |---|---|---| | Journal abstract | 1.0 | 0.75 | | Commit message from a diff | 1.0 | 1.0 | | Design doc that must keep its caveats | 1.0 | 1.0 | | Causal claim on survey data | 1.0 | 1.0 | | Essay paragraph | 0.5 | 0.5 | Plain Claude is already careful with facts, so the gain is modest and shows mostly on the abstract. Neither arm passes the essay case: the judge counts implied facts against a witty rewrite, and once the filler is gone there is little left to be witty about. Five cases are a smoke test, not a benchmark. python3 scripts/validate.py package, numbering, word budgets, no dashes in prose claude plugin validate . claude plugin eval . --no-publish --allow-tools Skill Read 'Bash python3: ' python3 scripts/build-zip.py Keep the --allow-tools grant: without it, the eval sandbox denies the Skill tool, the runs that should use the plugin rewrite by hand instead, and the comparison measures plain Claude against itself. AGENTS.md https://github.com/OmShiv/39-humanizer/blob/main/AGENTS.md has the rules for changing the skill. Issues and pull requests are welcome. - Humanizer https://github.com/blader/humanizer by blader MIT and Wikipedia's Signs of AI writing https://en.wikipedia.org/wiki/Wikipedia:Signs of AI writing WikiProject AI Cleanup are the base for the general patterns. - Kobak et al. Science Advances, 2025 , Liang et al. 2024, two studies , Juzek and Ward COLING 2025 , and Geng and Trotta Findings of ACL 2025 supply the scientific vocabulary evidence. - DetectGPT, Fast-DetectGPT, Binoculars, the Pangram report, Kirchenbauer et al., Weber-Wulff et al., Krishna et al., Sadasivan et al., and Liang et al. Patterns, 2023 supply the detector evidence. Full citations are in references/detectors.md . - The 39 voice draws on Shashi Tharoor's essays at shashitharoor.in https://shashitharoor.in/writings my essays . It is a style in their spirit, not an imitation, and nothing it writes is presented as his. This project is not affiliated with or endorsed by Dr. Tharoor. The research/ folder holds the reports behind the rules: the verified detector findings, the checks of the vocabulary studies and of detector internals, and the full analysis of 59 Tharoor essays. The skill does not load them. MIT. See LICENSE https://github.com/OmShiv/39-humanizer/blob/main/LICENSE .