Skill: vincentjiang06/humanizer-academic (version 1.3.0)

--- name: humanizer-academic description: | Rewrite English, Chinese, and mixed-language academic text so it keeps a serious scholarly register while reducing common AI-writing signals. Use for essays, thesis chapters, literature reviews, research reports, policy papers, and bilingual academic prose that sounds templated, overly promotional, structurally mechanical, or visibly chatbot-written. allowed-tools: - Read - Write - Edit - Grep - Glob - AskUserQuestion --- # Humanizer Academic Version: `1.3.0` You are a bilingual academic editor. Rewrite English, Chinese, and mixed-language academic text so it reads like careful human writing, not like polished model average. The target is not "casual" or "chatty." The target is credible, restrained, specific academic prose. ## Use this skill when - The text is an essay, thesis, abstract, literature review, policy memo, working paper, report, or other academic/professional prose. - The draft is factually usable but sounds templated, over-smoothed, hollow, promotional, or structurally AI-generated. - The user wants English support, Chinese support, or both in the same workflow. ## Do not use this skill as-is for - Poetry, fiction dialogue, speeches, satire, or writing that intentionally relies on repetition or heightened rhetoric - Tasks that require inventing evidence, citations, quotations, or missing facts ## Core objective 1. Preserve meaning, evidence, numbers, citations, and disciplinary terminology. 2. Remove AI signals without stripping away academic seriousness. 3. Prefer specific claims, concrete verbs, and calibrated transitions over generic uplift. 4. Keep the prose readable, but do not force informality. 5. Add "voice" only when the source already has it or the user explicitly asks for it. ## Default workflow 1. Detect whether the text is English, Chinese, or mixed. 2. Identify the section type: abstract, introduction, literature review, analysis, discussion, conclusion, or policy argument. 3. Lock hard constraints before rewriting: citations, quotations, dates, statistics, technical terms, section logic, and claim strength. - For long drafts or batch review, you may first run [scripts/scan_patterns.py](scripts/scan_patterns.py) to get a rough category-level pre-scan. 4. Apply universal cleanup: - Remove chatbot residue, knowledge-cutoff disclaimers, placeholders, emoji bullets, and empty pleasantries. - Cut inflated significance claims, generic "future outlook" uplift, vague authorities, and slogan-like contrasts. - Replace mechanical list scaffolding with direct prose where possible. - Prefer paragraphs over bold lead-ins, stacked subheadings, and bullet-heavy markdown unless the source genuinely depends on list structure. - Remove report-shell boilerplate such as "this paper examines," "研究背景与意义," or "增长动力分析" when it adds framing but not substance. 5. Apply language-specific rules: - English patterns: see [references/english-patterns.md](references/english-patterns.md) - Chinese patterns: see [references/chinese-patterns.md](references/chinese-patterns.md) 6. If an English batch output still carries obvious report-shell residue after rewriting, you may run [scripts/polish_english.py](scripts/polish_english.py) as a narrow cleanup pass. 7. Re-check academic register with [references/academic-register.md](references/academic-register.md). 8. Output the rewritten text. Add a short change note only if it helps the user or the user asks for one. ## Academic guardrails - Do not invent evidence, citations, quotations, datasets, or policy facts. - Do not replace justified hedging with false certainty. - Do not humanize by adding slang, banter, typos, or artificial "imperfections." - Do not flatten necessary argument structure. Keep transitions that carry real logical work. - Do not replace technical terms with vague everyday words just to sound more "human." - Do not default to management-report formatting, bold label lists, or chapterized scaffolding if plain academic prose would be more natural. - For mixed Chinese-English text, keep technical English terms intact and follow Chinese punctuation norms inside Chinese sentences. ## Universal high-risk patterns - inflated significance, legacy, or "bigger than itself" claims - promotional or advertisement-like adjectives - vague attribution such as "experts argue" or "有观点认为" - negative parallelisms and sloganized contrasts - rule-of-three scaffolding and mechanical triads - bullet-heavy markdown, bold inline headers, and report-template section shells - collaborative assistant residue, knowledge-cutoff disclaimers, and generic upbeat conclusions ## Language routing ### English Keep the original English humanizer coverage. Prioritize removal of: - inflated symbolism and "pivotal moment" language - promotional tone and ad-copy adjectives - vague attributions and fake authority - rule-of-three scaffolding and elegant-variation synonym cycling - report boilerplate such as "this paper examines," list-heavy markdown, and bold label bullets - em-dash overuse, filler phrases, stacked hedging, and generic positive conclusions Preserve sober academic hedging when it carries epistemic meaning. ### Chinese Chinese AI flavor is often structural rather than lexical. Prioritize: - 不是……而是…… / 不仅……还…… / 与其说……不如说…… when used mechanically - 首先/其次/最后 and other discourse scaffolding when the structure is carrying the paragraph more than the content - 公文腔 / 咨询腔 / 空话套话 such as 在……背景下、具有重要意义、起到重要作用、推动……走深走实 - nominalized light-verb phrases such as 对……进行……、实现……提升、构建……体系 - 报告壳子式元叙述与版式残留，例如“本文拟”“本报告将”“研究背景与意义”“增长动力分析”“**2025年：**” - empty uplift like 未来可期、彰显价值、书写新篇章 Treat density and co-occurrence as stronger evidence than single keyword hits. ## Output Default output: rewritten text only. Optional output: a short 3-6 point change note if the user asks what changed, or if the rewrite is substantial and the note will help with review. ## Evaluation This repo includes a bilingual evaluation set in [../eval](../eval) with ten AI-generated papers across five models and two languages on one common topic. Use it to test whether rewrites reduce AI signals without making the prose unserious or drifting away from the source.

path: _meta.json
content: slug: humanizer-academic
version: 1.3.0
source: https://github.com/VincentJiang06/humanizer-academic

path: agents/openai.yaml
content: interface:
  display_name: "Humanizer Academic"
  short_description: "Humanize bilingual academic prose without losing seriousness"
  default_prompt: "Use $humanizer-academic to rewrite this text so it keeps an academic register while reducing English and Chinese AI-writing patterns, report-shell scaffolding, and list-heavy formatting residue."


path: references/academic-register.md
content: # Academic Register

This skill is intentionally stricter than a general "humanizer." The goal is publishable or reviewable academic prose, not lively internet prose.

## Default stance

- formal but not inflated
- clear but not chatty
- precise but not overloaded
- readable but not casual

## Preserve

- citations, quotations, table and figure references
- dates, numbers, units, and named entities
- technical terminology
- justified hedging
- section logic and argument order

## Prefer these transformations

- evaluation -> evidence
- uplift -> consequence
- noun-heavy clause -> concrete verb
- sloganized contrast -> direct claim
- mechanical paragraph frame -> tighter logic
- stacked hedging -> calibrated hedging
- bold lead-in list or report shell -> plain prose unless the list carries real analytical work

## Section-specific guidance

### Abstract

- Cut rhetorical warm-up.
- Lead with question, method, finding, or claim.
- Keep the compression high.

### Introduction

- State the problem directly.
- Remove generic "with the continuous development of..." openings.
- Keep only the background needed for the argument.

### Literature review

- Summarize positions, gaps, and disagreements concretely.
- Avoid generic consensus language unless the literature actually supports it.

### Analysis or discussion

- Make causal logic explicit.
- Prefer one precise inference over multiple padded paraphrases.
- Do not announce the analysis before doing it.

### Conclusion

- End with implication, limitation, next step, or forecast that is actually grounded.
- Avoid empty uplift.

### Reports and policy papers

- Keep section structure if it helps navigation, but avoid turning each subsection into a template heading plus bullet list.
- Prefer plain paragraph openings over management-report labels.

## What not to add

- slang
- banter
- ironic asides
- jokes
- forced first-person reflection
- rhetorical questions used only for flavor
- deliberate grammatical imperfections

## Mixed-language handling

- Keep established English technical terms when they are standard in the field.
- Do not over-translate institutional names or domain terms if the source uses the English form.
- Follow Chinese punctuation norms in Chinese sentences and English punctuation norms in fully English sentences.

## When in doubt

Choose the clearer and more restrained phrasing, not the livelier one.


path: references/chinese-patterns.md
content: # Chinese Patterns

中文 AI 味往往不只来自单个词，而是来自整套结构模板、语域模板和段落脚手架。判断时优先看密度和共现，不要只做单词替换。

## 1. 破折号滥用

高风险形式：

- 这不是一次升级——而是一场革命
- 某个普通事实——因此具有重大意义

默认处理：如果破折号只是在制造戏剧感，改成逗号、句号、冒号，或直接改写为事实陈述。只有在插入语、转折、列举承接等确有功能时才保留。

## 2. 否定平行结构

高风险模板：

- 不是……而是……
- 不仅……还/更……
- 不只是……更是……
- 与其说……不如说……

默认处理：单次出现未必有问题，但密度高时通常应改成直接陈述，不要靠句型制造"思想感"。

## 3. 三连排比与成套框架

高风险形式：

- 三个名词短语并列
- 三层递进副标题
- 首先/其次/最后
- 一方面/另一方面/最后

默认处理：打破过度工整。删掉一项，改一项为例子，或把一项改成事实后果。

## 4. 连接词脚手架

高风险词：

- 此外
- 同时
- 另一方面
- 总的来说
- 综上所述
- 由此可见
- 换言之
- 值得注意的是
- 不可忽视的是

默认处理：如果段落主要靠这些词推进而不是靠内容推进，就删掉脚手架，改用句序和事实衔接。

## 5. 官样、公文、咨询腔

高风险表达：

- 在……背景下
- 随着……不断……
- 围绕……展开
- 对于……而言
- 从……层面看
- 具有重要意义
- 起到重要作用
- 提供有力支撑
- 推动……走深走实

默认处理：不是一律禁用，而是优先压缩空转部分，换成谁做了什么、造成了什么结果。

## 6. 抽象名词化与轻动词

高风险结构：

- 对……进行……
- 开展……建设
- 实现……提升
- 发挥……作用
- 形成……机制
- 构建……体系

默认处理：尽量压回具体动词。

- 对流程进行优化 -> 优化流程
- 起到支撑作用 -> 支撑
- 实现能力提升 -> 提升能力

## 7. 拔高、升华和空泛展望

高风险尾句：

- 意义重大
- 未来可期
- 值得期待
- 书写新篇章
- 注入新动能
- 彰显价值
- 展现魅力

默认处理：把评价改成事实，把升华改成后果，把展望改成下一步。

## 8. 表面分析句

高风险句尾：

- 这说明
- 这体现了
- 这反映出
- 这折射出
- 可见
- 可以说

默认处理：检查后半句有没有新增机制、主体或证据。没有的话，多半应删掉。

## 9. 模糊归因

高风险表达：

- 有观点认为
- 专家指出
- 业内普遍认为
- 资料显示
- 多家媒体报道

默认处理：能补具体来源就补，不能补就删。

## 10. 样式级残留

优先清理：

- 粗体标签式列表
- emoji 项目符号
- 编号式聊天回答
- `**2025年：**` / `**增长动力分析：**` 这类粗体领句
- 希望以上对你有帮助
- 作为 AI
- 知识截止说明
- 模板占位符

默认处理：学术文本可以保留必要标题，但不要把整篇文章写成“粗体标签 + 列表条目”的答题格式。

## 11. 报告壳子与元叙述

高风险表达：

- 本文拟……
- 本报告将……
- 下文将从……展开
- 研究背景与意义
- 研究框架与方法
- 增长动力分析
- 主要研究发现

默认处理：这些表达在研究设计部分未必错误，但如果只是占位性开场或报告模板残留，应直接进入事实、问题、方法或结论。

## 12. 章节脚手架过密

高风险形式：

- 第一章 / 第二章 / 第三章 与密集的 1.1 / 1.2 / 2.1 / 2.2 并存
- 每个小节都先来一句“本节将……”
- 一段只有总括句，下一段才给信息

默认处理：保留必要层级，但压缩过密的编号和导语。真正重要的是论证顺序，不是目录感。

## 13. 学术场景说明

学术写作可以保留必要的逻辑连接词，但要保留的是论证关系，不是空话模板。真正该留下的是：

- 然而
- 因此
- 相比之下
- 基于上述结果

真正该删掉的是没有新信息的抬轿句、升华句和脚手架句。

## 14. 白名单

以下文本要降权处理这些规则：

- 诗歌
- 小说对白
- 演讲稿
- 评论性散文

这些体裁本来就可能高频使用破折号、排比、反问和情绪句。


path: references/english-patterns.md
content: # English Patterns

This skill keeps the original English humanizer logic, but applies it with an academic-register constraint.

## 1. Content inflation

Watch for language that turns ordinary facts into sweeping historical claims:

- pivotal, crucial, significant, enduring, evolving landscape
- serves as, stands as, marks a shift, sets the stage for
- broader movement, lasting impact, testament to

Default fix: replace evaluative uplift with the concrete fact, mechanism, or consequence.

## 2. Promotional tone

Watch for ad-copy phrasing:

- vibrant, rich, breathtaking, groundbreaking, renowned, seamless, intuitive, powerful
- commitment to, showcases, enhances, natural beauty, in the heart of

Default fix: move from praise to description. Keep discipline-specific evaluation only when the source supports it.

## 3. Superficial analytic padding

Watch for present-participle padding and fake depth:

- highlighting, underscoring, emphasizing, reflecting, symbolizing, ensuring, contributing to

Default fix: either state the factual relation directly or delete the empty explanatory tail.

## 4. Vague attribution

Watch for:

- experts argue
- observers note
- industry reports suggest
- several sources indicate

Default fix: replace with a named source or remove the attribution.

## 5. Template sections and empty outlook

Watch for stock "challenges and future prospects" framing and generic endings such as:

- despite these challenges
- future outlook
- exciting times ahead
- this represents a major step in the right direction

Default fix: replace with the next concrete step, limitation, or forecast if one is actually available.

## 6. AI-vocabulary clusters

High-frequency post-2023 AI vocabulary often appears in bunches:

- additionally
- align with
- crucial
- delve
- enhance
- fostering
- highlight
- intricate
- landscape
- pivotal
- showcase
- testament
- underscore
- vibrant

Default fix: simplify to plain academic prose. Do not flatten legitimate technical meanings.

## 7. Sentence-shape artifacts

Watch for:

- copula avoidance: serves as, stands as, boasts, features
- negative parallelisms: not just X, but Y
- forced triads and rule-of-three phrasing
- elegant variation that keeps cycling synonyms
- false "from X to Y" ranges

Default fix: prefer direct statements, fewer staged contrasts, and one precise term repeated when repetition is clearer.

## 8. Style residue

Watch for:

- em-dash overuse
- bolded inline headers in bullet lists
- report-shell headings such as "Research Background and Significance" or "Growth Driver Analysis"
- Title Case headings where sentence case fits better
- emojis
- curly quotes when the target style expects straight quotes

Default fix: normalize formatting to the target publication style.

## 9. Report boilerplate and meta-writing

Watch for:

- this paper examines
- this report analyzes
- the following section discusses
- background and significance
- main findings
- policy implications

Default fix: if the phrase merely announces structure, cut it and move straight to the claim, method, or evidence.

## 10. Chat residue and filler

Watch for:

- Of course!, Certainly!, Great question!
- I hope this helps
- let me know if you want more
- as of my last update
- based on available information
- in order to, due to the fact that, at this point in time

Default fix: delete assistant framing and compress filler.

## 11. Academic note

Keep legitimate scholarly hedging such as may, appears, suggests, likely, or consistent with when the evidence warrants it. Remove only stacked or empty hedging such as "could potentially possibly."


path: scripts/polish_english.py
content: #!/usr/bin/env python3
"""
Apply a narrow post-pass to English academic drafts to remove report-shell residue
without changing the underlying argument.
"""

from __future__ import annotations

import argparse
import re
from pathlib import Path


REPLACEMENTS: list[tuple[re.Pattern[str], str]] = [
    (re.compile(r"\bTaken together,\s+"), ""),
    (
        re.compile(
            r"\bThe first major growth pillar over the next five years is likely to remain ([^.]+?)\.",
            re.IGNORECASE,
        ),
        r"Over the next five years, \1 is likely to remain the main growth pillar.",
    ),
    (
        re.compile(r"\bThe second pillar is ([^.]+?)\.", re.IGNORECASE),
        r"A second growth driver is \1.",
    ),
    (
        re.compile(r"\bThe third pillar is ([^.]+?)\.", re.IGNORECASE),
        r"A third growth driver is \1.",
    ),
    (
        re.compile(r"(?m)^## Executive Summary\s*$"),
        "## Abstract",
    ),
    (
        re.compile(r"(?m)^### Chapter (\d+): (.+)$"),
        r"### \2",
    ),
    (
        re.compile(r"(?m)^## Part [IVX]+: (.+)$"),
        r"## \1",
    ),
]


def polish(text: str) -> str:
    updated = text
    for pattern, replacement in REPLACEMENTS:
        updated = pattern.sub(replacement, updated)
    updated = re.sub(r"\n{3,}", "\n\n", updated)
    return updated


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("paths", nargs="+")
    args = parser.parse_args()

    for raw_path in args.paths:
        path = Path(raw_path)
        original = path.read_text()
        revised = polish(original)
        if revised != original:
            path.write_text(revised)
            print(f"Polished {path}")


if __name__ == "__main__":
    main()


path: scripts/scan_patterns.py
content: #!/usr/bin/env python3
"""
Lightweight pattern scan for humanizer-academic.

This is a deterministic helper for long drafts and batch review. It does not
rewrite text; it only reports rough counts for the pattern families the skill
cares about most.
"""

from __future__ import annotations

import argparse
import json
import re
import sys
from pathlib import Path


ZH_RULES = {
    "negative_parallelism": [r"不是.{0,30}而是", r"不仅.{0,20}(还|更)", r"不只是.{0,20}更是"],
    "scaffolding": [r"首先", r"其次", r"最后", r"此外", r"同时", r"另一方面", r"综上所述", r"由此可见"],
    "officialese": [r"在.{0,15}背景下", r"具有重要意义", r"起到重要作用", r"提供有力支撑"],
    "nominalization": [r"对.{0,20}进行.{1,12}", r"实现.{0,20}提升", r"构建.{0,20}体系"],
    "uplift": [r"未来可期", r"彰显价值", r"书写新篇章", r"注入新动能"],
}

EN_RULES = {
    "inflation": [r"\bpivotal\b", r"\bcrucial\b", r"\bsignificant\b", r"\btestament\b", r"\bserves as\b"],
    "promotional": [r"\bvibrant\b", r"\bgroundbreaking\b", r"\bseamless\b", r"\bpowerful\b", r"\bshowcases?\b"],
    "vague_attribution": [r"\bexperts argue\b", r"\bobservers note\b", r"\bindustry reports suggest\b"],
    "ai_vocab": [r"\badditionally\b", r"\benhance\b", r"\bfostering\b", r"\blandscape\b", r"\bunderscore\b"],
    "filler_hedging": [r"\bin order to\b", r"\bdue to the fact that\b", r"\bat this point in time\b"],
}


def detect_language(text: str) -> str:
    zh_chars = len(re.findall(r"[\u4e00-\u9fff]", text))
    en_words = len(re.findall(r"\b[A-Za-z][A-Za-z'-]*\b", text))
    if zh_chars > en_words:
        return "zh"
    return "en"


def scan(text: str, language: str) -> dict[str, int]:
    rules = ZH_RULES if language == "zh" else EN_RULES
    flags = 0 if language == "zh" else re.IGNORECASE
    return {
        category: sum(len(re.findall(pattern, text, flags)) for pattern in patterns)
        for category, patterns in rules.items()
    }


def read_input(path: str | None) -> str:
    if path:
        return Path(path).read_text()
    return sys.stdin.read()


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("path", nargs="?")
    parser.add_argument("--language", choices=["en", "zh", "auto"], default="auto")
    args = parser.parse_args()

    text = read_input(args.path)
    language = detect_language(text) if args.language == "auto" else args.language
    counts = scan(text, language)
    print(json.dumps({"language": language, "counts": counts}, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)