confide:view — visual de-id diff (what redaction & rehydrate do)
Produce ONE standalone .html that renders a transcript with every PII span
highlighted and color-coded by type, and lets you toggle between the original and
the redacted views interactively. It reuses the span data from the shared core
(shared/confide_core.py) — a thin renderer, no new detection logic.
Privacy invariants (do not violate)
- The HTML embeds REAL values (originals + placeholders) so you can compare them. It is therefore a vault artifact: same posture as the relationship-graph HTML.
- Local only. Written next to the input, a sibling
.gitignoreexcludes*.view.html(and*.map.json), and a red PRIVATE banner sits at the top. Never share it, never commit it, never ship it. - Counts only to stdout. The terminal output carries span counts by type — never PII values or redacted-text dumps.
- Self-contained & offline. Inline CSS + JS, no CDN / external resources, so it
renders offline and can never 404. Default detection layer is
regex(no network, no models).
Run it
python3 skills/view/scripts/view.py ORIGINAL.txt
If a <name>.map.json sits next to the input (from confide:anon), it is picked up
automatically so the view shows exactly that known PII; otherwise PII is detected with
the local layers and a fresh reversible map is built in memory.
Options:
--map MAP.json— supply the reversible map explicitly.--layers regex,natasha,llm— choose detection layers (defaultregex, offline-safe).--out DIR— write the.view.htmlinto DIR instead of next to the input.
It writes <name>.view.html and ensures a sibling .gitignore.
What the HTML shows
- The transcript with each PII span wrapped in
<mark class="pii TYPE" data-orig=… data-ph=…>, colored by type (PERSON, DATE, EMAIL, …). Hover a span to seeoriginal ↔ placeholder. - An interactive state toggle:
- All — fully redacted: every span shows its placeholder.
- None — original: nothing masked.
- Selected — mask only the PII types you check (per-type checkboxes in the legend).
- A legend + counts by type.
After running
- Open the
<name>.view.htmllocally in a browser to inspect the de-id. - Report the counts summary (types) — never paste PII.
- Remind the user the file is private/local and must not be shared or committed.
Setup
The default regex layer always works offline. For Natasha (RU NER) or the local LLM
layer, run confide:setup first; otherwise pass --layers regex.