cutts-plain-english
Plain English drafting and rewriting per Martin Cutts, Oxford Guide to Plain English, 5th edn (2020) — short sentences (15-20 word average, nothing over 35 without reason), active voice, vigorous verbs, few negatives, no noun strings, no legal flavouring. Use when asked to make legal or commercial writing plainer, simpler, more readable, less legalese, or to reduce sentence length, passive voice, nominalizations, or jargon. Pairs with bieber-scale (informational register scoring) but never mixes: plain English is a readability target, Biber is a register target.
Source: .opencode/skills/cutts-plain-english/SKILL.md — site rebuilt 2026-09-05.
cutts-plain-english — plain English drafting (Cutts 2020)¶
The book, fully indexed¶
The whole book (5th edn, 2020) is paragraph-indexed at
references/paragraph_index.csv — 3584 stable paragraphs, each with a
pb_id (PB<chapter>-<seq>, e.g. PB3-014), chapter, printed page and
PDF page (printed = PDF − 39). Rebuild it with
tools/build_paragraph_index.py (reads the PDF's text layer block-by-block;
the flat fallback references/text/cutts.txt is used only if the PDF is
missing). Every claim below must carry a pb_id + printed page resolved from
the index — never invent a pinpoint.
The 51 verified before/after pairs in references/cutts_matched_pairs.jsonl
are all anchored to the index via their pb_id (added by
tools/annotate_pairs.py; pb_status records where the stored page was
corrected to the paragraph-start page).
The five targets (quoted from the book via the references)¶
| # | Target | Chapter | Tool metric |
|---|---|---|---|
| 1 | Average sentence length 15-20 words; split and disconnect | 3 | avg_sentence_len |
| 2 | No sentence over 35 words without a reason | 3 | sentences_over_35 |
| 3 | Active voice: put the doer in front of the verb | 6 | passive_pct (100 × passives / sentences) |
| 4 | Vigorous verbs: free smothered verbs (nominalizations like sight, effect, introduction) | 7 | smothered_verbs |
| 5 | Convert negatives to positives where possible (not more than → only) | 9 | negative_words |
| 6 | Undo noun strings of 3+ | 15 | noun_strings_3plus |
| 7 | Strip legal flavouring (hereby, aforesaid, in the event of, shall) | 28 | legal_flavouring, shall |
Scorecard¶
C:\Users\antho\AppData\Local\Temp\opencode\bieber_venv\Scripts\python.exe ^
.opencode/skills/cutts-plain-english/tools/plain_score.py --file <text> [--json]
It is a metrics pass only — it never rewrites. The word/pattern lists are curated heuristics derived from the book's examples, not the book itself: for every hit the agent must check the paragraph index (or the book text if available) before reporting it as a defect. Do not report a hit you cannot anchor to a pb_id.
Retrieval¶
- Find the paragraph for any rule/example: grep
paragraph_index.csvbypb_id, chapter, orfirst_160/text. To quote an example verbatim, read the PDF pagepdf_pagefromreferences/books/…2020.pdf(page = pb row'spdf_page). - Resolve a citation:
PB28-068= printed p 260, pdf p 299 — quote(Cutts, Oxford Guide to Plain English, 5th edn, 2020, p 260).
Workflow (rewrite task)¶
Phase 0 — structure audit (ALWAYS first; the book's own order is ch 1 plan, ch 2 organise, then ch 3+ prose). Settle the skeleton before touching a sentence: purpose and audience/reading level (ch 19); grouping and ordering of material (ch 2); cross-reference reduction (ch 16 — moving or merging clauses breaks cross-refs, so decide here); layout/list decisions (ch 8, 30). Lock the structure. Sentence-level metrics are meaningless on a moving target, and a rewrite of a paragraph that is later moved or merged is discarded work. Structure changes ARE meaning changes (order implies priority; moving a carve-out changes interpretation) — Phase 0 concentrates those decisions into one reviewed pass, not silent micro-decisions.
- Score the before: run
plain_score.pyon the source text (per locked structure). - Match the exemplars:
python .opencode/references/tools/book_lookup.py match "<sentence>"returns the closest verified before/after pairs by defect kind (the book's taxonomy, not vocabulary). Quote the pair's rule and copy the book's own rewrite as template.searchfinds where the book addresses any topic;resolve <pb_id>gives the verbatim paragraph + page. - Rewrite using the book's own techniques, per defect:
- Sentence length (ch 3): one main point per sentence; split and
disconnect with full stop + restart (But/However/So); say less;
turn enumerations into lists; cut verbiage first (
from the point of view of,in order to,at this point in time). - Passives (ch 6): put the doer in front of the verb; keep the passive only where the doer is unknown, irrelevant, or the law/court is the agent.
- Smothered verbs (ch 7): nominalization + weak verb → strong verb (carry out pruning → prune, had sight of → saw, effect improvements → improve); move the doer to the front; passives that hide the doer get the doer back (Notification has been received from the insurers → The insurers have notified us).
- Negatives (ch 9): convert to positive where possible; a negative opening that obscures a positive message gets the positive message first; watch double negatives and unless/unlikely gloom.
- Noun strings (ch 15): break with prepositions (service user suggestion scheme → suggestion scheme for our service users).
- Legal flavouring (ch 28): in the event of → if, pursuant to → under, prior to → before, the said → the, hereby/forthwith/ aforesaid → delete; shall → must or present tense; chop up snake sentences (80-word credit-clause examples in the JSONL).
- Plain-English register decay does not apply (this is not a Biber register lock), but keep each paragraph ≤ 500 words and one register per paragraph; if a passage must keep legal force, preserve obligations and carve-outs verbatim in meaning — plain English cuts words, never rights.
- Meaning check (Phase 2):
tools/meaning_check.py --before "<original>" --after "<rewrite>". It extracts the legal skeleton from both sides — obligation force markers (must/shall/may…), condition triggers, clause cross-references, figures/dates, defined terms, parties — applies the book's OWN sanctioned substitutions ("in the event of → if", "shall → must", "within fourteen days → 14 days") so those never flag, and verdicts: MEANING SKELETON PRESERVED or CHANGED — HUMAN DECISION REQUIRED with per-category diffs. A CHANGED verdict (added/dropped obligation, altered figure, retargeted cross-ref) stops the pass: the change is reported as a flagged residual for the fee-earner. It never edits and never decides. - Score the after: re-run
plain_score.pyand report the delta (before → after per metric). Claim no improvement you cannot show. - Keep un-verifiable bits flagged: if a legal term is load-bearing (defined term, statute name), keep it but plain the surrounding syntax. Never guess figures or dates during a rewrite.
The book itself flags meaning risk in its own rewrites (PB28-052: "lawyers will argue that only the collection would be at the owners' expense, not the repair") — an ambiguity the rewrite introduced. That is exactly what Phase 2 exists to catch.
Self-learning¶
Append one line per task to learnings.md in this skill folder: which
defect type, which reference pair anchored it, what the score delta was.
Flag any book pinpoint you could not verify in the JSONL — the reference
file is the only permitted source of page numbers.