pilcrow.ink·v0.14·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.

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 instead of UI.

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.

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"

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>.

Or invoke /pilcrow bare and the skill triages for you: it finds the prose in scope, runs lint, identifies the genre, and proposes an ordered sequence of editor commands tuned to the piece.Genre defaults: essay → lead/argue/tighten/polish; postmortem → lead/verify/tighten/polish; marketing → humanize/lead/polish; explainer → clarify/tighten/polish; memo → lead/tighten/verify. The plan gates on writer confirmation; you can reorder, skip, or substitute.

Behind every editor command, three meta-disciplines apply by default: an editor-reflex catalog that rejects stock LLM rewrite cadences (here's the bottom line, the colon-summary, the imperative tricolon); a proposal ritual that forces three candidate rewrites past the reflex/genre/voice gates before any is shipped; and an editor slop test applied to the command's own output — if a reader would believe an LLM wrote the critique, the critique is the problem.

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 command 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

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.--ignore-quoted 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 version + content-hash status
pilcrow skills cleanup    # remove installs under deprecated names

install and update use a content hash, not just the version string, so they detect a copy that’s already on the current version but was edited locally.Modified installs are skipped with a notice — pass --force to overwrite. The hash covers every file in the skill, not just SKILL.md, so an edit anywhere in reference/ trips it. cleanup removes orphan skill folders left behind when pilcrow renames or merges a sub-skill; it verifies each candidate is pilcrow-owned before deleting, so user-owned skills with a colliding name stay safe.