SYS://redactly v0.1.0-alpha
> redactly_init // browser-resident pii masking

The data your LLM
should never
see — redacted.

$ Names, addresses, IBANs, API keys, secrets — replaced with stable placeholders directly in your browser tab. Send the redacted version to ChatGPT or Claude. Paste the response back. Originals get restored locally. Nothing transits a server we control.

email_to_chatgpt.txt analyzed
input dein Entwurf

Hallo Martin Müller, anbei die Rechnung an martin@müller.de. Bitte überweisen auf IBAN DE89 3704 0044 0532 0130 00.

redacted → ans LLM

Hallo [PERSON_1], anbei die Rechnung an [EMAIL_1]. Bitte überweisen auf IBAN [IBAN_1].

> 3 Entitäten erkannt · reversibles Mapping gespeichert · tab.local
02 / features

Six properties without
which the concept collapses.

n=6 · sorted by priority
0x01 architecture

No server in the loop.

There is no backend that could see your input. Detection and masking execute in the same browser process where you type. You can keep DevTools → Network open while you work.

read
0x02 workflow

Reversible by design.

Every mask writes a local mapping. Paste the LLM response back and Redactly substitutes placeholders for the real values. The mapping never leaves this tab.

read
0x03 engine

Three detection layers.

Regex for structured patterns (IBANs, emails, API keys). NER for free-form names and locations. WebLLM for context-aware detection on the trickiest cases. Pick what you need.

read
0x04 formats

File formats handled in-tab.

.txt, .md, .eml, .pdf, .docx — all parsed in the browser via WebAssembly. No cloud conversion, no upload to a document service. What you load stays where you loaded it.

read
0x05 license

Open source as verification.

The entire source tree is on GitHub. "Trust us" is not a satisfying answer to a privacy question. "Read the code" is.

read
0x06 i18n

Local-first, multilingual.

German and English patterns shipped. NER mode extends seamlessly to ~100 more languages. No locale calls home. Translation happens inside your machine.

read
03 / pipeline

Drei Operationen.
Alle client-resident.

flow: input → mask → restore
  1. 01
    $ paste.input

    Du fügst ein, was sensibel ist.

    Email-Entwurf, Code-Snippet, Log-Dump, eine PDF mit Vertragstext. Redactly liest mit — aber nur in deinem Browser-Tab. Erkennt automatisch, was nach einer Person, Email, IBAN, einem Token oder Secret aussieht.

    execute: local
  2. 02
    $ mask.send

    Du gibst die redigierte Kopie ans LLM.

    „Martin Müller" wird zu [PERSON_1]. Dein AWS-Key wird zu [SECRET_3]. Du fügst den maskierten Text in ChatGPT oder Claude ein. Das Modell sieht Platzhalter — und nur Platzhalter.

    llm sieht: tokens only
  3. 03
    $ restore.local

    Die Antwort kommt zurück — und wird wieder lesbar.

    Du fügst die LLM-Antwort in Redactly ein. Platzhalter werden gegen deine echten Werte ersetzt, weil das Mapping lokal beim Maskieren entstanden ist und diesen Tab nie verlassen hat.

    restore: clientside
bereit zum Testen? run.app
§ 4 — Schlusswort
„Deine Daten gehören dir.
Dieses Werkzeug ist die Architektur, die das wahr macht."
Versprechen

Kein Server berührt deine Eingabe. Erkennung und Maskierung laufen im selben Prozess wie dein Browser-Tab.

Beweis

Öffne die DevTools. Schau in den Netzwerk-Tab. Tippe, was du willst. Es geht keine POST-Anfrage raus, die deinen Text enthält.

Lizenz

MIT. Forke es, hoste es selbst, lies den Code. Vertrauen ist keine Antwort. Lesen schon.