Help us improve
Share bugs, ideas, or general feedback.
From beagle-docs
Humanizes AI-generated developer docs and code comments by auto-applying safe fixes from review-ai-writing results. Includes git stash safety, dry-run preview, full scans, and category filtering.
npx claudepluginhub existential-birds/beagle --plugin beagle-docsHow this skill is triggered — by the user, by Claude, or both
Slash command
/beagle-docs:humanizeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Apply fixes from a previous `review-ai-writing` run with automatic safe/risky classification.
Humanizes AI-generated text in project files, READMEs, docs, and blogs by detecting and fixing 24 documented AI writing patterns. Interactive workflow with input selection, content type, and intensity options.
Detects AI-generated writing patterns in docs, docstrings, commit messages, PR descriptions, and code comments. Scans changed files or full codebase by category for authenticity and clarity.
Avoids AI writing tropes like em dashes, delve, and promotional language when writing or editing PR descriptions, commit messages, documentation, Slack, or de-AI'ing text.
Share bugs, ideas, or general feedback.
Apply fixes from a previous review-ai-writing run with automatic safe/risky classification.
/beagle-docs:humanize [--dry-run] [--all] [--category <name>]
Flags:
--dry-run - Show what would be fixed without changing files--all - Fix entire codebase (runs review with --all first)--category <name> - Only fix specific category: content|vocabulary|formatting|communication|filler|code_docsExtract flags from $ARGUMENTS:
--dry-run - Preview mode only--all - Full codebase scan--category <name> - Filter to specific category# Check for uncommitted changes
git status --porcelain
If working directory is dirty, warn:
Warning: You have uncommitted changes. Creating a git stash before proceeding.
Run `git stash pop` to restore if needed.
Create stash if dirty:
git stash push -u -m "beagle-docs: pre-humanize backup"
Check for existing review file:
cat .beagle/ai-writing-review.json 2>/dev/null
If file missing:
--all flag: Run /beagle-docs:review-ai-writing --all first/beagle-docs:review-ai-writing first."If file exists, validate freshness:
# Get stored git HEAD from JSON
stored_head=$(jq -r '.git_head' .beagle/ai-writing-review.json)
current_head=$(git rev-parse HEAD)
if [ "$stored_head" != "$current_head" ]; then
echo "Warning: Review was run at commit $stored_head, but HEAD is now $current_head"
fi
If stale, prompt: "Review results are stale. Re-run review? (y/n)"
Skill(skill: "beagle-docs:humanize")
If --category is set, filter findings to that category only.
Partition remaining findings by fix_safety:
Safe Fixes (auto-apply):
chat_leak - Delete conversational artifactscutoff_disclaimer - Delete knowledge cutoff referencesfiller_phrase - Delete filler phrasesheading_restatement - Delete restating first sentenceemoji_decoration - Remove emoji from technical textboldface_overuse - Remove excessive bold formattingai_vocabulary_high - Swap high-signal AI wordsnarrating_obvious - Delete obvious code commentssynthetic_opener - Delete "In today's..." openerssycophantic_tone - Delete or neutralize praisevague_authority - Delete unattributed claimsexcessive_hedging - Remove qualifiersgeneric_conclusion - Delete summary paddingcopula_avoidance - Use "is/are" naturallyrhetorical_device - Delete rhetorical questionsNeeds Review Fixes (require confirmation):
promotional_language - Rewrite with specificsformulaic_structure - Restructure sectionssynonym_cycling - Pick consistent termcommit_inflation - Rewrite commit scopetautological_docstring - Rewrite or delete docstringexhaustive_enumeration - Trim parameter docsthis_noun_verbs - Rewrite docstring voiceai_vocabulary_low - Reduce cluster densityapologetic_error - Rewrite error messageIf --dry-run:
## Safe Fixes (would apply automatically)
| # | File | Line | Type | Action |
|---|------|------|------|--------|
| 1 | README.md | 3 | synthetic_opener | Delete "In today's rapidly evolving..." |
| 2 | src/auth.py | 15 | narrating_obvious | Delete "# Check if user exists" |
| 3 | README.md | 42 | ai_vocabulary_high | Replace "utilize" with "use" |
...
Otherwise, apply fixes grouped by file to minimize file I/O:
git:commit:*, git:pr:*), skip — these can't be auto-fixed. Report them for manual attention.If --dry-run, list them:
## Needs Review Fixes (would prompt interactively)
| # | File | Line | Type | Original | Suggested |
|---|------|------|------|----------|-----------|
| 4 | README.md | 8 | promotional_language | "powerful, enterprise-grade solution" | "authentication library" |
...
Otherwise, for each fix, prompt interactively:
[README.md:8] Promotional language: "powerful, enterprise-grade solution"
Suggested: "authentication library"
(y)es / (n)o / (e)dit / (s)kip all:
Track user choices:
y - Apply this fix as suggestedn - Skip this fixe - User provides custom replacements - Skip all remaining interactive fixesFor each modified markdown file, verify basic validity:
# Check for broken markdown (unclosed code blocks, broken links)
# Simple check: matching ``` pairs
grep -c '```' "$file" | awk '{print ($1 % 2 == 0) ? "OK" : "WARNING: odd number of code fences"}'
For modified source files, check syntax is still valid:
Python:
python3 -c "import ast; ast.parse(open('$file').read())"
TypeScript/JavaScript:
npx -y acorn --ecma2020 "$file" > /dev/null 2>&1
If validation fails for any file, revert that file:
git checkout -- "$file"
echo "Reverted $file due to validation failure"
## Humanize Summary
### Applied Fixes
- [x] README.md:3 - Deleted synthetic opener
- [x] README.md:42 - Replaced "utilize" with "use"
- [x] src/auth.py:15 - Deleted obvious comment
### Interactive Fixes
- [x] README.md:8 - Rewrote promotional language (user approved)
- [ ] docs/guide.md:22 - Skipped by user
### Skipped (Git Artifacts)
- [ ] git:commit:abc1234 - Chat leak in commit message (amend manually)
### Validation
- README.md: OK
- src/auth.py: OK
### Diff Summary
git diff --stat
On successful completion (all validations pass):
rm .beagle/ai-writing-review.json
If any validation fails, keep the file and report:
Review file preserved at .beagle/ai-writing-review.json
Fix issues and re-run, or restore with: git stash pop
# Preview all fixes without applying
/beagle-docs:humanize --dry-run
# Fix only vocabulary issues
/beagle-docs:humanize --category vocabulary
# Full codebase scan and fix
/beagle-docs:humanize --all
# Preview filler fixes only
/beagle-docs:humanize --category filler --dry-run
beagle-docs:humanize skill firstFix AI-generated writing patterns in docs, docstrings, commit messages, PR descriptions, and code comments. Prioritize deletion over rewriting — the best fix for filler is removal.
| Type | Strategy | Risk |
|---|---|---|
| Promotional language | Replace superlatives with specifics | Needs review |
| Vague authority | Delete the claim or add a citation | Safe |
| Formulaic structure | Remove the intro/conclusion wrapper | Needs review |
| Synthetic openers | Delete the opener, start with the point | Safe |
Before:
In today's rapidly evolving software landscape, authentication is a crucial
component that plays a pivotal role in securing modern applications.
After:
This guide covers authentication setup for the API.
| Type | Strategy | Risk |
|---|---|---|
| High-signal AI words | Direct word swap | Safe |
| Low-signal clusters | Reduce density, keep 1-2 | Needs review |
| Copula avoidance | Use "is/are" naturally | Safe |
| Rhetorical devices | Delete the question, state the fact | Safe |
| Synonym cycling | Pick one term, use it consistently | Needs review |
| Commit inflation | Rewrite to match actual change scope | Needs review |
Word swap reference:
| AI Word | Replacement |
|---|---|
| utilize | use |
| leverage (as "use") | use |
| delve | look at, explore, examine |
| facilitate | help, enable, let |
| endeavor | try, work, effort |
| harnessing | using |
| paradigm | approach, model, pattern |
| whilst | while |
| furthermore | also, and |
| moreover | also, and |
| robust (non-technical) | reliable, solid, strong |
| seamless | smooth, easy |
| cutting-edge | modern, latest, new |
| pivotal | important, key |
| elevate | improve |
| empower | let, enable |
| revolutionize | change, improve |
| unleash | release, enable |
| synergy | (delete — rarely means anything) |
| embark | start, begin |
Before:
feat: Leverage robust caching paradigm to facilitate seamless data retrieval
After:
feat: add response caching for faster reads
| Type | Strategy | Risk |
|---|---|---|
| Boldface overuse | Remove bold from non-key terms | Safe |
| Emoji decoration | Remove emoji from technical content | Safe |
| Heading restatement | Delete the restating sentence | Safe |
Before:
## Error Handling
**Error handling** is a **critical** aspect of building **reliable** applications.
The `handleError` function **catches** and **processes** all **runtime errors**.
After:
## Error Handling
The `handleError` function catches runtime errors and logs them with context.
| Type | Strategy | Risk |
|---|---|---|
| Chat leaks | Delete entirely | Safe |
| Cutoff disclaimers | Delete entirely | Safe |
| Sycophantic tone | Delete or neutralize | Safe |
| Apologetic errors | Rewrite as direct error message | Needs review |
Before:
# Great implementation! This elegantly handles the edge case.
# As of my last update, this API endpoint supports JSON.
After:
# Handles the re-entrant edge case from issue #42.
# This endpoint accepts JSON.
| Type | Strategy | Risk |
|---|---|---|
| Filler phrases | Delete the phrase | Safe |
| Excessive hedging | Remove qualifiers, state directly | Safe |
| Generic conclusions | Delete the conclusion paragraph | Safe |
Before:
It's worth noting that the configuration file might potentially need to be
updated. Going forward, this could possibly affect performance.
After:
Update the configuration file. This affects performance.
| Type | Strategy | Risk |
|---|---|---|
| Tautological docstrings | Delete or add real information | Needs review |
| Narrating obvious code | Delete the comment | Safe |
| "This noun verbs" | Rewrite in active/direct voice | Safe |
| Exhaustive enumeration | Keep only non-obvious params | Needs review |
Before:
def get_user(user_id: int) -> User:
"""Get a user.
This method retrieves a user from the database by their ID.
Args:
user_id: The ID of the user to get.
Returns:
User: The user object.
Raises:
ValueError: If the user ID is invalid.
"""
return db.query(User).get(user_id)
After:
def get_user(user_id: int) -> User:
"""Raises UserNotFound if ID doesn't exist in the database."""
return db.query(User).get(user_id)
Good developer writing is:
| Artifact | Tone | Length | Example |
|---|---|---|---|
| Commit message | Terse, imperative | 50-72 chars | fix: prevent nil panic in auth middleware |
| Code comment | Brief, explains why | 1-2 lines | // retry once — transient DNS failures are common in k8s |
| Docstring | Precise, adds value | What the name doesn't tell you | """Raises ConnectionError after 3 retries.""" |
| PR description | Structured, factual | Context + what changed + how to test | Bullet points, not paragraphs |
| README | Conversational, scannable | As short as possible | Start with what it does, then how to use it |
| Error message | Actionable, specific | What happened + what to do | Config file not found at ~/.app/config.yml. Run 'app init' to create one. |
These are mechanical and can be applied without human review:
These require a human to verify the replacement preserves intent: