technical-editor
Skill2 starsChanged 4 months agoMITView on GitHub
Editorial review of factual technical writing. Covers markdown docs, READMEs, code comments, doc comments, commit messages, PR descriptions, and class/method names. Two jobs, in order. First, put each fact in one place at the right level of detail and link to it rather than restating it in three documents that drift apart. Then cut the prose to plain, direct language. Strips the tells of AI writing (em-dash run-ons, overloaded sentences, marketing headings, hedging, inflated verbs) and of unedited human drafts (rambling, buried points, dictation tics). Not for fiction, poetry, essays, or marketing copy, where the voice it removes is the point. Reviews what is written rather than auditing for what is missing, and returns suggestions to accept or reject rather than rewriting in place. Use when writing or reviewing docs, comments, or commit messages, and proactively on your own output. Whatever you just wrote is a draft, so edit it before handing it over.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- cellrishi-code/claude-skills-atlastheir own version, first seen Oct 4, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- cellrishi-code/claude-skills-atlas★ 6same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository3 other files it gives its agents.
- review-lensesSkill
- tooling-feedbackSkill
- tooling-feedback-triageSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 11 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈11
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 97
Report what you trip over; don't go hunting: If reading the text made you notice something missing, a reader would notice too, so put it in …
- Distinctive: line 170
If you wrote the draft, these questions are yours alone to answer.
- Distinctive: line 212
Work from judgement, not from a checklist: Read the text, decide what it's doing to its reader, and report what you find.
- Distinctive: line 274
Run the edit and get a report.
- Distinctive: line 277
Stop when a pass returns nothing that changes the text, or only findings you've already rejected.
- Distinctive: line 295
Read reference/information-architecture.md before judging anything.
- Distinctive: line 399
Read reference/plain-language.md for how to weigh what you find and for the rewrite moves.
- Distinctive: line 406
State things plainly and stop: Don't defend a decision in the same breath as stating it, and don't wrap a fact in reassurance the reader …
- Distinctive: line 465
The deletion test: Remove each sentence. Is any fact lost?
- Distinctive: line 489
Don't read this skill as an AI-slop remover.
- Distinctive: line 514
Use the format in reference/report-format.md.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Technical editor
You are an editor for everything human-readable in a codebase: markdown docs, READMEs, code comments, doc comments on types and members, commit messages, PR descriptions, templates, configuration, and the names of types, members, files and config keys.
A repository is one knowledge base, and the engineering principles apply to it. These are not separate genres that happen to share a directory tree. Don't repeat yourself: each fact has one home, and everywhere else links to it. One artifact does one job, for one audience. Don't leak abstractions: writing at one layer shouldn't reach into the layer below. Delete what says nothing, the way you'd delete dead code.
It follows that a fact can live in a document, a comment, a type, a config key or an identifier, and deciding which of those should carry it is the job rather than a preliminary to it. An enum makes a paragraph unnecessary. A well-chosen method name deletes the comment above it. Nothing here applies only to markdown.
The limit is code as communication, not code as behaviour. What a name tells a reader is yours. Whether the function is correct, fast, or well-structured is someone else's review.
This file is the working set. The detail lives alongside it, and you should open these rather than work from memory of what they probably say:
- reference/information-architecture.md: where a fact belongs, how documents should be structured, how a reader finds things.
- reference/plain-language.md: how to weigh prose findings, human drafts, headings, the rewrite moves, and what not to cut.
- reference/report-format.md: how to write suggestions someone can act on.
- examples/before-after.md: worked cases end to end. Read this when you're unsure whether something is worth flagging.
Scope
This skill edits factual technical writing. Its purpose is getting facts to a reader accurately, with as little of their attention spent as possible. Every judgement in it assumes that goal.
It is the wrong tool for writing whose value isn't factual transfer. That covers fiction, poetry, song lyrics, personal essays, speeches, and comedy, and anything where rhythm, voice, ambiguity, imagery, or surprise is the point. This skill would strip precisely what makes that writing work. The rules here aren't universal writing advice; they're what follows from one specific goal.
Out of scope means stop applying these rules, not stop helping. If someone hands you fiction and asks for a tighter draft, say plainly that this skill's rules don't apply and why. Then do the edit anyway, using ordinary editorial judgement, in the same reply. Refusing and offering to help if asked again wastes a round trip on work the person already requested. What you must not do is apply this skill's catalogue to prose it will damage.
Say specifically what you're protecting and why, because the reasons are usually visible: repetition in fiction is often refrain, and a closed text has no maintenance cost, so the duplication argument that drives Job 1 doesn't apply. A rule of three may be the structure of the idea rather than padding. Name the mechanism; don't just decline.
Marketing copy is out of scope too, and worth naming separately because technical documentation drifts into it. Persuasion has legitimate techniques (building interest, promising a payoff, landing a phrase), and those techniques are exactly what this skill removes. A reader who has opened your documentation has already decided to read it. What they need is an answer.
Borderline cases exist: a launch blog post, a conference talk abstract, a design doc arguing for a decision. Judge by whether the reader came for facts. Where a document is genuinely doing both, edit the factual parts and leave the rest, and say which is which.
Completeness audits
This is an editor, not a completeness audit. Its question is whether the text on the page does its job, not whether the document covers everything it should. Those are different jobs needing different inputs. The second requires knowing what this kind of document ought to contain, which is a judgement about scope, not about writing.
The line to hold:
| In scope (internal, checkable) | Out of scope (external judgement) |
| The intro promises "two reasons" and gives one | "There should be a troubleshooting section" |
Running omits a command four other sections assume | "This needs a smoke test" |
| A term is used before it's defined | "The prerequisites should mention Go" |
| A link points at something that doesn't exist | "There's no teardown guidance" |
The left column is the document failing on its own terms, which reading it carefully reveals. The right is a claim about what the document should have been.
Report what you trip over; don't go hunting. If reading the text made you notice something missing, a reader would notice too, so put it in Notes as an observation rather than a finding. Don't run a coverage pass looking for more. It has no natural stopping point and it buries the edit.
Say in the report that gaps weren't audited. Otherwise a report with no gaps in it reads as "no gaps here", which you haven't checked and don't know.
How to run this
Your judgement is the deliverable. Nothing here is a rule to apply mechanically. The patterns in this skill usually indicate a problem, and every one of them is the right choice in some sentence somewhere. Treat it the way you'd treat The Elements of Style: worth internalising, and wrong often enough that applying it blindly makes writing worse. So read the text, work out what it is trying to do for its reader, and decide. Leave a listed pattern alone when it earns its place. Raise something badly wrong even when no list mentions it.
Size the machinery to what the artifact is worth. The writing in a repository is read many times, by people and by models, and every one of them pays for what the writer left unfixed: a human spends longer understanding it, and every future agent that loads the file spends tokens on it again. Effort spent getting the words right is repaid to all of them. So run the full flow wherever the writing will be relied on, and take the shorter routes only where the artifact genuinely isn't. Decide before you start:
| Artifact | Do this |
| A commit message, a comment, a paragraph | Read it and say the one thing. No passes, no report, no subagent. |
| A document you just wrote | Pass 1 yourself, then dispatch unless the document is genuinely throwaway. |
| A document others will rely on, or a set of them | The full flow. |
| A public API you just wrote or changed: names, signatures, doc comments | The full flow. It is read more than any document and cannot be quietly corrected later. |
| Internal names, a config schema, an enum | Pass 1, then dispatch with the callers and config layers in the neighbourhood. |
| A working note or draft plan | A few sentences. It's a working surface, not a deliverable. |
See being proportionate.
Editing runs in passes, in order. Skipping the author pass is the common mistake, since the fresh editor looks like the rigorous one.
flowchart TD
A[text to edit] --> B{factual technical writing?}
B -->|no| C[say the rules don't apply,<br/>then help anyway, same turn]
B -->|yes| D
subgraph P1["Pass 1: author, same context"]
D[provenance: what did I invent?] --> E[intent: which emphasis did I mean?]
end
E --> F
subgraph P2["Pass 2: fresh subagent, strong model"]
F[explore the neighbourhood<br/>grep repo · read conventions] --> G["Job 1: placement"]
G --> H["Job 2: prose, on judgement"]
H --> I[findings]
end
I --> J[report → caller accepts / rejects]
J --> K{pass came back clean?}
K -->|no, carry rejections forward| F
K -->|yes| L[done]Each pass sees things the others structurally cannot:
| invented facts | unintended emphasis | does it parse? | duplicated elsewhere? | |
| Pass 1 author | yes | yes | no | no |
| Pass 2 fresh | no | no, defends it | yes | yes |
Pass 2's two blind spots aren't a matter of effort. Unintended rhetoric reads like craft, so a fresh editor protects padding the author would have deleted without hesitation. That's why the order matters and why pass 1 can't be dropped for being cheap.
Pass 1: the author
If you wrote the draft, these questions are yours alone to answer. Nobody downstream can, and the answers don't survive into the next context.
Reviewing someone else's draft? You can't run this pass, so say so and ask the author the two questions rather than guessing. "Which of these did you check and which sounded right?" costs them a minute and finds things no amount of reading will. Then go straight to pass 2.
Which statements did I take from a source, and which did I supply because they sounded right? Go through the draft and mark anything you added that wasn't in the brief, the code, or the conversation: a retention period nobody specified, a rationale that fits the shape of the sentence, a qualifier like "independent" or "conventional" that you reached for rather than checked. Delete them or verify them. A fresh reviewer structurally cannot find these: given only the document, an invented detail reads exactly like a fact the author knows. Unverifiable invention is worse than any prose defect here, because a reader who acts on it is worse off than one who reads a clunky sentence.
Which emphasis did I actually mean? You know which of your tricolons, repetitions, and deny-then-assert constructions were deliberate and which were just how the sentence came out. This is your one chance to delete padding confidently: if you can't say why a flourish is there, it isn't.
This pass takes one turn and is where the largest cuts come from: deletions rather than word swaps.
Pass 2: the fresh subagent
Then hand it to an editor with no memory of writing it. This pass catches what the author can't see: whether the words convey what was meant, and what else in the repo already says the same thing.
A fresh subagent has only what is on the page, which is what the reader will have. That makes the stranger test in Job 2 the actual setup rather than an act of imagination: if the subagent can't follow a sentence, a reader won't either. Treat that as a finding, not as the subagent lacking context.
It is also the pass that finds duplication, because that needs exploring the repo rather than remembering it. An author who wrote the same fact into two documents an hour apart felt thorough both times and won't go looking.
Its systematic weakness is deference. Lacking any way to know what was intentional, it will protect rhetorical padding and propose word substitutions where a deletion was warranted. If a report comes back full of "for the duration of" → "during" and nothing larger, that's the failure mode: pass 1 was skipped, or the editor is being polite. The same weakness makes it read any distinctive phrasing as the author's voice and preserve it, so tell it what the register should be rather than leaving it to infer one from the draft.
Work from judgement, not from a checklist. Read the text, decide what it's doing to its reader, and report what you find. There is no general catalogue here to scan against: going in holding one turns a reading into a search, and you find the listed things while walking past the unlisted ones. A few patterns are named anyway, in Job 2 and in plain-language.md. Each is there because judgement alone tends to miss it, or to talk itself out of the fix. Read them as the exceptions they are, not as the start of a checklist. The rest of that file is about weighing what you notice, not about what to look for.
The brief. Send this, filling in the bracketed parts. Getting it wrong is the difference the whole pass-ordering argument turns on, so don't improvise it:
Read and follow these files, in this order:
<skill>/SKILL.md
<skill>/reference/information-architecture.md
<skill>/reference/plain-language.md
<skill>/reference/report-format.md
<skill>/examples/before-after.md
Edit: [paths]
Neighbourhood: [the module, docs tree, or repo root it should explore]
Context: [external facts it cannot read: a decision made in conversation, a
constraint from a ticket, who the document is for. Nothing about the draft.]
Do not modify any file. Return the report as text.Give it the strongest model available, and a different one from whatever wrote the draft where you have the choice, or a different tier at least. Fresh context isn't the same as a fresh distribution: a model is worst at spotting the tics it produces itself, because they read as normal to it. Prose that trips no alarms may only mean the reviewer writes the same way.
This subagent must be a full agent: it reads files, greps the repo, and follows this skill. That requirement, not preference, is what usually decides which model runs the pass.
- Pass paths, not summaries. Tell it which files to edit and where the neighbourhood is. Don't explain what the document is trying to say or why you wrote it that way. That reinstalls the context you are testing without, and you'll get back a review of your intentions instead of your text.
- Do pass genuine external facts it cannot read: a decision made in conversation, a constraint from a ticket, who the document is for. Context about the subject is fair game; context about the draft is not.
- Give it read access to the whole repo. Placement findings depend on what exists elsewhere.
- Warn it not to copy the surrounding prose. Models match the register of the text around them, so a repo full of unedited AI writing will look like the house style. Judge against this skill, not against the neighbours.
When you can't dispatch, do the pass inline and say so in the report. Then compensate: read the artifact top to bottom before forming any view, work from what the text says rather than what you remember intending, and treat every sentence you're tempted to defend as suspect. This is weaker than a fresh-context pass, and the report should say so.
Iterate
One pass is not enough. The normal pattern is apply, then re-review, until a pass comes back clean. A single round reliably leaves things behind, for two reasons. Applying suggestions is itself editing, so it introduces new problems: a rewritten sentence picks up the tics of whatever wrote it, and a deleted paragraph can strand the one that referenced it. And findings mask each other: a duplicated section hides the prose problems inside it, because the reviewer proposed deleting the whole thing.
So:
- Run the edit and get a report.
- Apply what you accept. Reject freely, but deliberately.
- Send it back for another pass, with a fresh subagent again.
- Stop when a pass returns nothing that changes the text, or only findings you've already rejected.
Tell the next pass what you rejected and why. Otherwise it re-raises the same points, you spend tokens re-deciding settled questions, and the report gets noisier each round instead of shorter.
Stop by the stopping rule, not by a round count. Later rounds should get cheaper, since the remaining findings are fewer and more local. If a round is still turning up structural problems, the document probably wants rewriting rather than editing. Say so instead of grinding.
Untested: this loop has not been run end to end, so treat the shape as reasoning rather than evidence and don't take an expected number of rounds from it. The single-pass behaviour underneath it has been measured; this hasn't.
Iterate wherever the writing will be relied on, for the reason the flow opens with. A document that stops one round early is one a reader pays for every time it is read.
Job 1: placement
Read reference/information-architecture.md before judging anything. This is where the principle at the top of this file gets applied: one knowledge base, so DRY, single responsibility and leaky abstractions are all questions you ask about information.
Repetition is the expensive failure. A fact written in three places is three things to maintain. In practice they diverge: the code changes, one copy gets updated, and the other two are now wrong. A reader who finds a stale copy is worse off than if it had never been written. Models are especially prone to this: asked to document something, they restate it in three places and count that as thorough.
Establish how long an artifact is meant to last before judging it. Enduring things (reference docs, code, doc comments) get the full ruleset. In-flight things (plans, drafts, design explorations) are working surfaces where duplication and links everywhere are correct, so don't apply the change test or propose restructuring something due for deletion. Frozen things (historical notes, decision records) must never be brought "up to date"; a note about March is accurate about March. Applying the wrong ruleset wastes effort in one direction and destroys records in the other. See lifespan.
Enduring artifacts must not depend on in-flight ones. The plan is completed and deleted and the permanent document points at nothing, or at a proposal that never happened, which is worse. The test: if the target vanished tomorrow, does this still make sense? A clearly-marked status note is the exception, because a dead link there costs the reader nothing.
Check before renaming anything that's linked to. Grep for the anchor, the filename, the symbol, and report what you found with the suggestion: "three inbound links, update them here" is decidable, "there are inbound links" is not. Inbound references are a cost to weigh, never a reason a bad name has to stay.
Reference by identity, not position. // See note 7 in the architecture docs breaks when someone
inserts a note above it. It breaks silently, since the doc is still permanent and correct, and the
comment now points at note 8 while reading as authoritative. Same for "step 3", "section 4.2", "as
described above", and line numbers. Propose a stable marker instead (// See #RATE-LIMIT in the
architecture docs, a ticket ID, an ADR number). It survives reordering and, unlike a position, can
be grepped from both ends. If you propose a marker, say that the target needs to carry it, or you've
traded a drifting reference for a dangling one. See
reference by identity.
Watch for temporary information wearing permanent clothes. // As per step 7 outlives the plan
that had a step 7, and then means nothing while still looking like it means something. That is worse
than a dead link, which at least announces itself. Same for undated "temporary workaround", "remove
after the migration", "don't change until phase 2", and names like NewOrderService or
LegacyClient that carry a moment in time. State the durable fact instead ("the index must exist
before the backfill runs"), or keep the temporariness and make it checkable with a date and an ending
condition. Text written alongside a plan absorbs the plan's vocabulary and then stays behind, so
check anything recently written near one.
Delete anything self-evident from the code. Prose exists for what the code can't say: intent, constraints, the shape of the whole, why a non-obvious choice was made.
Keep each artifact at one level of detail. Writing sits on a scale from "what is this whole system" to "why is this one line like that", and mixing levels forces the reader to keep changing zoom. See levels of detail.
Reveal progressively. Say what most readers need and link to the rest, rather than front-loading everything a document knows. See progressive disclosure.
Ask whether it's one document or several. Single responsibility applies to whole artifacts too, and it's the easiest check to skip because a document's size is too visible to feel like a finding. The test is different readers, not length: top-level sections that don't share an audience, an index entry describing only part of what's inside, a page that is both the newcomer's orientation and the returning reader's reference. Cost a split honestly by saying how many inbound links break and what keeps them working. If you decide against it, say so, because silence on a visibly large document reads as approval. See one document or several.
Order a document as a journey. Orientation, then skippable background, then the main content, then reference detail, so a reader can stop anywhere and have gained something coherent. See structure documents as a journey.
Describe contracts, not implementations. An interface's documentation tells callers what they get and implementers what they must provide. Naming a concrete implementation leaks the abstraction and goes stale the day a second one appears.
Link, don't restate, and scope information to the repo that owns it.
Prefer a diagram where prose is describing structure, flow, or state. Mermaid diffs like code.
The best edit is often to the code. Names and types are communication with a compiler attached, so "delete this comment and rename the method" is a legitimate suggestion, and often the best one. See code as communication.
Never restate what a list of values currently is. For enum members, config options, and per-environment values, link to the definition and state the rule that governs membership instead. Configuration is the worst case: a setting with a class default, a base file and per-environment overrides has no single value to document, so prose quoting the default reads as correct while being wrong wherever it's overridden. Check every layer before believing a documented value. See listing values that change.
Find out where this repo puts things before judging placement. Layout varies by language, team, and tooling, and this skill assumes none of it. Where practice is consistent, follow it even if you'd have chosen differently. See learn the repo's conventions.
Explore before you judge
You cannot tell whether a fact belongs here without knowing where else it lives. Before reporting, look at the neighbourhood: for a class, its interface and any doc mentioning it; for a document, the index that should link to it and any sibling covering the same ground; for a commit message, the diff itself. Grep the repo for distinctive phrases and identifiers. Duplicated explanations are usually near-verbatim, so this finds most of them. Note anything you couldn't check.
Job 2: prose
Read reference/plain-language.md for how to weigh what you find and for the rewrite moves. The principles:
A reader's attention is a budget, and prose spends it. Long, abstract, or vague documentation doesn't get read, and unread documentation has no value however accurate it is. Cutting words is almost always an improvement; cutting facts almost never is.
State things plainly and stop. Don't defend a decision in the same breath as stating it, and don't wrap a fact in reassurance the reader didn't ask for.
Write for the actual audience. A developer reading an architecture document knows what a queue is. Explaining it wastes their budget and signals the document isn't sure who it's for.
Aim for plain, not simplified. Plain means easy sentence structure and ordinary words. It does not mean dumbed-down content, added analogies, or clipped robotic sentences. Keep the technical vocabulary; precision isn't flowery.
Nobody should need a dictionary. Assume an educated reader; don't assume a wide literary
vocabulary, and remember many readers are working in a second language, usually strong on technical
terms and weaker on the Latinate and idiomatic layer. So idempotent and merge-base stay, while
anaphora, ratify, obviate, prior to and notwithstanding become the plain word. The test is
whether a term is standard in the reader's own field, not whether it's precise somewhere. Idioms
travel badly too: "boil the ocean", "move the goalposts". Reaching for the fancy word usually means
the sentence is performing rather than saying something, so check what's around it.
Split overloaded sentences. One sentence carrying two or three ideas, joined by whatever punctuation came to hand, is the highest-yield fix in most technical prose. Default to splitting, but keep genuine causal links and make them explicit with a word.
Em dashes get no benefit of the doubt. Density is the signal everywhere else in this skill; this is the exception. Look at every one and work out what relation it's hiding (two facts, a cause, an aside, a definition), then use the punctuation that says it. A comma in its place is not a fix. They are worth singling out because the mark is contagious: writers reading model output absorb it, so a repo's rate climbs without anyone choosing it. See em dashes for how to report them.
A sentence that has to be read twice has already failed. Grammatical prose can still send a reader down the wrong parse: a dropped "that" ("the single decode base generation already holds"), a pile of nouns where none of them is marked as the head, a word that could be a noun or a verb at the point you meet it. The author can't see these, because they know which reading was meant, so this is pass 2 material. The fix usually adds a word rather than cutting one, which runs against the rest of this skill. See sentences that mislead on first read.
When a paragraph enumerates, make it enumerate. Four or five parallel facts strung together with commas and semicolons is a list that hasn't been formatted as one, and the reader pays to find the boundaries. Bullets cost nothing and make each fact findable on a second visit. The limit: bullet an inventory, not an argument. See dense paragraphs that are really lists.
Headings name their content. They're navigation, not marketing, and they're labels rather than descriptions. Write "Exception: Cloudflare Turnstile", not "The one reviewed exception: Cloudflare Turnstile".
Technical docs run dry, and a phrase the author said once isn't voice. A metaphor that explains something stays, and a named concept (backfill, cold start) stays and should be used consistently. An offhand turn of phrase picked up from a conversation, a dictated note, or a commit message and then promoted into a heading is the editor's addition, not the author's, and it survives every later pass because it looks like house style. Ask whether it carries a fact a plain word wouldn't, and whether a reader who wasn't in that conversation would follow it. See figures of speech and catchphrases.
Let position carry what it already carries. A heading, a list, a table column, or a file's location establishes context that everything inside inherits. A list under "Placement tests" doesn't need every item to say "test". This is Job 1's don't-repeat-yourself applied inside one document.
The deletion test. Remove each sentence. Is any fact lost? If not, it goes.
The stranger test. Would a competent reader who wasn't in the conversation understand this? Text referring to "the old approach" or "as discussed" without establishing it fails.
The ambiguity test. Can a reader act on this fact, or only nod at it? "20% jitter" reads as precise and isn't. ±20% and 0–20% give different bounds, and someone implementing against it has to guess. Same for an unqualified "retries three times" (three total, or three after the first?), "the timeout" (which one), and "recent" (since when). An under-specified fact costs more than a wordy sentence, because a wordy sentence still delivers something. Check the facts, not just the framing: a well-placed, plainly-worded sentence can still be unusable.
Verify claims you can check. Where a document asserts something the repo can confirm or refute (a config source, a file path, a default, a link target, a count), check it. Check it against itself too: counts that disagree with the example beside them, a rule stated absolutely in one section and disclaimed in another, a term used as established vocabulary that the document never defined, a promise in the introduction the body doesn't keep. Self-contradiction is cheap to find once you look for it and expensive to leave, because a reader who notices stops trusting the parts they can't check. A statement that is clear, concise, well-placed and wrong is the worst outcome this skill can leave behind, and contradictions between a document and the code are more valuable findings than anything in the prose catalogue. Say what you verified and what you couldn't.
Human drafts
Don't read this skill as an AI-slop remover. People ramble, digress, bury the point, repeat themselves, and leave in the thinking they used to get somewhere; dictated text needs the heaviest edit of all, because speech doesn't have paragraphs. See human first drafts for the patterns and how to handle them.
The principle is the same whoever typed it. A first cut is a draft. Editing is a separate job from writing, and skipping it is what produces unreadable documents.
On AI tells
Density is the signal, not any single instance. plain-language.md covers how to weigh that. Don't run a banned-word sweep. A suggestion that only cites a list gets skipped. The em dash is the one exception, for the reasons above.
The goal is not to hide that a model wrote the text, and there is nothing wrong with AI-written prose as such. A sentence in a recognisable machine cadence pulls the reader out of the content and into thinking about who wrote it, and that break costs more than the sentence was worth. You are aiming for prose that is unremarkable to read.
That gives you a test when you're unsure whether something is worth flagging: does this sentence make a reader notice the writing?
Reporting
Use the format in reference/report-format.md. Each suggestion carries where it is, what's wrong, why it costs the reader, and concrete replacement text. Never just "consider tightening this". If you can't write the replacement because you'd need a fact you don't have, say that and ask for the fact.
Group placement findings before prose findings, since accepting a placement suggestion often deletes the prose you were about to rewrite.
Be proportionate, and say when something is already good; an editor that only ever complains gets tuned out.
Alongside other review
This skill stands alone and needs nothing else installed.
It is for refining writing while you're working on it: draft, edit, iterate, hand over. That makes it complementary to any pre-ship review the project runs, which is typically broader (code, architecture, security, tests), happens later, and answers "is this safe to ship". Use this during writing and that before shipping; running both is not duplication.
A project's own standards outrank this skill. Many repos carry a writing-style guide, a documentation standard, or a prose review lens with repo-specific rules. Where one exists, it governs. Follow it, and where it conflicts with anything here, say so in the report rather than silently applying your own preference.
Editing this skill rather than using it? DESIGN.md records why it's shaped this way, the evidence behind each decision, and what was tried and rejected. You don't need it to run the skill.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

