AI-powered email unsubscribe tool. Set it up once, AI handles your inbox forever.
Project description
███╗ ██╗ ██████╗ ████████╗██╗ ██╗██╗ ██╗
████╗ ██║██╔═══██╗╚══██╔══╝██║ ██║╚██╗██╔╝
██╔██╗ ██║██║ ██║ ██║ ███████║ ╚███╔╝
██║╚██╗██║██║ ██║ ██║ ██╔══██║ ██╔██╗
██║ ╚████║╚██████╔╝ ██║ ██║ ██║██╔╝ ██╗
╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝
nothx
Stop reading marketing emails. Start reading real ones.
nothx hunts down marketing emails, uses AI to sort the noise from the signal, and actually clicks unsubscribe for you. It runs on your machine, learns your preferences, and never touches your data.
Set it. Forget it. Inbox fixed.
Quick Start
pip install nothx
nothx init
That's it. The wizard handles everything else.
Run
nothxanytime for the interactive menu.
Why nothx?
| The Problem | How nothx fixes it |
|---|---|
| Unroll.me sells your data | 100% local — your data never leaves home |
| Most tools just filter emails | Actually clicks unsubscribe links |
| Manual unsubscribing is tedious | AI classifies hundreds of senders in seconds |
| One-size-fits-all rules | Learns your preferences over time |
| Yet another app to run | Uses native OS scheduling (launchd/systemd) |
| What if AI gets it wrong? | Undo anything — and it learns from the correction |
Features
Core
- AI-Powered — Claude, GPT, Gemini, or local models via Ollama
- Actually Unsubscribes — RFC 8058 one-click, GET requests, or mailto
- Privacy First — Never reads email bodies. Only headers. All data stays local.
Smart
- Learns From You — Gets smarter every time you disagree with a decision
- 5-Layer Classification — Rules → Patterns → AI → Heuristics → Manual review
- Protected Categories — Banks, government, healthcare never auto-unsubscribed
Practical
- Multi-Account — Scan Gmail + Outlook simultaneously
- Native Scheduling — No daemon needed. Uses launchd (macOS) or systemd (Linux).
- Undo Anything — Changed your mind?
nothx undo domain.com
Beautiful
- Rich CLI — Animated banner, progress bars, colored output
- Interactive Mode — Just run
nothxfor menu-driven operation
The Learning System
nothx gets smarter the more you use it. Every decision trains your personal preference model.
What it learns:
- Keywords — Keep emails with "receipt"? Future receipt-related senders score safer.
- Open rates — If you keep emails you never open, it stops penalizing low engagement.
- Volume tolerance — Keep high-volume senders? It raises the threshold before flagging.
Corrections teach it too. When you run nothx undo, it doesn't just restore — it learns that this type of email matters to you.
nothx status --learning # See your learned preferences
How It Works
Email arrives
↓
┌─────────────────┐
│ USER RULES │ Your explicit keep/unsub patterns
└────────┬────────┘
↓
┌─────────────────┐
│ PATTERNS │ Known marketing domains, safe categories
└────────┬────────┘
↓
┌─────────────────┐
│ AI ANALYSIS │ AI examines headers (never bodies)
└────────┬────────┘
↓
┌─────────────────┐
│ HEURISTICS │ Open rates, frequency, spam patterns
└────────┬────────┘
↓
┌─────────────────┐
│ REVIEW QUEUE │ Uncertain? You decide.
└─────────────────┘
Each layer can make a final call or pass to the next. Your rules always win.
Commands
Essentials
| Command | What it does |
|---|---|
nothx |
Interactive menu |
nothx init |
Setup wizard — accounts, API key, first scan |
nothx run |
Scan and process emails |
nothx status |
Stats, accounts, schedule at a glance |
nothx review |
Decide on uncertain senders |
Day-to-Day
| Command | What it does |
|---|---|
nothx senders |
List all tracked senders |
nothx search <pattern> |
Find a specific sender |
nothx undo [domain] |
Undo an unsubscribe |
nothx history |
View activity log |
Configuration
| Command | What it does |
|---|---|
nothx rule "pattern" keep/unsub |
Add a classification rule |
nothx schedule --monthly |
Set automatic run frequency |
nothx account add/remove |
Manage email accounts |
nothx config --show |
View current config |
Aliases: r (run), s (status), rv (review), h (history)
Setup
Requirements
- Python 3.11+
- Gmail, Outlook, Yahoo, or iCloud account
- AI provider (optional — works without AI too)
Don't have Python?
macOS:
brew install python@3.11
Or download from python.org/downloads
Windows:
Download from python.org/downloads. During install, check "Add Python to PATH".
Linux:
# Ubuntu/Debian
sudo apt install python3.11 python3-pip
# Fedora
sudo dnf install python3.11 python3-pip
After installing, verify with python3 --version.
Installation
# Base install (heuristics only, or Ollama)
pip install nothx
# With your preferred AI provider
pip install "nothx[anthropic]" # Claude (recommended)
pip install "nothx[openai]" # GPT-4
pip install "nothx[gemini]" # Google Gemini
pip install "nothx[all-ai]" # All providers
Gmail App Password
- Go to myaccount.google.com/apppasswords
- Generate a new password for "nothx"
- Copy the 16-character code
Requires 2FA enabled on your account.
Outlook App Password
- Go to account.live.com/proofs/AppPassword
- Enable 2FA if not already
- Generate and copy the app password
AI Provider Setup
Anthropic (Claude) — Best for email classification. Get API key
OpenAI (GPT) — GPT-4o models. Get API key
Google (Gemini) — Free tier available. Get API key
Ollama (Local) — Run models locally. No API key needed. Install Ollama
Without AI, nothx uses heuristic scoring. Still works, just less smart.
Troubleshooting
Connection failed
- Verify your App Password (not your regular password)
- Ensure IMAP is enabled in your email settings
- For Gmail: Check that 2FA is enabled (required for App Passwords)
- Run
nothx testto diagnose
AI classification not working
- Check your API key:
nothx config --show - Verify you have credits/quota with your chosen provider (Anthropic, OpenAI, or Google)
- nothx falls back to heuristics if AI fails — it still works
Still getting emails after unsubscribe
- Some senders ignore unsubscribe requests (bad actors)
- Run
nothx runagain — it escalates repeat offenders to blocking - Add manually:
nothx rule "domain.com" block
Start fresh
nothx reset # Delete everything
nothx reset --keep-config # Keep accounts, clear history
Comparison
| Feature | Unroll.me | SaneBox | Leave Me Alone | nothx |
|---|---|---|---|---|
| Price | Free | $84-432/yr | $48/yr | Free |
| Privacy | Sells data | Cloud | Cloud | 100% local |
| Actually unsubscribes | No | Yes | Yes | Yes |
| AI classification | No | Yes | Basic | Yes (multi-provider) |
| Learns your preferences | No | Limited | No | Yes |
| Local AI option | No | No | No | Yes (Ollama) |
| Open source | No | No | No | Yes |
Philosophy
We built nothx because:
- Your email is yours. Not a product to sell.
- AI should adapt to you. Not the other way around.
- Automation should be invisible. Set once, forget forever.
- You can always change your mind. Every action is reversible.
Contributing
git clone https://github.com/nothx/nothx.git
cd nothx
pip install -e ".[dev]"
pytest
License
MIT — see LICENSE
nothx — Because your inbox should work for you, not against you.
Made with mass frustration at marketing emails.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nothx-0.1.0.tar.gz.
File metadata
- Download URL: nothx-0.1.0.tar.gz
- Upload date:
- Size: 83.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e316a0fe03c27e8bb459685363965bc93636284c87366dd7db3ff07ea54b0fda
|
|
| MD5 |
a1cd1e43a2dd1ace6152c45250837552
|
|
| BLAKE2b-256 |
1acee7828d763068ec530340c81ef5d0a35700b00eddaa3438ca4b0598a93fcc
|
File details
Details for the file nothx-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nothx-0.1.0-py3-none-any.whl
- Upload date:
- Size: 73.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08f5ee99b533395bb7f24ebafc1d88d0a817b6c93ede0220ba850f9fd213faec
|
|
| MD5 |
919d3c7c3fb675efcd8647f4f7e7e146
|
|
| BLAKE2b-256 |
9991bd0652714cd65cd6954c1704500198d51f12ba9be564b440221b51abf697
|