human-writing

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Human-Style Writing

真人风格写作

This skill helps you write content that reads like it was written by a real person with opinions, personality, and specific knowledge—not a corporate blog generator or AI assistant trying to sound helpful.
这项技能能帮你创作出读起来像真人写的内容——有观点、有个性、有具体知识,而不是像企业博客生成器或刻意表现友好的AI助手产出的文字。

Core Principle

核心原则

Write like you're explaining something to a colleague over coffee, not presenting to a board room.
Good writing is specific, opinionated, and conversational. Bad writing is generic, safe, and sounds like every other tech blog.
写作时要像在咖啡店里给同事讲解事情,而不是给董事会做汇报。
好的写作具体、有主见、口语化。糟糕的写作通用、保守,和其他科技博客千篇一律。

What Makes Writing Sound AI-Generated

哪些特征会让写作看起来像AI生成的

❌ Patterns to Avoid

❌ 需要避免的写作模式

1. Over-Enthusiastic Openings

1. 过度热情的开篇

markdown
❌ "We're thrilled to announce..."
❌ "Today, we're excited to share..."
❌ "I'm delighted to introduce..."
❌ "Join us on this exciting journey..."

✅ "We built X because Y kept breaking."
✅ "Here's what we learned shipping X to production."
✅ "Most migration tools get you 70% of the way. Here's how we get to 95%."
markdown
❌ "We're thrilled to announce..."
❌ "Today, we're excited to share..."
❌ "I'm delighted to introduce..."
❌ "Join us on this exciting journey..."

✅ "We built X because Y kept breaking."
✅ "Here's what we learned shipping X to production."
✅ "Most migration tools get you 70% of the way. Here's how we get to 95%."

2. Vague Claims Without Evidence

2. 无证据的模糊表述

markdown
❌ "This revolutionary approach transforms how developers work."
❌ "Leveraging cutting-edge AI technology..."
❌ "A game-changing solution for modern development."
❌ "Unlock the full potential of your workflow."

✅ "Nango used this to migrate 47 repos in 3 days."
✅ "We tested this on Next.js App Router migration—reduced manual fixes from 800 to 40."
✅ "Stripe's migration guide is 12,000 words. This gets it down to 200 lines of code."
markdown
❌ "This revolutionary approach transforms how developers work."
❌ "Leveraging cutting-edge AI technology..."
❌ "A game-changing solution for modern development."
❌ "Unlock the full potential of your workflow."

✅ "Nango used this to migrate 47 repos in 3 days."
✅ "We tested this on Next.js App Router migration—reduced manual fixes from 800 to 40."
✅ "Stripe's migration guide is 12,000 words. This gets it down to 200 lines of code."

3. Corporate Buzzword Soup

3. 企业黑话堆砌

markdown
❌ "Empowering developers to leverage synergies..."
❌ "Best-in-class solutions for enterprise-grade..."
❌ "Seamlessly integrate with your existing ecosystem..."
❌ "Drive innovation through collaborative paradigms..."

✅ "Works with whatever you're already using."
✅ "Detects edge cases your regex won't catch."
✅ "One command. No config file. No surprises."
markdown
❌ "Empowering developers to leverage synergies..."
❌ "Best-in-class solutions for enterprise-grade..."
❌ "Seamlessly integrate with your existing ecosystem..."
❌ "Drive innovation through collaborative paradigms..."

✅ "Works with whatever you're already using."
✅ "Detects edge cases your regex won't catch."
✅ "One command. No config file. No surprises."

4. Unnecessary Hedging

4. 不必要的含糊措辞

markdown
❌ "This might help you potentially improve..."
❌ "You could possibly consider..."
❌ "This may or may not be useful..."
❌ "Some users have reported that..."

✅ "This cuts migration time in half."
✅ "Use this when codemods aren't enough."
✅ "Three users reported this edge case. We fixed it."
markdown
❌ "This might help you potentially improve..."
❌ "You could possibly consider..."
❌ "This may or may not be useful..."
❌ "Some users have reported that..."

✅ "This cuts migration time in half."
✅ "Use this when codemods aren't enough."
✅ "Three users reported this edge case. We fixed it."

5. Generic Transitions

5. 通用化过渡语

markdown
❌ "Let's dive deep into..."
❌ "Without further ado..."
❌ "At the end of the day..."
❌ "It goes without saying..."

✅ Just start the next section. You don't need a transition.
✅ Or use a specific connector: "Here's why that matters:"
markdown
❌ "Let's dive deep into..."
❌ "Without further ado..."
❌ "At the end of the day..."
❌ "It goes without saying..."

✅ 直接开始下一部分,不需要过渡语。
✅ 或者用具体的衔接语:"这就是为什么它很重要:"

6. Robotic Lists

6. 机械感列表

markdown
❌ "Here are 5 key benefits:
1. Enhanced productivity
2. Improved efficiency
3. Better collaboration
4. Increased flexibility
5. Streamlined workflows"

✅ "This saves you time in three ways:
- No more searching docs for edge cases—they're encoded in the package
- AI applies patterns consistently—you don't chase style violations
- Tests are generated, not written—coverage without the grind"
markdown
❌ "Here are 5 key benefits:
1. Enhanced productivity
2. Improved efficiency
3. Better collaboration
4. Increased flexibility
5. Streamlined workflows"

✅ "This saves you time in three ways:
- No more searching docs for edge cases—they're encoded in the package
- AI applies patterns consistently—you don't chase style violations
- Tests are generated, not written—coverage without the grind"

What Makes Writing Sound Human

哪些特征会让写作看起来像真人创作的

✅ Patterns to Use

✅ 值得采用的写作模式

1. Specific Details

1. 具体细节

markdown
❌ "Many developers struggle with migrations."
✅ "We've all copy-pasted from a migration guide, missed an edge case, and spent 2 hours debugging why tests fail."

❌ "Performance is significantly improved."
✅ "Query time dropped from 847ms to 12ms after adding the index."

❌ "Works with popular frameworks."
✅ "Tested on Next.js, Remix, SvelteKit, and Astro."
markdown
❌ "Many developers struggle with migrations."
✅ "我们都有过从迁移指南里复制粘贴、漏掉边缘案例,然后花2小时调试测试失败原因的经历。"

❌ "Performance is significantly improved."
✅ "添加索引后,查询时间从847ms降至12ms。"

❌ "Works with popular frameworks."
✅ "已在Next.js、Remix、SvelteKit和Astro上测试通过。"

2. Direct, Confident Language

2. 直接、自信的语言

markdown
❌ "This approach may help you potentially improve your workflow."
✅ "This cuts your migration time in half."

❌ "You might want to consider using this feature."
✅ "Use this feature when you have more than 10 files to update."

❌ "Some users have found this useful."
✅ "Three teams adopted this last week. All three shipped in under 2 days."
markdown
❌ "This approach may help you potentially improve your workflow."
✅ "这能将你的迁移时间缩短一半。"

❌ "You might want to consider using this feature."
✅ "当你需要更新10个以上文件时,就用这个功能。"

❌ "Some users have found this useful."
✅ "上周有三个团队采用了这个方案,全部在2天内完成了交付。"

3. Honest Limitations

3. 坦诚说明局限性

markdown
❌ "Our comprehensive solution handles all use cases."
✅ "This won't catch dynamic imports or string templates. You'll need to fix those manually."

❌ "Perfectly seamless migration experience."
✅ "Expect about 5% of edge cases to need manual review. That's down from 30%."

❌ "Works with any codebase."
✅ "Works if you're on TypeScript 4.5+. Earlier versions need a polyfill."
markdown
❌ "Our comprehensive solution handles all use cases."
✅ "这个工具无法处理动态导入或字符串模板,这些需要你手动修复。"

❌ "Perfectly seamless migration experience."
✅ "预计约5%的边缘案例需要手动检查,这已经从原来的30%降下来了。"

❌ "Works with any codebase."
✅ "适用于TypeScript 4.5及以上版本,更早的版本需要使用polyfill。"

4. Conversational Asides

4. 口语化的题外话

markdown
✅ "You could write a 400-line script for this. We did. It broke on Unicode."
✅ "Turns out, most projects have 3-5 edge cases that codemods can't handle."
✅ "We tried docs. Developers don't read them. We tried linting. They ignore the warnings."
markdown
✅ "你可以为此写一个400行的脚本,我们试过,但它在Unicode字符上出了问题。"
✅ "事实证明,大多数项目都有3-5个代码修改工具(codemods)无法处理的边缘案例。"
✅ "我们试过写文档,但开发者不读;试过用代码检查工具,但他们忽略警告。"

5. Active Voice, Present Tense

5. 主动语态、现在时态

markdown
❌ "The package can be installed by running the command."
✅ "Install the package: prpm install @vendor/migration"

❌ "Improvements were made to the conversion quality."
✅ "We improved conversion quality from 78% to 94%."

❌ "It has been observed that users prefer..."
✅ "Users prefer X over Y by a 4:1 margin."
markdown
❌ "The package can be installed by running the command."
✅ "安装这个包:prpm install @vendor/migration"

❌ "Improvements were made to the conversion quality."
✅ "我们将转换质量从78%提升到了94%。"

❌ "It has been observed that users prefer..."
✅ "用户对X的偏好度是Y的4倍。"

6. Strong Opening Sentences

6. 有力的开篇句

markdown
❌ "In this post, we will discuss how migrations work."
✅ "Codemods automate 70% of migrations. This gets you to 95%."

❌ "Let me tell you about a new feature we've added."
✅ "You can now install an entire framework migration as a single package."

❌ "Today, I want to talk about our vision for the future."
✅ "Package managers changed how we ship code. We're doing the same for AI instructions."
markdown
❌ "In this post, we will discuss how migrations work."
✅ "代码修改工具能自动化完成70%的迁移工作,而我们的方案能帮你完成到95%。"

❌ "Let me tell you about a new feature we've added."
✅ "现在你可以将整个框架迁移包作为单个包安装。"

❌ "Today, I want to talk about our vision for the future."
✅ "包管理器改变了我们交付代码的方式,我们要为AI指令做同样的事。"

Tone Calibration

语气校准

Technical Posts

技术类文章

  • Voice: Knowledgeable peer, not teacher
  • Assumptions: Reader knows basics, wants specifics
  • Evidence: Code examples, performance numbers, real packages
  • Length: As long as needed to be complete, as short as possible to respect time
Example:
markdown
undefined
  • 语气:知识丰富的同行,而非老师
  • 预设:读者懂基础知识,想要具体内容
  • 依据:代码示例、性能数据、真实包
  • 篇幅:完整表达所需的长度,同时尊重读者时间,尽量精简
示例:
markdown
undefined

Converting Copilot Rules to Claude Format

Converting Copilot Rules to Claude Format

GitHub Copilot uses a single
.github/copilot-instructions.md
file with YAML frontmatter. Claude uses separate skills in
.claude/skills/
.
Here's how we handle the conversion:
  1. Parse the YAML frontmatter with js-yaml
  2. Extract the
    applyTo
    glob patterns
  3. Convert to Claude's
    fileMatch
    format
  4. Split multi-concern rules into separate skills
Edge case: Copilot's
applyTo
supports negation patterns (
!**/*.test.ts
). Claude doesn't. We preserve these as comments and log a warning.
Conversion quality: 94% (6% requires manual review for negation patterns).
undefined
GitHub Copilot uses a single
.github/copilot-instructions.md
file with YAML frontmatter. Claude uses separate skills in
.claude/skills/
.
Here's how we handle the conversion:
  1. Parse the YAML frontmatter with js-yaml
  2. Extract the
    applyTo
    glob patterns
  3. Convert to Claude's
    fileMatch
    format
  4. Split multi-concern rules into separate skills
Edge case: Copilot's
applyTo
supports negation patterns (
!**/*.test.ts
). Claude doesn't. We preserve these as comments and log a warning.
Conversion quality: 94% (6% requires manual review for negation patterns).
undefined

Vision Posts

愿景类文章

  • Voice: Opinionated builder with receipts
  • Assumptions: Reader is skeptical, needs convincing
  • Evidence: Real-world examples, before/after, objections addressed
  • Length: Long enough to make the case, tight enough to stay focused
Example:
markdown
undefined
  • 语气:有实际成果、有主见的构建者
  • 预设:读者持怀疑态度,需要被说服
  • 依据:真实案例、前后对比、回应质疑
  • 篇幅:足够阐明观点,同时保持紧凑
示例:
markdown
undefined

Why Docs Aren't Enough

Why Docs Aren't Enough

Stripe's migration guide is 12,000 words. It's comprehensive, well-written, and most developers skim it.
Why? Because reading docs requires:
  1. Find the right section (3-5 minutes)
  2. Understand the pattern (5-10 minutes)
  3. Apply to your specific case (10-30 minutes)
  4. Repeat 20-50 times per migration
That's 6-15 hours. And you'll still miss edge cases.
PRPM packages encode those patterns once. AI applies them consistently. Total time: 20 minutes.
undefined
Stripe's migration guide is 12,000 words. It's comprehensive, well-written, and most developers skim it.
Why? Because reading docs requires:
  1. Find the right section (3-5 minutes)
  2. Understand the pattern (5-10 minutes)
  3. Apply to your specific case (10-30 minutes)
  4. Repeat 20-50 times per migration
That's 6-15 hours. And you'll still miss edge cases.
PRPM packages encode those patterns once. AI applies them consistently. Total time: 20 minutes.
undefined

Tutorial Posts

教程类文章

  • Voice: Experienced guide who's made the mistakes
  • Assumptions: Reader wants to follow along, copy/paste, learn
  • Evidence: Runnable examples, expected output, common pitfalls
  • Length: Complete walkthrough with no missing steps
Example:
markdown
undefined
  • 语气:有经验的向导,曾踩过坑
  • 预设:读者想要跟着操作、复制粘贴、学习
  • 依据:可运行的示例、预期输出、常见陷阱
  • 篇幅:完整的分步指南,无遗漏步骤
示例:
markdown
undefined

Publishing Your First PRPM Package

Publishing Your First PRPM Package

What You'll Build

What You'll Build

A Cursor rule that enforces "no default exports" across your TypeScript codebase. By the end, you'll have published it to the registry.
A Cursor rule that enforces "no default exports" across your TypeScript codebase. By the end, you'll have published it to the registry.

Prerequisites

Prerequisites

  • Node.js 18+ (check:
    node --version
    )
  • PRPM CLI installed (
    npm install -g prpm
    )
  • GitHub account (for publishing)
  • Node.js 18+ (check:
    node --version
    )
  • PRPM CLI installed (
    npm install -g prpm
    )
  • GitHub account (for publishing)

Step 1: Initialize the Package

Step 1: Initialize the Package

bash
$ mkdir no-default-exports
$ cd no-default-exports
$ prpm init

Format: cursor
Subtype: rule
Name: no-default-exports
Description: Enforce named exports in TypeScript
This creates
prpm.json
and
.cursorrules
.
bash
$ mkdir no-default-exports
$ cd no-default-exports
$ prpm init

Format: cursor
Subtype: rule
Name: no-default-exports
Description: Enforce named exports in TypeScript
This creates
prpm.json
and
.cursorrules
.

Step 2: Write the Rule

Step 2: Write the Rule

Edit
.cursorrules
: [... full example ...]
undefined
Edit
.cursorrules
: [... full example ...]
undefined

Structural Techniques

结构化技巧

1. Start With The Punchline

1. 开门见山

markdown
❌ "In this article, we'll explore the challenges of API migrations, discuss various approaches, and ultimately present a solution."

✅ "API migrations fail because docs explain the 'what' but not the 'why.' Here's how to ship the reasoning with the code."
markdown
❌ "In this article, we'll explore the challenges of API migrations, discuss various approaches, and ultimately present a solution."

✅ "API迁移失败是因为文档只解释了‘是什么’,没解释‘为什么’。下面是如何将推理逻辑和代码一起交付的方法。"

2. Use Subheadings as Scannable Statements

2. 用子标题作为可快速扫描的陈述

markdown
❌ ## Introduction
❌ ## Background
❌ ## Methodology
❌ ## Results

✅ ## The Problem: Docs Go Stale
✅ ## Why Codemods Aren't Enough
✅ ## What PRPM Packages Add
✅ ## Real Example: Next.js App Router
markdown
❌ ## Introduction
❌ ## Background
❌ ## Methodology
❌ ## Results

✅ ## 问题:文档会过时
✅ ## 为什么代码修改工具还不够
✅ ## PRPM包新增了什么
✅ ## 真实案例:Next.js App Router

3. Show, Don't Just Tell

3. 展示,而非仅说明

markdown
❌ "The conversion process is simple and efficient."

✅ "Here's the entire conversion:
```bash
$ prpm install @nextjs/app-router-migration --as cursor
$ cursor apply @nextjs/app-router-migration
✓ Migrated 47 files
⚠ 3 files need manual review (dynamic imports)
Done in 90 seconds."
undefined
markdown
❌ "The conversion process is simple and efficient."

✅ "以下是完整的转换过程:
```bash
$ prpm install @nextjs/app-router-migration --as cursor
$ cursor apply @nextjs/app-router-migration
✓ Migrated 47 files
⚠ 3 files need manual review (dynamic imports)
90秒完成。"
undefined

4. Break Up Walls of Text

4. 拆分大段文字

  • Use subheadings every 2-3 paragraphs
  • Insert code blocks to give eyes a break
  • Use bullet lists for 3+ related items
  • Add horizontal rules for major section breaks
  • Use blockquotes for important callouts
  • 每2-3段就加一个子标题
  • 插入代码块让眼睛休息
  • 3个及以上相关内容用项目符号列表
  • 用水平线分隔主要章节
  • 用块引用突出重要提示

5. End With Action, Not Summary

5. 以行动收尾,而非总结

markdown
❌ "In conclusion, we've discussed how PRPM packages work and why they're useful for migrations."

✅ "Try it:
```bash
prpm install @popular/package-name
Have questions? Follow @prpmdev or open an issue."
undefined
markdown
❌ "In conclusion, we've discussed how PRPM packages work and why they're useful for migrations."

✅ "试试看:
```bash
prpm install @popular/package-name
有问题?关注@prpmdev提交issue。"
undefined

Voice Examples from PRPM

PRPM的语气示例

Good (from VISION.md):

优秀示例(来自VISION.md):

"Codemods automate the first 60–80% of migrations. Docs explain the rest. Developers still wrestle with edge cases, conventions, and tests."
Why it works: Specific percentages, clear problem statement, no fluff.
"You could read 47 migration guides. Or install one package."
Why it works: Concrete number, stark contrast, confident.
"We tried this on Nango's SDK migration. 47 repos, 3 days, zero regressions."
Why it works: Real company, real numbers, honest outcome.
"Codemods automate the first 60–80% of migrations. Docs explain the rest. Developers still wrestle with edge cases, conventions, and tests."
为什么有效: 具体的百分比、清晰的问题陈述、无冗余内容。
"You could read 47 migration guides. Or install one package."
为什么有效: 具体数字、鲜明对比、语气自信。
"We tried this on Nango's SDK migration. 47 repos, 3 days, zero regressions."
为什么有效: 真实公司、真实数据、诚实的结果。

Bad (AI-generated style):

糟糕示例(AI生成风格):

"Our innovative platform leverages cutting-edge AI to streamline your development workflow."
Why it fails: Buzzwords, vague, could describe anything.
"We're excited to announce a revolutionary new approach to migrations."
Why it fails: Over-enthusiastic, no specifics, marketing speak.
"This powerful solution empowers teams to unlock their full potential."
Why it fails: Empty claims, corporate jargon, meaningless.
"Our innovative platform leverages cutting-edge AI to streamline your development workflow."
为什么无效: 黑话、模糊、可以描述任何产品。
"We're excited to announce a revolutionary new approach to migrations."
为什么无效: 过度热情、无具体内容、营销话术。
"This powerful solution empowers teams to unlock their full potential."
为什么无效: 空洞的表述、企业黑话、毫无意义。

Self-Check Questions

自我检查问题

Before publishing, ask:
  1. Would a human say this out loud? If not, rewrite.
  2. Is every claim backed by evidence? If not, add specifics or remove the claim.
  3. Could this sentence appear in any other company's blog? If yes, make it specific to PRPM.
  4. Does this assume the reader is dumb? If yes, trust them more.
  5. Am I hedging because I'm uncertain? If yes, verify facts or own the uncertainty.
  6. Is this a transition I can delete? If yes, delete it.
  7. Does this open with enthusiasm instead of information? If yes, lead with the info.
发布前,请自问:
  1. 真人会这样说出口吗? 如果不会,重写。
  2. 每个主张都有证据支持吗? 如果没有,补充细节或删除该主张。
  3. 这句话能出现在其他公司的博客里吗? 如果可以,让它更贴合PRPM的具体情况。
  4. 这是不是假设读者不懂? 如果是,要更信任读者的能力。
  5. 我是不是因为不确定才含糊其辞? 如果是,核实事实或坦诚自己的不确定。
  6. 这个过渡语可以删掉吗? 如果可以,删掉。
  7. 开头是不是用了热情的表述而非信息? 如果是,先用信息开头。

Quick Fixes

快速修正技巧

If it sounds too formal:

如果写得太正式:

  • Replace "utilize" → "use"
  • Replace "in order to" → "to"
  • Replace "at this point in time" → "now"
  • Replace "for the purpose of" → "for" or "to"
  • Cut "very," "really," "quite," "actually"
  • 把“utilize”换成“use”
  • 把“in order to”换成“to”
  • 把“at this point in time”换成“现在”
  • 把“for the purpose of”换成“为了”或“to”
  • 删除“very”“really”“quite”“actually”这类词

If it sounds too generic:

如果写得太通用:

  • Add a specific number
  • Name a real company/project
  • Include a code example
  • Mention a concrete edge case
  • Quote user feedback
  • 添加具体数字
  • 提及真实的公司/项目
  • 加入代码示例
  • 提到具体的边缘案例
  • 引用用户反馈

If it sounds too salesy:

如果写得太像营销话术:

  • Replace superlatives with comparisons
  • Replace "revolutionary" with "different because"
  • Replace "amazing" with specific benefits
  • Remove exclamation points (except in code comments where appropriate)
  • Cut the first paragraph (usually marketing fluff)
  • 用对比代替最高级
  • 把“revolutionary”换成“不同之处在于”
  • 把“amazing”换成具体的收益
  • 删除感叹号(代码注释中适当使用的情况除外)
  • 删掉第一段(通常是营销冗余内容)

Remember

记住

PRPM users are developers. They have good bullshit detectors. Write like you respect their intelligence and their time.
Good writing is revision. First draft: get ideas down. Second draft: cut 30%. Third draft: add specifics. Fourth draft: read it out loud.
If you wouldn't say it in a GitHub issue comment, don't put it in a blog post.
PRPM的用户是开发者,他们很会辨别空话。写作时要尊重他们的智商和时间。
好的写作是改出来的。 初稿:把想法写下来。二稿:删掉30%的内容。三稿:补充细节。四稿:大声读出来。
如果在GitHub issue评论里你不会这么写,就别把它放进博客文章里。