User-Facing Text Cleanup
guillaumemeyer/watermarks-remover
Audits prose for invisible Unicode characters and rewrites it while keeping facts, citations, code and required disclosures unchanged and the writer's voice intact.
Drive a two-round editing pass over one SFL chapter — round 1 is low-level grammar, punctuation, usage, and markup; round 2 fixes the higher-level flow, ordering, and consistency problems found…
$ npx skills add plclub/sf-in-lean --skill proofread -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install plclub/sf-in-lean proofread --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/proofread .claude/skills/proofread && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .claude/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofreadType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add plclub/sf-in-lean --skill proofread -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install plclub/sf-in-lean proofread --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/proofread .agents/skills/proofread && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .agents/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add plclub/sf-in-lean --skill proofread -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install plclub/sf-in-lean proofread --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/proofread .cursor/skills/proofread && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .cursor/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/plclub/sf-in-lean.git --path .claude/skills/proofread--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add plclub/sf-in-lean --skill proofread -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install plclub/sf-in-lean proofread --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/proofread .gemini/skills/proofread && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .gemini/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install plclub/sf-in-lean proofreadInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add plclub/sf-in-lean --skill proofread -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/proofread .github/skills/proofread && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .github/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add plclub/sf-in-lean --skill proofread -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install plclub/sf-in-lean proofread --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/plclub/sf-in-lean.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/proofread .opencode/skills/proofread && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "proofread" agent skill from https://github.com/plclub/sf-in-lean/tree/main/.claude/skills/proofread into .opencode/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
proofreadDrive a two-round editing pass over one SFL chapter — round 1 is low-level grammar, punctuation, usage, and markup; round 2 fixes the higher-level flow, ordering, and consistency problems found…
Proofread is an agent skill from plclub/sf-in-lean. Drive a two-round editing pass over one SFL chapter — round 1 is low-level grammar, punctuation, usage, and markup; round 2 fixes the higher-level flow, ordering, and consistency problems found while reading. Each round is a file of anchored edits, applied for the author to review in the editor, then recorded. Use when the author types /proofread [Chapter] or asks for a chapter to be proofread.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Writing & Content, covering Copy editing and proofreading. The repository describes itself as: Development repo for translating Software Foundations to Lean. The licence is Apache-2.0.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1894c7c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Proofread loads about 1.9k tokens when it runs. Until then it costs about 102 tokens; SKILL.md has 1,124 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from plclub/sf-in-lean at commit 1894c7c, republished under its Apache-2.0 licence (© plclub). 1,124 words, ~1,906 tokens.
.claude/skills/proofread/SKILL.md (or your agent's skills folder).<!-- This file is maintained by Claude (AI-generated). -->
A full pass is two rounds over the same chapter, each driven through the same machinery: round 1 is the low-level pass (commas, agreement, markup), round 2 the high-level pass (flow, ordering, consistency — the findings of the high-level read). Each round has three phases, split by the one thing you cannot do yourself: the author reviewing the edits in their editor. You run the commands; the author only ever talks to you.
PROOFREADING.md at the repo root is the authority on what to propose —
read it in full before phase 1, every time. This skill is only about driving.
python3 scripts/proofread.py start [<Chapter>]It prints the chapter source to proofread and the round file to write, and
refuses when the working tree is dirty (a pass starts from a clean branch) or
when another round is already in flight. Relay that refusal to the author and
stop — do not commit their work for them, and do not reach for --allow-dirty
unless they ask.
Then:
PROOFREADING.md in full — "Writing a round", the house rules, and
the known non-issues.python3 scripts/proofread.py ledger.
Nothing already declined, covered by a house rule, or listed as a known
non-issue may be proposed again.start printed:
{"file", "chapter", "round", "proposals": [{"id", "cat", "old", "new", "why"}]}, anchored exactly as PROOFREADING.md requires.Do not edit the chapter yourself — every edit reaches it through the round, so that the author's accept/decline is what the ledger records.
python3 scripts/proofread.py applyThis makes the edits and opens a side-by-side diff in the author's editor — a
snapshot of the chapter before the round on one side, the live chapter on the
other (code --diff, or Ediff in a running Emacs; PROOFREAD_EDITOR picks,
and it follows the session otherwise). The command prints which one it used and
how to revert there; relay that rather than assuming VS Code. Anchor errors
mean nothing was applied: fix the round file and run it again.
Then end your turn. Tell the author what is in the round (the category
counts the command printed, and any pair of edits it flagged as sharing one
change block), and ask them to revert what they don't want — the way the
command's own output describes for their editor — and to say when they're done.
Under Emacs, remind them to save the chapter buffer: record reads the
chapter back off disk. Before ending the turn, do the high-level read (next
section) and include its findings in the same handover message — it touches no
files, so the author can weigh it while reverting low-level edits. Do not
poll, do not watch the file, do not run record on their behalf. They may
answer in a minute or tomorrow; proofread/state.json remembers the round
either way.
While the author reviews round 1, re-read the chapter as a reader, not a copyeditor: narrative flow and pacing, ideas introduced out of order or used before they're explained, internal inconsistencies (terminology drift, a convention announced then broken, examples that don't match the surrounding prose, prose that misstates what the adjacent proof actually does), heading structure, redundant or missing transitions, dangling references ("this" with no displayed statement), and exercises whose grading or difficulty metadata seems off or missing.
Also run lake build <Vol>.<Ch> and read every linter.sf.* warning it
emits — succeeding is not enough. PROOFREADING.md's "Linter warnings"
section (under "The high-level round") has the triage rules, especially for
exerciseVisibility: it requires a deliberate full-vs-terse visibility
call per exercise, not just silencing the warning.
Never fold these findings into round 1 and never edit the chapter while that round is in flight — the author is editing the same file. Report the findings in prose with the phase-2 handover, ordered by position in the chapter, each anchored by section name (and a short quote so the author can search for the spot), with a one-line suggestion where you have one. Say explicitly when a chapter reads fine and the list is short or empty — a clean report is a result, not a failure. These findings become round 2 after round 1 is recorded and committed.
After record, lake build, and the round-1 commit, run start again (it
names the next round file) and turn the high-level findings into a second
round through the same three phases. The "low-level only" rule is a round-1
rule; round 2 is exempt by design (see "The high-level round" in
PROOFREADING.md). For each finding:
why says
why. Structural edits (moving a heading, inserting a block) need anchor text
on both sides of the change, or old/new will contain one another.:::dev "Claude" note at
the spot (no urgency keyword, so it stays visible), stating the problem and
the plausible options. The note is the deliverable; do not guess at the
decision.Then apply, hand over, and record exactly as in round 1 — and because
round 2 can touch code, headings, and {lean} roles, run lake build <Vol>.<Ch> right after apply rather than waiting for phase 3. Findings the
author explicitly rejected in the prose report are dropped, not turned into
dev notes.
When the author says they're done:
python3 scripts/proofread.py recordIt decides kept-vs-declined by reading the chapter back, appends the declines
to proofread/ledger.jsonl, and prints the rejection histogram. Then:
PROOFREADING.md.
A flagged category means the proposer — you — was working from a rule this
book does not hold; the rule is what stops it recurring in every chapter.record called unclear (the author rewrote that spot
themselves, so nothing was recorded and it will come back in a later round).lake build <Vol>.<Ch> and offer to commit the chapter, the ledger, and
any PROOFREADING.md change together.python3 scripts/proofread.py undo reverses an applied round and leaves it
for another day, recording nothing. status says what is in flight.© plclub, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/proofread of plclub/sf-in-lean.
Open the folder on GitHubat commit 1894c7c
Proofread next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Proofread this skillplclub/sf-in-lean | 160 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| User-Facing Text Cleanupguillaumemeyer/watermarks-remover | 24k | — | ~3.5k | Automated safety check: Pass | MIT | |
| Story Multi-Perspective Reviewzenstory-ai/oh-story-claudecode | 7.4k | 3 repos | ~3k | Automated safety check: Pass | MIT | |
| Chinese Text Humanizerop7418/Humanizer-zh | 19k | — | ~2k | Automated safety check: Pass | MIT | |
| Korean AI-Text Humanizerepoko77-ai/im-not-ai | 5.9k | 1 repos | ~4.5k | Automated safety check: Pass | MIT | |
| Natural Japanese Business Writingcoji/natural-japanese | 1.9k | — | ~2.1k | Automated safety check: Pass | MIT |
guillaumemeyer/watermarks-remover
Audits prose for invisible Unicode characters and rewrites it while keeping facts, citations, code and required disclosures unchanged and the writer's voice intact.
zenstory-ai/oh-story-claudecode
Reviews Chinese web-novel text with several reviewer agents in parallel, falling back to a single-agent pass, and reports structure, character, prose and setting problems with fixes.
op7418/Humanizer-zh
Edits Chinese articles, comments and documents to remove filler, repetition and template phrasing while keeping the facts, the level of certainty and the author's voice.
epoko77-ai/im-not-ai
Rewrites Korean text written by AI so it reads like a human wrote it, detecting translationese and other AI patterns while leaving the content untouched.
coji/natural-japanese
Writes and edits Japanese business documents so they read clearly and naturally, removes AI-sounding phrasing and can score how AI-like a text reads.
lennney/stop-that-shit
Cuts defensive disclaimers, stacked hedging and self-protective narration from proposals and summaries, keeping only limits that affect the reader's decision.
Categories
Drive a two-round editing pass over one SFL chapter — round 1 is low-level grammar, punctuation, usage, and markup; round 2 fixes the higher-level flow, ordering, and consistency problems found…. Proofread is an agent skill from plclub/sf-in-lean. Drive a two-round editing pass over one SFL chapter — round 1 is low-level grammar, punctuation, usage, and markup; round 2 fixes the higher-level flow, ordering, and consistency problems found while reading.
Proofread fits situations like: the author types /proofread [Chapter]; asks for a chapter to be proofread.
Run `npx skills add plclub/sf-in-lean --skill proofread -a claude-code`. Or copy the skill folder (.claude/skills/proofread in plclub/sf-in-lean) into .claude/skills/proofread in your project. Claude Code loads it when a task matches its description.
Run `npx skills add plclub/sf-in-lean --skill proofread -a codex`. Or copy the skill folder (.claude/skills/proofread in plclub/sf-in-lean) into .agents/skills/proofread in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add plclub/sf-in-lean --skill proofread -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/proofread, .gemini/skills/proofread, .github/skills/proofread and .opencode/skills/proofread in your project.
Going by SKILL.md and its folder, Proofread needs the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Proofread is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Proofread: User-Facing Text Cleanup (guillaumemeyer/watermarks-remover, 24k stars), Story Multi-Perspective Review (zenstory-ai/oh-story-claudecode, 7.4k stars), Chinese Text Humanizer (op7418/Humanizer-zh, 19k stars) and Korean AI-Text Humanizer (epoko77-ai/im-not-ai, 5.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
plclub (a GitHub organization) maintains it in plclub/sf-in-lean, which has 160 GitHub stars. The repository was last updated on October 7, 2026.
Source: plclub/sf-in-lean on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.