magus v0.4.3 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
13 min read

Proofread rules

What proofread checks in the text a person or an agent writes. Each rule has a default decision on each kind of text: a deny is refused by the caller, an advise is reported once and lets the text through, and an off rule, house style, reports nothing until a repository turns it on. A decisions table changes any of them.

A finding carries the rule's name and its PRF code, and links to the rule's page here. The first digit of a code is its family. proofread rules prints the same list as JSON.

Each rule also has a dimension, the cost its findings name to the reader:

  • evidence: a claim says more or less than what was shown
  • stance: the text reads as a verdict on a person, or as addressed to someone else
  • structure: the reader has to reconstruct the order or the purpose
  • economy: words that carry nothing
  • conventions: a house or genre convention is broken

Shape

Rule Code Dimension Default Catches
lead-context PRF1001 structure deny a change description whose first paragraph does not state the intent: what it set out to do and why
reply-voice PRF1002 structure advise text that answers a prompt the reader never saw: a reply opener, a bold-label item, a stock label
second-person PRF1003 conventions off we, us, our or ours in a guide, which speaks to the reader as you
step-verb PRF1004 structure deny a numbered step of a guide that does not open with its imperative verb
subject-mood PRF1010 conventions advise a commit subject opening in the past tense, the third person or a gerund ("added", "fixes", "making")
subject-length PRF1011 structure deny a commit subject over 100 bytes
subject-period PRF1012 conventions deny a commit subject ending in a period
body-separator PRF1013 structure deny a commit body that starts on the line after the subject
issue-repro PRF1020 evidence advise a bug report with neither what happened against what was expected, nor steps to reproduce it
changelog-heading PRF1030 conventions off a changelog version heading that is not "## [version] - date" or "## [Unreleased]"
changelog-group PRF1031 conventions advise a changelog heading that is not Added, Changed, Deprecated, Removed, Fixed or Security
changelog-entry PRF1032 stance advise a changelog entry that names a Go identifier and says little else
voice-drift PRF1040 stance advise a draft that reads further from its author's own texts of its kind than 95 percent of them do, or a commit subject longer than 95 percent of the author's
list-marks PRF1060 conventions off a list item whose initial capital or closing full stop differs from the list's other items
list-parallel PRF1061 structure off a list item that opens with a verb where the others open with a noun phrase, or in another tense
suppression-unused PRF1090 evidence deny a suppression comment that gives no reason or that matched no finding
grade PRF1100 structure deny a text whose grade, out of 100, is under the minimum its kind is held to

Tone

Rule Code Dimension Default Catches
blame PRF2001 stance advise a person or past work as the subject of a fault, and contempt for code or a decision
verdict PRF2002 stance advise a judgment word standing in for the behavior it judges ("was broken", "a mess")
absolute PRF2003 evidence advise never, nobody or nothing as a claim about the past ("has never fired", "nobody checked")
intent PRF2004 stance off a motive given to a tool or a person ("guessed", "pretends")
credit PRF2005 stance advise a change description that removes or replaces something and says nothing of what it was for
condescension PRF2006 stance off a word that tells the reader how hard a step should feel or what they should already know

Claims and hedges

Rule Code Dimension Default Catches
claim PRF3001 evidence advise a measurement, a comparison or a completion with no evidence in its sentence or bullet
hedge PRF3002 evidence advise a softener qualifying a claim ("might fix", "could potentially")

Generated-writing tells

Rule Code Dimension Default Catches
filler PRF4001 economy advise throat-clearing ("Note that") and filler adverbs ("simply", "basically")
wordy PRF4002 economy advise a phrase with a shorter equivalent ("in order to")
signpost PRF4003 structure advise an announcement standing where the point should be ("Here's the thing", "Let's dive in")
chatbot PRF4004 stance off text a chat assistant addressed to its user: an offer, flattery, a knowledge disclaimer
leak PRF4005 evidence advise residue of a tool or a template: a citation marker or an unfilled placeholder
buzzword PRF4006 economy deny a word chosen to sound significant rather than to say what is so ("delve", "tapestry")
buzzword-weak PRF4007 economy advise a buzzword that also has an ordinary sense ("crucial", "landscape")
vague PRF4008 evidence deny weight or consensus asserted with nothing named ("experts argue", "the stakes are high")
closer PRF4009 structure deny a sentence that opens by announcing it restates the text above ("In conclusion,")
contrast PRF4010 economy off a claim made by denying its opposite first ("not just X, it is Y")
ing-tail PRF4011 economy off a participle clause added to claim significance (", highlighting the importance of")
staccato PRF4012 structure off three or more consecutive sentences of six words or fewer in one paragraph
heading-case PRF4013 structure advise a heading whose every word after the first is capitalized
participles PRF4020 economy advise a text that hangs present participial clauses on its sentences at a generated-writing rate
nominalizations PRF4021 economy advise a text whose verbs are turned into nouns (validation, agreement, stability) at a generated-writing rate
triad PRF4030 economy off a series of exactly three ("X, Y, and Z", three parallel short sentences, three parallel bullets) twice in a text, or once in the lead's first sentence
stacked-colon PRF4031 economy off two or more clause-introducing colons in one paragraph
restates-diff PRF4032 evidence off a bullet or paragraph that is a verb and the things touched, with no reason: "Updates foo.go"

House style

Rule Code Dimension Default Catches
terms PRF5001 conventions off (house) a spelling the glossary replaces ("sub-agent")
dash PRF5002 conventions off (house) an em dash, an en dash or a spaced double hyphen in prose
ascii PRF5003 conventions off (house) a curly quote, an ellipsis character or an emoji in prose
tense PRF5004 conventions off (house) a claim in the future tense, or a first-person account of a change
attribution PRF5005 conventions off (house) credit to a tool or an agent, or an account of how the work was produced
banned-word PRF5006 conventions off (house) a word this repository bans, in a stylesheet comment
date-format PRF5007 conventions off dates in more than one style in one text: 2026-10-13, Oct 2026, October 2026, 10/13/2026, or Sep beside Sept

Doc comments

Rule Code Dimension Default Catches
comment-block PRF6001 economy off (house) a doc comment over 250 words
comment-sentence PRF6002 economy off (house) a doc comment sentence over 60 words
aside PRF6004 conventions off (house) a spaced hyphen spelling an em dash in a doc comment
history PRF6005 conventions off (house) a doc comment phrase narrating the change rather than the code ("used to")
docstub PRF6006 economy off (house) a one-line doc comment that only repeats the symbol's name
restates PRF6007 economy off (house) a one-line stylesheet comment that only names the rule or declaration it sits on
comment-budget PRF6008 economy off (house) a stylesheet comment over the lines its place earns
block-budget PRF6009 economy off (house) a rule block whose comments, summed, outrun its size

Agent instructions

Rule Code Dimension Default Catches
terse-sentence PRF7001 economy off (house) a sentence of agent instructions over 25 words
terse-paragraph PRF7002 economy off (house) a paragraph or list item of agent instructions over 60 words
bare-rule PRF7003 conventions off (house) "rule" in agent instructions with no mechanism named
template PRF7004 structure off (house) a skill template that does not render, so neither of its forms can be judged
compact-filler PRF7010 economy off articles, linking verbs, "you", "please", "note that" and "instead" outside code, counted with the tokens dropping them saves
compact-markup PRF7011 economy off a bold or italic marker, or a Markdown table, in compact agent text
compact-costly-abbrev PRF7012 economy off an abbreviation that costs more tokens than the word it replaces: k8s, w/, b/c, e.g., i.e., or dropped vowels
compact-symbol-negation PRF7013 evidence off "!" or a Unicode symbol standing in for "not" or a logic operator
compact-line PRF7014 structure off a compact line over 21 words that joins clauses with a semicolon or a comma and a conjunction
compact-duplicate PRF7015 economy off a compact line that restates an earlier one: half or more of its content words and every negation, condition, scope and order word the same
skill-description-budget PRF7020 economy off a skill description over 100 words, or a full form's description sharing 75% or more of its content words with the short form's
instruction-position PRF7021 structure off a full skill form of 1500 words or more whose first "must" or "never" sits past the middle of its body
skill-set-description-budget PRF7022 economy off an installed set of skills whose descriptions sum past 2100 words, each skill's short and full form counted

Review replies

Rule Code Dimension Default Catches
reply-opener PRF8001 stance advise a sentence of a review reply that opens by contradicting ("No,", "As I said")
judgment-as-fact PRF8002 stance advise a recommendation in a review reply stated as a fact, with no reason given
stacked-hedge PRF8003 stance advise two softeners in one sentence of a review reply, or an apology before its point
long-thread PRF8004 stance advise a review reply that is its author's fourth or later in a thread
nonspecific PRF8010 evidence advise a top-level review comment that judges or asks for a change and names no code, path, line, example or reason
why-opener PRF8011 stance advise a review reply sentence that opens "Why did you" or "Why would you"
bare-imperative PRF8012 stance advise a short command in a review reply that gives no reason anywhere ("Fix this.")
all-caps PRF8013 stance advise words in capitals for emphasis in a review reply ("DO NOT", "NEVER")
repeated-marks PRF8014 stance advise a run of question or exclamation marks in a review reply ("??", "!!", "?!")
bold-label PRF8020 structure advise list items or paragraphs of an agent reply that open with a bold label
closing-offer PRF8021 stance advise an agent reply whose last paragraph offers more work or asks leave to go on
request-recap PRF8022 economy advise an agent reply that opens by restating what the person asked
option-list PRF8023 structure off an agent reply that lays out labeled options or alternatives
unbacked-done PRF8024 evidence advise a claim of done, fixed, verified or passing with no command, output ref, file or link beside it
short-reply-heading PRF8025 structure advise a heading in an agent reply under 300 words
agreement-opener PRF8026 stance advise an agent reply that opens with praise or agreement ("Great question", "You're right")
no-reason PRF8030 evidence off an inline review comment that asks for a change and gives no reason
nit-label PRF8031 stance off an inline review comment labeled nit on a blocking demand, or blocking on an optional one
empty-request-changes PRF8032 evidence off a review requesting changes whose body names nothing blocking and points at no inline comment
approve-blocker PRF8033 stance off an approving review whose body names a blocker ("must fix", "blocking", "before merge")
bare-lgtm PRF8034 evidence off a review summary that only approves: "LGTM", "ship it", "looks good"
deferral-no-link PRF8035 evidence off a review reply deferring to later, a follow-up or a TODO, with no issue link or number
decline-no-reason PRF8036 stance off a short review reply declining the change ("won't fix", "No, ...") with no reason
impatience PRF8037 stance off a review reply that reads as impatient: "as I said", "for the last time", "obviously"
review-length PRF8038 economy off a review text over its word cap: an inline comment over 60 words, a summary over 100, a reply over 80

Messages a program prints

Rule Code Dimension Default Catches
message-length PRF9001 economy deny a message longer than its rune cap, 160 unless the caller names one
message-rationale PRF9002 structure deny a message that joins more than one reason (so, because, a semicolon, ", which")
message-commands PRF9003 structure deny a message naming more than one backticked command
message-tag PRF9004 conventions deny a message opening with a component tag ("server: ") or carrying a marker such as "[AGENT]"
help-sentence PRF9010 economy deny a sentence of help text over 40 words
help-length PRF9011 economy deny help text over 240 runes
tool-lead PRF9020 structure advise a description whose first sentence opens on the tool itself, holds under 4 words or runs past 40 words
tool-boundary PRF9021 evidence advise a description that names no case where the tool is the wrong choice and no tool to use instead
tool-length PRF9022 economy advise a tool or skill description over 1024 runes
tool-selling PRF9023 stance deny a word that sells the tool (powerful, seamless, effortless, state-of-the-art) or a buzzword
proofreadrulesreference
Last updated (e321b3ff)
Earlier changes on this page (3)

Full history ↗ · Blame source ↗

Glossary

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). Op in full.

Spell

A language/runtime adapter (e.g. go, md) that maps generic targets onto a toolchain's real commands. Spell in full.

Buzz

The language magusfiles are written in (the .buzz engine). Buzz in full.

CI

An ordinary target you compose yourself with ctx.needs; magus does not hardcode its stages. It is the anchor magus affected ci keys off, and ci strips the rw charm. CI in full.

Agent

A model working through an agent host such as Claude Code, Codex, Cursor or OpenCode. magus treats an agent as one more caller of its CLI, MCP tools and console, held to the same checks as a person. Agent in full.

Tool

An action a model can call through its host: a name, a description, a typed input and a result. magus serves its tools over MCP, each a read of the workspace model or a run of the CLI it already has. Tool in full.

Skill

A packaged set of instructions an agent host loads when a task matches its description: a directory holding a SKILL.md. magus ships its magus-* skills in the binary and writes them with magus agent install. Skill in full.

Run

One target executing under one magus invocation, such as magus run test web or magus affected ci. A run keeps its captured output behind an output reference. Every magus run is a run whether or not any job asked for it; see Job for how the two relate. Run in full.

Lease

The grant a holder takes on a job: the write and read paths that job declared, enforced in the checkout that took it with magus job exec. A job is the piece of work; a lease is permission over it. Lease in full.

Conventions

This page uses none of the site's convention markers. The full set is on the conventions page.