human-writing
Write content that sounds natural, conversational, and authentically human - avoiding AI-generated patterns, corporate speak, and generic phrasing
$ Installieren
git clone https://github.com/pr-pm/prpm /tmp/prpm && cp -r /tmp/prpm/.claude/skills/human-writing ~/.claude/skills/prpm// tip: Run this command in your terminal to install the skill
name: human-writing description: Write content that sounds natural, conversational, and authentically human - avoiding AI-generated patterns, corporate speak, and generic phrasing
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.
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
â Patterns to Avoid
1. Over-Enthusiastic Openings
â "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
â "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
â "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
â "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
â "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:"
6. Robotic Lists
â "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
â "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."
2. Direct, Confident Language
â "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."
3. Honest Limitations
â "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."
4. Conversational Asides
â
"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."
5. Active Voice, Present Tense
â "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."
6. Strong Opening Sentences
â "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."
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:
# 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).
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:
# 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.
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:
# Publishing Your First PRPM Package
## 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.
## Prerequisites
- Node.js 18+ (check: `node --version`)
- PRPM CLI installed (`npm install -g prpm`)
- GitHub account (for publishing)
## 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.
Step 2: Write the Rule
Edit .cursorrules:
[... full example ...]
## Structural Techniques
### 1. Start With The Punchline
```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."
2. Use Subheadings as Scannable Statements
â ## Introduction
â ## Background
â ## Methodology
â ## Results
â
## The Problem: Docs Go Stale
â
## Why Codemods Aren't Enough
â
## What PRPM Packages Add
â
## Real Example: Next.js App Router
3. Show, Don't Just Tell
â "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."
### 4. Break Up Walls of Text
- 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
### 5. End With Action, Not Summary
```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."
## Voice Examples from PRPM
### Good (from 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.
### Bad (AI-generated style):
> "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.
## 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.
## 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"
### 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)
## 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.
