
Lokaler Datenschutz-Proxy, der Geheimnisse und personenbezogene Daten (PII) ersetzt, bevor KI-Anfragen Ihren Rechner verlassen.
Halten Sie sensible Werte aus LLM-Anfragen heraus, ohne das Gespräch zu unterbrechen.
Installation · Schnellstart · Richtlinien · Überwachung · Pi / OMP · Sicherheit
Cover ist ein lokaler Datenschutz-Proxy für Codex, Claude Code, Cursor, SDKs und andere HTTP-basierte KI-Clients. Es scannt ausgehende JSON-Daten, ersetzt zutreffende Werte lokal und stellt reversible Ersetzungen in JSON- und Streaming-Antworten wieder her. Das LLM erhält die geschützten Werte, während der Agent weiterhin die Originale verwenden kann.
Cover läuft als transparenter Reverse-Proxy mit richtliniengesteuerter Ersetzung, deterministischen Pseudonymen, Betriebsprüfungen, Codex-Unterstützung und strenger Fehlerbehandlung. Es ist darauf ausgelegt, lokal, beobachtbar und explizit darüber zu bleiben, was es nicht prüfen kann.
flowchart LR
A["Agent"] -->|"JSON request"| C["Cover<br/>detect · transform · enforce"]
C -->|"protected request"| L["LLM or router"]
L -->|"JSON or SSE response"| C
C -->|"restored response"| A
Das Installationsprogramm klont Cover, kompiliert es mit Go, installiert es nach ~/.local/bin/cover, konfiguriert ausgewählte Clients und startet den Proxy.
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | bash
Voraussetzungen: git und die in go.mod angegebene Go-Version.
Vorkompilierte Archive für Linux, macOS und Windows sowie deren Prüfsummen sind in den GitHub-Releases verfügbar.
Für eine nicht-interaktive Installation:
COVER_AGENTS=openai,claude \
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | bash
git clone https://github.com/DavidCarliez/cover.git
cd cover
go build -o cover ./cmd/cover
install -m 0755 cover ~/.local/bin/cover
Das Kern-Binary hat keine cgo-Abhängigkeit. Standardmäßige Go-Cross-Kompilierung funktioniert:
GOOS=linux GOARCH=arm64 go build -o cover-linux-arm64 ./cmd/cover
GOOS=windows GOARCH=amd64 go build -o cover.exe ./cmd/cover
cover init # write ~/.config/cover/config.yaml
cover start --detach # run in the background
cover doctor # verify the local setup
cover test # local redaction round trip, no network call
cover monitor # watch privacy-safe request metadata
cover init fragt nach OpenAI, Anthropic oder einem benutzerdefinierten Upstream. Die vollständige Konfiguration ist in configs/config.example.yaml dokumentiert.
Das Stoppen von Cover ändert die Client-Konfiguration nicht. Ein Client, der weiterhin auf Cover zeigt, kann keine Verbindung herstellen, bis Cover neu gestartet oder der Client wieder auf seinen direkten Anbieter oder Router ausgerichtet wird.
Die integrierte Regex-Erkennung umfasst AWS- und GCP-Schlüssel, GitHub-, GitLab-, Slack-, Stripe- und Anthropic-Tokens, Private-Key-Blöcke, JWTs, explizite generische Secret-Zuweisungen, E-Mails, SSNs, Kreditkarten, Telefonnummern und IBANs. Ein nackter OpenAI-sk-...-Wert ist bewusst keine eigene integrierte Kategorie. Definieren Sie eine explizite Regel, falls Ihre Umgebung eine solche benötigt.
Regeln befinden sich unter rules in ~/.config/cover/config.yaml. Ein Selektor kann ein regulärer Ausdruck, ein builtin_*-Detektor oder eine Liste von JSON-Objektschlüsseln sein.
rules:
password_fields:
keys: [password, passwd, pwd, passphrase, user_password, database_password]
category: password
action: pseudonymize
generator: password
priority: 220
ipv4_addresses:
detector: builtin_ipv4
category: ip_address
action: pseudonymize
generator: ipv4
priority: 100
customer_name:
pattern: '(?i)\bNIKE\b'
category: customer
action: pseudonymize
generator: alias
priority: 80
forbidden_secret:
pattern: '(?i)secret\s*[:=]\s*(?P<value>[^\s,;]+)'
action: block
priority: 200
Schlüssel-Selektoren schützen vollständige String-Werte. So wird beispielsweise {"password":"admin"} geschützt, ohne ein nicht zusammenhängendes {"username":"admin"} als Passwort zu behandeln. Benannte (?P<value>...)-Gruppen ermöglichen es einem Regex, nur den erfassten Wert zu ersetzen.
Pseudonym-Generatoren: ipv4, ipv6, hostname, domain, fqdn, email, username, password, secret, uuid, url und alias.
Regeln werden beim Start validiert. Ungültige Selektoren, Ausdrücke, Aktionen, Generatoren oder Capture-Gruppen verhindern den Start von Cover. Detektorfehler, erschöpfte Zuordnungen, fehlerhaftes JSON, komprimierte Bodys und explizite Blöcke führen nicht dazu, dass die ursprüngliche Anfrage dennoch weitergeleitet wird.
Cover erstellt ~/.config/cover/pseudonym.key mit Berechtigungen nur für den Eigentümer. HMAC-SHA-256 leitet für denselben Originalwert über Sitzungen und Neustarts hinweg dasselbe Pseudonym ab. Unterschiedliche Installationen erzeugen unterschiedliche Pseudonyme.
Der Schlüssel kann Originalwerte nicht wiederherstellen. Die Wiederherstellung verwendet begrenzte Zuordnungen, die nur im Prozessspeicher gehalten werden. Zuordnungen werden durch X-Cover-Session getrennt, laufen nach der konfigurierten TTL ab und werden gelöscht, wenn eine isolierte Anfrage abgeschlossen ist. Sichern Sie den Schlüssel nur, wenn eine stabile Pseudonym-Kontinuität wichtig ist.
cover inspect request.json
cover inspect request.json --session demo
Der Bericht enthält die transformierte Anfrage, zutreffende Regeln, Kategorien, Aktionen, Warnungen und den Blockierungsstatus. Er sendet keine Netzwerkanfrage und gibt die reversible Zuordnung nicht aus.
cover doctor
cover doctor --json
Doctor validiert die Konfiguration, Listener-Richtlinie, Limits, Pseudonym-Schlüssel, den Schwärzungs-Roundtrip, Upstream-Loop-Schutz, Daemon, Fail-Closed-Verhalten, Audit-Log, Umgebungs-Routing, Codex-Anbieter und die Codex-Anfragekomprimierung. Sein Live-Test wird lokal abgelehnt und verbraucht keine Modell-Tokens.
cover monitor
cover monitor --follow=false -n 50
cover monitor --json
Der Standard-Monitor zeigt nur zugelassene Metadaten: Zeit, HTTP-Status, Anzahl der Transformationen, Byte-Anzahl, Latenz, Kategorien und generische Fehler. Audit-Logs enthalten niemals Anfrage- oder Antwort-Bodys, zutreffende Werte, Zuordnungen, Pfade, Abfragen oder Upstream-Zugangsdaten.
cover monitor --show-content
cover monitor --show-content --once
cover monitor --show-content --json
Diese Opt-in-Ansicht zeigt jedes abgefangene Original und die jeweilige Ersetzung, gefolgt von dem exakt transformierten JSON, das an den Upstream-Transport übergeben wird. Sie ist nur live verfügbar und wird niemals in das Audit-Log aufgenommen. Die Erfassung beginnt, sobald sich ein authentifizierter lokaler Betrachter verbindet, und endet, wenn dieser die Verbindung trennt. Der Stream ist nur über Loopback erreichbar, verwendet ein aus dem Installationsschlüssel abgeleitetes Token und trennt langsame Betrachter.
[!WARNING] Diese Terminalausgabe ist vertraulich. Verwenden Sie
--show-contentnicht in gemeinsam genutzten Terminals, aufgezeichneten Sitzungen, CI-Protokollen oder Support-Transkripten.
Cover leitet Anfragemethoden, Pfade, Abfragen und Header an den konfigurierten Upstream weiter. Die vorhandene Anbieterauthentifizierung funktioniert weiterhin, da Cover keine Authentifizierungs-Header umschreibt.
Codex verwendet die Responses-API. Fügen Sie einen Benutzeranbieter zu ~/.codex/config.toml hinzu und deaktivieren Sie die Anfragekomprimierung, damit Cover den Body prüfen kann:
model_provider = "cover"
[model_providers.cover]
name = "Cover"
base_url = "http://127.0.0.1:8317"
wire_api = "responses"
requires_openai_auth = true
supports_websockets = false
[features]
enable_request_compression = false
Diese Schlüssel folgen der offiziellen Codex-Konfigurationsreferenz. Wenn [features] bereits vorhanden ist, fügen Sie die Einstellung zu dieser Tabelle hinzu. Verwenden Sie für einen Router, der ein Token aus der Umgebung liest, anstelle von requires_openai_auth den Wert env_key = "YOUR_ROUTER_KEY_ENV_NAME".
Halten Sie den upstream von Cover auf die tatsächliche Router-URL gerichtet. Verwenden Sie configs/codex-router.example.yaml als Ausgangspunkt. Das ausgewählte Modell kann OpenAI, Anthropic, Gemini, DeepSeek oder ein anderes Modell sein, da Cover auf dem generischen JSON-Verkehr des Routers arbeitet.
encrypted_content-Felder der Responses-API sind undurchsichtig und kryptografisch verifiziert. Cover lässt sie beim Scannen von Anfragen und bei der Wiederherstellung von Antworten unverändert.
export ANTHROPIC_BASE_URL=http://127.0.0.1:8317
export OPENAI_BASE_URL=http://127.0.0.1:8317/v1
Claude Code verwendet die erste Form. OpenAI-kompatible SDKs und Clients verwenden in der Regel die /v1-Form. Das Installationsprogramm kann diese Einstellungen dauerhaft speichern, und cover env gibt die Exports für die während der Installation ausgewählten Clients aus.
SDK-Konstruktoren können dieselbe Basis-URL direkt festlegen:
client = OpenAI(base_url="http://127.0.0.1:8317/v1", api_key=os.environ["OPENAI_API_KEY"])
client = anthropic.Anthropic(base_url="http://127.0.0.1:8317", api_key=os.environ["ANTHROPIC_API_KEY"])
Cursor und andere Anwendungen können denselben Endpoint verwenden, wenn sie eine Einstellung für die API-Basis-URL bereitstellen. Bestätigen Sie das Routing mit cover doctor oder cover monitor.
Die offizielle Harness-Erweiterung steuert Cover von Pi oder Oh My Pi aus und behält die Datenschutz-Engine im lokalen Go-Proxy:
pi install npm:cover-harness
# or
omp plugin install cover-harness
Konfigurieren Sie nur die Anbieter, die durch den aktuellen Cover-Upstream laufen müssen:
/cover providers openai-codex,deepseek=/
/cover on
/cover doctor
Anbieter der OpenAI-Familie verwenden standardmäßig den /v1-Proxy-Pfad. =/ wählt die Proxy-Wurzel für Transporte wie DeepSeek, die einen eigenen Anforderungspfad hinzufügen. Verwenden Sie /cover status, /cover start, /cover stop und /cover monitor für den normalen Betrieb. /cover off stellt das direkte Anbieter-Routing wieder her.
Der Schutz ist fail-closed: Solange er aktiviert ist, bleiben konfigurierte Anbieter auf Cover ausgerichtet, wenn dessen Daemon nicht verfügbar ist. Anfragen schlagen also lokal fehl, anstatt den Proxy zu umgehen. Der Erweiterungsstatus ist privat und lokal unter ~/.config/cover/harness.json gespeichert.
Das gleiche Paket erscheint in der Pi-Paketgalerie. OMP-Benutzer können dieses Repository auch als Marketplace hinzufügen:
omp plugin marketplace add DavidCarliez/cover
omp plugin install cover-harness@cover
Regex- und schlüsselbasierte Regeln können nicht jeden Namen, jede Adresse, jede Kundennummer oder jeden internen Codenamen identifizieren. Cover kann ein kleines lokales llama.cpp-Modell als zusätzlichen semantischen Detektor ausführen.
cover models pull
cover models status
cover restart
Das Standardmodell ist Qwen2.5-0.5B-Instruct als etwa 490 MB großes Q4-GGUF. Cover startet llama-server auf Loopback und erzwingt Budgets pro Aufruf und insgesamt. Fehlende Binärdateien, Startfehler, Timeouts und Detektorfehler verhalten sich fail-closed, wenn der Detektor aktiviert ist. Zurückgegebene Spannen müssen exakt so im Eingabetext vorkommen, bevor Cover sie akzeptiert.
Lassen Sie diese Funktion auf nicht unterstützten Plattformen deaktiviert. Informationen zu Limits, Batchverarbeitung, Nebenläufigkeit und Modellpfaden finden Sie im Abschnitt detectors.llm_fallback der Datei configs/config.example.yaml.
Cover schützt zutreffende String-Werte in JSON-Bodys, die tatsächlich durch den Proxy laufen. Es erhebt nicht den Anspruch, jeden vertraulichen Wert zu entdecken.
Daten können die Maschine dennoch verlassen, wenn sie in folgendem Kontext auftreten:
allow-Regel abgedeckt wird;encrypted_content, das aus Protokollsicherheitsgründen unverändert bleiben muss;Die Behandlung von Inline-Bildern ist mit media.images: allow, warn oder block konfigurierbar. Cover prüft keine Pixel, und keine Medienrichtlinie kann jede mögliche Kodierung erkennen.
Cover lehnt Nicht-Loopback-Listener ab, sofern nicht explizit network.allow_remote: true konfiguriert ist. Wenn Cover und sein Upstream-Router auf verschiedenen Hosts laufen, verwenden Sie TLS oder einen anderen vertrauenswürdigen Transport und wenden Sie separate Netzwerkzugriffskontrollen an. Cover selbst authentifiziert den normalen Proxy-Verkehr nicht.
Limits für Anfragen, gepufferte Antworten, gesamte Streams und einzelne SSE-Ereignisse begrenzen die Speichernutzung. Zu große Anfragen geben HTTP 413 zurück, zu große gepufferte Antworten geben HTTP 502 zurück, und zu große Streams werden beendet.
Lesen Sie SECURITY.md, bevor Sie eine Sicherheitslücke melden. Bitte nutzen Sie den dort beschriebenen privaten Meldeweg, anstatt ein öffentliches Issue zu eröffnen.
CONTRIBUTING.mdCODE_OF_CONDUCT.md| Bereich | Cover-Funktion |
|---|
| Richtlinie | Deklarative Regeln mit den Aktionen allow, placeholder, pseudonymize, mask, redact und block |
| Realistische Ersetzungen | Deterministische Generatoren für IP-Adressen, Hosts, Domains, E-Mails, Benutzernamen, Passwörter, UUIDs, URLs und Aliase |
| Kontextbezogene Regeln | Schutz ganzer Werte über JSON-Schlüssel, einschließlich kurzer Passwörter wie admin, sowie Regex- und integrierter Detektor-Selektoren |
| Stabile Identitäten | Installationsschlüssel-gebundene HMAC-Pseudonyme bleiben über Anfragen, Sitzungen und Neustarts hinweg konsistent |
| Mapping-Sicherheit | Begrenzte, sitzungsisolierte, nur im Speicher gehaltene reversible Zuordnungen mit TTL- und Kapazitätsgrenzen |
| Inspektion | cover inspect zeigt eine Vorschau der geschützten JSON-Daten, ohne ein LLM zu kontaktieren |
| Diagnose | cover doctor prüft Richtlinien, Daemon-Status, lokales Fail-Closed-Verhalten und Codex-Routing |
| Überwachung | Nur Metadaten umfassende Audit- und Monitoransichten sowie explizite Live-Inspektion abgefangener und weitergeleiteter Inhalte |
| Proxy-Härtung | Standardmäßig Loopback-Listener, Begrenzungen für Body und Streams, generische sichere Fehler und Fail-Closed-Parsing |
| Codex-Kompatibilität | Responses-API- und Router-Konfiguration, Komprimierungsprüfungen, sichere SSE-Wiederherstellung und unveränderliche encrypted_content-Felder |
| Optionaler semantischer Durchlauf | Ein lokaler llama.cpp-Detektor kann Freitext untersuchen, den reguläre Ausdrücke übersehen |
| Befehl | Zweck |
|---|
cover install | Clients, Shell-Exports und den Hintergrund-Proxy konfigurieren |
cover init | Die Konfigurationsdatei erstellen |
cover start [--detach] | Cover im Vordergrund oder Hintergrund starten |
cover stop | Den Hintergrundprozess beenden |
cover restart | Im Hintergrund neu starten |
cover status [--json] | Prozess-, Listener- und geschwärzten Upstream-Status anzeigen |
cover version [--json] | Build-Version, Commit und Datum anzeigen |
cover env | Shell-Exports für konfigurierte Clients ausgeben |
cover test | Einen synthetischen lokalen Schwärzungs- und Wiederherstellungstest ausführen |
cover inspect request.json | Vorschau genau dessen, was Cover weiterleiten würde |
cover doctor [--json] | Konfigurations-, Datenschutz-, Daemon- und Routingprüfungen ausführen |
cover monitor | Aktuelle sichere Metadaten anzeigen und neuen Ereignissen folgen |
cover monitor --show-content | Vertrauliche Live-Transformationen und ausgehende JSON anzeigen |
cover models pull | Die optionale lokale Detektor-Laufzeitumgebung und das Modell herunterladen |
cover models status | Installation und Konfiguration des lokalen Detektors melden |
cover completion | Shell-Vervollständigungsskripte erzeugen |
| Aktion | Ergebnis |
|---|
allow | Den Treffer protokollieren, aber unverändert lassen |
placeholder | Durch ein kurzes reversibles Token ersetzen |
pseudonymize | Durch einen realistischen, deterministischen Wert ersetzen |
mask | Das erste und letzte Zeichen behalten und die Mitte maskieren |
redact | Durch [REDACTED] ersetzen |
block | Die gesamte Anfrage lokal ablehnen |