annotate
Build and verify a PII gold set with HUMAN annotators (first-class). Launch the browser annotator, label spans per the codebook,…
De-identify a session transcript (file or folder) by redacting PII LOCALLY before any sharing or cloud use. Produces a redacted GREEN copy with unique reserved-sentinel placeholders ([CONFIDE_PERSON_0001], [CONFIDE_EMAIL_0001], [CONFIDE_DATE_0002]...) plus a counts-only stats
$ npx -y skills add glebis/claude-skills --skill anon --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/anonContext preview
The summary Claude sees to decide when to auto-load this skill.
De-identify a session transcript (file or folder) by redacting PII LOCALLY before any sharing or cloud use. Produces a redacted GREEN copy with unique reserved-sentinel placeholders ([CONFIDE_PERSON_0001], [CONFIDE_EMAIL_0001], [CONFIDE_DATE_0002]...) plus a counts-only stats
name: anon description: De-identify a session transcript (file or folder) by redacting PII LOCALLY before any sharing or cloud use. Produces a redacted GREEN copy with unique reserved-sentinel placeholders ([CONFIDE_PERSON_0001], [CONFIDE_EMAIL_0001], [CONFIDE_DATE_0002]...) plus a counts-only stats summary, and a local secret <name>.map.json (0600, gitignored) that enables confide:rehydrate to restore real values after a cloud analysis. Use when the user says "anonymize this transcript", "redact PII", "de-identify session", "make safe to share", "strip personal data", "anonymize notes before sending to an LLM", or points at a transcript/folder that should be scrubbed. Local-only by default — raw text never leaves the machine; the map is the only artifact with originals and stays local; nothing printed is PII; human review is still required before sharing.
Redact personally identifying information from a transcript (or a whole folder) using the layered local stack in `shared/confide_core.py`: regex (emails / URLs / phones / IDs / dates) → Natasha (RU named entities) → local LLM (quasi-identifiers). Spans are interval-merged and replaced with placeholders. The result is a **GREEN** copy safe to review.
By default anon emits a **reversible map**: unique reserved-sentinel placeholders (the *same EXACT* value always becomes the *same* `[CONFIDE_<TYPE>_<NNNN>]`, e.g. `[CONFIDE_PERSON_0001]`, `[CONFIDE_EMAIL_0001]`, `[CONFIDE_DATE_0002]`) plus a sibling `<name>.map.json` (structured: `schema_version`, `doc_id`, `green_sha256`, `created`, `entries[]`) mapping each placeholder to its original. The `CONFIDE_` sentinel is reserved — a real transcript essentially never contains it, so there is no collision risk and rehydrate never touches ordinary prose like "Person 1". This is **exact-value** matching, not entity coreference: inflected forms (e.g. RU "Марина" vs "Марины") are SEPARATE placeholders (no lemmatized merge). That map is the **secret** — the ONLY artifact with originals; it stays **local** and enables **confide:rehydrate** to put real values back into a cloud analysis of the GREEN text (round-trip: redact → analyze the green → rehydrate locally). Use `--no-map` for the legacy non-reversible `[TYPE]` style (no map written).
which never leaves the machine.** It is never printed, and never written to the GREEN copy (the GREEN holds placeholders only; the original file is read, never rewritten). The map is the SECRET — the one artifact with originals. A `.gitignore` covering `*.map.json`, `*.view.html`, and `*.restored.md` is written/updated in the output dir so these local-only artifacts can never be committed. If the output dir looks cloud-synced (iCloud / Dropbox / OneDrive / Google Drive), anon prints a WARNING that the secret map would be uploaded.
redaction rate) — never PII values or redacted text dumps.
GREEN copy before sharing. Pair with **confide:red** to check residual re-identification risk.
Run the script on a single file or a directory (processes every `.md`/`.txt`):
python3 skills/anon/scripts/anon.py PATH
For each input it writes, next to the file (or into `--out DIR`):
`--no-map`. A `.gitignore` with `*.map.json` is also written/updated in the output dir.
Options:
Use `--layers regex` for a fully offline, deterministic pass (no models/network).
Already-emitted `*.green.md` / `*.stats.json` / `*.map.json` are skipped, so a folder can be re-run safely.
1. Report the counts summary (types, layers, redaction rate) — never paste PII. 2. Tell the user the GREEN copy still needs human review before sharing. 3. Remind them the `<name>.map.json` is the secret (originals) — it stays local, never committed/shipped — and that **confide:rehydrate** uses it to restore real values into a cloud analysis of the GREEN text. 4. Offer **confide:red** to probe what an attacker could still infer/link.
Layer availability (Natasha, local LLM via Ollama) and defaults come from config — run **confide:setup** first if Natasha/Ollama aren't installed. `--layers regex` always works offline.
~100 skills for Claude Code — meeting pipelines, research, image generation, TDD, publishing, personal analytics, and Claude Code ops. Each skill is a self-contained folder with a SKILL.md; Claude triggers them from natural language.
Build and verify a PII gold set with HUMAN annotators (first-class). Launch the browser annotator, label spans per the codebook,…
Run a corpus-scale, STATS-ONLY PII audit over a folder of session transcripts LOCALLY and produce an aggregate report — counts by…
Residual re-identification RISK CHECK on text you have ALREADY redacted (defensive, dual-use). Use when the user asks to "check…
Put the real values back into an analysis that was produced from GREEN (placeholder) text — LOCALLY, using the user's own…
Set up, install, and configure CONFIDE local de-identification — installs Python deps (natasha, scrubadub, phonenumbers,…