Best for
- Use it whenever a de-identification needs to be defensible: regulatory retention, internal review, reproducibility checks, or proving to an auditor that identifiers were detected and handled — all without storing or exp…
maziyarpanahi/openmed/skills/auditing-deidentification-runs/SKILL.md
Produce a signed, reproducible, no-PHI audit trail for an OpenMed de-identification run via deidentify(audit=True). Use when the user needs compliance evidence, a tamper-evident record of what was redacted and why, to verify nothing was changed, to retain proof for HIPAA/GDPR audits, or to review de-id decisions without exposing plaintext PHI. Covers the AuditReport / AuditSignature / AuditSpan / DetectorInfo fields, why audits store offsets+hashes+provenance+residual-risk and never plaintext, s
Decision brief
deidentify(..., audit=True) returns an AuditReport instead of the rewritten text: a deterministic, PHI-free record of every redaction decision — offsets, label, detector confidence and threshold, the action taken, content hashes, model provenance, and projected residual risk. Si…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/maziyarpanahi/openmed --skill "skills/auditing-deidentification-runs"Inspect the Agent Skill "auditing-deidentification-runs" from https://github.com/maziyarpanahi/openmed/blob/e412ae8f3b04ae79b13663d34a422efc22109a3a/skills/auditing-deidentification-runs/SKILL.md at commit e412ae8f3b04ae79b13663d34a422efc22109a3a. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
note = "Patient John Doe (MRN 1234567) seen 2024-03-02. SSN 123-45-6789."
1. Run with audit=True and a policy= to get an AuditReport. 2. Inspect residualrisk before releasing the output — non-zero projected leakage means review (cross-check with auditing-safe-harbor-checklist). 3. Sign with report.sign(key, keyid=...) using a secret release HMAC key s…
Use it whenever a de-identification needs to be defensible: regulatory retention, internal review, reproducibility checks, or proving to an auditor that identifiers were detected and handled — all without storing or exposing the PHI itself.
report = openmed.deidentify(note, policy="hipaasafeharbor", audit=True)
report.sign(b"my-release-hmac-key", keyid="release-2026")
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 88/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 4,847 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
deidentify(..., audit=True) returns an AuditReport instead of the rewritten
text: a deterministic, PHI-free record of every redaction decision —
offsets, label, detector confidence and threshold, the action taken, content
hashes, model provenance, and projected residual risk. Sign it to make it
tamper-evident, retain it as compliance evidence, and verify it later without
ever touching the original text. Runs on-device.
Use it whenever a de-identification needs to be defensible: regulatory retention, internal review, reproducibility checks, or proving to an auditor that identifiers were detected and handled — all without storing or exposing the PHI itself.
import openmed
note = "Patient John Doe (MRN 1234567) seen 2024-03-02. SSN 123-45-6789."
# Returns an AuditReport, NOT a DeidentificationResult, when audit=True.
report = openmed.deidentify(note, policy="hipaa_safe_harbor", audit=True)
# Make it tamper-evident with a release HMAC key (keep the key in a vault).
report.sign(b"my-release-hmac-key", key_id="release-2026")
# Persist the no-PHI report (no plaintext identifiers inside).
import json
with open("deid_audit.json", "w") as fh:
json.dump(report.to_dict(), fh, indent=2)
# Later: verify integrity. Optionally bind to the exact texts via their hashes.
ok = report.verify(b"my-release-hmac-key", original_text=note)
assert ok
AuditReport (from openmed.core.audit) carries no plaintext PHI. Key fields:
| Field | Meaning |
|---|---|
policy | policy profile name in effect |
resolved_profile | the concrete settings applied (method, model, thresholds, language, sweep flags) |
detectors | list[DetectorInfo] — provenance of each detector |
safety_sweep | structured-ID sweep metadata (patterns version, source) |
spans | list[AuditSpan] — one entry per detected identifier |
thresholds | per-label confidence thresholds used |
residual_risk | projected leakage / re-identification risk summary |
openmed_version | library version that produced the report |
manifest_hash | hash of the model manifest used |
document_length | character length of the input |
input_hash | sha256: hash of the original text |
deidentified_text_hash | sha256: hash of the de-identified output |
repro_hash | deterministic hash over the canonical payload |
signature | AuditSignature once .sign() is called (else None) |
AuditSpan (per identifier, no plaintext): start, end, label,
canonical_label, sources, confidence, threshold, action, surrogate,
text_hash (hash of the span text), plus evidence and a redacted context.
DetectorInfo: source, model_id, model_format, commit, metadata.
AuditSignature: key_id, algorithm (HMAC-SHA256), value (hex digest).
The whole point of de-identification is to not retain identifiers. An audit log full of raw names and MRNs would itself be a PHI breach. So OpenMed records:
start/end) — where an identifier was, not what it was;input_hash, deidentified_text_hash, per-span text_hash) —
prove what was processed without revealing it;detectors, manifest_hash, openmed_version) — which
model/version made each call, for reproducibility;residual_risk) — projected leakage so a reviewer can
judge whether the output is safe to release.This lets an auditor confirm coverage and integrity while the report stays shareable.
audit=True and a policy= to get an AuditReport.residual_risk before releasing the output — non-zero projected
leakage means review (cross-check with auditing-safe-harbor-checklist).report.sign(key, key_id=...) using a secret release HMAC key
stored in a vault (never in the repo).report.to_dict() (JSON). For a reviewer view without full
context, use report.export_review_bundle().report.verify(key). Pass original_text= /
deidentified_text= to also confirm the texts match the recorded hashes.deidentifying-clinical-text (deidentify); add
audit=True to get the report from the same call.auditing-safe-harbor-checklist maps span labels to the
18 HIPAA identifier categories and flags gaps.configuring-privacy-policies — resolved_profile reflects the
chosen policy=.openmed_deidentify and REST POST /pii/deidentify
drive the same engine; audit output is available through them.audit=True changes the return type to AuditReport. You get the report,
not .deidentified_text. Run a separate normal call if you also need the text..sign() is a deliberate second
step; signature is None until you call it. Empty/None keys are rejected.verify needs the same key. It checks the HMAC and the repro_hash;
optionally it re-hashes texts you pass to confirm they are the audited ones.metadata/evidence; the design is hash-and-offset only.openmed/core/audit.py (AuditReport, AuditSpan,
AuditSignature, DetectorInfo, sign, verify), openmed/core/pii.py
(deidentify(audit=True)).Alternatives
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for deployment and design tasks; the detail page covers purpose, installation, and practical steps.
K-Dense-AI/scientific-agent-skills
Build, inspect, test, and analyze bounded process-based discrete-event simulations with SimPy, including events, resources, interrupts, monitoring, replications, warm-up, and reproducible output analysis.
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for deployment and design tasks; the detail page covers purpose, installation, and practical steps.
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for deployment and design tasks; the detail page covers purpose, installation, and practical steps.