Sign inSign up

ofthemachine/prose-lint

By ofthemachine

•Updated 19 days ago

Image
0

262

ofthemachine/prose-lint repository overview

⁠prose-lint — multi-engine prose & writing-quality linting

A bring-your-own-rules linting toolkit. The image carries four complementary engines; none of them ship opinions about your content — you supply the style rules and config at run time.

⁠Why this exists

Most writing-quality tooling is either a single engine or a hosted service. This container bundles the four open-source engines that, together, cover the distinct layers of prose quality, and keeps them offline and deterministic (no runtime model downloads, no network calls):

EngineLayerRules live…
Valeconfigurable style / usage / terminologyin your .vale.ini + StylesPath (mounted)
LanguageToolgrammar / spelling / punctuationbuilt into the engine (offline)
proselintopinionated prose style (clichés, hedging, redundancy)built into the engine
textstatreadability metrics (Flesch-Kincaid, Gunning fog, SMOG…)n/a (pure measurement)

The key design point for Vale: the image contains the engine only. Vale reads a user-supplied .vale.ini and a StylesPath directory of .yml rule files, mounted at run time (--config or VALE_CONFIG_PATH). So you can encode any house style — a documentation team's terminology, a publication's voice, a brand's banned-words list — entirely in files you control, and this image never needs to know what they are.

⁠Engines

  • Vale 3.x (Go binary) — vale --config /work/.vale.ini /work/draft.md, --output=JSON for machine consumption. No rules bundled.
  • LanguageTool 6.x (Java CLI + optional HTTP server) — grammar/spelling/ punctuation, fully offline. The large optional n-gram confusion-pair data set is not bundled (hundreds of MB); add it in a derived image if needed.
  • proselint (Python) — proselint --json /work/draft.md.
  • textstat (Python) — readability scores.

⁠Image size

~500 MB (the JRE + the LanguageTool distribution are the bulk; Vale is ~20 MB, the Python libs are small).

⁠Quick examples

make prose-lint
make prose-lint R=1     # build + run smoke tests
make prose-lint I=1     # interactive shell

Run Vale against your own mounted style. The linters are CLIs, so driving them is a shell + jq job (shell mode), not a Python one:

vale --output=JSON --config /work/.vale.ini /work/draft.md | jq .

A combined one-pass gate (the three CLI linters → one JSON verdict via jq) is shown in fraglet/shell-guide.md. Readability (textstat) is a Python library, so it lives in the default Python mode (fraglet/default-guide.md).

⁠Pairing with operon TOOLs

Register a flat-file tool that runs the CLI linters over a mounted draft + style — a shell-mode gate (vale/languagetool/proselint piped through jq):

operon run ofthemachine/prose-lint prose_gate.sh \
  --file draft=<md-ref>:/work/draft.md \
  --file vale_config=<ini-ref>:/work/.vale.ini \
  --record-ref tooling/prose/gate
operon tool register tools/prose/gate --from-code tooling/prose/gate
operon invoke tools/prose/gate --file draft=<md-ref>:/work/draft.md ...

Your style package (the .vale.ini + StylesPath/) is supplied as mounted FILE refs — it stays in your workspace, never in this image.

Tag summary

Content type

Image

Digest

sha256:d8fc348dd…

Size

414.9 MB

Last updated

19 days ago

docker pull ofthemachine/prose-lint