Best for
- Use it to scope a task and pick an entry point. For the actual work, hand off to the focused OpenMed skills (each is grounded in the real API):
maziyarpanahi/openmed/skills/building-with-openmed/SKILL.md
Orient and bootstrap any project that uses OpenMed, the on-device clinical and biomedical NLP library, for named-entity recognition, PHI de-identification, FHIR export, and evaluation. Use when the user mentions OpenMed, wants to install it, asks which OpenMed capability or model fits a task, or is starting to build a clinical/medical text pipeline and needs the right entry point.
Decision brief
OpenMed is an Apache-2.0, local-first Python library for clinical and biomedical NLP. Models download once from the Hugging Face Hub and then run fully on-device — no network calls, no telemetry, no raw PHI in logs, caches, or temp files. This skill is the map: it tells you what…
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/building-with-openmed"Inspect the Agent Skill "building-with-openmed" from https://github.com/maziyarpanahi/openmed/blob/e412ae8f3b04ae79b13663d34a422efc22109a3a/skills/building-with-openmed/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
Use it to scope a task and pick an entry point. For the actual work, hand off to the focused OpenMed skills (each is grounded in the real API):
Extras map to capabilities: cli, mcp, service, presidio, spacy, langchain, gliner (zero-shot), multimodal/ocr-paddle (document intake), mlx/coreml/onnx (on-device backends), hf (model hub), dev (tests/lint).
Review the “The three core calls” section in the pinned source before continuing.
result = openmed.analyzetext( "Patient prescribed 500 mg metformin for type 2 diabetes.", modelname="diseasedetectionsuperclinical", registry key, HF id, or local path outputformat="dict", dict | json | html | csv )
deid = openmed.deidentify( "John Doe (MRN 12345) seen on 2024-03-02.", method="replace", policy="hipaasafeharbor", bundled policy profile ) print(deid.deidentifiedtext) PHI removed; deid.piientities lists the spans
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 | 86/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
OpenMed is an Apache-2.0, local-first Python library for clinical and biomedical NLP. Models download once from the Hugging Face Hub and then run fully on-device — no network calls, no telemetry, no raw PHI in logs, caches, or temp files. This skill is the map: it tells you what OpenMed can do and which focused skill (or API) to reach for next.
Use it to scope a task and pick an entry point. For the actual work, hand off to the focused OpenMed skills (each is grounded in the real API):
| Task | Skill / API |
|---|---|
| Find and load a model | loading-openmed-models, choosing-openmed-models |
| Run clinical/biomedical NER | extracting-clinical-entities (openmed.analyze_text) |
| Zero-shot NER (no fine-tune) | running-zeroshot-ner (openmed zero) |
| Remove / mask PHI | deidentifying-clinical-text (openmed.deidentify) |
| Detect PHI spans only | extracting-pii-entities (openmed.extract_pii) |
| Restore masked PHI | reidentifying-text (openmed.reidentify) |
| Pick a privacy policy | configuring-privacy-policies (7 bundled profiles) |
| Non-English PHI | deidentifying-multilingual-text |
| Signed, no-PHI audit | auditing-deidentification-runs (audit=True) |
| Negation / temporality | resolving-clinical-context (openmed.clinical) |
| Evaluate with leakage gates | evaluating-with-leakage-gates (openmed.eval) |
| FHIR R4 export | exporting-to-fhir (openmed.interop) |
| Serve REST / MCP | serving-openmed-rest-api, deploying-openmed-mcp |
| Run on Apple Silicon / edge | running-openmed-ondevice (MLX / CoreML / ONNX) |
pip install openmed # core: NER + de-identification
pip install "openmed[hf]" # add Hugging Face model downloads
pip install "openmed[mcp]" # Model Context Protocol server
pip install "openmed[service]" # FastAPI REST service
pip install "openmed[mlx]" # Apple Silicon acceleration
pip install "openmed[presidio]" # Microsoft Presidio bridge
Extras map to capabilities: cli, mcp, service, presidio, spacy,
langchain, gliner (zero-shot), multimodal/ocr-paddle (document intake),
mlx/coreml/onnx (on-device backends), hf (model hub), dev (tests/lint).
import openmed
# 1) Named-entity recognition (token classification)
result = openmed.analyze_text(
"Patient prescribed 500 mg metformin for type 2 diabetes.",
model_name="disease_detection_superclinical", # registry key, HF id, or local path
output_format="dict", # dict | json | html | csv
)
# 2) De-identify PHI (mask | remove | replace | hash | shift_dates)
deid = openmed.deidentify(
"John Doe (MRN 12345) seen on 2024-03-02.",
method="replace",
policy="hipaa_safe_harbor", # bundled policy profile
)
print(deid.deidentified_text) # PHI removed; deid.pii_entities lists the spans
# 3) Detect PHI spans without changing the text
pii = openmed.extract_pii("Call Dr. Smith at 617-555-0123.") # PredictionResult
spans = pii.entities # the PHI spans
analyze_text and deidentify are the workhorses. Everything else
(multilingual, audit, policies, FHIR, eval) layers on top of these.
Never hardcode model lists or language counts — query them:
import openmed
openmed.list_model_categories() # e.g. Privacy, Disease, Oncology, Genomics ...
openmed.get_models_by_category("Disease")
openmed.get_pii_models_by_language("es")
from openmed.core.pii_i18n import SUPPORTED_LANGUAGES # de-id language set
CLI equivalents: openmed models list, openmed models info <key>,
openmed analyze --text "<text>" --model <key> --format json. MCP/REST expose
the same surface as tools (openmed_analyze_text, openmed_deidentify,
openmed_list_models, …).
audit=True for tamper-evident, no-PHI audit output.openmed.eval, not on F1 alone (see evaluating-with-leakage-gates).ingest (HL7v2 / FHIR / C-CDA / OCR)
→ de-identify (openmed.deidentify, policy=…)
→ extract entities (openmed.analyze_text)
→ ground to terminology (out-of-process: RxNorm / LOINC / SNOMED)
→ assemble FHIR (openmed.interop)
→ evaluate (openmed.eval leakage gates)
Each stage has a companion skill in this directory. Start here, then jump to the stage you need.