deidentify
Use when clinical data may contain PHI and must be de-identified before any LLM-assisted analysis.
Skill by Aperivue
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/aperivue-deidentify
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, ml
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/deidentify
What's inside
- Skill name
deidentify- Description
- Use when clinical data may contain PHI and must be de-identified before any LLM-assisted analysis. A local Python script (no network or AI calls) detects identifiers with regex and heuristics in 12 country locale packs, with interactive terminal review.
- License
- MIT
- Metadata
- triggers: deidentify, de-identify, anonymize, 비식별화, 익명화, remove PHI, remove PII, strip patient info
- Instructions
- 246 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (26)
- SKILL.md
- deidentify.py
- _template.json · locales/
- au.json · locales/
- ca.json · locales/
- cn.json · locales/
- de.json · locales/
- es.json · locales/
- fr.json · locales/
- in.json · locales/
- it.json · locales/
- jp.json · locales/
- kr.json · locales/
- uk.json · locales/
- us.json · locales/
- date_shift_guide.md · references/
- hipaa_18_identifiers.md · references/
- korean_phi_patterns.md · references/
- skill.yml
- README.md · tests/
- test_clean.csv · tests/
- test_deidentify_scan.sh · tests/
- test_edge_cases.csv · tests/
- test_phi_italian.csv · tests/
- test_phi_korean.csv · tests/
- test_phi_spanish.csv · tests/
SKILL.md (first lines)
# De-identification Skill
You are guiding a medical researcher through data de-identification. The actual
de-identification is performed by a **standalone Python script** that runs WITHOUT
any LLM. Your role is to explain, guide, and verify — not to see or process raw
PHI data.
## Critical Safety Rules
1. **NEVER ask the user to paste, show, or upload raw data containing PHI.**
The script processes data locally. You never need to see patient-level data.
2. **NEVER read or display the mapping file contents.** It contains original PHI values.
3. **You may read** the scan and reviewed reports (column classifications; no cell values)
and the audit log (keyed hashes; no original values). Read the de-identified output only
after the researcher has run the review and confirmed it; it has the identifiers they
chose to anonymize removed, and nothing more (see "What the tool does not do").
4. **Always communicate in the user's preferred language** about the process, but use
English for technical terms (PHI, HIPAA, Safe Harbor, etc.).
5. **The researcher runs the script in their own terminal**, not through you (no `!` prefix,
no Bash tool call): the review prints sample values of every column.
## Reference Files
- `${CLAUDE_SKILL_DIR}/references/hipaa_18_identifiers.md` — HIPAA Safe Harbor checklist
- `${CLAUDE_SKILL_DIR}/references/korean_phi_patterns.md` — Korean-specific regex patterns
- `${CLAUDE_SKILL_DIR}/references/date_shift_guide.md` — Date shifting best practices
Read relevant references before advising the researcher.
## Prerequisites
- Python 3.9+
- `openpyxl` (for .xlsx files): `pip install openpyxl`
- Supported formats: CSV, TSV, Excel (.xlsx)
## Five-Phase Workflow
### Phase 1: Assessment
Ask the researcher:
1. What file format is the data? (CSV, Excel, etc.)
2. What PHI do you expect in the data? (names, dates, IDs, etc.)
3. Does your IRB require specific de-identification documentation?
4. Do you need to re-identify later? (affects mapping file choice)
Based on answers, recommend the appropriate command:
- Full pipeline (most common): `python3 deidentify.py full <file> --locale <code>`
- Step-by-step (cautious): `python3 deidentify.py scan <file> --locale <code>` first
Available locale codes: `kr` (Korea), `us` (USA), `jp` (Japan), `cn` (China), `de` (Germany),
`uk` (United Kingdom), `fr` (France), `ca` (Canada), `au` (Australia), `in` (India), `it` (Italy), `es` (Spain).
If `--locale` is omitted, the script shows an interactive country selection menu.
Users can provide a custom locale file via `--locale-file custom.json`.
### Phase 2: Script Execution
Guide the researcher to run the script. The script is located at:
```
${CLAUDE_SKILL_DIR}/deidentify.py
```
**Full pipeline** (recommended for most users):
```bash
python3 ${CLAUDE_SKILL_DIR}/deidentify.py full data.xlsx \
--locale kr \
--output-dir ./deidentified/
```
**Step-by-step** (for careful review):
```bash
# Step 1: Scan
python3 ${CLAUDE_SKILL_DIR}/deidentify.py scan data.xlsx --locale kr --output-dir ./deidentified/
# Step 2: Review (interactive)
python3 ${CLAUDE_SKILL_DIR}/deidentify.py review ./deidentified/scan_report.json
# Step 3: Apply (refuses a report that was not reviewed, has a column without a decision,
# or was made from data that has changed since: edit the file, then scan and review again)
python3 ${CLAUDE_SKILL_DIR}/deidentify.py apply ./deidentified/reviewed_report.json
```
**Options:**
- `--locale CODE`: Country locale for PHI patterns (kr, us, jp, cn, de, uk, fr, ca, au, in, it, es)
- `--locale-file PATH`: Custom locale JSON file (copy `locales/_template.json` to create one)
- `--auto-accept-safe`: Keep SAFE columns without showing them. Not recommended: SAFE means
no pattern matched, not that the column holds no identifiers (a name typed into a short
comment matches no pattern), and this option means nobody looks at those columns
- `--hash-mapping`: Store unkeyed SHA-256 hashes instead of original names/IDs in the mapping
file. Dates and numeric IDs can be recovered from such hashes by trying every candidate, so
mapping.json stays restricted either way
- `--output-dir`: Where to save de-identified file, mapping, and audit log
- `-v/--verbose`: Enable debug logging
### Phase 3: Interactive Review Guidance
The script's terminal review has three passes:
1. **Pass 1 — Column Classification**: Each column is shown as PHI / REVIEW_NEEDED / SAFE,
with sample values. The researcher confirms or overrides each classification.
2. **Pass 2 — Undecided Items**: Columns that weren't resolved in Pass 1 get a second look
with more sample values displayed.
3. **Pass 3 — Final Summary**: A table of all planned actions. The researcher can edit
individual decisions before confirming.
4. **Patient key** (only when dates will be shifted): the researcher picks the column that
identifies the patient, or `row` if every row is a different patient. Each patient gets
their own offset; without a key the tool does not shift dates.
Coach the researcher. Deliver these prompts in the researcher's preferred language:
- "Columns classified as PHI are anonymized by default. Press 'k' to keep the original value."
- "REVIEW_NEEDED are columns the script could not vouch for: free text, a PHI word inside a
longer column name, ID-like numbers, a rare address. Read the sample values and type 'a'
or 'k' — Enter alone is not accepted for these."
- "SAFE means no pattern matched, not that the column is free of identifiers. Read its sample
values too, and press 'r' if a column holds names or anything else identifying."
- For free-text columns, 'a' replaces each whole text with `[REDACTED]`: the script cannot
find a name inside a sentence, so it does not try to keep the rest of the text.
### Phase 4: Verify and DocumentFrom Aperivue/medsci-skills, MIT.
More from Aperivue/medsci-skills
- 0.779score
design-ai-benchmarking
Aperivue
Use when designing a study that benchmarks AI systems against a human-expert panel, before data collection.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
design-study
Aperivue
Use when checking a radiology or medical AI study design before drafting or submission.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
contribute
Aperivue
Use when sending local changes back to the project (an added journal profile, a fixed checklist item, an adapted skill) or reporting a false positive or bug.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
define-variables
Aperivue
Use when exposure, outcome, covariate or eligibility definitions and cutoffs need a citable basis before the protocol.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
add-journal
Aperivue
Use when a target journal has no profile yet.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
calc-sample-size
Aperivue
Use when planning how many patients or cases a study needs before data collection (power analysis, IRB justification).
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
review-paper
Aperivue
Use when writing a literature review article (narrative, scoping PRISMA-ScR or systematic).
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
author-strategy
Aperivue
Use when analyzing a researcher's publication record from PubMed.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
academic-aio
Aperivue
Use when a medical AI paper should be found and cited by AI search engines and RAG tools.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
check-reporting
Aperivue
Use when auditing a manuscript item by item against a reporting guideline or risk-of-bias tool.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
clean-data
Aperivue
Use when a clinical CSV/Excel dataset needs profiling and cleaning before analysis (missing values, outliers, duplicates, type mismatches).
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
fill-icmje-coi
Aperivue
Use when each author needs an ICMJE Conflict of Interest disclosure form (coi_disclosure.docx) for submission.
SkillAFreshness: A★ 349Claude Code +9
Signals
- Stars
- 349
- Forks
- 83
- Open issues
- 4
- Last commit (this folder)
- Oct 17, 2026 (11 days ago)
- Last release
- Oct 4, 2026 (24 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Aperivue/medsci-skills
- Website
- aperivue.com/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Aperivue
- 0.779score
review-paper
Aperivue
Use when writing a literature review article (narrative, scoping PRISMA-ScR or systematic).
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
author-strategy
Aperivue
Use when analyzing a researcher's publication record from PubMed.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
academic-aio
Aperivue
Use when a medical AI paper should be found and cited by AI search engines and RAG tools.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
add-journal
Aperivue
Use when a target journal has no profile yet.
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
calc-sample-size
Aperivue
Use when planning how many patients or cases a study needs before data collection (power analysis, IRB justification).
SkillAFreshness: A★ 349Claude Code +9 - 0.779score
check-reporting
Aperivue
Use when auditing a manuscript item by item against a reporting guideline or risk-of-bias tool.
SkillAFreshness: A★ 349Claude Code +9
Cite this page
deidentify skill. Agent Mart. https://agentmart.dev/skills/aperivue-deidentify (last updated 2026-10-24)