First confirm which judgments, trade-offs, and uncertainties in the article truly belong to the author, then audit the section structure, and only last use computable metrics to handle boilerplate and rhythm. The output is an authorship ledger, a section report with source-text evidence, the revised manuscript, and a before-and-after comparison of surface metrics.
Triggers
Activate when
- "This draft is too AI-flavored, help me revise it", "polish it so it reads like a human wrote it", "add some human touch"
- "Check it before posting on the official account", but do not promise passing platform detection, and do not output an AI probability
- "Measure how AI-like this piece is", "which sentences most look like they were written by a machine"
- "humanize this Chinese draft" / "de-AI my article"
- "help me make this read like a human wrote it"
- "use the metrics to check how AI this draft sounds"
Do not activate when
- If you only want to write a new draft and it does not involve removing the AI flavor → use
lov-writing-styleand other style-related capabilities. - If you only want a detection report and no rewriting → still use this Skill, but stop at Step 3.
- If you want to imitate the style of a specific author →
lov-style-clone。 - English manuscripts → this engine's metrics ("的" character rate, four-character patterns, sentence and clause segmentation) only hold for Chinese.
Internal workflows
This repository exposes only lov-human-writing one Skill. The four stages are an internal workflow read on demand, with no independent names, triggers, or installation entry points:
references/workflows/authorship-ledger.md— authorship ledger;references/workflows/discourse-audit.md— section audit;references/workflows/editorial-rewrite.md— evidence-constrained rewriting;references/workflows/surface-audit.md— 30 surface metrics and re-testing.
A complete task executes the four stages in order; when only auditing, skip rewriting; when only wanting deterministic metrics, read the surface workflow.
User Profile (cross-session)
Every generated Skill is connected to the shared user-profile/v1 contract in
skill.yaml. Read the shared user, brand, workspace, preferences, and this
Skill's skills.<skill_id> namespace at the start of every run. Keep the source
portable: resolved personal values belong in the shared profile, never here.
This Skill persists two kinds of values:
records.default_profile— the commonly used metric profile (wechat/zhuque/neutral/thesis)。records.baseline_path— the path to the personal baseline JSON.This is this Skill's most important persisted item: the default thresholds come from a batch of public Chinese long-form articles, and the personal baseline is the accurate characterization of the user's own style.
When the user directly states a durable preference or brand fact, persist it
through scripts/profile_store.py and report the saved profile path. Put
Skill-specific values under records.<field>; use brand.<field> or
user.<field> for shared values. Do not persist inferred secrets or credentials.
See references/user-profile.md for the complete contract.
Skill Group Composition
Read references/skill-composition.md before deciding whether to invoke or
extend any adjacent capability. The record distinguishes optional upstream and
downstream handoffs from embedded Kit modules. Do not silently depend on a
sibling Skill that is not shipped with this source.
What this Kit does and does not do
Does: first trace the article's propositions and structural choices, then check section-level issues such as over-explanation, single-line causality, disappearing counterexamples, and forced closure; finally compare 30 text statistics against the measured distribution of 351 human-written Chinese long-form articles.
Does not: judge whether an article was generated by AI.fail The accurate meaning of this is "boundary-crossing density exceeds that of 90% of human long-form articles". When reporting to users, do not phrase it as "AI detected" or "AI probability X%". The discriminative side (recall on AI drafts) has not yet been validated with labeled corpora; the limitations are recorded in
references/benchmark.md Section 5 — answer accordingly when asked about accuracy, and do not make up numbers.
Workflow (MANDATORY)
You MUST follow these steps in order.
Step 0: Resolve skill root, dependencies, and runtime context
- Use
SKILL_DIRif the environment provides it. - Otherwise infer the installed skill directory from the current skill context.
- Verify every required local module, reference, script, and asset before work.
- If a required resource is missing, name its expected relative path and stop before producing a partial result.
export SKILL_DIR="/path/to/lov-human-writing"
Resolve context.profile on every invocation. The precedence is current request,
project context, Skill-specific profile records, shared preferences, shared
brand/user profile, then safe defaults. A direct user statement about a durable
preference or brand fact should be saved with scripts/profile_store.py record
using --confirm, followed by a concise saved-path report.
Step 1: Determine input, task boundaries, and profile
Input: file path preferred; if the user pastes directly, save it to a temporary file and then pass --input, to avoid
--text hitting the shell argument length limit on long drafts.
Choose the profile by publication target; do not ask the user "which profile do you want", infer from the scenario:
| profile | Applicable | Characteristics |
|---|---|---|
wechat |
Official account long-form (default) | Suited to long paragraphs, first person, and mobile reading rhythm |
zhuque |
High-intensity surface audit | Tighten structural uniformity and boilerplate; only make editorial diagnoses |
neutral |
General nonfiction | Do not presuppose a colloquial style |
thesis |
Academic/formal | Allow long written-language sentences, ban emoji, tighten bold |
If records.baseline_path exists, also pass -b。
Step 2: Build the authorship ledger
Fully execute references/workflows/authorship-ledger.md. Record internally:
- Where the original question comes from, and which conclusions are explicitly given by the user;
- Real experiences, decisions, failures, and emotions that can be written in the first person;
- What the author chooses to keep, delete, or leave unexplained for now;
- Counterexamples, alternative explanations, interests, and unresolved issues;
- Do not add experiences, numbers, quotations, motives, or causal relations.
When the input has no authorial judgment, do not manufacture a more human-seeming position on the author's behalf. When the user only wants a surface-level report,
you may use the surface-only pipeline and clearly state that authorship acceptance has not been completed.
Step 3: Audit the discourse structure
Fully execute references/workflows/discourse-audit.md and
references/authorship-integrity.md. Provide original-text evidence item by item; do not output a single AI score:
thesis_provenance: Whether the proposition can be traced back to the input or the author;causal_compression: Whether a complex problem is compressed into a single cause;counterevidence_survival: Whether counterexamples truly change the argument;closure_pressure: Whether the ending repeats a summary, elevates the meaning, or forces a call to action;reader_inference_budget: Whether every layer of meaning is explained for the reader;structural_asymmetry: Whether sections are forcibly balanced;author_decision_trace: Whether key deletions/retentions and structural choices are supported by the material.
These dimensions are editorial issues, not identity features. Do not add irrelevant subplots, time jumps, open endings, or deliberate incompleteness just to seem human; when the material is simple, clarity and linearity can be the correct choice.
Step 4: Measure surface features
python3 "$SKILL_DIR/scripts/measure.py" -i draft.md -p wechat
Optional parameters:-b baseline.json Use a personal baseline to override the default range;-f json take the structured result;
--no-locate only metrics, no targets.
Step 5: Interpret and report
Report conclusion first, three things, do not paste raw tables:
- Overall verdict and pressure score (e.g.,
fail, pressure score 11, human baseline p75=7 / p90=9). - Out-of-range metrics, sorted by modifiability—boilerplate and structure can be fixed immediately, while rhythm requires rewriting sentences.
- Discourse issues and engine target sentences. These are the direct inputs for structural rewriting and local rewriting, respectively.
If the user only wants a report, stop here. If rewriting is wanted, continue.
Step 6: Targeted rewriting, structure first, surface later
Fully execute references/workflows/editorial-rewrite.md. First fix authorship or discourse issues, then handle surface
out-of-range items. Default to local edits; reorganize related paragraphs only when there is genuine evidence of problems with causal order, section organization, or ending closure, and do not perform unfounded full-text rewrites.
Mapping from metrics to fixes:
| Out-of-range metric | Fix |
|---|---|
sent_len_cv / max_uniform_run too low |
Split long sentences, merge short ones, create alternation between long and short; do not make them uniform |
short_sent_ratio too low |
Make key judgments stand alone as sentences |
para_len_cv / solo_para_ratio too low |
Use single-sentence paragraphs at transitions and emphases |
hard_phrase_per_1k / soft_phrase_per_1k |
Delete boilerplate and replace it with concrete events ("With the development of AI" → "The week ChatGPT was released") |
transition_density Too high |
Delete "first/second/in addition/in summary"; let the content connect on its own |
idiom4_per_1k / tail_nominal_per_1k |
Delete four-character phrases and "reflects/demonstrates"-style endings |
neg_parallel_per_1k |
Break up the "not... but..." parallelism |
rule_of_three_per_1k Too high |
Change three-item lists to two or four items, or just narrate directly |
inline_heading_ratio / bullet_ratio / bold_per_1k Too high |
Change lists back to paragraph prose; delete decorative bold |
heading_per_1k Too high |
Merge fragmented headings |
digit_per_1k / concrete_anchor_count Too low |
Add specific times, amounts, versions, quantities |
first_person_per_1k Too low |
Add first-person experience and judgment (neutral/thesis not applicable to this tier) |
hedge_per_1k Too high |
Delete "may/perhaps/to some extent"; state things definitively |
de_ratio Too high |
Break up long "的"-linked modifiers |
lone_dash_per_1k |
Single em dash — change to Chinese double em dash —— |
quote_style_mixed |
Unify to one set of quotation marks |
emoji_per_1k |
Delete emoji |
When rewriting, hold to three rules:
- Don't touch facts. Don't add dates, numbers, names, or quotations. If specific details are missing, ask the user; don't make them up.
- Don't touch stance or technical terms. Colloquializing is a means, not a way to turn a professional piece into chit-chat.
- Don't write filler to hit metrics. Metrics are a byproduct of a good piece, not the goal; turning "add first person" into forcing in "I think" only makes it harder to read.
- Don't manufacture human noise. Don't deliberately add typos, verbal tics, irrelevant side plots, contradictions, emotion, or open endings.
- Don't give the article a uniform closing. The ending is determined by the material; it can be action, judgment, fact, question, or stop at something unresolved; do not force a return to values, the future, freedom, or "the meaning of being human."
Step 7: Two-layer retest acceptance
python3 "$SKILL_DIR/scripts/measure.py" -i draft-v2.md -p wechat \
--compare draft.md
First rerun the discourse audit to confirm the problems are fixed and that the author's judgment, counterexamples, and uncertainty have not been lost; then run
--compare output the old value → new value and status transition for each item. Surface-level acceptance criteria: the target metric status improves,
andno other metric has been pushed out of bounds—overdoing the cliché removal will make hedge_per_1k or
short_sent_ratio cross the line in the opposite direction. If the pressure score hasn't dropped, the rewrite didn't take effect; redo Step 4, and don't
treat an unimproved result as done.
Step 8: Delivery
- First call
lov-branding-consistency, but only check the target medium, audience, brand role, and reader-visible fields; do not use brand review to rewrite the author's stance, body facts, quotations, or already-accepted personal voice. When there are no brand or component issues, zero modifications are allowed. - Write the rewritten draft to
./output/, named "original filename +-human-v0.x.md」。 - Report the key changes in authorship and discourse structure, pressure score changes, metrics fixed, and items still retained and their material basis.
- Do not claim "passed AI detection." What can be said is that the metrics have returned to the human distribution range.
Step 9: Build a personal baseline (strongly recommended)
The default thresholds come from a batch of public Chinese long-form articles, not the user's own style. When there are ≥ 30 of the user's own past drafts:
python3 "$SKILL_DIR/scripts/measure.py" --calibrate ~/writing/ --out baseline.json
Save the path into records.baseline_path. The corpus must bewritten by the user personallyManuscripts mixed with AI-generated content or spoken transcriptions will pollute the baseline, and instead cause the engine to fail (references/benchmark.md
Section 1 records a real pollution incident and cleaning rules).
Validate the deliverable
- The propositions, judgments, and retention/deletion decisions in the authorship ledger all have input evidence.
- The chapter report cites original evidence item by item, without AI probability or platform approval promises.
- The retest was actually run, and the metric improvements are supported by
--compareoutput, not based on feelings. - Facts, positions, terminology, counterexamples, and intentionally preserved uncertainty were not altered.
- The report does not present distribution localization as AI identity determination.
- The output path and file names conform to the convention.
Dependencies
lov-branding-consistency is only responsible for the audience and brand context of the final visible copy. Core editing and metrics use the
Python 3.8+ standard library, with no third-party Python dependencies.
References
references/benchmark.md— all sources of thresholds and judgment scales, reproduction methods, known limitations.references/authorship-integrity.md— authorship ledger, seven-dimensional chapter audit, and nonfiction boundaries.references/workflows/— four internal stages; not distributed as independent Skills.references/skill-composition.md— division of labor and handoff with adjacent Skills.references/user-profile.md— Profile contract.