pilcrow.ink·v0.11·MIT

Pilcrow

Make your clanker your editor. Turn the LLM in your harness into the editor it should be. Mechanical checks. LLM-judged ones. Interpretive lenses anchored in tradition. The engine never edits your text.

Read straight through, or jump to the command you need. The spine on the left keeps your place.

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 lens proposals sound like the writer, and they shape a new piece end to end. Each writes to disk only after explicit confirmation.

teach

Multi-round interview to capture voice. Asks for genre, audience, stance, drafting method, signatures, taboos, and exceptions. Writes VOICE.md.

/pilcrow teach

document

Infer voice from existing prose in the repo. Reads a corpus, computes stylometric features it can measure mechanically, and writes a draft VOICE.md with citations and an explicit Open questions section for fields the stats can’t answer.

/pilcrow document

extract

Mine the corpus for recurring AI tells and personal tics. Writes PILCROW.md as a descriptive map (repeat phrases, repeat constructions, high-frequency uncertain patterns, once-per-piece tells). Descriptive, not prescriptive; commit the patterns to voice rules via teach.

/pilcrow extract

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.

Colophon

About the book

Set in ET Book, Edward Tufte’s revival of Bembo. Cream paper, ink text, a single sage band at the colophon, gilt for focus. The layout borrows the sticky margin from Tufte CSS and turns it into a vertical spine.

Inspired by impeccable.style by Paul Bakaus, the canonical design-language skill. The architecture (a skill, a CLI, a rule catalog, reference files per command) is borrowed directly. Same idea, applied to writing.

Source on GitHub. MIT license. Hosted at pilcrow.ink.