PII guard for Claude Code.
A PreToolUse hook that redacts files before Claude reads them. Real names never enter Claude's context.
Open-source plugin. Detection runs locally. Reversible — you reveal originals in your own terminal, outside Claude. Same engine ships as a CLI for any LLM workflow and a hosted proxy for OpenAI / Anthropic / Azure.
Here's what it looks like before anything leaves your machine.
Anna Müller, born March 12, 1985, granted her tax advisor Markus Schmidt in Munich a comprehensive power of attorney on April 3, 2024.
<<PERSON_1>>, born <<DATE_1>>, granted her tax advisor <<PERSON_2>> in <<CITY_1>> a comprehensive power of attorney on <<DATE_2>>.
Claude Code, without your data ever reaching Claude.
The plugin pseudonymizes your inputs locally before they reach Claude — and restores the responses automatically afterwards.
# add the marketplace once
$ /plugin marketplace add nextaim-de/noirdoc-claude-plugin
# install the plugin inside Claude Code
$ /plugin install noirdoc@nextaim Redacts without lifting a finger.
As soon as you open or read a protected file in Claude Code, the plugin replaces names, IBANs, and IDs with placeholders locally — before Claude gets to see anything.
Real values stay in your own terminal.
Run `noirdoc reveal` to see the original — but only in your own shell, never inside the Claude Code transcript. The conversation stays clean.
You decide what's protected.
Glob rules like `./incoming/**` or `*.contract.*` decide which files are pseudonymized automatically. Everything else stays untouched.
Mapping stays on your machine.
Pseudonymized copies live in `.noirdoc/cache/` and the reversible mapping stays local. No API call ever leaves your machine — not even to us.
MIT License · github.com/nextaim-de/noirdoc-claude-plugin
Here's how you get noirdoc onto your machine.
Install via pip, then call it from Python or straight from the shell.
1$ pip install noirdoc
2$ pip install noirdoc[full] with all optional detectors
3$ noirdoc models pull 1from noirdoc import Redactor
2
3r = Redactor(namespace="mandant-mueller")
4
5r.redact_file("vertrag.pdf", output="vertrag-clean.pdf")
6r.redact_file("brief.docx", output="brief-clean.docx")
7
8translate responses back
9original = r.reveal_text(llm_response) 1one-shot — mapping is discarded
2$ noirdoc redact vertrag.pdf -o vertrag-clean.pdf
3
4persistent — mapping is preserved
5$ noirdoc redact --namespace mandant-mueller brief.docx -o brief-clean.docx
6$ noirdoc reveal --namespace mandant-mueller brief-clean.docx -o brief-revealed.docx
7$ noirdoc lookup --namespace mandant-mueller "<>" MIT License · github.com/nextaim-de/noirdoc
Same engine. Three entry points.
The plugin handles Claude Code. The CLI handles any local document. The hosted proxy handles every API call your team makes.
For Claude Code users
Install once. PreToolUse hook redacts before Claude reads. Reveal locally when you're done.
InstallFor any LLM workflow
pip install noirdoc. Redact PDFs, DOCX, plain text. Round-trip with consistent placeholders.
For teams shipping AI
A reverse proxy that scrubs every OpenAI / Anthropic / Azure call. Two-line integration. Audit trail. Hosted in Germany or self-hosted.
See plansBuilt by Nextaim — Munich.
If you're a team handling real customer data and want the proxy or self-hosted version, talk to us.