X402 Git

humanizer

Paul Martin

Rewrites AI-sounding prose into plain English. One script, one skill file.

Top level of the repository
SizeFolderInside
524 Bdocs/1 asset
9.1 kBscripts/1 script
3.2 kBskills/1 skill
1.5 kBtests/1 test file
82.1 kB(root)2 docs · 1 asset
9 files · 96.5 kB · computed 2026-08-30
SizePath
30 B.gitignore
1.1 kBLICENSE
5.3 kBREADME.md
524 Bdocs/flags.svg
568 Bpackage.json
75.2 kBscreenshot.png · binary
9.1 kBscripts/humanize.mjs
3.2 kBskills/humanizer.md
1.5 kBtests/humanize.test.mjs
computed 2026-08-30 10:00 UTC · analyzer 0.1.0

Already bought this?

View your purchases

README

humanizer

humanizer rewriting a draft: the lexicon swaps applied on the left, the clean text on the right, and the five flags it will not rewrite underneath

A script and a skill for taking the machine sound out of a draft.

5 flags reported, 0 dependencies

The script does the part that is mechanical: swapping utilize for use, deleting In today's fast-paced world,, dropping Additionally, from the head of a sentence. The skill does the part that needs a person: negative parallelism, em dash habits, sentences that end by restating themselves as significance.

Nothing here calls a model or the network. Every rule is a string rule you can read in scripts/humanize.mjs and delete if you disagree with it.

Install

No dependencies. Node 18 or newer.

git clone <this repo> && cd humanizer
node scripts/humanize.mjs --help

Or link the binary:

npm link
humanize draft.md

Usage

Report, without changing the file. The rewritten text goes to stdout; the findings go to stderr, so you can pipe one and read the other.

node scripts/humanize.mjs draft.md > clean.md

Rewrite in place.

node scripts/humanize.mjs draft.md --fix

From a pipe.

pbpaste | node scripts/humanize.mjs - | pbcopy

As a check in CI. --quiet suppresses the report and exits 1 if anything was found, so it fails a build on a generated-sounding README.

node scripts/humanize.mjs README.md --quiet || echo "README needs an edit"

Exit codes

CodeMeaning
0nothing rewritten, nothing flagged
1something was rewritten or flagged
2bad usage

What it rewrites

Applied automatically by --fix. These are substitutions that are almost always right.

CategoryExamples
Lexicondelve intolook at, leverageuse, utilizeuse, in order toto, a myriad ofmany, prior tobefore
OpenersAdditionally, Moreover, Furthermore, Notably, Ultimately, at the head of a sentence, deleted
BoilerplateIn today's fast-paced world,, In the ever-evolving landscape of X,, When it comes to
Promotional adjectivesseamless, robust, cutting-edge, game-changing, crucial, comprehensive, deleted before the noun
Hedged framingIt is important to note that, It should be noted that, deleted

Capitalisation follows what was replaced, and the pass tidies the double spaces and stranded punctuation its own deletions create. It is idempotent: running it twice changes nothing the second time, which is what makes it safe in a pre-commit hook.

Fenced code blocks, inline code spans and indented code are never touched. They are masked out before any rule runs and restored byte-for-byte afterwards, so `utilize()` survives a pass that rewrites the prose around it.

What it flags but will not rewrite

Reported with a line number. The fix depends on what you meant, so the script refuses to guess.

FlagExampleThe repair
negative-parallelismIt's not just a parser, it's a compiler.Delete the negative half. Assert the positive.
em-dashthe result — a fast one — shippedAsk whether a comma, a colon or a full stop does the work.
superficial-ing..., highlighting the importance of testing.Cut the clause; it restates the sentence as significance.
vague-attributionExperts say the approach is sound.Name the source or delete the claim.
rule-of-threefast, cheap, and reliableKeep the two that carry information.

skills/humanizer.md is the guidance for working through those, written to be dropped into an agent's skills directory.

Using it as a skill

Copy skills/humanizer.md into wherever your agent reads skills from. It tells the agent to run the script first, then work the flags by hand, and it carries the rules of thumb a regex cannot check: cut the summary paragraph, one claim per sentence, prefer the concrete number, keep the writer's jokes.

Roadmap

  • doneDeterministic rewrite pass, idempotent, code-safe
  • doneFive reported flags a regex should not decide
  • not doneA --diff mode that prints a unified diff instead of the file
  • not doneA dictionary file so a project can add its own swaps
  • not doneA pre-commit hook example, since --quiet already exits non-zero

Details of each rule live in the skill.

Tests

npm test

Three tests, using the Node test runner, no dependencies: that the rewrite pass fires and leaves code spans alone, that the flags catch what they claim to, and that a second pass is a no-op.

Limitations, honestly

  • English only, and tuned for technical prose. It will mangle poetry.
  • It works on the string, not the syntax. We leverage the leverage of the lever becomes We use the use of the lever; there is no parser deciding which leverage is a noun.
  • Deleting a promotional adjective sometimes leaves a sentence that is grammatical but odd. Read the diff.
  • The rule-of-three flag has false positives on genuine three-item lists. It is a flag, not an error.

Licence

MIT. See LICENSE.

Security scan report

Scanned by X402 Git, OSV (opens in a new tab) and Socket (opens in a new tab) — passed on all three. Findings from X402 Git and Socket are listed below.

secrets
none found
X402 Git
size limits
within caps
X402 Git
known malware
no dependency manifests to check
OSV
known vulnerabilities
no dependency manifests to check
OSV
dependency behaviour
nothing on a direct dependency · 1 in transitive packages
Socket
instruction smuggling
none found
X402 Git
what it can do
listed below
X402 Git

What this can do

Tools
none
Runs
scripts/humanize.mjs
Talks to
nothing
Reads
  • HOLE
  • RECAP
At install
nothing runs
Findings (4)
  • LOWscripts/humanize.mjs — Reads the environment variable HOLE
  • LOWscripts/humanize.mjs — Reads the environment variable RECAP
  • LOWSocket SBOM Resolver — Socket SBOM Resolver (transitive) — no lockfile, so installs are not reproducible
  • LOWscripts/humanize.mjs — Ships the script scripts/humanize.mjs

Releases 3

  1. v1.0.22026-08-30

    docs: one more roadmap item

  2. v1.0.12026-08-30

    docs: add a screenshot, a flags badge and a roadmap to the README

    The product page renders README images and task lists as of today, so the README gets the two things it could not carry before: the before/after screenshot the tool is actually about, and the roadmap as a task list.

  3. v1.0.02026-08-30

    feat: initial release

    A script and a skill for taking the machine sound out of a draft.

$9free updates

Buy — go to the order block