scrub-ai
Shield your prompts. Sanitize sensitive content before sharing with AI assistants.
The Problem
Every day, developers copy sensitive content into AI assistants without thinking:
❌ Stack trace with internal hostnames → pasted into ChatGPT
❌ Application logs with session tokens → pasted into Copilot
❌ Config files with database passwords → pasted into Claude
❌ kubectl output with cluster names → pasted into AI
❌ AWS CLI output with account IDs → pasted into ChatGPT
Once that data leaves your machine, you have no control over it.
scrub-ai fixes this — it detects and masks sensitive content before you share it with any AI tool.
Features
- 🛡️ Secrets detection — API keys, tokens, passwords, private keys
- ☁️ Cloud detection — AWS account IDs, ARNs, GCP project IDs, Azure subscriptions
- 📡 Network detection — IP addresses, internal hostnames, internal URLs
- 🕵️ PII detection — emails, phone numbers, names via Presidio (optional)
- 🎯 Confidence scoring — filter low-signal matches with
--min-confidence - 🗂️ Named profiles — focus on
aws,k8s,secrets, ornetwork - 📝 Custom patterns — add your own regex rules via a local JSON file
- 👁️ Watch mode — automatically sanitize clipboard whenever it changes (all platforms)
- ⌨️ Windows hotkey — press
Ctrl+Alt+Sto sanitize clipboard on demand - 🖥️ System tray — runs quietly in the background (Windows)
- 📋 CLI — pipe any text through it from the terminal
- 📦 PyPI — install with a single
pip install scrub-ai
Install
Standard install
Includes secrets, cloud, and network detection, profiles, and custom patterns. Works on Windows, Linux, and macOS.
pip install scrub-ai
With PII detection (optional, ~400 MB)
Adds detection of emails, phone numbers, and person names using Microsoft Presidio and spaCy.
# Step 1 — install the package with PII dependencies
pip install "scrub-ai[pii]"
# Step 2 — download the spaCy language model (required for PII to work)
python -m spacy download en_core_web_lg
If you skip Step 2, scrub-ai will still run — PII detection will silently do nothing.
Usage
Basic — pipe or file
# Pipe any text through it
cat error.log | scrub-ai
# Sanitize a file
scrub-ai --file crash.log
# See what would be detected without changing the output
scrub-ai --dry-run --file logs.txt
# Sanitize and copy the result to clipboard
scrub-ai --file logs.txt --copy
Filtering — profiles and confidence
Use profiles to focus on a specific category and ignore noise from others.
# Focus on AWS credentials only (ignores IPs, hostnames, etc.)
scrub-ai --profile aws --file logs.txt
# Focus on Kubernetes-related secrets
scrub-ai --profile k8s --file logs.txt
# Only mask high-confidence detections (0.0–1.0 scale)
scrub-ai --min-confidence 0.85 --file logs.txt
# Combine profile and confidence threshold
scrub-ai --profile secrets --min-confidence 0.90 --file logs.txt
Available profiles: aws, k8s, secrets, network
Each profile activates only the detectors relevant to that context. For example, --profile aws runs only AWS credential and ARN patterns — it will not mask IP addresses or internal hostnames.
Watch mode — automatic clipboard sanitization
Watch mode monitors your clipboard continuously. Every time you copy something, scrub-ai checks it and masks any sensitive content automatically before you paste.
Works on Windows, Linux, and macOS.
scrub-ai --watch
- Starts polling the clipboard every 500ms
- If sensitive content is detected, the clipboard is silently replaced with the clean version
- If nothing sensitive is found, the clipboard is left unchanged
- Press
Ctrl+Cto stop
Hotkey + system tray (Windows only)
For a manual, on-demand workflow on Windows. Runs as a background service with a system tray icon.
scrub-ai --start
- Icon appears in the system tray (bottom right)
- Copy any text with
Ctrl+Cas normal - Press
Ctrl+Alt+Sto sanitize the clipboard - Paste the clean text with
Ctrl+V - Right-click the tray icon to toggle the hotkey on/off, or to quit
--startis Windows only. For automatic clipboard sanitization on all platforms, use--watchinstead.
PII Detection
When installed with pip install "scrub-ai[pii]" and the spaCy model is downloaded, scrub-ai automatically detects:
| Type | Example input | Masked as |
|---|---|---|
| Person names | John Smith |
[PERSON] |
| Email addresses | john@example.com |
[EMAIL_ADDRESS] |
| Phone numbers | 555-867-5309 |
[PHONE_NUMBER] |
echo "Call John Smith at 555-867-5309 or john@example.com" | scrub-ai
# → Call [PERSON] at [PHONE_NUMBER] or [EMAIL_ADDRESS]
PII detection runs automatically alongside secrets, cloud, and network detection — no extra flags needed.
Custom Patterns
You can add your own regex rules to catch internal identifiers that scrub-ai doesn't know about.
Create the patterns file at:
- Linux/macOS:
~/.config/scrub-ai/patterns.json - Windows:
%APPDATA%\scrub-ai\patterns.json
[
{
"pattern": "ticket-\\d+",
"replacement": "[TICKET]",
"label": "internal_ticket",
"confidence": 0.95
}
]
| Field | Required | Description |
|---|---|---|
pattern |
✅ | Python regex string |
replacement |
✅ | What to replace matches with |
label |
✅ | Name shown in the detection summary |
confidence |
❌ | Score from 0.0–1.0 (default: 1.0). Used with --min-confidence |
Custom patterns are loaded on every run — no restart needed.
Example
Input:
ERROR 2024-01-15 14:32:01 - Connection failed
host: db01.prod.internal
password: myS3cretP@ss123
aws_access_key_id: AKIAIOSFODNN7EXAMPLE
aws_account_id: 123456789012
ip: 10.0.1.45
Output:
ERROR 2024-01-15 14:32:01 - Connection failed
host: [INTERNAL_HOST]
password: [REDACTED]
aws_access_key_id: [AWS_ACCESS_KEY]
aws_account_id: [AWS_ACCOUNT_ID]
ip: [IP_ADDRESS]
Detection summary (stderr):
Detected 5 sensitive value(s): aws_access_key=1, aws_account_id=1, internal_host=1, ipv4=1, password=1
What Gets Detected
| Category | Examples |
|---|---|
| AWS credentials | Access keys, secret keys, session tokens |
| AWS infrastructure | Account IDs, ARNs, S3 URLs |
| GCP credentials | Service account keys, project IDs |
| Azure credentials | Subscription IDs, connection strings |
| Generic secrets | API keys, bearer tokens, JWTs, private keys, hex tokens |
| Passwords | password=, passwd=, pwd= key-value patterns |
| Network | IPv4, IPv6, internal hostnames, internal URLs |
| PII (optional) | Person names, email addresses, phone numbers |
Roadmap
- Project setup
- v1.0 — CLI + secrets + cloud + network detection + Windows hotkey + system tray
- v1.1 — PII detection (Presidio) + confidence scoring + profiles + custom patterns
- v1.2 — Watch mode (automatic clipboard monitoring, all platforms)
- v2.0 — VS Code extension
- v2.1 — Browser extension (warns before pasting into ChatGPT)
- v3.0 — Team policies + audit log
Contributing
Contributions are welcome! Please read CONTRIBUTING.md first.
# Clone
git clone https://github.com/rajwindermarwaha/scrub-ai
cd scrub-ai
# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
# Install with dev dependencies
pip install -e ".[dev]"
# Optional: also install PII dependencies
pip install -e ".[pii]"
python -m spacy download en_core_web_lg
# Run tests
pytest
License
MIT — see LICENSE
Author
Built by @rajwindermarwaha
Built this because I had to put in the extra effort of copying everything into Notepad first and manually scrubbing it before sharing with AI tools. Figured others do the same.
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 scrub_ai-1.2.0.tar.gz.
File metadata
- Download URL: scrub_ai-1.2.0.tar.gz
- Upload date:
- Size: 33.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdc6e2040d77468ee45dc40c59f762f78a2c06f89d016b4eb0ce93a3396d0cd9
|
|
| MD5 |
00c17ac850b68e780dcef586fb6980dc
|
|
| BLAKE2b-256 |
ecf38ff6c5c67094ad5cecb64c754c38c4fbb9f3dded58e767b36f25d19eb108
|
File details
Details for the file scrub_ai-1.2.0-py3-none-any.whl.
File metadata
- Download URL: scrub_ai-1.2.0-py3-none-any.whl
- Upload date:
- Size: 22.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d10c0187987a9f9f88fe31ca07a8c00dc5ab59c4d0d2dbdbd6371fd78523d69a
|
|
| MD5 |
14c57cd845b355d53dfc946f6dc2c367
|
|
| BLAKE2b-256 |
d3d75d4f480e7cb5c5a46952fcd7a6f88ab56eff80058a1ba348a302be8b8281
|