Fast prose linter. Finds writing issues, lets you ignore what you don't care about.
$ proserunner document.mddocument.md
[1] 3:13 "quick as lightning" -> A tired phrase.
[2] 7:15 "software program" -> Pleonastic phrase.
[3] 11:49 "hopefully" -> Skunked term: consider rephrasing.
[4] 13:8 "Female booksalesman" -> Sexist or ridiculous term.
Fix what matters, ignore the rest by number:
$ proserunner document.md --ignore-issues 2,3document.md
[1] 3:13 "quick as lightning" -> A tired phrase.
[2] 13:8 "Female booksalesman" -> Sexist or ridiculous term.
Clone the repo, cd into it, then pick one:
# Option 1: native binary (needs Babashka, Clojure CLI, and GraalVM; fastest startup)
bb install # Installs to ~/.local/bin (open a new shell if it wasn't on your PATH)
proserunner document.md # Check a file, from anywhere
proserunner docs/ README.md # Check several paths
proserunner init # Set up project config
# Option 2: Babashka only (no build, no Java); run from the repo
bb lint /path/to/document.md # Same flags as proserunner
# Option 3: Clojure CLI (needs Java and Clojure CLI, slower startup); run from the repo
clojure -M:run /path/to/document.mdOptions 2 and 3 resolve relative paths from the repo directory, so pass an absolute path to your file.
See installation for details.
In CI, the exit status does the work: 0 means no issues, 1 means issues were found, 2 means something went wrong.
proserunner docs/ -o plain # Fails the build on issues; one issue per line in the log- Numbered issues - Ignore specific problems by number:
--ignore-issues 1,3,5. Numbers are for the current run. - Pipes -
proserunner -checks standard input, so it fits after pandoc or your clipboard. - Customizable - Add checks as EDN files. Toggle them on/off without touching code.
- Fast - Parallel processing, smart caching.
- Flexible - Output formats: grouped, plain (one issue per line), table, JSON, EDN, verbose.
- Smart ignores - Run it, fix what matters, ignore the rest by number. Ignores remember location.
- Project friendly - Commit ignore files and custom checks. Everyone sees the same issues.
Ships with 22 checks (run proserunner checks to see yours):
| Name | Kind | Explanation |
|---|---|---|
| Annotations | Case | Typical markers used to signal problem sites in the text. |
| Archaisms | Existence | Outmoded word or phrase. |
| Clichés | Existence | An overused phrase or opinion that betrays a lack of original thought. |
| Compression | Recommender | Compressing common phrases. From Style: Toward Clarity and Grace by Joseph M. Williams. |
| Corporate-speak | Existence | Words and phrases that make you sound like an automaton. |
| Hedging | Existence | Say, or say not. There is no hedging. |
| Jargon | Existence | Phrases infected with bureaucracy. |
| Meta-discourse | Existence | Self-referential phrases that add no value. |
| Needless-variant | Recommender | Prefer the more common term. |
| Nominalization | Recommender | Convert weak noun phrases back to strong verbs. |
| Non-words | Recommender | Identifies sequences of letters masquerading as words, and suggests an actual word. |
| Not the negative. | Recommender | Prefer the word to the negation of the word's opposite. |
| Overused-adverbs | Existence | Use of adverbs that are weak or redundant. Consider using a stronger verb instead. |
| Oxymorons | Existence | Avoid contradictory terms (that aren't funny). |
| Phrasal adjectives | Recommender | Hyphenate phrasal adjectives. |
| Pompous-diction | Recommender | Pompous diction: use simpler words. From Style: Toward Clarity and Grace by Joseph M. Williams. |
| Redundancies | Existence | Avoid phrases that say the same thing more than once. |
| Regex | Regex | Raw regular expressions. |
| Repetition | Repetition | Catches consecutive repetition of words, like the the. |
| Sexism | Existence | Sexist or ridiculous terms (like mail person instead of mail carrier). |
| Skunked-terms | Existence | Words with controversial correct usage that are best avoided. |
| Weasel-words | Existence | Vague phrases that avoid commitment and precision. |
Turn off checks - Edit ~/.config/proserunner/config.edn (or $XDG_CONFIG_HOME/proserunner/):
{:checks
[{:name "default"
:directory "default"
:files ["cliches"
;; "jargon" ; disabled
"corporate-speak"]}]}Add custom checks - Drop .edn files in:
- Global:
~/.config/proserunner/custom/ - Project:
.proserunner/checks/
Or use: proserunner checks add ~/my-checks
See Usage docs for check examples.
- Installation - Build and install
- Usage - Commands, checks, config, ignores
- Upgrading from 0.7 - Commands replaced the action flags, and config moved to
~/.config/proserunner - Architecture - How it works