Install
openclaw skills install humanize-beagleRewrite AI-generated developer text to sound human — fix inflated language, filler, tautological docs, and robotic tone. Use after review-ai-writing identifies issues.
openclaw skills install humanize-beagleApply fixes from a previous review-ai-writing run with automatic safe/risky classification. Builds on the writing principles in docs-style.
Invoke the humanize-beagle skill with optional flags: humanize-beagle [--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_docsAdvance past destructive or evidence-bound steps only when each PASS is true (commands and artifacts—not “I checked mentally”):
git status --porcelain is empty, or git stash push -u -m "beagle-docs: pre-humanize backup" exits 0..beagle/ai-writing-review.json exists and the file parses as JSON with a git_head key and a findings value that is an array (possibly empty). Use the jq -e command in step 3, or the same checks with json.load in Python. If this fails, stop with a parse/validation error—do not apply fixes.references/*.md files required by step 4 for that category/type are read in this session before you change text.git checkout -- "$file" for that file and do not list it as OK in the summary.rm .beagle/ai-writing-review.json only when G4 holds for all files you are keeping unchanged from validation failures (aligns with step 10).Extract 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"
G1 PASS: Either the working tree was already clean, or the stash command exited 0.
Check for existing review file:
cat .beagle/ai-writing-review.json 2>/dev/null
If file missing:
--all flag: Invoke the review-ai-writing skill with --all firstIf file exists, validate JSON and freshness (G2):
# Required shape: parseable JSON with git_head and findings array (may be empty)
jq -e 'has("git_head") and ((.findings // []) | type == "array")' .beagle/ai-writing-review.json >/dev/null 2>&1 \
|| { echo "Invalid or incompatible ai-writing-review.json"; exit 1; }
# 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)"
Read the appropriate reference files based on the findings being fixed:
references/vocabulary-swaps.md when applying ai_vocabulary_high or ai_vocabulary_low fixesreferences/fix-strategies.md for strategy details and before/after examples for any categoryreferences/developer-voice.md for tone/register guidance when rewriting proseOnly load what you need — if fixing only vocabulary, skip the voice guide.
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 questionsem_dash_overuse - Replace formulaic em dashes with commas, parentheses, or colonsthematic_break - Remove horizontal rules before headingstitle_case_heading - Convert AI title-case headings to sentence casecurly_quotes - Normalize curly quotes/apostrophes to straightnegative_parallelism - Delete "Not just X, but also Y" filler constructionschallenges_and_prospects - Delete "Despite its... faces challenges..." formulaic wrappersNeeds 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 messagerule_of_three - Simplify three-item lists used as filler comprehensivenessinline_header_list - Restructure boldfaced inline-header vertical listsunnecessary_table - Convert small tables to proseregression_to_mean - Restore specific facts replaced by vague praiseIf --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
references/developer-voice.md for the full register guide.Invoke the humanize-beagle skill with flags:
--dry-run — preview all fixes without applying--category vocabulary — fix only vocabulary issues--all — full codebase scan and fix--category filler --dry-run — preview filler fixes only.beagle/ai-writing-review.json only after full success (G5); if validation failed partway, keep the file and follow step 10