Unslop
pendingby mdeloughry
Detect and fix AI writing patterns — clichés, passive voice, corporate jargon, and more.
Unslop — Obsidian Plugin
Detect and fix AI writing patterns — clichés, passive voice, corporate jargon, and more.
What it does
Run Unslop: Analyze note from the command palette. The plugin will:
- Underline flagged text in the editor (colour-coded by category)
- Open a side panel showing a slop score (0–100), findings grouped by category, and suggested rewrites
- Let you click any finding to jump to it in the editor
- Let you copy a ready-made AI prompt to paste into any AI assistant
- Let you trigger an inline AI rewrite of the flagged paragraph (requires an API key)
Works on the full note, or on selected text only.
Detection categories
| Category | What it catches |
|---|---|
| 🔴 AI Clichés | "delve," "tapestry," "nuanced," "in the realm of," "stands as a testament," … |
| 🟠 Filler & Hedging | "arguably," "essentially," "it goes without saying," "for what it's worth," … |
| 🟡 Passive Voice | Constructions hiding who does what ("was built," "is being considered," …) |
| 🔵 Corporate Jargon | "leverage," "bandwidth," "north star," "circle back," "move the needle," … |
| 🟣 Sentence Monotony | Consecutive sentences of suspiciously similar length |
| 🩷 Fake Enthusiasm | "absolutely amazing," "literally unprecedented," "mind-blowing," !! … |
| 🟢 Adverb Overuse | Clusters of -ly adverbs ("meticulously," "seamlessly," "remarkably," …) |
| 🔵 List Addiction | Sequences of "firstly… secondly… moreover… furthermore… additionally…" |
All rules skip code blocks (fenced and inline) automatically.
Installation
From Obsidian (once listed in the community registry)
- Open Settings → Community Plugins → Browse
- Search for Unslop
- Install and enable
Manual install
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Copy them into
<your-vault>/.obsidian/plugins/unslop/ - Enable the plugin in Settings → Community Plugins
Via BRAT (beta testing)
- Install the BRAT plugin
- Add this repository:
Settings → BRAT → Add Beta Plugin
Usage
| Action | How |
|---|---|
| Analyze note | Command palette → Unslop: Analyze note |
| Analyze selection | Select text first, then run the command |
| Clear highlights | Command palette → Unslop: Clear analysis, or click Clear in the panel |
| Jump to finding | Click the → button next to any finding |
| Copy AI prompt | Click Copy AI prompt in the panel |
| AI rewrite | Click the 🪄 button next to any finding (API key required) |
AI features (optional)
Network disclosure: The AI rewrite feature sends paragraph text from your notes to a third-party AI provider you configure (OpenAI, Anthropic, Google, Mistral, Cohere, or OpenRouter). This only happens when you explicitly click the 🪄 rewrite button. No data is sent automatically — the plugin never contacts any remote service unless you opt in by configuring an API key and triggering a rewrite. All other features (analysis, highlighting, scoring, prompt copying) run entirely offline.
Copy AI prompt
Builds a structured prompt containing all detected issues and your document text (or file path). Paste it into any AI assistant (ChatGPT, Claude, Gemini, etc.). This is copied to your clipboard — nothing is sent over the network.
Prompt modes (toggle in the panel or in settings):
- Content (recommended) — embeds the full document text, works with any AI
- Path — includes only the file path, only useful if your AI agent can read your local filesystem
Inline rewrites (API key required)
Configure a provider in Settings → Unslop → AI provider:
| Provider | Default model | Get API key |
|---|---|---|
| OpenAI | gpt-4o | platform.openai.com |
| Anthropic | claude-3-5-sonnet-20241022 | console.anthropic.com |
| Google Gemini | gemini-1.5-pro-latest | aistudio.google.com |
| Mistral | mistral-large-latest | console.mistral.ai |
| Cohere | command-r-plus-08-2024 | dashboard.cohere.com |
| OpenRouter | openai/gpt-4o | openrouter.ai |
The model field is editable. OpenAI, Mistral, and OpenRouter support a base URL override for proxies or self-hosted models.
Once configured, a 🪄 button appears next to each finding. Clicking it:
- Extracts the surrounding paragraph
- Sends it to the AI with all findings in that paragraph as context
- Shows the suggested rewrite in the panel
- Accept replaces the text in your editor · Copy copies it · Dismiss discards it
Your note content is sent directly to the provider's API using your own API key. The plugin does not proxy, store, or log any data. Refer to your chosen provider's privacy policy for how they handle API requests.
Custom rules
Add your own phrases in Settings → Unslop → Custom Rules:
- Phrase — the word or phrase to flag (matched as a whole word, case-insensitive)
- Suggestion — optional hint shown in the panel
- Enable/disable per rule without deleting it
Custom rules appear in the Custom Rules category in the side panel and are included in the AI prompt and inline rewrite context.
Development
git clone https://github.com/your-username/obsidian-unslop
cd obsidian-unslop
npm install --legacy-peer-deps
# Watch mode (rebuilds on save)
npm run dev
# Production build
npm run build
To test in Obsidian, symlink the project folder into your vault:
ln -s /path/to/obsidian-unslop \
/path/to/vault/.obsidian/plugins/unslop
Then enable the plugin in Settings and use Reload app without saving (Ctrl/Cmd+R) after each build.
Releasing
- Update
versioninmanifest.jsonandpackage.json - Add the new version to
versions.json:"x.y.z": "1.4.0" - Commit:
git commit -am "x.y.z" - Tag and push:
git tag x.y.z && git push && git push --tags - The GitHub Actions workflow builds and creates a draft release automatically
- Review and publish the draft release on GitHub
Submitting to the Obsidian community registry
See the official guide: Submit your plugin.
The short version:
- Publish your plugin on GitHub with a public release containing
main.js,manifest.json, andstyles.css - Fork obsidian-releases
- Add your plugin to
community-plugins.json - Open a pull request
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.