Skip to content

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.csv3584 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 thanonly) 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.csv by pb_id, chapter, or first_160/text. To quote an example verbatim, read the PDF page pdf_page from references/books/…2020.pdf (page = pb row's pdf_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.

  1. Score the before: run plain_score.py on the source text (per locked structure).
  2. 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. search finds where the book addresses any topic; resolve <pb_id> gives the verbatim paragraph + page.
  3. Rewrite using the book's own techniques, per defect:
  4. 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).
  5. 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.
  6. Smothered verbs (ch 7): nominalization + weak verb → strong verb (carry out pruningprune, had sight ofsaw, effect improvementsimprove); move the doer to the front; passives that hide the doer get the doer back (Notification has been received from the insurersThe insurers have notified us).
  7. 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.
  8. Noun strings (ch 15): break with prepositions (service user suggestion schemesuggestion scheme for our service users).
  9. Legal flavouring (ch 28): in the event ofif, pursuant tounder, prior tobefore, the saidthe, hereby/forthwith/ aforesaid → delete; shallmust or present tense; chop up snake sentences (80-word credit-clause examples in the JSONL).
  10. 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.
  11. 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.
  12. Score the after: re-run plain_score.py and report the delta (before → after per metric). Claim no improvement you cannot show.
  13. 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.