text-human — universal AI artifact humanizer
Caution
AI pair-programming sessions leave fingerprints. Fake issue references (BUG-001, ISSUE-42), unicode long dashes, curly quotes, comment blocks like // Added by AI, metronomic prose cadence, and inflated vocabulary (leverage, delve, seamless) accumulate silently across commits, docs, and articles.
Tip
One command, any content. Pass a commit hash, a file, a folder, or paste the text inline. The skill detects which domain it is dealing with, picks a matching flow, and runs a two-pass model: strip validated AI tells first, then a gated injection of human style fit for that domain.
Quick reference
| Field | Value |
|---|---|
| Command | /brewtools:text-human |
| Arguments | [path|commit|folder|text] [custom instructions] |
| Model | sonnet (haiku for simple blocks in mixed flow) |
| Context | session |
| Tools | Read, Write, Edit, Grep, Glob, Bash, Task, AskUserQuestion |
When to use
| Situation | Command |
|---|---|
| After an AI-assisted commit — clean all touched files | /brewtools:text-human 3be67487 |
| Before code review — strip obvious AI markers so reviewers focus on logic | /brewtools:text-human src/main/java/services/ |
| JavaDoc / API docs — remove trivial param restates, keep contracts | /brewtools:text-human clean the javadoc in PaymentApi.java |
| README / guide — fix metronomic prose, trim scaffolding phrases | /brewtools:text-human docs/getting-started.md |
| Reddit or Slack reply — add register-fit casual voice | /brewtools:text-human review this reddit reply: <text> |
| Published blog post or essay — add burstiness and real stance | /brewtools:text-human humanize this blog post: <text> |
| Folder-wide unicode and marker pass — strip only, no inject | /brewtools:text-human src/ only strip AI artifacts, no inject |
| Custom rule on top of defaults | /brewtools:text-human 3be67487 also drop all @author tags |
Examples
# Code flow -- strip AI tells, normalize unicode, inject OFF
/brewtools:text-human src/main/java/com/example/OrderService.java
# JavaDoc clean-only sub-profile
/brewtools:text-human clean the javadoc in PaymentApi.java
# Commit -- mixed flow routes each changed file to its domain
/brewtools:text-human 3be67487
# Reddit reply -- casual injection, sparse emoji, lowercase
/brewtools:text-human review this reddit reply: <text>
# Blog post -- burstiness + real stance
/brewtools:text-human humanize this blog post: <text>
# Folder -- mixed flow, parallel blocks
/brewtools:text-human src/main/java/services/
# Custom prompt overrides defaults (scope + rule)
/brewtools:text-human src/ only strip AI artifacts, no inject
/brewtools:text-human 3be67487 also drop all @author tags
No arguments? The skill asks: commit hash, file path, folder, or paste text.
Flow
- Phase 0 — Greedy flow detection
Before any processing the skill parses the argument, picks exactly ONE flow from context, and announces it:
Flow: <name> — <one-line why>. Detection priority: explicit intent keywords (RU+EN) first, then path/extension, then content sniff. Only that flow file and the pattern sections it needs are loaded (lazy — not everything at once). - Argument parsing
The first token is parsed as scope when it resolves to an existing path or a 7+ hex git hash; the rest becomes a custom prompt. Otherwise the whole input is a custom prompt (inline text to humanize or intent description). No args triggers
AskUserQuestionas fallback. The custom prompt both selects/overrides the flow and adds custom rules at highest priority. - PASS 1 — Strip
Validated AI tells are removed per the tiered pattern catalog. HIGH-tier universals (chat scaffolding, self-attribution comments, unicode normalization, prompt residue) act on single hits. MED density-signals act only when several co-occur in a cluster. Behavior-changing items — hallucinated refs, fabricated tickets, try/except-everywhere — are surfaced for review, never auto-edited.
- PASS 2 — Inject (gated)
Human style is applied for the detected domain. HARD-OFF for code and API/formal docs. For docs, commits, social, and articles the injection is tuned by domain: burstiness weight, contraction frequency, stance, emoji policy. Global guard: never injects typos, errors, or fabricated references in any flow.
- Parallel execution (mixed flow)
Commit or folder scope uses the mixed flow dispatcher: files split into blocks by complexity, classified as haiku (simple config/data/text) or sonnet (source with logic, tests, complex SQL). All
Taskcalls fire in one message for true parallelism. Each sub-agent receives its block, the flow rules, and any custom instructions prepended at highest priority. - Humanization Report
Results merge into a unified report: detected flow, scope, files/blocks processed, haiku/sonnet split, per-file strip and inject counts, a surfaced-for-review section listing behavior-changing items, and totals. Files are edited in place — use git to revert.
Internals
5 flows
| Flow | Domain | Inject stage | Notes |
|---|---|---|---|
| code | source files, comments, docstrings, JavaDoc/JSDoc/KDoc | OFF | formal contract — strip only |
| docs | README, guides, PR/commit, changelogs | ON, restrained | terse for PR/commit |
| social | reddit, forum, slack, discord, chat | ON, casual | burstiness high, fragments OK |
| article | formal essay, published blog, long-form | ON, full | burstiness + real stance |
| mixed | commit / folder dispatcher | per-file routing | routes each file to its flow |
PASS 1 — What gets stripped
| Category | Example | Tier |
|---|---|---|
| Chat scaffolding | ”Certainly!”, “I hope this helps”, “Here’s the rewritten…” | HIGH |
| AI self-attribution | // AI-generated, // Claude suggestion, bot/co-author trailers | HIGH |
| Prompt residue | # Remember to paste..., // Replace with your... placeholder narration | HIGH |
| Unicode normalization | em-dash, smart quotes, arrows in code/text | HIGH |
| Promotional openers | ”In today’s fast-paced world”, “plays a significant role” | HIGH/MED |
| Trivial comment/docstring | // Loop through users, @param userId The user ID | MED density |
| Excess-vocab cluster | delve, leverage, seamless, landscape (co-occurring set) | MED cluster only |
PASS 1 — What gets surfaced (never auto-edited)
Hallucinated package/method/URL refs, fabricated tickets, try/except-everywhere, empty catch-all, placeholder TODO logic, duplicated abstraction layers, happy-path-only tests, CI gaming. These change meaning — they are reported, not changed.
PASS 1 — What gets kept
WHY comments, public API docs, real project tickets (JIRA-456, GH-123), @throws with conditions, structural SQL/YAML banners, complex algorithm explanations, BDD comments.
PASS 2 — Injection weight matrix
| Signal | chat | docs | commit/PR | article | code/API | |
|---|---|---|---|---|---|---|
| Burstiness | high | high | med | low | high | OFF |
| Contractions | high | high | OK | low | high | FORBIDDEN |
| Stance | high | med | none | grounded-why | high | FORBIDDEN |
| Emoji | rare | incidental | no | no | no | no |
| Inject stage | ON | ON | ON | ON terse | ON | OFF |
Block sizing (mixed flow)
| Files | Lines | Blocks | Agents |
|---|---|---|---|
| 1-2 | <200 | 1 | direct |
| 3-5 | <500 | 3 | parallel |
| 6-10 | 500-1500 | 5 | parallel |
| 11-20 | 1500-3000 | 7 | parallel |
| 21+ | 3000+ | 10 | parallel |
Position: removes AI surface artifacts and fits register — does NOT claim to detect authorship. MED/weak detectors hit 61% FP on non-native English; HIGH universals are mechanical artifacts with near-zero human false positives.
Text Optimize
Trim token waste from prompts and docs. Complements text-human for pre-commit cleanup.
GitHub source
Source: SKILL.md, flows/ (code, docs, social, article, mixed), ai-patterns.md, human-patterns.md.
Brewtools overview
All brewtools skills — text, secrets, deploy, SSH, provider switching.
Updating plugins
/brewtools:plugin-update to check and update the brewcode plugin suite in one command.
See the FAQ for details.