Agent skill

Anti Vibe Writing

by weijt606 in weijt606/anti-vibe-writing

A skill your agent uses when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese.

MITAuto-check passedWriting & Content

Install Anti Vibe Writing

skills CLI
$ npx skills add weijt606/anti-vibe-writing --skill anti-vibe-writing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install weijt606/anti-vibe-writing anti-vibe-writing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/weijt606/anti-vibe-writing.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/anti-vibe-writing .claude/skills/anti-vibe-writing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
anti-vibe-writing
GitHub stars
120
Token cost
~3.9k tokens
SKILL.md length
1,924 words
Files
14 (incl. references, assets)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese.

  • Works in 7 steps: Identify the job of the document and the… → Identify the audience, medium, and… → Note what must remain unchanged: claims,… → …
  • The user wants to humanize
  • SKILL.md covers Core Philosophy, Best Uses, Typical Fits and Do Not Use For, plus 11 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Anti Vibe Writing is an agent skill from weijt606/anti-vibe-writing. Use when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese. Good for social posts (X/Weibo/Jike/RedNote), Reddit and forum comments, blogs, podcast show notes, README cleanup, product docs, landing page copy, proposals, founder notes, and technical memos. Removes templated phrasing, consultant-speak, vague abstraction, emoji or icon headings, markdown templates, overly balanced tone, and the typographic tells that flag generated text (em-dashes —/——, smart…

Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 15 other files, including reference files and assets (for example `assets/final-pass-checklist.md`, `assets/host-profile-template.md` and `assets/rewrite-prompt-template.md`).

It sits in Writing & Content, covering Podcasting, Humanizing AI text and Copywriting. It works with Xiaohongshu and Reddit. The repository describes itself as: An AI writing skill that turns agent-generated drafts into clearer, warmer, more human documents by removing templated phrasing, markdown clutter, and generic AI tone. The licence is MIT.

When your agent uses it

  • The user wants to humanize
  • Warm up an AI-generated document

Example prompts

  • “/anti-vibe-writing”

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Identify the job of the document and the scenario (use scenario-presets.md to pick constraints).
  2. Identify the audience, medium, and language (Chinese vs English changes which reference applies).
  3. Note what must remain unchanged: claims, numbers, names, terminology, or structure.
  4. Decide how much markdown the piece actually needs.
  5. Check whether a host profile applies (learning mode).
  6. Decide which voice mode to run in (see below).
  7. Ask for missing context only if it would materially change the rewrite.

What it can do on your machine

Read from SKILL.md and the folder at commit 3126f86. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Anti Vibe Writing loads about 3.9k tokens when it runs, and up to ~22k if it reads all its reference files. Until then it costs about 180 tokens; SKILL.md has 1,924 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~180
When it runs · the whole SKILL.md, loaded when a task matches
~3.9k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~22k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from weijt606/anti-vibe-writing at commit 3126f86, republished under its MIT licence (© weijt606). 1,924 words, ~3,899 tokens.

Download SKILL.mdSave it as .claude/skills/anti-vibe-writing/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.
name
anti-vibe-writing
description
Use when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese. Good for social posts (X/Weibo/Jike/RedNote), Reddit and forum comments, blogs, podcast show notes, README cleanup, product docs, landing page copy, proposals, founder notes, and technical memos. Removes templated phrasing, consultant-speak, vague abstraction, emoji or icon headings, markdown templates, overly balanced tone, and the typographic tells that flag generated text (em-dashes `—`/`——`, smart quotes, the `…` character) while preserving meaning. Supports optional voice modes: human-texture (light irregularities) and learning mode (match a specific host's style from samples).
argument-hint
Paste the draft, or describe the document, audience, scenario (tweet/weibo/reddit/blog/podcast/report), how much structure should remain, and optionally…
user-invocable
true
disable-model-invocation
false
metadata.version
1.7.0
metadata.language_support
en, zh
metadata.tools
Read, Edit, Write, Grep, Glob, Bash, WebFetch, WebSearch, TaskCreate, Agent

Anti-Vibe Writing

You are an editorial finishing skill for AI-drafted writing, in English or Chinese.

Use this after the substance is already there. The point is not to make the prose prettier. The point is to keep the meaning and remove the habits that make generated writing feel assembled: template language, vague abstraction, safe hedging, consultant tone, and default markdown scaffolding.

The skill works best as a final pass after drafting with tools like Claude Code, Codex, or any large-model assistant. It handles English and Chinese as two distinct dialects of AI-smell, not one.

Core Philosophy

  • Preserve the writer's meaning. Improve delivery, not substance.
  • Human writing chooses what matters. AI writing often hedges, formats, and explains by habit.
  • Warmth comes from specificity, rhythm, and honest emphasis, not emoji, icons, or cheerful filler.
  • Chinese AI-smell and English AI-smell are different problems. Apply the matching reference.
  • Several narrow editing passes work better than one vague rewrite.
  • Clean is not the goal. Sounding like the person who meant it is the goal.

Best Uses

  • The draft is correct but flat, generic, or obviously AI-written.
  • The document has too many headings, bullets, or numbered lists.
  • The copy sounds cautious, polished, and empty at the same time.
  • The writing leans on business-speak instead of saying what is true.
  • The reader needs prose that sounds deliberate rather than generated.
  • A user wants future writing to match their existing voice across a series.

Typical Fits

  • Social posts: X / Twitter, Weibo, Jike, RedNote (XHS)
  • Reddit and English forum comments
  • Blog posts, newsletters, public WeChat articles
  • Podcast show notes and video scripts
  • README cleanup
  • Product docs and landing page copy
  • Proposals, founder notes, technical memos, internal reports

See scenario-presets.md for per-scenario constraints.

Do Not Use For

  • First-draft writing from scratch
  • Inventing examples, proof, data, or product claims
  • Repositioning the message when the user only asked for polish
  • Replacing an intentional house style with generic prettiness

Before You Rewrite

  1. Identify the job of the document and the scenario (use scenario-presets.md to pick constraints).
  2. Identify the audience, medium, and language (Chinese vs English changes which reference applies).
  3. Note what must remain unchanged: claims, numbers, names, terminology, or structure.
  4. Decide how much markdown the piece actually needs.
  5. Check whether a host profile applies (learning mode).
  6. Decide which voice mode to run in (see below).
  7. Ask for missing context only if it would materially change the rewrite.

Voice Modes

The skill runs in one of three voice modes. Default mode is the safe baseline. The other two are opt-in.

Mode 1: Default (Clean)

Strip AI-smell, return a clean, professional version. Conservative. Suitable for most product, documentation, and professional contexts.

This is what runs unless the user opts into something else.

Mode 2: Human Texture (Opt-in)

Inject a controlled amount of human irregularity: inversions, particle words (吧/嘛/呗/啊), half-sentences, self-corrections, non-standard punctuation. Suitable for personal blogs, founder notes, social posts, letter-to-users.

Triggered by user signals such as:

  • "Loosen it up" / "放松一点" / "blog voice" / "make it feel personal"
  • "Like the founder actually wrote it"
  • "A little less polished is fine"

Within this mode there is one further, tightly-gated layer, casual typing (随手打), for social posts only. It allows a tiny amount of real-person phone-typing imperfection (a dropped end punctuation mark, no capitalization, an omitted particle), but never on numbers, names, code, links, prices, dates, or terms, and never a meaning-changing typo (的/得/地, 在/再, 哪/那 are off-limits). It is off by default and activates only on an explicit request, matched by intent, not a fixed phrase: either naming the layer ("开/启用随手打", "随手打模式", "casual typing") or describing the effect ("像手机随手发的", "别太工整", "type it like a quick phone post"). A generic "放松一点 / loosen it up" enables regular human-texture but not this layer; when unsure, treat it as off and offer it. It is forbidden in docs, reports, announcements, and any professional copy. When used, cap it at 1–2 touches and state them at the end. This is phone-typing texture, not error injection to evade AI detection. See the 随手打 section in human-texture.md.

Details and concrete techniques: human-texture.md.

Mode 3: Learning Mode (Opt-in, sample-driven)

Extract a host's writing style from real samples, build a reusable host profile, then rewrite future drafts to match. Suitable for series content, personal newsletters, founder communications, recurring social posts.

Triggered by:

  • User provides samples ("here's how I usually write on Twitter")
  • User asks "can you learn my style"
  • After several rewrites the user still says "this isn't like me"

Workflow: learning-mode.md. Profile template: host-profile-template.md. Extraction prompt: style-extraction-prompt.md.

Modes 2 and 3 can combine with each other and with scenario presets. Order of precedence when they conflict:

  1. Host profile's "禁忌词 / forbidden words" (highest)
  2. Scenario preset's format constraints (length, structure, emoji policy)
  3. Host profile's voice signals (sentence shape, particles, punctuation)
  4. Human-texture conventions (lowest, only fills gaps)

Output Goals

  • More human rhythm
  • More intentional structure
  • Cleaner phrasing
  • Stronger voice
  • Less AI smell
  • Sounds chosen by a person, not assembled by a system

Human Passes

Use the step-by-step framework in human-passes.md.

  • Pass 1: Intent and stance
  • Pass 2: Structure and flow
  • Pass 3: Concrete language
  • Pass 4: Rhythm and temperature
  • Pass 5: Format and markdown cleanup
  • Pass 6: Integrity check

For lighter edits, run Pass 1, Pass 3, Pass 5, then the final checklist.

When changing the skill itself, compare behavior against before-after-benchmarks.md and chinese-before-after.md so the style stays human, warm, and unscripted rather than merely cleaner.

Default Editing Moves

  • Preserve facts, claims, scope, and technical meaning.
  • Detect language first. For Chinese drafts, apply chinese-patterns-to-remove.md. For English, apply patterns-to-remove.md.
  • Remove templated openers, throat-clearing, and filler transitions first.
  • Replace vague nouns and abstractions with concrete nouns and verbs.
  • Use fewer headings and fewer bullets unless the content genuinely requires them.
  • Collapse repetitive framing and duplicate summary language.
  • Prefer an earned point of view over fake balance.
  • Cut consultant-speak, hype, and process jargon. In Chinese this includes 赋能 / 打通 / 闭环 / 抓手 / 链路 and friends.
  • Remove emoji or icon headings, decorative bolding, and stock markdown modules unless the source clearly needs them.
  • Strip typographic AI tells: replace em-dashes (— / ——) and en-dash connectors with periods, commas, colons, or parentheses; smart quotes with straight quotes (English only; Chinese full-width quotes stay); … with .... This makes the text genuinely read like keyboard typing, not as a trick to dodge detectors.
  • Swap AI layout for what a person actually types: drop scattered bolding, a heading over every short chunk, bullets where a sentence works, > callouts, and --- rules between sections. See the "Format Forms → Plain Human Forms" / "格式形式" mapping in the matching patterns reference. Test: if you wouldn't type the formatting into a message to a friend, cut it.
  • Keep sentences varied in length, but not ornamental.
  • Prefer prose over bullets when list structure adds no value.
  • Let warmth come from concrete detail and restraint, not upbeat filler.
  • Do not invent examples, numbers, or evidence.
  • Default to returning rewritten copy, not commentary.
Show full SKILL.md (780 more words)Show less

What to Remove Early

  • Typographic tells, the fastest thing readers and detectors catch: em-dashes (— / ——), en-dashes used as connectors, smart quotes “ ” ‘ ’, the … character, and stray → • · in prose. Replace by the job they do (period, comma, colon, parentheses) or restructure. See the typographic sections in the matching patterns reference.
  • Copy-paste residue from chat or search-enabled models: contentReference / oaicite / turn0search0 / [cite: 1] / grok_card / ppl-ai-file-upload, stray 【】 or † citation scaffolding, unsourced [1][2] brackets, and leftover assistant framing ("Here is the revised version", trailing "Sources:"). Language-agnostic and exact-string, so delete on sight and let the deterministic gate catch the rest.
  • Generic setup paragraphs that delay the point
  • Empty transitions: "it is important to note", "in today's landscape", 在……方面, 值得注意的是, 综上所述
  • Headings that only label the obvious
  • Emoji or icon-led section titles, 【】段头, 👉 / 💡 / 🔥 引导
  • Template sections such as Overview, Key Features, Conclusion, 概述, 核心特性, 总结
  • Decorative bold labels and list-heavy scaffolding
  • Faux warmth, fake enthusiasm, mirrored summary language, 三连排比

Editing Heuristics

  • If a heading only labels the obvious, cut it.
  • If three bullets can become one sentence, merge them.
  • If a sentence sounds interchangeable with a hundred startup blog posts, rewrite it.
  • If the paragraph makes a point only after a long runway, start closer to the point.
  • If the tone keeps "balancing" instead of deciding, make the claim and carry the nuance in the sentence rather than around it.
  • If the tone sounds warm only because of icons, exclamation, or soft filler, remove those and rebuild the sentence.
  • Chinese-specific: if a paragraph contains "首先 / 其次", a three-clause parallelism, AND ends with "让 X 更 Y", it's almost certainly AI-shaped, so rewrite the paragraph, don't just edit it.
  • Chinese-specific: watch for 翻译腔 / 欧化句式 (被…所…, 作为一个…, 不仅…而且…, 对…进行…, 复数"们", over-dense subject pronouns). These read like machine translation even when no buzzword is present. Restore active voice and verbs.
  • Chinese-specific: drop the "资深文案 / 营销专家" stance; it pulls in ad vocabulary. Rewrite as if a normal friend, a 公众号 editor, or a seasoned journalist were saying it. Read the result aloud; if you wouldn't talk to a friend that way, edit again. See the 改写心态 section in chinese-patterns-to-remove.md.

Task Questions

  • What language is the draft in? (Different rules apply.)
  • What scenario is this for? (Tweet / Weibo / Reddit / blog / podcast / report, picks the preset.)
  • Who is reading this?
  • What should the reader understand, feel, or do after reading it?
  • Which claims, names, or terms cannot change?
  • Should the markdown be preserved, reduced, or rebuilt?
  • Which voice mode? Default, human texture, or learning mode?
  • If learning mode: are samples available?

Final Verify Pass

Treat final-pass-checklist.md as a step you run, not a list you glance at. This is the lightest form of a generate → check → revise loop: one model, one conversation, no extra agents.

  1. Re-read the rewrite against every checklist item.
  2. Run the deterministic gate at the bottom of that file when you can use a shell: a one-line grep for the typographic tells and the fixed jargon list. It catches the exact strings self-review skims past.
  3. If any check fails, or the optional five-dimension score is below 35 / 50, do one targeted revision: fix only the flagged spots, do not rewrite the whole piece. Then re-check once.
  4. Stop after at most two revision rounds. If something still fails on a real trade-off (a claim you cannot verify, a house style that genuinely wants the formatting), leave it and say so in the closing note.

In learning mode, add one check: compare the output's sentence rhythm and punctuation against the numbers recorded in the host profile, and nudge it back if it has drifted.

Response Format

Return the revised text directly.

Add a short note only when one of these is true:

  • The structure changed materially.
  • Facts were ambiguous in the source.
  • Proof is missing and the stronger version would require inventing it.
  • The source asked for a very specific voice that conflicts with this skill.
  • A non-default voice mode was used, so name it ("Ran in human-texture mode" / "Applied host profile X").

When adding a note, keep it to three lines or fewer.

If the user asks for critique rather than a rewrite, list the main sources of AI smell first, then show representative fixes.

References

English-track:

Chinese-track:

Voice modes:

Assets:

© weijt606, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 13 other files (references, assets) in skills/anti-vibe-writing of weijt606/anti-vibe-writing.

  • SKILL.md
  • assets/final-pass-checklist.md
  • assets/host-profile-template.md
  • assets/rewrite-prompt-template.md
  • assets/style-extraction-prompt.md
  • references/before-after-benchmarks.md
  • references/chinese-before-after.md
  • references/chinese-patterns-to-remove.md
  • references/common-problems-and-fixes.md
  • references/human-passes.md
  • references/human-texture.md
  • references/learning-mode.md
  • references/patterns-to-remove.md
  • references/scenario-presets.md

Open the folder on GitHubat commit 3126f86

Compare with similar skills

Anti Vibe Writing 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.

Anti Vibe Writing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Anti Vibe Writing this skillweijt606/anti-vibe-writing120—~3.9kAutomated safety check: PassMIT
Humanized Chinese Writing PolisherEthanYoQ/agent-xiaohongshu-workbench154—~1.1kAutomated safety check: PassMIT
DeslopifyJuliusBrussee/skills162—~1.9kAutomated safety check: PassMIT
CopywritingZJU-REAL/Easel3.4k—~883Automated safety check: PassApache-2.0
Social ContentZJU-REAL/Easel3.4k—~792Automated safety check: PassApache-2.0
Persian Writingali2000hos/persian-writing368—~4.4kAutomated safety check: WarnMIT

Similar skills

  • Humanized Chinese Writing Polisher

    EthanYoQ/agent-xiaohongshu-workbench

    A skill your agent uses when a user asks to polish, rewrite, humanize, de-AI, localize, or oralize Chinese writing, including short-video scripts, articles, social posts, speeches, newsletters, and…

    154 GitHub stars~1.1k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Deslopify

    JuliusBrussee/skills

    De-slop pass for any text. An agent skill from JuliusBrussee/skills.

    162 GitHub stars~1.9k tokensUpdated 2 mo ago
    Writing & ContentAuto-check passed
  • Copywriting

    ZJU-REAL/Easel

    国内带货转化营销文案:提炼卖点并产出种草、信息流广告、活动促销、电商详情页或落地页的标题、正文和 CTA. An agent skill from ZJU-REAL/Easel.

    3.4k GitHub stars~883 tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Social Content

    ZJU-REAL/Easel

    通用多平台社媒内容(单条/兜底):钩子文案、正文、标签策略和互动引导,主打涨粉/互动/内容运营, 支持微博/抖音/B站/知乎/公众号/X 等;平台不确定或要多平台一次成稿时的默认选择。

    3.4k GitHub stars~792 tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Persian Writing

    ali2000hos/persian-writing

    Write natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables.

    368 GitHub stars~4.4k tokensUpdated 7 days ago
    Documents & OfficeAuto-check: warnings
  • Unslop Text

    JCarterJohnson/vibecoded-design-tells

    Strips the cues that make prose read as AI-generated and forces a deliberate human voice instead of the model's default register.

    513 GitHub stars~3.5k tokensUpdated 3 mo ago
    DevelopmentAuto-check passed

Questions about Anti Vibe Writing

What does Anti Vibe Writing do?

A skill your agent uses when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese. Anti Vibe Writing is an agent skill from weijt606/anti-vibe-writing. Use when the user wants to humanize, de-AI, polish, or warm up an AI-generated document, in English or Chinese.

When should I use Anti Vibe Writing?

Anti Vibe Writing fits situations like: the user wants to humanize; warm up an AI-generated document.

How do I install Anti Vibe Writing in Claude Code?

Run `npx skills add weijt606/anti-vibe-writing --skill anti-vibe-writing -a claude-code`. Or copy the skill folder (skills/anti-vibe-writing in weijt606/anti-vibe-writing) into .claude/skills/anti-vibe-writing in your project. Claude Code loads it when a task matches its description.

How do I install Anti Vibe Writing in Codex?

Run `npx skills add weijt606/anti-vibe-writing --skill anti-vibe-writing -a codex`. Or copy the skill folder (skills/anti-vibe-writing in weijt606/anti-vibe-writing) into .agents/skills/anti-vibe-writing in your project. Codex loads it when a task matches its description.

Can I use Anti Vibe Writing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add weijt606/anti-vibe-writing --skill anti-vibe-writing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/anti-vibe-writing, .gemini/skills/anti-vibe-writing, .github/skills/anti-vibe-writing and .opencode/skills/anti-vibe-writing in your project.

What does Anti Vibe Writing need to run?

SKILL.md names no scripts, command-line tools or credentials: Anti Vibe Writing is instructions for the agent only.

Does Anti Vibe Writing access the network?

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.

Is Anti Vibe Writing safe to install?

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.

What licence does Anti Vibe Writing use?

Anti Vibe Writing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Anti Vibe Writing use?

About 3.9k tokens (SKILL.md is roughly 16k 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.

What are the alternatives to Anti Vibe Writing?

Skills that share tags, products or a category with Anti Vibe Writing: Humanized Chinese Writing Polisher (EthanYoQ/agent-xiaohongshu-workbench, 154 stars), Deslopify (JuliusBrussee/skills, 162 stars), Copywriting (ZJU-REAL/Easel, 3.4k stars) and Social Content (ZJU-REAL/Easel, 3.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Anti Vibe Writing?

weijt606 (a GitHub user) maintains it in weijt606/anti-vibe-writing, which has 120 GitHub stars. The repository was last updated on August 8, 2026.

Source: weijt606/anti-vibe-writing on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.