flowchart LR
A[contract.docx] -->|oboro clean| B[contract.clean.md]
B --> C{{paste into a model}}
C --> D[the model's answer]
D -->|oboro restore| E[answer with real values]
A -.-> V[(encrypted vault)]
V -.-> E
style V stroke-dasharray: 4 4
Oboro
An anonymisation layer between your files and a language model.
You have a contract to reason about, and a model that could help. The contract has a client’s name in it, a bank account, a phone number. Pasting it into Claude Code, Copilot, Codex or Cursor sends all of that to somebody else’s computer.
oboro sits in between. It reads the document and replaces the sensitive parts with stable placeholders. It keeps the mapping locally, so you can turn the answer back into the real thing afterwards.
The name is 朧, Japanese for hazy, or veiled by mist. The tool blurs identifying detail rather than silencing it. The document still reads as a document, and the model can still reason about it.
An agent that reads files itself never waits to be handed a cleaned copy. So in Claude Code, Oboro sits in the tool path instead of in front of it. Two hooks clean what a tool hands the model, and put the real values back into what it writes. See the Quickstart for the four lines of settings.
What it looks like
Marie Lefevre a rencontre le directeur de Sogexia Partners hier.
Son numero est le 06 12 34 56 78.becomes
[[PERSON_1]] a rencontre le directeur de [[ORG_1]] hier.
Son numero est le [[PHONE_1]].The same value always becomes the same placeholder. So a model can still tell that two documents mention the same client.
What it reads
| Format | How |
|---|---|
.txt, .md |
Directly. |
.csv, .tsv |
Directly. The output keeps the tabular extension. |
.docx |
Text runs from the body, headers, footers, footnotes and comments. |
.pptx |
Text from slides, speaker notes and comments. |
.eml |
Headers, every body part, forwarded messages, and attachment names. |
.odt |
The body, headers and footers, annotations, footnotes and image alt text. |
.xlsx, .xlsm |
One TSV file per sheet, named book.<sheet>.clean.tsv. |
.pdf |
Embedded text; a scan needs a build compiled --features ocr. |
.png, .jpg, .tif |
Tesseract, in a build compiled with --features ocr. |
What it finds
Rules match structured values. A real check confirms each one, not just a regular expression.
| Kind | Confirmed by |
|---|---|
| Email addresses | Pattern. |
| Phone numbers | libphonenumber. |
| IBANs | ISO 13616 mod-97 checksum. |
| Payment cards | Luhn checksum, 13 to 19 digits. |
| SIRET | Luhn on both the SIREN prefix and the whole number. |
| SIREN | Luhn checksum. |
| IP addresses | Parsed as IPv4 or IPv6. |
| Street addresses and postcodes | Pattern. |
| Your own formats | Regular expressions you supply. |
Names, companies and addresses have no structure to match on. A multilingual recognition model finds them instead. It runs on your machine. See How it works.
Detection does not depend on the document’s language. A file that mixes languages is handled in one pass. Nothing has to be declared. The address patterns carry several languages at once. Two locale hints exist, regions for national phone formats and ocr_languages for images, and both only widen what is read. See Limitations.
No tool of this kind catches everything. This one deliberately errs towards redacting too much rather than too little. Both failures matter. Trusting the output unread fixes neither. See Limitations for the honest account of where it falls short.
Where to go next
- Quickstart to install it and clean your first document.
- Reference for every command and option.
- Confidentiality for what is stored, where, and how.