Zum Inhalt springen
claudemods

Secret Redactor: Claude Code Secrets schwärzen in Prompts und Tool-Ausgaben

Ersetzt Keys, E-Mails und IPs durch Platzhalter, bevor Claude sie sieht, und setzt sie für Tools wieder ein.

Berechtigungen

  • Fängt Tool-Aufrufe abSieht jeden Tool-Aufruf von Claude (tool.call / tool.check) und könnte ihn blockieren oder verändern.
  • Liest deine PromptsKann sehen, was du eingibst, und den Gesprächsverlauf lesen (prompt.* / session.append / session.messages).
  • Verändert die OberflächeZeichnet in die Oberfläche von Claude Code: Leisten, Bereiche, Statustext, Toasts (ui.render / $.ui.*).
getestet mit
v2.1.291
zuletzt getestet
erfordert
Claude Code ≥ 2.1.287
Oberflächen
Toast

In Claude Code installieren:

/plugin install secret-redactor --marketplace ray-amjad/awesome-claude-code-function-hooks
Alle Installationswege ↓

Was macht diese Mod?

Secret Redactor ist eine Community-Mod von Ray Amjad (ray-amjad) und gehört zu seiner Sammlung awesome-claude-code-function-hooks. Sie hilft dabei, Claude Code Secrets schwärzen zu lassen, und zwar auf drei Wegen: bei dem, was du tippst, bei dem, was ein Tool zurückliest, und bei den Kontextblöcken an der ersten Nachricht. Jedes Secret, jede E-Mail-Adresse und jede öffentliche IP-Adresse wird durch einen Platzhalter wie [REDACTED-SECRET-164d0c98] ersetzt, bevor das Modell sie sieht.

Der Wert wird nicht zerstört. Derselbe Wert bekommt immer denselben Platzhalter, sodass Claude einen Kunden oder einen Key weiter vom anderen unterscheiden kann. Ruft Claude danach ein Tool auf, setzt der Hook die Platzhalter wieder ein, und ein Bash-Befehl oder ein Write trägt den echten Wert. Ein cat .env zeigt Claude die Platzhalter, und ein späterer Befehl, der sie verwendet, funktioniert trotzdem.

Verborgen werden Keys mit Herstellerformat (sk-ant-, ghp_, AKIA, sk_live_, JWTs, Slack- und Discord-Webhooks, Private-Key-Blöcke, das Passwort in einem Connection-String), Tokens mit hoher Entropie, E-Mail-Adressen und IP-Adressen. Private IP-Bereiche wie 127.x, 10.x und 192.168.x bleiben standardmäßig sichtbar. Stripe-Objekt-IDs wie price_ und prod_ gelten als öffentlich. Laut README des Autors müssen Funktions-Hooks aktiviert sein; das ist das Erste, was du prüfen solltest, wenn nichts passiert.

Demo

Die Aufnahme startet Claude Code mit geladener Mod im kleinen Demo-Projekt, mit aktivierten Funktions-Hooks. Wir tippen einen Prompt mit dem Fixture-Key des Autors aus test/fixtures/sample.env (keine echten Zugangsdaten) und einer Beispiel-E-Mail-Adresse und drücken Enter. Der abgeschickte Prompt lautet im Transkript KEY=[REDACTED-SECRET-164d0c98] mail [REDACTED-EMAIL-6f096ff7], und rechts in der Fußzeile erscheint ein Toast: secret-redactor: hid 2 value(s) from the prompt. Der Clip endet, während Claude noch arbeitet; die Antwort haben wir nicht aufgenommen.

Installation

Nutze eine der Methoden im Installationsblock; sie installieren direkt aus dem Marketplace des Autors. Aktiviere danach die Funktions-Hooks: Füge "env": { "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1" } zu ~/.claude/settings.json hinzu oder starte eine Sitzung mit CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude. Zum Ausprobieren ohne Installation klonst du das Repository und führst claude --plugin-dir ./awesome-claude-code-function-hooks/plugins/secret-redactor aus.

$ install secret-redactor

Erfordert Claude Code ≥ 2.1.287

Wird aus dem Marketplace des Autors installiert: ray-amjad/awesome-claude-code-function-hooks

  1. 1.Eine Zeile, direkt in Claude Code

    /plugin install secret-redactor --marketplace ray-amjad/awesome-claude-code-function-hooks

    In eine laufende Sitzung einfügen (v2.1.275+). Claude Code fragt zuerst, ob der Marketplace hinzugefügt werden soll.

  2. 2.Aus deiner Shell

    claude plugin marketplace add ray-amjad/awesome-claude-code-function-hooks
    claude plugin install secret-redactor@awesome-claude-code-function-hooks

    Führe danach in jeder bereits geöffneten Sitzung /reload-plugins aus.

  3. 3.Ohne Installation ausprobieren

    git clone https://github.com/ray-amjad/awesome-claude-code-function-hooks
    claude --plugin-dir ./awesome-claude-code-function-hooks/plugins/secret-redactor

    Lädt die Mod nur für eine Sitzung. An deinen Einstellungen wird nichts geändert.

So funktioniert es

Das Hooks-Modul ist eine einzige Datei, hooks/redact.ts. Ein Tresor auf Modulebene hält zwei Maps, und der Platzhalter besteht aus der Art und einem FNV-1a-Hash des Werts:

function mint(kind: Kind, value: string): string {
  hidden++
  const seen = byValue.get(value)
  if (seen) return seen
  const tag = `[REDACTED-${kind}-${fnv1a(value)}]`
  byValue.set(value, tag)
  byTag.set(tag, value)
  return tag
}

prompt.submit bereinigt den getippten Text und zeigt den Toast. tool.call stellt zuerst die Platzhalter in der Tool-Eingabe wieder her, lässt das Tool mit await next(input) laufen, bereinigt dann das Ergebnis und setzt eine Anzahl in die Tool-Zeile. prompt.context bereinigt Secrets, aber keine E-Mails, in den Blöcken an der ersten Nachricht.

Ein Wert gilt als Secret, wenn er einem Herstellermuster entspricht, wenn er ein Token mit mindestens 24 Zeichen in Groß- und Kleinschreibung samt Ziffern über 3,6 Bit pro Zeichen ist oder wenn ein kürzeres Token über 3,0 Bit hinter einem Namen wie API_KEY=, "token": oder Bearer steht. Regeln für Wörter, camelCase-Namen, Alphabete und reines Hex verhindern, dass Git-SHAs und Bezeichner verborgen werden.

Anpassen

Das Plugin deklariert zwölf Optionen, die du in /config oder unter pluginConfigs in deinen Nutzereinstellungen ändern kannst:

  • secrets, pii: schaltet jeweils eine Klasse ab.
  • restoreInToolInputs: setzt vor dem Tool-Lauf keine echten Werte mehr ein.
  • notify: schaltet Toast und Zähler in der Tool-Zeile ab.
  • minEntropy (3.6), minLength (24), contextMinEntropy (3.0): höhere Werte verbergen weniger.
  • redactPrivateIps: verbirgt auch 127.x, 10.x, 192.168.x und andere reservierte Bereiche.
  • allow, allowEmails, allowPrefixes, denyPrefixes: kommagetrennte Ausnahmen und Ergänzungen.

Berechtigungen & Sicherheit

Wir haben vor dem Start jede Datei gelesen, die das Plugin ausführen kann: plugin.json, hooks/hooks.json, hooks/redact.ts (das einzige Modul, ohne Imports außer Typen), den Test und die Fixture. Es gibt keine package.json, kein Installationsskript, kein Binary und keinen gebündelten Code.

  • Netzwerk, Befehle, Dateien, Umgebung: keine. Das Modul ruft weder $.http, $.process, $.fs noch $.env auf und nutzt kein $.store oder $.state. Der Tresor liegt im Modulspeicher und verschwindet mit der Sitzung. Die einzigen API-Aufrufe sind $.ui.toast und $.ui.notice.
  • Fängt Tool-Aufrufe ab und liest deine Prompts. Das ist der Zweck der Mod und entspricht dem README. Sie schreibt deinen Prompt um, die Tool-Eingaben (Platzhalter zu echtem Wert) und die Tool-Ergebnisse (Wert zu Platzhalter). Einen Aufruf lehnt sie nie ab.
  • Das Wiedereinsetzen ist eine Fähigkeit. Jeder Platzhalter in einer Tool-Eingabe wird durch den echten Wert ersetzt, egal um welchen Befehl es geht. Enthält ein Tool-Ergebnis eingeschleuste Anweisungen, könnte Claude dazu gebracht werden, einen Platzhalter in einen curl-Befehl zu setzen, und der echte Key würde gesendet. Schalte restoreInToolInputs aus, wenn dich das stört; dann bekommen Tools den Platzhaltertext.
  • Platzhalter sind nicht geheim. Der Hash ist ein 32-Bit-FNV-1a, daher lässt sich ein Platzhalter für einen Wert mit geringer Entropie wie eine E-Mail oder eine IP durch Hashen von Kandidaten erraten. Er verbirgt den Wert vor dem Kontext des Modells, nicht vor jemandem, der Vermutungen schon prüfen kann. Zwei Werte könnten theoretisch denselben Hash haben.
  • Heuristiken übersehen etwas. Entropieregeln können ein Secret sichtbar lassen oder ein harmloses Token verbergen. Was das Modell selbst schreibt, wird nicht gescannt, und nach einem Neustart ist nichts mehr da.
  • Keine Telemetrie, keine eingeschleusten Anweisungen. Außer den Platzhaltern fügt sie den Prompts keinen eigenen Text hinzu.
  • Lizenz: MIT, mit LICENSE-Datei im Repository.

claude plugin validate meldete keine Fehler oder Warnungen, doch die Hinweise nennen zwei blockierende Hooks ohne .catch (prompt.submit und tool.call). Wirft der Hook eine Ausnahme, gibt es keinen Fallback; ein Fehler im Hook könnte den Prompt oder den Tool-Aufruf scheitern lassen, statt ihn durchzureichen. claude plugin test fand nichts zum Ausführen, weil der Test des Autors test/detect.test.mts heißt (ein einfaches Node-Skript) und keine *.test.ts-Datei ist. Wir haben ihn nicht ausgeführt.

Fängt Tool-Aufrufe ab
Sieht jeden Tool-Aufruf von Claude (tool.call / tool.check) und könnte ihn blockieren oder verändern.
Liest deine Prompts
Kann sehen, was du eingibst, und den Gesprächsverlauf lesen (prompt.* / session.append / session.messages).
Verändert die Oberfläche
Zeichnet in die Oberfläche von Claude Code: Leisten, Bereiche, Statustext, Toasts (ui.render / $.ui.*).

Kompatibilität & Fehlerbehebung

Geprüft mit Claude Code 2.1.291 auf macOS: validate bestanden, und die Demo lief mit geladenem Plugin. Wenn nichts verborgen wird:

  • Funktions-Hooks sind aktiv: CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 in den Einstellungen oder in der Shell, die Claude Code startet.
  • Nach der Installation in eine bereits offene Sitzung führst du /reload-plugins aus.
  • Der Wert steht auf der Ausnahmeliste: Dokumentationsdomains wie @example.com, noreply@-Adressen, private IP-Bereiche und Stripe-Objekt-IDs bleiben absichtlich unberührt.
  • Im Eingabefeld siehst du deinen Text wie getippt; die Platzhalter erscheinen, sobald der Prompt abgeschickt ist.

FAQ

Schickt Secret Redactor meine Secrets irgendwohin?
Nein. Im Code haben wir keine Netzwerkaufrufe, keine Shell-Befehle und keinen Dateizugriff gefunden. Die echten Werte liegen in einer Map im Speicher des Hooks-Moduls und sind nach der Sitzung weg.
Warum wird nach der Installation nichts verborgen?
Laut README des Autors ist es ein Funktions-Hook und tut nichts, solange Funktions-Hooks nicht aktiv sind. Setze CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 im env-Block von ~/.claude/settings.json oder starte eine Sitzung mit dieser Variable.
Kann Claude einen Key nutzen, den es nicht sieht?
Ja, in Tool-Eingaben. Bevor ein Tool läuft, setzt der Hook einen Platzhalter wie [REDACTED-SECRET-164d0c98] wieder durch den echten Wert ein. Ein Bash-Befehl oder ein Write trägt also den echten Key. Das Modell sieht nur den Platzhalter.
Verbirgt es ein Secret, das Claude selbst schreibt?
Nein. Gescannt wird nur, was Claude liest: dein Prompt, Tool-Ergebnisse und die Blöcke an der ersten Nachricht. Ein Key, den das Modell in einen Befehl schreibt, ist ein Key, den es schon hatte.
Wie verhindere ich, dass Werte verborgen werden, die sichtbar bleiben sollen?
Nutze die Optionen in /config. allow nimmt exakte Strings, allowEmails Adressen oder eine Domain wie @yourdomain.com, allowPrefixes markiert zusätzliche ID-Präfixe als öffentlich, und ein höheres minEntropy verbirgt weniger.
Gefährliche Befehle blockieren in Claude CodeEmpfohlen

Gefährliche Befehle blockieren

Verweigert rm -rf /, Force-Push auf main, DROP TABLE, curl | sh und andere destruktive Bash-Befehle vor der Ausführung.

  • Toast
  • Fängt Tool-Aufrufe ab
  • Verändert die Oberfläche

getestet mit v2.1.310

Tool-Call-Zähler in Claude CodeEmpfohlen

Tool-Call-Zähler

Zählt Claudes Tool-Aufrufe pro Turn und Sitzung, zeigt sie neben dem Spinner und ergänzt /tally als Übersicht.

  • Spinner
  • Verlauf
  • Statuszeile
  • Fängt Tool-Aufrufe ab
  • Verändert die Oberfläche
  • Fügt Befehle/Tools hinzu

getestet mit v2.1.310

Mehr in Sicherheits-Guards, Tools, die du Claude gibst.