Chinese Technical Writing
leter/zh-tech-writing
Sets writing rules for Chinese technical docs: short plain sentences, consistent typography and a checklist for removing AI-sounding filler.
Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.
$ npx skills add oaustegard/claude-skills --skill declauding -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install oaustegard/claude-skills declauding --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/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/declauding .claude/skills/declauding && 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 "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .claude/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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/oaustegard/claude-skills/tree/main/declaudingType 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 oaustegard/claude-skills --skill declauding -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install oaustegard/claude-skills declauding --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/declauding .agents/skills/declauding && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .agents/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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 oaustegard/claude-skills --skill declauding -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install oaustegard/claude-skills declauding --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/declauding .cursor/skills/declauding && 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 "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .cursor/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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/oaustegard/claude-skills.git --path declauding--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 oaustegard/claude-skills --skill declauding -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install oaustegard/claude-skills declauding --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/declauding .gemini/skills/declauding && 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 "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .gemini/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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 oaustegard/claude-skills declaudingInstalls 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 oaustegard/claude-skills --skill declauding -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/declauding .github/skills/declauding && 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 "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .github/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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 oaustegard/claude-skills --skill declauding -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install oaustegard/claude-skills declauding --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/declauding .opencode/skills/declauding && 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 "declauding" agent skill from https://github.com/oaustegard/claude-skills/tree/main/declauding into .opencode/skills/declauding/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "declauding", 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.
declaudingRewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.
The skill loads before the agent drafts anything another person will read, such as a PR description, commit message, README, postmortem, release note or review comment, and runs again on the draft before handoff. It rewrites constructions that mark text as machine-written (staged reveals, verdict headers, aphoristic closers, the it's-not-X-it's-Y turn, em-dash drama, forced triads, flat-certainty adverbs) into plain prose. Its test for each sentence is whether it states the thing or performs having had the thought.
Output is either clean text only or an annotated single-file HTML page that marks each changed passage with the original, the pattern name and the reason, with a toggle to hide the marks. Pasted text gets the rewrite back, a file is edited in place (prose only, leaving code blocks, frontmatter, data and quotations alone), and a calling skill gets final text with nothing extra. The rewrite may not add a fact, name, number or citation that the source lacks. The folder holds a pattern register, notes per model family and the scripts `declaude_lint.py` and `declaude_diff.py`. Fiction, poetry and code are out of scope.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit cf49d47. 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.
Ships 2 files in scripts/ (Python, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom 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.
Declauding loads about 5.2k tokens when it runs, and up to ~23k if it reads all its reference files. Until then it costs about 230 tokens; SKILL.md has 3,034 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); the scripts in this folder are not scanned.
The full file from oaustegard/claude-skills at commit cf49d47, republished under its MIT licence (© oaustegard). 3,034 words, ~5,169 tokens.
.claude/skills/declauding/SKILL.md (or your agent's skills folder). This skill also uses 23 other files; get the full folder from GitHub.Turn LLM-shaped prose into prose a human technical writer would have written.
Two output modes:
Three ways it gets called, which change what you deliver:
The rewrite must not contain a fact, name, number, date, quote or citation that is not in the source. This is the failure mode the skill invites rather than prevents: the fix for a vague sentence is a specific one, and the specific has to come from the source or from the author.
Experts believe it plays a crucial role becomes the sources here do not say who studies it, or gets cut. It does not become researchers at Lanzhou University unless the source says so. When a sentence needs real-world detail to work, ask for it or write the plain version without it.
Opinions and stance count as voice rather than fact. Keeping the author's judgment is required (see Overcorrection); adding a factual claim they did not make is a defect even when the result reads more human.
Almost every tic in references/register.md is a version of the same move:
the sentence is built to make the reader feel a finding arrive, instead of
stating the finding.
The generative test, applied per sentence: am I saying the thing, or performing having had the thought? Say the thing.
The register has four families. Read the one the draft needs first.
| Entries | Family | Mechanism |
|---|---|---|
| 1–23, 37–42 | Staging | The sentence performs a finding arriving: reveals, verdict headers, aphoristic closers, welded epigrams |
| 24–36 | Encyclopedic and chatbot | Nothing is staged; the writing runs on defaults: copula avoidance, participle tails, forced triads, chatbot residue |
| 43–47 | Flat certainty | This skill's own output. An adverb, compound or absolute negative stands in for evidence: plainly, quietly, refusal, re-derived, byte-identical, nothing |
| 48–52 | Confiding essayist | Staging aimed at the reader's trust: announced honesty, stranded auxiliaries, obituary headlines. From Simon Willison's llm-cliche-highlighter, updated 2026-08-27 |
The flat-certainty register is where a clean pass lands, and it is now the
fastest-growing cluster of GitHub pull request descriptions: 0.70% of early
2025, 39.5% of August 2026 (references/corpus.md). Its test is the same one
turned over: am I stating the finding, or performing having settled it? The
fix is never to put the staging back. It is to check that the adverb, compound
or negative carries evidence.
When you know which model wrote the draft, read its file in
references/models/ before step 2. When you know which model you are, read your
own file too. Each file has two sections: what to look for in that model's
drafts, and what to check in your own rewrite when you are that model.
| Model | File | Where its tics sit |
|---|---|---|
| Opus 5, Opus 5.5 | models/opus-5.md | Headers and paragraph closers; the linter misses most of them |
| Opus 4.6, 4.8 | models/opus-4.md | Closers, em dashes, one metaphor reused across paragraphs |
| Sonnet 4.6, 5 | models/sonnet.md | Em dashes and negation-first reversals |
| Haiku 4.5 | models/haiku.md | The encyclopedic family; the linter catches most of it |
| Sonnet 5.5, Haiku 5.5 | not yet profiled | Use the same tier's file as a prior and expect drift |
| Fable 5.1 | models/fable.md | Bolded list leads and takeaways |
When Claude is cleaning its own draft, one file covers both sections; run step 2b in a subagent or separate context. When the author is unknown or human, skip the profiles.
On any model's draft, check the opening for a contents-list standfirst (entry 42): here's what happened, and what we should have measured.
If the user supplies a sample of their writing, read it before editing and match its habits: sentence lengths, paragraph openings, punctuation, recurring phrases, vocabulary level. Do not upgrade casual words, regularize deliberate quirks, or apply a register rule the sample contradicts.
The sample wins over every rule here, including the em-dash density guard in entry 16. If the author uses em dashes at three per hundred words, that is their voice, and scrubbing the tell would make the text less like them and no more human. The same holds for their existing published work when it is available and the current draft is not.
Script paths below are relative to this skill's directory. From any other
working directory, prefix them with /mnt/skills/user/declauding/.
1. Read the whole piece before editing anything. Tics carry factual errors. A sentence written to sound important is disproportionately likely to be wrong, because it was built for shape rather than for accuracy. Designations of the form the X that answers the real question frequently designate the wrong X, and the draft itself often contradicts them a paragraph later. Note contradictions now; they are the most valuable thing this pass produces.
2. Run the mechanical scan.
python3 scripts/declaude_lint.py DRAFT.md
python3 scripts/declaude_lint.py DRAFT.html # HTML is flattened automatically
python3 scripts/declaude_lint.py DRAFT.md --skip-quoted # if the draft quotes bad proseIt flags greppable tells with line numbers and categories, plus four shapes that
are not lexical: forced triads in both their comma-list and anaphora forms,
one-line-paragraph beats, fragment runs, and constructions the document uses more
than once. The reuse block is the cheapest signal it produces, because a
construction used twice is a habit and counting is free.
It has no judgment. Everything it flags still needs the sentence-level test, it reaches roughly two thirds of what a careful pass finds, and the third it misses is the expensive third: staged paragraph shape, staged closers, dressed metaphor, and every earned exception. Step 2b takes part of that third; the rest is yours. Treat a clean report as meaningless on its own, and expect one on Opus 5 drafts, which stage heavily in shapes the scan cannot see.
Use --skip-quoted on any draft that quotes bad prose as a specimen. Without it
the scan reports the draft's own examples, which is how a real pass loses time.
HTML input is flattened before scanning: <h1>–<h6> become headings so the
header rules see them, and a .subtitle, .eyebrow or .post-meta element is
treated as a heading too, because a subtitle is a header by every test that
matters. Force with --html, disable with --no-html. Reported line numbers
refer to the flattened view.
The corpus-register density line locates a register. It does not detect an
author. Above roughly 1.0 per 100 words the draft sits in the cluster's register,
and a person who chooses that register scores there too, so the line is a cue to
read entries 43 to 47 and never a licence to cut nothing or measured on
sight. references/corpus.md has the figures.
Lint every string that reaches the reader, not only the body file. Page titles, subtitles and deck headers are prose, and a builder that takes them as CLI arguments rather than from the file will hide them from this scan.
2a. Optionally, rank the sentences.
python3 scripts/declaude_rank.py DRAFT.md --top 15Sorts sentences by how staged they look, using a fitted direction in embedding
space (the mean of embed(was) - embed(now) over the register's before/after
pairs). It shortlists and decides nothing. On the one pass it was measured
against it ranked all nine edited sentences at a median of 13 of 53, where the
regex scan had found one of the nine. It cannot score documents. Needs torch and
transformers; every other stage is standard library. references/preservation.md
has the numbers.
2b. Run the structural review.
python3 scripts/declaude_review.py DRAFT.mdThis is the third the scan cannot reach. It extracts the slots regex cannot
judge — every header, the opening sentence, each closing sentence, isolated
one-sentence paragraphs — and sends only those to a model with the structural
entries from references/register.md. Slots rather than the whole document,
because the payload stays small enough to run on every draft. Use
--emit-prompt where no API key is available, --slots to see the extraction
alone.
The two stages do not subsume each other. Stage 1 finds the flat verdict header deterministically and over-flags commas, including the ones that belong to a citation. Stage 2 reads a comma in context and finds the aphoristic closer, which no regex reaches. Run both.
Run stage 2 in a context that did not write the draft. A model reviewing its own
prose is the actor that chose the words. With --emit-prompt: if you did not
write the draft, answer the prompt yourself; if you did, hand it to a subagent.
If you wrote it and cannot spawn one, answer it anyway and say in your report
that the review was not independent.
For a full-document register review against a named voice signature — positive
markers, drift across the piece, imposter test — use the challenging skill's
prose-register profile instead. This script is the cheap pass; that one is the
thorough one.
3. Sentence pass. For every sentence, in order: stating or staging? Load
references/register.md for the catalogue of tells and their fixes, and
references/exceptions.md before deleting any flagged shape — it lists when
each shape carries a claim. Start with the family the draft needs: the author
model's profile names it; on a draft this skill or another model already
cleaned, read 43 to 47 first; on a personal essay, a launch post, or anything
addressed to the reader as a confidant, read 48 to 52 first.
4. Structure pass. Headers (are they labels or verdicts?), paragraph breaks (is an isolated line a real pivot or a drum roll?), fragment runs, rhetorical questions, and the closer (does the last paragraph paraphrase the subtext of what preceded it? delete it).
5. Check what the edit did.
python3 scripts/declaude_diff.py SOURCE.md REWRITE.md
python3 scripts/declaude_diff.py --git path/to/draft.html --ref HEADRun this before reporting the pass done. It compares source against rewrite for numbers, names, quotations, code and link targets by presence, and for superlative, scope, negation and hedge constructions by count, and reports what the edit lost and what it invented. Constructions rather than tokens, because rewriting "the format that most invites staged reveals" as "more than most formats do" keeps the word and drops the ranking.
An embedding similarity does not substitute for it: on the three real cases in
references/preservation.md the lossy rewrite scores higher cosine to the
source than the faithful one. Paraphrase invariance is what an encoder is trained
for, and dropping a ranking word is a paraphrase by that measure.
The script guards claims and not voice, and a finding is a question rather than a
verdict — a rephrasing it cannot see through takes a --waive. Four failure
modes, all of them common:
6. Report factual problems separately. Never silently fix a contradiction found while editing. The author needs to know their draft disagreed with itself, and only they can say which version is true.
The failure mode of this skill is prose stripped of confidence, rhythm and personality until every sentence is the same length and the writer has no opinions. That is worse than the tics.
These are evidence of a person writing. Editing them out is how a register pass makes a draft worse, and each one is easier to destroy than to put back.
Things that are not tells on their own, and should not be edited on their own: polished grammar, formal vocabulary, a mixed casual-and-formal register, curly quotes, a single em dash, one short emphatic sentence, an unsourced claim, a salutation or sign-off. Look for clusters. One em dash is punctuation; em dashes plus a forced triad plus vibrant tapestry plus a Conclusion section is a confession.
Do not edit a watched phrase inside a quotation, a title, a proper name, or an
example where the phrase is being discussed rather than used. The linter's
--skip-quoted does this mechanically; do it by eye too.
Every entry fires on a shape, and a shape sometimes carries a claim. Cutting it
then removes content while looking like it removed only style, and the result
reads fluently, so a read-through does not catch it. references/exceptions.md
has a banned-when and earned-when row for each shape; check the row before
deleting. Two common cases: "X rather than Y" is earned when the reader was
already holding Y, and a short closer is earned when it states a fact
("Default retries are back to 3.") rather than a moral.
Modifiers inside a watched phrase carry content. "The single most important new build" ranks that item against every other item; "the important new build" ranks nothing. "Simultaneously X, Y and Z" claims the three hold at once; "X, Y and Z" does not. Superlatives, rankings, simultaneity, scope words, and the condition attached to a hedge all live inside phrasings this skill cuts.
Read references/annotating.md. It specifies the artifact: markup for changed
spans and edit notes, the toggle, the tic-tally table, and how to handle
passages deliberately left alone.
Rules that make the annotation useful rather than decorative:
When a draft's register is genuinely unclear, read real prose in the target genre before editing — the author's own earlier writing, or a well-known human writer in that domain. Human technical prose runs on, digresses, states preferences without justifying them, and repeats a word rather than reaching for elegant variation. Its sentences vary because the thoughts vary.
Applies to: blog posts, READMEs, PR and commit descriptions, reports, documentation, essays, release notes, technical explainers.
Do not apply to: fiction and poetry (different register entirely), direct quotations, other people's text being quoted, marketing copy where the client wants the staging, or anything where the "tic" is the author's established voice. Ask before running this on someone else's writing rather than a draft.
The register is a working document, not a standard. Adding to it:
tests/sample-tics.md, verbatim from real prose.scripts/declaude_lint.py and confirm
tests/sample-clean.md still reports zero. That file is human-written prose;
a rule that fires on it is a bad rule, and the false-positive budget is the
thing that keeps the linter worth running.metadata.version.To add a model profile, sample that model with no voice instruction and score
it as oaustegard/experiments model-register-drift/ did. Write the file as
instructions: where to look, what to cut, with one specimen per rule. Leave the
scores in the experiment; the file gets one evidence line. Add a row to the
Model profiles table.
Promote a phrase to its own register entry only after it appears twice in real drafts. Reuse is the strongest evidence that a construction is a habit rather than a choice, and a register that grows on single sightings becomes a phrase blocklist that misses the next paraphrase.
© oaustegard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 23 other files (scripts, references, assets) in declauding of oaustegard/claude-skills.
Open the folder on GitHubat commit cf49d47
Declauding 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 |
|---|---|---|---|---|---|---|
| Declauding this skilloaustegard/claude-skills | 150 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Chinese Technical Writingleter/zh-tech-writing | 338 | — | ~656 | Automated safety check: Pass | MIT | |
| Natural Japanese Business Writingcoji/natural-japanese | 1.9k | — | ~2.1k | Automated safety check: Pass | MIT | |
| evlog Content Writingevloghq/evlog | 1.9k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Simple English Rewritervinta/hal-9000 | 138 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Technical Writing Standardcursor/plugins | 10k | 10 repos | ~2.4k | Automated safety check: Pass | None |
leter/zh-tech-writing
Sets writing rules for Chinese technical docs: short plain sentences, consistent typography and a checklist for removing AI-sounding filler.
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.
evloghq/evlog
Rules for writing and reviewing evlog docs, blog posts, READMEs, skills and AGENTS.md files, with separate review and rewrite roles, a house voice and a catalog of AI-sounding tells.
vinta/hal-9000
Rewrites docs, READMEs, issues, comments or UI text in plain Global English that translates well and still sounds native, keeping every fact intact.
cursor/plugins
Applies four layers of technical-writing rules to docs, RFCs, readmes, PR descriptions and commit messages so a tired engineer follows them on the first read.
epoko77-ai/im-not-ai
Rewrites Korean commit messages that read like office jargon or translation into natural wording, leaving the type, scope and meaning untouched.
oaustegard/claude-skills
Builds interactive Vega-Lite charts from uploaded data: analyzes the fields, picks five to ten fitting chart types, and produces a React artifact with the data embedded inline.
oaustegard/claude-skills
Builds self-contained single-file HTML pages such as reports, decks, postmortems, flowcharts and prototypes from a small spec using a bundled Python composer and templates.
oaustegard/claude-skills
Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.
oaustegard/claude-skills
Deprecated sampler that captures short windows of the Bluesky firehose, clusters trending terms and builds an HTML report; replaced by the browsing-bluesky skill.
oaustegard/claude-skills
Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact.
oaustegard/claude-skills
Control Spotify playback and manage playlists via MCP server.
Categories
Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts. The skill loads before the agent drafts anything another person will read, such as a PR description, commit message, README, postmortem, release note or review comment, and runs again on the draft before handoff. It rewrites constructions that mark text as machine-written (staged reveals, verdict headers, aphoristic closers, the it's-not-X-it's-Y turn, em-dash drama, forced triads, flat-certainty adverbs) into plain prose.
Declauding fits situations like: polishing a PR description or commit message before it is posted; making a README, postmortem or blog post read like a human technical writer wrote it; cleaning pasted text that sounds like AI output; reviewing a document for model-written habits, with each change annotated.
Run `npx skills add oaustegard/claude-skills --skill declauding -a claude-code`. Or copy the skill folder (declauding in oaustegard/claude-skills) into .claude/skills/declauding in your project. Claude Code loads it when a task matches its description.
Run `npx skills add oaustegard/claude-skills --skill declauding -a codex`. Or copy the skill folder (declauding in oaustegard/claude-skills) into .agents/skills/declauding 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 oaustegard/claude-skills --skill declauding -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/declauding, .gemini/skills/declauding, .github/skills/declauding and .opencode/skills/declauding in your project.
Going by SKILL.md and its folder, Declauding needs Python for the scripts in its folder and the command-line tools its instructions call (python3).
SKILL.md names 1 domain. As links in the text: github.com. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Declauding is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 18k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Declauding: Chinese Technical Writing (leter/zh-tech-writing, 338 stars), Natural Japanese Business Writing (coji/natural-japanese, 1.9k stars), evlog Content Writing (evloghq/evlog, 1.9k stars) and Simple English Rewriter (vinta/hal-9000, 138 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
oaustegard (a GitHub user) maintains it in oaustegard/claude-skills, which has 150 GitHub stars. The repository holds 66 skills in this directory. The repository was last updated on October 8, 2026.
Source: oaustegard/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.