Start
Every harness ships with an LLM that could be the editor sitting next to you when you write. Mostly it isn’t. It cheerleads instead of cutting, paraphrases instead of pruning, and quietly produces prose that all sounds the same.
Pilcrow turns it into the editor. Mechanical checks for the patterns regex can pin down. LLM-judged ones for what regex can’t. Interpretive lenses anchored in the classical style guides: Strunk, Williams, Zinsser, Pinker, Orwell, King.
Works whether you wrote it, the model wrote it, or you co-wrote it. Detection-only. The engine never edits your text. Findings carry line, column, excerpt, and an optional suggestion; the LLM or you decide what to change.
Inspired by Paul Bakaus’s impeccable. Same idea, applied to writing.
Install
Global:
npm install -g pilcrow-ink
The package is pilcrow-ink; the binary is pilcrow. Or per-project without installing:
npx pilcrow-ink audit drafts/
Then drop the skill into your AI harness:
cd your-project
pilcrow skills install
Auto-detects .claude, .cursor, .gemini, .agents, .opencode, .kiro, .pi, .qoder, .trae, .github. Pass --all for every supported provider, or --provider=.cursor for one specifically.
CLI
Five commands run directly against prose. Reads stdin if you don’t pass a path. Recurses directories, scanning .md, .mdx, .markdown, .txt, .html, .htm.
audit
Run the rule catalog. Human-readable findings with line, column, excerpt, and an optional rewrite hint.
pilcrow audit drafts/post.md
pilcrow audit drafts/ --ignore-quoted
echo "Let me delve into the rich tapestry…" | pilcrow audit
Exits non-zero when an error-severity finding fires. The --ignore-quoted flag skips phrases inside straight or curly double quotes, useful for prose that quotes AI tells without backticking them.
lint
Same scan as audit, JSON output for piping into another tool or back to a model.
pilcrow lint drafts/post.md | jq '.files[0].findings[] | select(.severity == "error")'
critique
Emit the LLM-critique prompt. Patterns regex can’t reliably catch (buried lede, mixed metaphor, missing stakes, unsupported claims) packaged as a single prompt the model evaluates. The model returns JSON findings in the same shape as lint.
pilcrow critique drafts/post.md | claude
pilcrow critique drafts/post.md --rules=buried-lede,unsupported-claim
rules
List every rule with id, severity, and one-line description.
pilcrow rules
pilcrow rules --json
Full catalog at the catalog page.
skills
Manage the pilcrow skill inside your AI harness.
pilcrow skills install # auto-detect and install
pilcrow skills update # re-sync after `npm update -g pilcrow-ink`
pilcrow skills check # show installed vs package version
Editor
Editor commands interpret findings through a tradition. Each loads its own playbook from skill/reference/<name>.md with methodology, output shape, and anti-patterns drawn from a named style guide. They’re not rule filters; each produces a different kind of report.
Invoke through the skill: /pilcrow <command> <path>.
polish
Final pre-ship lens (Strunk & White, Zinsser). Scores the piece on nine dimensions (one per lens, 0–4 each, 0–36 total) with a five-tier verdict from Excellent to Critical. Then triages findings into ship-blockers (P0), worth-fixing (P1–P2), and taste-calls (P3), and names the lowest-scoring dimensions so the writer knows which lens to run next.
/pilcrow polish drafts/post.md
humanize
Strip AI tells without sanding off voice (Wikipedia Signs of AI writing). Classifies findings by class (vocabulary, cadence, template, fossil) with class-specific rewrite shapes.
/pilcrow humanize drafts/post.md
tighten
Cut zombie nouns and weak verbs (Williams Style). The character/action principle: name the actor, surface the buried verb.
/pilcrow tighten drafts/post.md
clarify
Reduce the reader’s working-memory load (Pinker Sense of Style, Orwell). Per-passage rewrites with mental-model commentary: what the reader has to hold, what the payoff is.
/pilcrow clarify drafts/post.md
pace
Restore rhythm (King On Writing, Strunk). Sentence-length histogram, paragraph-weight chart, aural diagnostic (tongue-twisters, consonant clusters, unintentional rhyme), split/merge proposals.
/pilcrow pace drafts/post.md
lead
Sharpen the opening (Zinsser on leads). Finds the real lede in the first paragraphs and proposes three alternative first sentences: news lede, scene lede, stakes lede.
/pilcrow lead drafts/post.md
verify
Surface load-bearing claims (journalism fact-check tradition). Each numeric, dated, comparative, or attributed claim gets a three-question check (citation, specificity, plausibility) and a classification: unsupported, vague, hedged, unchecked.
/pilcrow verify drafts/post.md
aloud
Play the prose back via TTS in an interactive session. Four modes: walkthrough (paragraph by paragraph), full (end to end), targeted (only paragraphs pace flagged), compare (two passages back to back). Requires OPENAI_API_KEY and a system audio player.
/pilcrow aloud drafts/post.md
Audio is content-addressed and cached at /tmp/pilcrow/aloud/<sha256>.mp3. Replays across sessions are free. The lens detects an installed OpenAI speech skill in your harness or fetches a pinned snapshot.
argue
Map the argument (Toulmin, IBIS, Argdown). Confirms the thesis with a multi-choice gate, surfaces supports and load-bearing premises as an indented tree, generates the strongest counter (genre-aware), and checks coverage: engaged, dodged, or missing.
/pilcrow argue drafts/post.md
/pilcrow argue drafts/post.md --argdown # also emit a .argdown file
Project
Project commands act on the repo, not on a single passage. They capture the writer’s voice so editor proposals sound like the writer, and they shape a new piece end to end. Each writes to disk only after explicit confirmation. Single source of truth: VOICE.md.
document
Scan existing prose in the repo. Computes stylometric features (sentence rhythm, em-dash density, vocabulary profile) and surfaces recurring moves (phrases, cadences, structural habits, punctuation tics). Writes a draft VOICE.md with citations and explicit Open questions for fields the stats can’t answer (audience, stance, method).
/pilcrow document
teach
Interview the writer to refine an existing VOICE.md (answer the Open questions, confirm or correct inferred Signatures, edit Taboos) or create one from scratch if there’s no corpus to scan. Use after document for the typical flow, or standalone for new projects.
/pilcrow teach
craft
Method-aware end-to-end writing. Picks outliner, discovery, iterative, or model-drafter at start (or reads method: from VOICE.md). Four phases (shape, draft, critique, polish), each gated by writer confirmation.
/pilcrow craft "topic or assignment"
Catalog
The full rule catalog (deterministic and LLM-judged, with id, severity, and description for each) lives at The catalog. Auto-generated from source on every deploy.