Skip to content
lawlint
Esc
navigateopen⌘Jpreview
On this page

Overview

lawlint flags the patterns that make legal and general prose sound machine-written, and suggests more human, direct alternatives.

lawlint reads a document and returns a focused list of things worth revising — the hedges that hedge nothing, the tricolons, the throat-clearing openers, the em dashes doing a comma’s job — plus a human-likeness score from 0 to 100.

It is a native binary. Linting needs no configuration, no network, and no account: the deterministic rules run entirely offline over text you already have on disk.

lawlint contract.docx

Start here

Nothing to install yet? The playground runs the same engine in the browser, compiled to WebAssembly — text typed there never leaves the page.

What it checks

Rules come in two kinds, and the distinction decides whether a check needs a model.

Hard rules are deterministic. Phrase, leading, density, and statistical checks over the text itself — no model, no network, no variance between runs. Every rule that ships enabled by default is a hard rule.

Soft rules are inferential: judgements a regular expression cannot make, evaluated by an optional AI judge from a written rubric. They run only when you ask for them with --judge.

See Hard and soft rules for how the two kinds map onto the engine’s static, statistical, and inferential tiers.

What the score means

The human-likeness score aggregates only detection-intent rules — the subset corpus-validated to distinguish AI-generated from authentic human legal prose. Style-intent rules (the Oxford comma, semicolons, sentence length, the Orwell rules) still report findings and still participate in --fix, but they never move the score.

Because the score is normalized per 1,000 words, it reflects issue density rather than document length. Scoring has the formula.

Beyond linting

Privacy

Linting is local and offline. Nothing is uploaded, and the installers do not phone home with your documents.

The optional AI features are the exception, and they are opt-in twice over: they do nothing until lawlint init configures a model, and — with a hosted provider — they send the text being judged to that provider. API keys live in a user-level credential file, never in your project.

Last updated on July 24, 2026