med-pdf
When to Use
✅ Use when:
- The user sends a medical PDF (labs, radiology, discharge, pathology)
- The user shares a screenshot/image of clinical results
- The user asks to compare results across visits or trend a value
- A MyChart/Epic export needs parsing before reasoning
When NOT to Use
❌ Don't use when:
- The PDF is non-medical (insurance, EOB, billing)
- The user wants to author a clinical message -> use
epic-note - Anything that would send PHI outside the workspace
Setup
Profile. Resolve from the precedence in
references/profile-schema.md
(skill config -> env var -> ~/.openclaw/workspace/memory/profile.yaml).
Use identity.short_name when addressing the user in summaries.
The skill never contains the profile.
Workflow
Extract -
node {baseDir}/scripts/extract.mjs <input.pdf> <outDir>outDirmust be inside~/.openclaw/workspace/. Suggested:~/.openclaw/workspace/.med-pdf-cache/<slug>/.- Outputs
text.txt,pageN.png,meta.json. Stdout JSON hasnumPages,hasText,textChars.
Branch on
hasText:true-> skip OCR, feedtext.txtto parsers.false-> image-only (MyChart/Epic). Use theimagetool onpageN.pngfor verbatim transcription. Save astext.txt, continue.
Parse:
- Imaging ->
node {baseDir}/scripts/parse_imaging.mjs <outDir> - Labs ->
node {baseDir}/scripts/parse_labs.mjs <outDir> - Both can run on a mixed document.
- Imaging ->
Reason. Pull abnormal flags, compare to prior values, surface what matters for healthspan - see
references/healthspan-priorities.md. Don't just summarize.Persist. Append to
~/.openclaw/workspace/memory/YYYY-MM-DD.mdand update trends inMEMORY.md. PHI stays in workspace memory only.
Scripts
See references/scripts.md for per-script flags,
output schemas, and dictionary maintenance for parse_labs.mjs.
Examples
See references/examples.md for end-to-end runs
(text-extractable Quest/LabCorp PDF, image-only MyChart CT export).
Privacy
Medical PDFs contain PHI (name, DOB, MRN, providers).
- Cache stays under
~/.openclaw/workspace/.med-pdf-cache/. Don't copy out. - Never send raw PDFs or PHI to web search or external services.
- The
imagetool is acceptable - same trust boundary as the assistant. - Redact MRN if a summary might leave the workspace.
Troubleshooting
parse_labs.mjsreturns mostlyunmatchedLines-> text wasn't transcribed well. Re-runextract.mjswith--scale=3.0and re-OCR.- A labeled value sits in
unmatchedLines-> add an alias to the dictionary inparse_labs.mjs. Seereferences/scripts.md. hasText: truebut parsing yields garbage -> PDF has hidden Unicode ligatures; force OCR with--images-only.