Clipboard guardian — auto-redacts API keys, tokens, PII, PANs before they reach AI chats, Slack, or GitHub.
Project description
▍ vibe·protect
A clipboard guardian for developers in the AI era.
Stop pasting API keys, private keys, DB URLs, tokens, and internal IPs into ChatGPT, Slack DMs, GitHub issues, and support tickets. Vibe Protect watches your clipboard and auto-redacts secrets before they reach the other side.
CLI · Desktop GUI · Browser Extension · Web Playground
What it is
A single pattern library implemented four ways:
| Client | What it does | Path |
|---|---|---|
| CLI | Watches your clipboard from a terminal. Notifications + JSONL event log. | cli/ |
| Desktop GUI | Native Tkinter window with live history and arm/pause toggle. | desktop/ |
| Browser Extension | Intercepts every copy/cut event in every tab. Badge counter + popup. | extension/ |
| Web Playground | Paste anything, see live redaction. Also hosts dashboards + download page. | frontend/ + backend/ |
All four speak the same 18-pattern library defined in cli/patterns.py
(Python) and mirrored in frontend/src/lib/patterns.js /
extension/patterns.js.
Why
Your .env has no business being in an LLM's context window. Neither does
your ssh-ed25519 ... key, your prod DATABASE_URL, your sk_live_...
Stripe key, or your teammate's email address. But when you're moving fast,
you will slip — and paste something you shouldn't.
Vibe Protect is the seat-belt. It redacts 18 patterns by default:
- OpenAI / Anthropic API keys
- AWS access & secret keys
- GitHub personal access tokens
- Stripe live/test keys
- Google / Firebase API keys
- Slack tokens
- JWTs
- PEM private key blocks (RSA / EC / OpenSSH / PGP)
- SSH public keys
- DB connection URLs with embedded credentials
- Emails, IPv4, credit cards
- Shell prompts (
user@host:~$) - Generic
PASSWORD=…/API_KEY=…assignments - Long base64 blobs
Run python cli/vibe_protect.py --list-patterns for the live list.
Quick start
Install via pip (preferred)
pip install vibe-protect
# launch the clipboard monitor
vibe-protect
# or the enterprise dispatcher
vibe-protect-enterprise --audit
vibe-protect-enterprise --build-chrome
vibe-protect-enterprise --test-bug "sk-proj-Xy7Qw9…" # local-only, no disk writes
Optional extras: pip install "vibe-protect[desktop]" (Tkinter GUI +
notifications), pip install "vibe-protect[enterprise]" (GPO/MDM +
SSO JWT validation), or pip install "vibe-protect[all]".
CLI (from source, 30 seconds)
git clone https://github.com/YOUR_USERNAME/vibe-protect.git
cd vibe-protect/cli
pip install -r requirements.txt
python vibe_protect.py
Now copy something sensitive. Try pasting it anywhere — it's already redacted.
Desktop GUI
cd desktop
pip install -r requirements.txt # pulls pyperclip
python vibe_desktop.py
Browser Extension (Chrome / Edge / Brave / Arc)
chrome://extensions- Toggle Developer mode (top right)
- Load unpacked → pick the
extension/folder - Pin the amber shield to your toolbar
For Firefox: about:debugging#/runtime/this-firefox → Load Temporary Add-on → manifest.json.
Web playground (dev)
# backend
cd backend
pip install -r requirements.txt
# env: MONGO_URL, DB_NAME required
uvicorn server:app --reload --port 8001
# frontend (separate shell)
cd frontend
yarn install
yarn start
Open http://localhost:3000.
Repo layout
vibe-protect/
├── cli/ # Python CLI (single source of truth for patterns)
│ ├── patterns.py
│ ├── vibe_protect.py
│ ├── requirements.txt
│ └── README.md
├── desktop/ # Tkinter GUI
│ ├── vibe_desktop.py
│ ├── requirements.txt
│ └── README.md
├── extension/ # Browser extension (Manifest v3)
│ ├── manifest.json
│ ├── background.js
│ ├── content.js
│ ├── popup.html / popup.js / popup.css
│ ├── options.html / options.js
│ ├── patterns.js
│ ├── icons/
│ └── README.md
├── backend/ # FastAPI API
│ └── server.py
├── frontend/ # React landing + dashboard
│ └── src/
├── LICENSE
└── README.md
API reference
The backend exposes a small JSON API, useful if you want to wire the redaction engine into other tools.
| Method | Route | Description |
|---|---|---|
| GET | /api/ |
Health check + current version |
| GET | /api/version |
Installed vs. latest release, throttled via the updater |
| GET | /api/patterns |
List all active patterns + examples |
| POST | /api/redact |
{ text, advanced? } → { cleaned, matches, chars_before/after } — pass "advanced": true for entropy-aware detection + context filtering + catch-all |
| POST | /api/track |
Opt-in anonymous event counter (source, patterns, sizes) |
| GET | /api/feed |
Last N anonymised events for the live ticker |
| GET | /api/stats |
Aggregate counts powering the dashboard |
Example:
curl -s -X POST https://your-host/api/redact \
-H 'content-type: application/json' \
-d '{"text":"OPENAI_API_KEY=sk-proj-abcd1234efgh5678ijkl9012mnop3456"}'
Contributing
PRs welcome — especially:
- New patterns: either bundled (PR to
/app/cli/patterns.py+ mirrors in JS + extension), or community (PR to the separate community-rules repo — seedocs/community-rules-template/for the template) - Tray-icon support for the desktop app (
pystray) - A Safari port of the extension
- Tests — there are currently none; regex false-positive detection would be huge
Pattern tiers at a glance
| Tier | Source | How users opt in | Visible as |
|---|---|---|---|
| Bundled | cli/patterns.py |
always on | openai_api_key, … |
| Signed dynamic | CDN + Ed25519 sig | VP_ENABLE_PATTERN_SYNC=1 |
dyn_* |
| Community | GitHub PR-gated repo | VP_ENABLE_COMMUNITY_RULES=1 |
community_* |
| User custom | ~/.vibeprotect/custom_rules.json |
file exists | custom name |
All tiers are strictly additive — lower tiers can never remove, shadow, or weaken a higher tier's protection.
🔒 Privacy & data collection
TL;DR — Vibe Protect collects NOTHING about you.
| Does it save my data? | ❌ No |
| Does it send data anywhere? | ❌ No usage analytics, no telemetry, no crash reports |
| Does it need internet? | ❌ No — works 100% offline |
| Does it store clipboard history? | ❌ No |
| Does it phone home at startup? | ⚠ Clipboard-monitor mode does one opt-out HTTPS GET to api.github.com (update check) — disable with --no-update-check or VP_DISABLE_UPDATE_CHECK=1. File-scan / CI / pre-commit modes are fully offline. |
Optional features (all off by default unless noted):
--audit— writes a local AES-256-GCM + HMAC-authenticated audit log to~/.vibeprotect/audit/. Never transmitted. Stores event type, timestamp, secret-type label, and confidence — never the plaintext.
Verify it yourself:
vibe-protect --verify-telemetry # inspects your live config
ls -la ~/.vibeprotect/ # shows local files, if any
Older privacy notes (still accurate):
- CLI, desktop, extension: the only network call is an optional, throttled
update check against the public GitHub releases API (disabled via
VP_DISABLE_UPDATE_CHECK=1). All redaction matching is local. - The updater never downloads or executes a release asset automatically —
it just surfaces the release URL and suggests
pip install --upgrade. - Web playground: the
/api/redactendpoint stores counts only (which patterns matched, how many chars). Never the original text, never the redacted text, never an IP, never a user identifier.
📖 Full declaration: docs/PRIVACY.md · Network surface: docs/NETWORK.md
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 vibe_protect-1.0.1.tar.gz.
File metadata
- Download URL: vibe_protect-1.0.1.tar.gz
- Upload date:
- Size: 72.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43b4850dece1dd7aed32cd9319e2a78f006b734ae6efdf2defed5ba3459d1179
|
|
| MD5 |
181f89f1d9847c5fb65d538f17ad0143
|
|
| BLAKE2b-256 |
293234749384be09913744fa1ac4376231dac918fac57b83c306a752f9a10bbd
|
File details
Details for the file vibe_protect-1.0.1-py3-none-any.whl.
File metadata
- Download URL: vibe_protect-1.0.1-py3-none-any.whl
- Upload date:
- Size: 75.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ee978b66dcc3e5bbd7dd3e22e444e8748093dc33fc3e70ba9d42faceca75859
|
|
| MD5 |
78d3fa885731e64b9f5c363daa8bc737
|
|
| BLAKE2b-256 |
aa9e4943168025a079424e46cbcbfe2e85ba823089d39a0f5c12584e9474d459
|