`human-writing`: The Repo That Turns AI Prose Into a Writing System

A deep dive into the Skill that fights AI flavor with material checks, rhetorical rules, and a Python linter for sentence rhythm.

8 min read View on GitHub More from KKKKhazix

A control room built around a manuscript, with dials for material density, rhythm variation, rhetorical reversal, and translationese. A hand pulls a lever that allows only text with real substance to proceed, while hollow pages are rejected at a gate. The image explains that this repo treats writing quality as a governed process, not a cosmetic rewrite.
The repo behaves less like a prompt and more like an editorial control panel.
Key Takeaways

Most AI writing tools start with fluency and hope the result passes. `human-writing` starts with the opposite assumption: prose can sound smooth and still be empty. So the repo builds a gate around the whole act of writing, from material intake to revision checks, and treats “human-sounding Chinese” as an engineering problem.

That is why the project feels more like a writing constitution than a prompt pack. It does not merely say what to write. It decides whether there is enough substance to write at all, what kinds of rhetorical moves are allowed, and how the output should be inspected before it goes out the door.

Why AI-Flavored Chinese Feels Wrong

The repo targets a familiar failure mode in Chinese LLM output: sentences that are too even, transitions that feel prepackaged, and paragraphs that keep balancing one half against another without adding anything new. The writing is technically coherent, but it feels translated, over-smoothed, and strangely airless.

SignalAI-flavored proseHuman-flavored prose
RhythmSentences arrive with near-identical length and cadence.Sentence length shifts naturally with the thought.
StructureEach paragraph leans on tidy reversals and balanced formulas.The prose can wander, compress, or break pattern when the point demands it.
SubstancePadding fills space when the material runs thin.The text refuses to stretch beyond what the source material can support.
ToneCorporate, translated, and over-explained.Specific, situated, and willing to sound slightly irregular.

In other words, `human-writing` is not trying to make AI sound like a polished brochure. It is trying to make it sound like someone with a point of view, a memory, and a reason to choose one sentence shape over another.

让模型写出来的文章读起来像一个具体的人在说话——知道一些事,有判断,偶尔岔开一句,还能接回来。

KKKKhazix (数字生命卡兹克), Project Creator & AI KOL · KKKKhazix/human-writing GitHub README

The Gatekeeper: Material Before Fluency

The core rule in `SKILL.md` is a material check. Before the model expands a draft, it has to answer a basic question: is there enough factual or narrative material to justify the length? If the answer is no, the system should not pad. It should ask for more input, more research, or a narrower scope.

The repo's first move is not to write better. It is to refuse writing when the input is too thin.

Material check
  ├── enough facts or scene detail?
  │     ├── yes → draft
  │     └── no  → ask for more material
  └── enough provenance for claims?
        ├── yes → continue
        └── no  → separate reality from invention

That rule is the sharpest part of the project. It turns filler from a style problem into a permission problem. The model is not invited to hallucinate its way toward length.

How the Repo Is Organized Like a Writing Stack

The repository is modular in a way that mirrors the job it wants the model to do. `SKILL.md` acts like the kernel. The `references/` directory holds genre rules, `scripts/` contains the linter, `dist/` provides a lighter version for direct use, and `agents/` handles integration for agent workflows.

That structure matters because the project is not only teaching language. It is separating responsibilities. One layer decides what counts as acceptable material, another layer governs genre and provenance, and another layer audits the final rhythm.

A close-up assembly line of sentence blocks moving from left to right. The left side shows rigid, identical chunks with the same length, while the right side shows a human hand rearranging the blocks into varied lengths. An inspector stamp marks one line as too balanced and another as approved. The image explains how the repo tries to restore natural rhythm, not just correct wording.
The mid-article view is smaller and tighter: rhythm, not architecture, is the subject.

The Real Innovation: Banning Rhetorical Moves

The project’s best idea is not that it bans a few bad phrases. It is that it starts banning rhetorical actions. That matters because AI prose often does not fail at vocabulary. It fails at posture. It sets up fake opposition, performs tidy reversals, and creates a sense of depth without adding evidence.

The quoted changelog line makes that explicit: version 1.1 moves the defense from the surface to the move itself. In practice, that means the system is less interested in detecting whether a sentence says “not A, but B” than in catching the deeper habit of manufacturing a false problem just to stage a neat solution.

1.1 把防线从字面挪到动作:禁的是「先给读者立一个他没有的误解,再推翻它」这件事本身,不管穿什么外衣。

KKKKhazix (数字生命卡兹克), Project Creator & AI KOL · human-writing CHANGELOG/README

That shift is what makes the repo feel unusually mature. It is not playing whack-a-mole with surface patterns. It is trying to outlaw a class of rhetorical shortcuts.

The linter closes the loop

`scripts/check_prose.py` makes the philosophy measurable. The script looks for forbidden patterns, but it also looks for rhythm. Repeated sentence lengths are a warning sign because machine prose often settles into a steady, over-controlled cadence.

What the linter catchesWhat it cannot catch
Obvious forbidden structures and repeated phrasing.Genuine insight delivered in a clunky sentence.
Over-regular sentence lengths.A clever paragraph that still feels lifeless.
Lazy reversal moves and pattern-heavy prose.A smart writer who intentionally uses repetition well.
Mechanical pacing that resembles output from a template.The full social context that tells a reader why prose feels sincere.

That limitation is not a flaw. It is the point. A linter can surface risk, but it cannot replace editorial judgment. `human-writing` respects that boundary even as it tries to automate as much of the check as possible.

Where It Stands Among Other Writing Tools

The easiest comparison is with tools that chase detector bypasses or swap one voice for another. Those products often optimize for camouflage. `human-writing` optimizes for method. It asks how the draft is built, not how to make a finished paragraph look less synthetic.

ApproachGoalMethodWeaknessHow `human-writing` differs
Keyword blacklistRemove obvious AI markersBan specific words or phrasesEasy to evade and too shallowBans rhetorical behaviors, not just strings
Humanizer toolsMake output pass as humanRewrite for surface plausibilityCan preserve fluff and emptinessRefuses padding when material is thin
Voice-prompt packsImitate a style or personalityPrompt for tonal mimicryOften ignores structure and evidenceTreats writing as a workflow with gates and checks
`human-writing`Produce grounded, human-feeling proseMaterial gating, genre rules, revision, lintingMore rigid than generic toolsMethodology-first, not detector-first

That is why the repo stands out. It is not trying to win a stealth game against classifiers. It is trying to codify editorial discipline.

The bigger implication is simple: writing quality can be operationalized. Not perfectly, not universally, but enough to make a real difference in whether a draft feels alive or merely finished.

What This Repo Says About the Future of Writing

`human-writing` suggests a future where good prose is less about taste alone and more about enforceable constraints. Material has to justify length. Genre has to define what counts as evidence. Rhythm has to vary enough to feel spoken. That is a narrow definition of writing, but it is a useful one.

The project does not claim to make AI writing indistinguishable from human writing. It aims lower and sharper than that: make the model stop reaching for empty polish, and make it earn every paragraph it produces.