Skip to content
/

unslop

unslop · MohamedAbdallah-14/unslop · ★ 44 · last commit 2026-05-05

Primitive shape 15 total
Commands 6 Skills 6 Hooks 3
00

Summary

unslop — Summary

unslop is a multi-platform AI output post-processor that strips AI-isms (sycophancy, stock vocabulary, hedging stacks, em-dash overuse, tricolon padding) from LLM responses while preserving technical accuracy and code blocks. It ships as a Claude Code plugin, Cursor/Windsurf rules, Gemini extension, Codex bundle, and a standalone Python CLI + evaluation suite. The skill persists across responses via a SessionStart hook that injects activation rules, with a UserPromptSubmit hook tracking mode changes.

The tool supports five intensity levels (subtle/balanced/full/voice-match/anti-detector) and is research-backed, citing studies on warmth-reliability tradeoffs, sycophancy rates, and verbal uncertainty calibration. A built-in eval suite (benchmarks/, evals/) measures "perceived humanness" against a 21/21 blind LLM-judge preference for rewrites. The tool explicitly bans specific vocabulary ("delve", "tapestry", "testament", "navigate" figuratively) and structural patterns (tidy five-paragraph shapes, em-dash overuse > 2 per paragraph).

Compared to seeds: no direct equivalent in the 11 seeds — unslop occupies a unique niche of AI output style correction rather than workflow orchestration or code quality. Closest to ccmemory in that it operates at the response level, but unslop modifies prose style, not knowledge retrieval.

01

Overview

unslop — Overview

Origin

Built by MohamedAbdallah-14. Released as MIT. The origin story: "Claude rewrote my resume and I couldn't send it. The polish was perfect; the voice wasn't mine. So I built this. It strips the AI residue and leaves the rest alone."

Philosophy

AI tone is a residue from post-training, not a layer you add with warmth. The right approach is subtraction (remove slop), not addition (add warmth). Adding warmth adds sycophancy — the loudest AI tell.

Five research-backed framing rules:

  1. Subtract, don't add. AI tone is residue from post-training. Remove slop; never "warm up."
  2. Style and stance are separate. Style = how it sounds; stance = how much it agrees. Move them independently. A humanized voice is not asking for agreement.
  3. Warmth–reliability tradeoff is real. Ibrahim et al. (arXiv 2507.21919, 2025) found warmth-trained models had +11pp higher error rate on factual tasks. SycEval found sycophantic agreement in 58.19% of factual disputes across GPT-4o, Claude Sonnet, and Gemini.
  4. Role-play frame, not personhood. Match the public style; don't invent biographical claims or suggest emotional investment.
  5. Reason privately, humanize publicly. Do thinking in scratchpad; humanize only the final output. On reasoning-tier models (o1, o3, o4-mini, DeepSeek-R1), explicit CoT prompting adds no accuracy and increases variance 20–80%.

Explicitly Banned Terms

"delve", "tapestry", "testament", "navigate" (figurative), "embark", "journey" (figurative), "pivotal", "paramount", "nuanced" (when meaningless), "robust" (as filler), "seamless", "leverage" (when "use" works), "holistic", "comprehensive" (when "complete" works), "realm", "landscape" (figurative), "cutting-edge", "state-of-the-art" (as filler)

Banned Openers

"I'd be happy to help", "Certainly!", "Absolutely!", "Sure!", "What a fascinating...", "Great question!"

02

Architecture

unslop — Architecture

Distribution

  • Type: claude-plugin (primary) + multi-platform rule files
  • License: MIT
  • Install complexity: one-liner (Claude Code); clone-and-configure (others)

Install Commands

# Claude Code (plugin)
/plugin marketplace add MohamedAbdallah-14/unslop
/plugin install unslop

# Manual hooks (air-gapped or fork setups)
git clone https://github.com/MohamedAbdallah-14/unslop.git
bash hooks/install.sh    # macOS/Linux
pwsh hooks/install.ps1   # Windows

# Python CLI (standalone)
pip install unslop

Directory Layout

skills/
├── unslop/SKILL.md          # Main unslop skill (SSOT)
├── unslop-commit/SKILL.md   # Commit message de-slopping
├── unslop-file/SKILL.md     # File rewriting skill
├── unslop-help/SKILL.md     # Help skill
├── unslop-reasoning/SKILL.md
└── unslop-review/SKILL.md   # Review skill

commands/
├── unslop.toml              # Activate unslop mode
├── unslop-commit.toml
├── unslop-file.toml
├── unslop-help.toml
├── unslop-reasoning.toml
└── unslop-review.toml

hooks/
├── unslop-activate.js       # SessionStart hook: inject rules + write flag
├── unslop-mode-tracker.js   # UserPromptSubmit hook: watch for mode changes
├── unslop-statusline.sh/.ps1 # statusLine hook: show badge
└── unslop-config.js         # Shared module (flag file I/O)

rules/
└── unslop-activate.md       # Always-on activation rule

evals/
├── measure.py
├── perceived_humanness.py
└── prompts/

benchmarks/

unslop/SKILL.md              # File rewriter skill (top-level copy)

Source of Truth

Three SSOT files; all other copies are mirrors synced by .github/workflows/sync.yml:

  • skills/unslop/SKILL.md — main skill
  • rules/unslop-activate.md — always-on activation rule
  • unslop/SKILL.md — file rewriter skill

Mirrored Platforms

.cursor/skills/, .windsurf/skills/, .clinerules/, .github/copilot-instructions.md, and others.

Required Runtime

  • Node.js (for hook scripts)
  • Python 3.x (for unslop CLI and evals)
03

Components

unslop — Components

Skills

Name File Purpose
unslop skills/unslop/SKILL.md Main humanization skill; 5 intensity levels
unslop-commit skills/unslop-commit/SKILL.md Humanize git commit messages
unslop-file skills/unslop-file/SKILL.md Rewrite a specific file
unslop-help skills/unslop-help/SKILL.md Help and reference
unslop-reasoning skills/unslop-reasoning/SKILL.md Reasoning-mode handling
unslop-review skills/unslop-review/SKILL.md Review existing content for slop

Commands (TOML slash commands)

Command Purpose
/unslop Activate balanced mode
/unslop subtle|balanced|full|voice-match|anti-detector Activate with explicit level
/unslop-commit De-slop commit message
/unslop-file De-slop a specific file
/unslop-help Show help
/unslop-reasoning Apply reasoning-mode rules
/unslop-review Review for slop

Hooks

Event File Purpose
SessionStart hooks/unslop-activate.js Inject unslop rules as hidden context; write active mode to flag file
UserPromptSubmit hooks/unslop-mode-tracker.js Watch for /unslop <mode>, natural-language triggers, stop unslop
statusLine hooks/unslop-statusline.sh/.ps1 Print [unslop:BALANCED] badge in statusline

Intensity Levels

Level Behavior
subtle Trim stock vocab only; preserve structure
balanced Default. Cut slop, vary rhythm, restore voice
full Strong rewrite; restructure paragraphs
voice-match Match user-provided style sample (6-signal extraction)
anti-detector Adversarial rewrite for AI-detector resistance

Eval Suite

  • evals/measure.py — runs before/after eval
  • evals/perceived_humanness.py — LLM-judge perceived humanness measurement
  • Claims: 21/21 blind LLM-judge runs preferred unslop rewrite over original
05

Prompts

unslop — Prompt Excerpts

Excerpt 1: Core Rules (from skills/unslop/SKILL.md)

Technique: Exhaustive vocabulary exclusion list + structural pattern bans

## Rules

Drop:
- Sycophancy: "Great question!", "I'd be happy to help", "Certainly!", "Absolutely!", "Sure!", "What a fascinating..."
- Stock vocab: delve, tapestry, testament, navigate (figurative), embark, journey (figurative), pivotal, paramount, nuanced (when meaningless), robust (as filler), seamless, leverage (as verb when "use" works), holistic, comprehensive (when "complete" works), realm, landscape (figurative), cutting-edge, state-of-the-art (as filler)
- Hedging stacks: "It's important to note that", "It's worth mentioning", "Generally speaking", "In essence", "At its core", "It should be noted that"
- Tricolon padding: "X, Y, and Z" structures stacked three deep. Use two when two suffice. Use one when one suffices.
- Tidy five-paragraph essay shapes. Real prose has uneven paragraph length.
- Em-dash overuse. Hard cap: no more than two em-dashes per paragraph.
- Bullet-soup. If three bullets read the same, merge them into one sentence.
- Performative balance: every claim doesn't need a "however".

Keep:
- Technical terms exact. Errors quoted exact. Code blocks unchanged.
- Real uncertainty when it exists. Use "I think", "probably", "seems", "in my experience" when honest.

Analysis: The exclusion list is both concrete (named phrases) and abstract (pattern descriptions). The "Keep" section is equally specific — "real uncertainty" is distinguished from "hedging stacks." The em-dash cap (no more than two per paragraph) is a measurable constraint.


Excerpt 2: Pattern-Before-After (from skills/unslop/SKILL.md)

Technique: Concrete before/after example as behavioral specification

Pattern: [concrete observation]. [implication or "why"]. [what to do or what's next].

Not: "Sure! That's a great question. There are several factors to consider when approaching this problem. Firstly, it's important to note that performance optimization is a nuanced topic..."
Yes: "The bug is in the auth middleware. Token expiry uses `<` instead of `<=`. Replace it on L42."

Analysis: The before/after is the most load-bearing part of the skill — it teaches via contrast, not just rules. The "Yes" example is exactly 3 sentences showing the target pattern: observation → why → action.


Excerpt 3: Research-Backed Framing (from skills/unslop/SKILL.md)

Technique: Academic citation embedded in activation rules to justify constraints

3. **Warmth–reliability tradeoff is real.** Ibrahim, Hafner & Rocher (arXiv 2507.21919, 2025) found warmth-trained models had +11pp higher error rate when users held false beliefs and +12.1pp when emotion accompanied false beliefs (avg +7.43pp across factual tasks). SycEval (arXiv 2502.08177) measured sycophantic agreement in 58.19% of factual disputes across GPT-4o, Claude Sonnet, and Gemini-1.5-Pro. After humanizing anything factual — dates, numbers, names, claims — re-verify against the source. Flag with `[VERIFY: ...]` if a number was rewritten and you cannot confirm it.

Analysis: Citations embedded in skill rules serve a dual purpose: they prevent the model from ignoring rules as "just style preferences" and they set a specific action requirement ([VERIFY: ...] flag). The data-driven framing ("58.19% sycophantic agreement") establishes the rule as factual, not aesthetic.

09

Uniqueness

unslop — Uniqueness & Positioning

Differs From Seeds

No direct equivalent in the 11 seeds. The closest in surface area is the anti-pattern lists in superpowers (which bans sycophancy in agent behavior), but superpowers targets agent decisions, not agent prose style. Unslop is the only tool in the corpus that operates purely on the register and tone of generated text, applying subtraction-first style correction backed by academic research on sycophancy rates and warmth-reliability tradeoffs.

Also distinct from all other tools in the corpus: this is not a workflow tool (it doesn't structure tasks), not a spec tool (it doesn't generate specs), not a verification tool (it doesn't check correctness) — it is a prose quality corrector. Unique niche in the AI-coding-agent ecosystem.

Observable Failure Modes

  1. False positive vocabulary removal: Some "stock" terms may be technically appropriate in context (e.g., "robust" as a real technical description, not filler).
  2. Over-application in technical contexts: The skill is designed for prose; code comments and docstrings have different norms.
  3. Anti-detector mode risk: "Adversarial rewrite for AI-detector resistance" is a slower, more aggressive mode — may change meaning.
  4. Multi-platform sync lag: The GitHub Actions sync workflow may lag; a platform-specific mirror may be stale.
  5. Eval metric credibility: "21/21 blind LLM-judge runs" — LLM-as-judge studies have well-documented biases; this is a preference signal, not ground truth.

Distinctive Opinion

AI sycophancy is not a personality flaw — it's a training artifact that can be systematically removed with precise rules. "Warmth" added by the model correlates with factual error rates; removing AI-isms makes output more trustworthy, not just more readable.

Self-Referential Design

The README is written following unslop's own rules: terse, no sycophancy openers, before/after examples first. CLAUDE.md explicitly notes: "Preserve voice. The README's terse, no-AI-ism style is intentional — it is unslop eating its own dog food."

04

Workflow

unslop — Workflow

Activation Methods

  1. Plugin install (Claude Code): SessionStart hook auto-activates at session start, no user action needed
  2. Manual command: /unslop [level] to activate or change level
  3. Natural language: "humanize this", "de-slop this", "make this sound human" — detected by UserPromptSubmit hook
  4. Stop: "stop unslop" / "normal mode" / "robotic mode"

Per-Response Flow (Active Mode)

Step Action
1. User submits prompt UserPromptSubmit hook checks for mode-change phrases
2. Claude generates response Normal generation
3. Unslop rules applied Skill rules filter the response before output
4. Statusline updated [unslop:BALANCED] badge visible

Hook Architecture

SessionStart hook ──writes mode──▶ ~/.claude/.unslop-active ◀──writes mode── UserPromptSubmit hook
                                              │
                                           reads
                                              ▼
                                    Statusline script
                                  [unslop] / [unslop:FULL] / ...

Voice-Match Procedure

When user provides a voice sample, extract these 6 signals before rewriting:

  1. Average sentence length and variance
  2. Contraction rate (don't vs. do not)
  3. Punctuation tics (em-dashes, semicolons, parentheticals, fragments)
  4. Vocabulary register (technical vs. casual, Latinate vs. Anglo-Saxon)
  5. Favorite phrases / rhetorical moves
  6. What they never do (forbidden patterns)

Apply in order: register → cadence → punctuation → vocabulary.

Approval Gates

None — passive, always-on. No confirmation required to apply rules.

Persistence

"ACTIVE EVERY RESPONSE. No revert after many turns. No drift back into AI-template English."

06

Memory Context

unslop — Memory & Context

State Storage

Flag file: ~/.claude/.unslop-active (global user-level). Records current mode (BALANCED, FULL, SUBTLE, etc.) and whether unslop is active.

Flag File Operations

  • Written by SessionStart hook on session start
  • Written by UserPromptSubmit hook when mode changes
  • Read by unslop-statusline.sh/.ps1 for badge display
  • Atomic write (O_NOFOLLOW, 0600) — symlink-refusing, size-capped, whitelist-validated

Context Injection

SessionStart hook emits unslop rules as hidden context — Claude sees it, the user does not. This is the mechanism for "always-on" behavior without re-stating rules in every prompt.

Persistence

Session-level (flag file persists across prompts in a session). New session: SessionStart hook re-loads and re-injects rules.

Memory Type

Flat file (single flag file) — not a database, not a vector store. Minimal footprint.

07

Orchestration

unslop — Orchestration

Multi-Agent Pattern

None — single agent, single LLM. Unslop is a style modifier applied to outputs of the primary agent.

Execution Mode

Event-driven — hooks fire on SessionStart and UserPromptSubmit. The skill rules are injected into every response while active.

Hook Events

  • SessionStart — inject activation rules as hidden context
  • UserPromptSubmit — detect mode change commands; update flag file
  • statusLine — display current mode badge

Multi-Model

No. All processing happens in the primary agent's context.

Isolation Mechanism

None — in-place style transformation on agent outputs.

Cross-Tool Portability

High — ships native rule files for:

  • Claude Code: plugin + hooks
  • Cursor: .cursor/rules/unslop.mdc
  • Windsurf: .windsurf/rules/unslop.md
  • Cline: .clinerules/unslop.md
  • Gemini CLI: gemini-extension.json + GEMINI.md
  • Codex: plugins bundle
  • GitHub Copilot: .github/copilot-instructions.md
08

Ui Cli Surface

unslop — UI / CLI Surface

CLI Binary

Yes — unslop (Python, available via pip install unslop). Standalone CLI for de-slopping files without any AI agent.

Plugin Commands

  • /unslop — activate in conversation
  • /unslop-file — rewrite a specific file
  • /unslop-commit — de-slop commit messages
  • /unslop-review — review existing content

Statusline Badge

When active via hooks, Claude Code statusline shows [unslop:BALANCED] (or relevant mode). This is a small but visible indicator of active mode — real-time feedback without a separate dashboard.

IDE Integration

Multi-platform:

  • Claude Code: plugin marketplace (primary)
  • Cursor: .cursor/rules/unslop.mdc (auto-load)
  • Windsurf: .windsurf/rules/unslop.md (auto-load)
  • Cline: .clinerules/unslop.md (auto-load)
  • Gemini CLI: extension format
  • Codex: plugin bundle

Eval Suite

  • evals/measure.py — automated measurement of output humanness
  • benchmarks/ — benchmark runs with results
  • evals/perceived_humanness.py — LLM-judge evaluation
  • Results reported: 21/21 blind LLM-judge preference for unslop rewrites

Observability

The statusLine hook shows current mode. No other dashboard or log.

Related frameworks

same archetype · same primary tool · same memory type

claude-mem (thedotmack) ★ 78k

Background worker service captures every tool call as an observation, AI-compresses sessions, and auto-injects relevant past…

pi (badlogic/earendil) ★ 55k

A minimal, hackable, multi-provider terminal coding agent that adapts to your workflows via npm-installable TypeScript Extensions…

Agent Skills (Addy Osmani) ★ 46k

Encodes senior-engineer software development lifecycle as 23 auto-routed skills and 7 slash commands for any AI coding agent.

wshobson/agents Plugin Marketplace ★ 36k

Single Markdown source for 83 domain-specialized plugins that auto-generates idiomatic artifacts for five AI coding harnesses.

TabbyML/Tabby ★ 34k

Self-hosted AI coding assistant server (alternative to GitHub Copilot) with admin dashboard, RAG-based completions, and multi-IDE…

Compound Engineering ★ 17k

Make each unit of engineering work compound into easier future work via brainstorm→plan→execute→review→learn cycles.