Agent skill

ICD-10 Coding Assistant

by maziyarpanahi in maziyarpanahi/openmed

Suggests candidate ICD-10-CM diagnosis and ICD-10-PCS procedure codes for clinical text extracted by OpenMed, with rationale for a certified coder to review.

Apache-2.0Auto-check passedResearch & Science

Install ICD-10 Coding Assistant

skills CLI
$ npx skills add maziyarpanahi/openmed --skill coding-icd10 -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install maziyarpanahi/openmed coding-icd10 --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/maziyarpanahi/openmed.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/coding-icd10 .claude/skills/coding-icd10 && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
coding-icd10
GitHub stars
5.5k
Token cost
~2k tokens
SKILL.md length
610 words
Files
2 (incl. references)
Skills in repo
74
Repo updated
First seen
Licence
Apache-2.0

At a glance

Suggests candidate ICD-10-CM diagnosis and ICD-10-PCS procedure codes for clinical text extracted by OpenMed, with rationale for a certified coder to review.

  • Works in 6 steps: Extract diagnosis/procedure spans with… → Route to a chapter using the span's… → Search the code text (local CMS table or… → …
  • Coding a problem list into ICD-10-CM diagnosis codes
  • SKILL.md covers When to use, Quick start (public data +…, Workflow and Hand-off from OpenMed, plus 2 more sections
  • Reaches clinicaltables.nlm.nih.gov and hl7.org

What it does

Working downstream of OpenMed's entity recognition, the skill takes the diagnosis and procedure spans OpenMed extracts and proposes candidate codes, explaining why each fits. It is decision support for a certified coder, not autonomous billing, and a human validates the final billable code. It also routes a span to the right chapter, gives an approximate ICD-9 cross-walk through GEMs, and can pre-fill encounter diagnoses for a coder's review queue.

The workflow extracts spans, routes each to a chapter using `references/icd10-chapters.md` (for example endocrine conditions to E00 through E89 and circulatory to I00 through I99), searches code text for candidates, and applies ICD-10-CM specificity rules such as laterality, acute versus chronic, episode of care and combination codes. Code data comes from public-domain CMS files loaded locally, or from a FHIR terminology server such as the NLM Clinical Tables endpoint. CPT and HCPCS codes are AMA-licensed and out of scope, and other skills are named for SNOMED mapping and HCC risk capture.

When your agent uses it

  • Coding a problem list into ICD-10-CM diagnosis codes
  • Routing a diagnosis phrase to the correct ICD-10 chapter
  • Cross-walking legacy ICD-9 codes with GEMs
  • Pre-filling encounter diagnoses for a coder to review

Example prompts

  • “Suggest ICD-10-CM codes for type 2 diabetes with diabetic CKD and explain the choice.”
  • “Route community-acquired pneumonia to its ICD-10 chapter and show the code range.”
  • “Map these ICD-9 codes to ICD-10-CM using GEMs and flag the approximate matches.”
  • “Take the diagnoses OpenMed extracted from this note and prepare candidate codes for the coder queue.”

Requirements

  • OpenMed for extracting diagnosis and procedure spans
  • CMS ICD-10-CM and ICD-10-PCS code files, or access to a FHIR terminology server
  • Python with requests for the lookup example

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Extract diagnosis/procedure spans with OpenMed (Disease/Pathology models).
  2. Route to a chapter using the span's clinical theme and
  3. Search the code text (local CMS table or the NLM API) for candidates.
  4. Apply ICD-10-CM specificity rules in your rationale: laterality,
  5. Rank candidates; present the top few **with rationale and the missing-
  6. Emit {system: "http://hl7.org/fhir/sid/icd-10-cm", code, display}

What it can do on your machine

Read from SKILL.md and the folder at commit 252806a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • clinicaltables.nlm.nih.gov
    • hl7.org

    Also links to:

    • cms.gov

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

ICD-10 Coding Assistant loads about 2k tokens when it runs, and up to ~2.7k if it reads all its reference files. Until then it costs about 215 tokens; SKILL.md has 610 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~215
When it runs · the whole SKILL.md, loaded when a task matches
~2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from maziyarpanahi/openmed at commit 252806a, republished under its Apache-2.0 licence (© maziyarpanahi). 610 words, ~1,957 tokens.

Download SKILL.mdSave it as .claude/skills/coding-icd10/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
coding-icd10
description
Suggests candidate ICD-10-CM diagnosis codes (and ICD-10-PCS procedure codes) for diagnoses and procedures extracted by OpenMed, with rationale and a human-coder caveat. Use when the user wants to code a problem list, map a diagnosis span to a billable ICD-10-CM code, route a finding to the right chapter, cross-walk ICD-9 via GEMs, or pre-fill an encounter for coder review. Trigger keywords: ICD-10-CM, ICD-10-PCS, diagnosis coding, billable code, GEMs, problem list coding, encounter diagnosis, chapter range, CMS code lookup. references/icd10-chapters.md holds the chapter/section ranges. Pairs after OpenMed NER: consume Disease/Pathology entities from openmed.analyze_text and propose codes a certified coder validates. ICD-10-CM/PCS files are public domain from CMS — no license barrier (unlike CPT, which is restricted and out of scope).
license
Apache-2.0
metadata.project
OpenMed
metadata.category
terminology-coding
metadata.pairs
after
metadata.version
1.0

Coding OpenMed diagnoses to ICD-10-CM / PCS

Suggest ICD-10-CM diagnosis codes (and ICD-10-PCS for inpatient procedures) for the diagnosis and procedure spans OpenMed extracts. This is decision support for a certified coder, not autonomous billing: OpenMed + this skill narrow the candidate set and explain why; a human validates the final, billable code.

ICD-10-CM and ICD-10-PCS are public domain. CMS publishes the complete annual code files, addenda, and indexes for free. (CPT/HCPCS procedure codes are AMA-licensed and restricted — out of scope here; obtain those separately under the user's own AMA license.)

When to use

  • A note yields diagnoses ("type 2 diabetes with diabetic CKD", "community- acquired pneumonia") and you want candidate ICD-10-CM codes plus rationale.
  • You need to route a span to the right chapter quickly (see references/icd10-chapters.md for code ranges).
  • You hold legacy ICD-9 codes and need an approximate GEM cross-walk.
  • You are pre-filling encounter diagnoses for a coder's review queue.

For clinical-meaning codes use mapping-to-snomed; for HCC/risk capture use coding-hcc-risk-adjustment; this skill is for the ICD-10 classification.

Quick start (public data + public FHIR lookup)

Two complementary paths, both license-clean:

A) CMS files, loaded locally (public domain; you download once):

python
# CMS publishes the order/addenda file; load the code->description table.
# Columns: code (no dot), description; you insert the dot for display.
icd10cm = {}                       # "E1122" -> "Type 2 diabetes mellitus with diabetic chronic kidney disease"
with open("icd10cm_order_2025.txt", encoding="latin-1") as fh:
    for line in fh:
        code = line[6:13].strip()
        billable = line[14] == "1"     # '1' = valid billable code
        long_desc = line[77:].strip()
        if billable:
            icd10cm[code] = long_desc

def search_local(term: str, limit: int = 5):
    t = term.lower()
    hits = [(c, d) for c, d in icd10cm.items() if t in d.lower()]
    return sorted(hits, key=lambda cd: len(cd[1]))[:limit]

B) A FHIR terminology server that hosts ICD-10-CM (public servers exist; e.g. an NLM Clinical Tables endpoint or your own HAPI/Ontoserver):

python
import requests

# NLM Clinical Tables (public, no key) — ICD-10-CM autocomplete/search:
def search_icd10cm(term: str, count: int = 7):
    r = requests.get(
        "https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search",
        params={"sf": "code,name", "terms": term, "maxList": count}, timeout=10,
    )
    r.raise_for_status()
    _total, codes, _extra, display = r.json()
    return list(zip(codes, [d[1] for d in display]))   # [(code, name), ...]

print(search_icd10cm("type 2 diabetes nephropathy"))

Workflow

  1. Extract diagnosis/procedure spans with OpenMed (Disease/Pathology models).
  2. Route to a chapter using the span's clinical theme and references/icd10-chapters.md (e.g. endocrine → E00–E89, circulatory → I00–I99). This shrinks the search space and catches obvious mis-hits.
  3. Search the code text (local CMS table or the NLM API) for candidates.
  4. Apply ICD-10-CM specificity rules in your rationale: laterality, acute/chronic, episode of care, "with"/"due to" combination codes, and "code first / use additional code" notes. Flag where the note lacks the detail a billable code requires.
  5. Rank candidates; present the top few with rationale and the missing- detail caveat, not a single auto-selected code.
  6. Emit {system: "http://hl7.org/fhir/sid/icd-10-cm", code, display} marked status: needs-coder-review, with OpenMed source offsets.

Hand-off from OpenMed

openmed.analyze_text(..., output_format="dict") returns entities, each a dict with text, label, confidence, start, end. Consume Disease/Pathology spans:

python
import openmed

note = "Assessment: type 2 diabetes with diabetic nephropathy; CAP."
result = openmed.analyze_text(
    note,
    model_name="disease_detection_superclinical",   # Disease category
    output_format="dict",
)

DX_LABELS = {"DISEASE", "CONDITION", "PATHOLOGY"}
for ent in result["entities"]:
    if ent["label"] in DX_LABELS:
        candidates = search_icd10cm(ent["text"], count=5)
        print(ent["text"], ent["start"], ent["end"],
              f"(conf {ent['confidence']:.2f}) ->", candidates)
        # surface as SUGGESTIONS for a coder — never auto-bill

Keep OpenMed's start/end offsets next to each suggested code so the coder can jump to the exact supporting text. Store offsets and codes only — never the raw note in your suggestion log.

Show full SKILL.md (233 more words)Show less

Edge cases & gotchas

  • Human-in-the-loop is mandatory. ICD-10-CM coding has legal/financial weight. Output candidates with rationale; a certified coder assigns the final billable code. Never present a suggestion as an authorized claim.
  • Specificity & unspecified codes. Many billable codes demand laterality, episode, or "with" detail the note may not state. Prefer flagging "documentation insufficient for a specific code" over forcing an .9/unspecified code.
  • Combination codes. ICD-10-CM bundles related conditions (e.g. E11.22 = diabetes with diabetic CKD). Don't emit two separate codes where one combination code is required; let the search surface combinations.
  • "Code first" / "use additional code" / Excludes1/Excludes2 sequencing notes change which codes coexist. Carry these as rationale for the coder.
  • GEMs are approximate. ICD-9↔ICD-10 General Equivalence Mappings are many-to-many and lossy; treat a GEM result as a starting hint, not a billable mapping.
  • Annual updates. Codes change every fiscal year (Oct 1). Pin the file year you loaded and refresh annually; record which version produced a suggestion.
  • Licensing. ICD-10-CM/PCS are public domain (CMS). Do not pull in CPT or proprietary code maps that require an AMA/other license — those stay user-supplied and out-of-process.
  • Local-first. OpenMed NER runs on-device; if you query the NLM API, send only the de-identified diagnosis string. No PHI over the wire.

Standards & references

© maziyarpanahi, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/coding-icd10 of maziyarpanahi/openmed.

  • SKILL.md
  • references/icd10-chapters.md

Open the folder on GitHubat commit 252806a

Compare with similar skills

ICD-10 Coding Assistant next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

ICD-10 Coding Assistant compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
ICD-10 Coding Assistant this skillmaziyarpanahi/openmed5.5k—~2kAutomated safety check: PassApache-2.0
pydicom DICOM Toolkitdavila7/claude-code-templates32k11 repos~3.3kAutomated safety check: PassMIT
Histolab Whole Slide Image Tilingdavila7/claude-code-templates32k12 repos~5.1kAutomated safety check: PassMIT
NeuroKit2 Biosignal Processingdavila7/claude-code-templates32k12 repos~3kAutomated safety check: PassMIT
PyHealth Clinical ML Toolkitdavila7/claude-code-templates32k12 repos~4.4kAutomated safety check: PassMIT
Topic Model ConsolidationTyrealQ/q-skills108—~1kAutomated safety check: PassMIT

Similar skills

  • pydicom DICOM Toolkit

    davila7/claude-code-templates

    Reads, edits, anonymizes and converts DICOM medical imaging files with pydicom, including pixel data extraction and compressed transfer syntaxes.

    32k GitHub starsUsed in 11 repos~3.3k tokens
    Research & ScienceAuto-check passed
  • Histolab Whole Slide Image Tiling

    davila7/claude-code-templates

    Processes digital pathology whole slide images with histolab: tissue detection, mask creation, tile extraction and dataset preparation for deep learning.

    32k GitHub starsUsed in 12 repos~5.1k tokens
    Research & ScienceAuto-check passed
  • NeuroKit2 Biosignal Processing

    davila7/claude-code-templates

    Processes physiological signals with NeuroKit2 in Python: ECG, PPG, EEG, EDA, respiration, EMG and EOG, including HRV, events and complexity measures.

    32k GitHub starsUsed in 12 repos~3k tokens
    Research & ScienceAuto-check passed
  • PyHealth Clinical ML Toolkit

    davila7/claude-code-templates

    Builds machine learning pipelines on clinical data with PyHealth: EHR datasets, prediction tasks, medical code mapping, healthcare models and evaluation.

    32k GitHub starsUsed in 12 repos~4.4k tokens
    Research & ScienceAuto-check passed
  • Consolidates BERTopic, LDA or NMF topic output into a theory-driven classification framework and writes the final labels back to an Excel file.

    108 GitHub stars~1k tokensUpdated 13 days ago
    Research & ScienceAuto-check passed
  • Gtars

    K-Dense-AI/scientific-agent-skills

    Supports Gtars for local genomic interval models and set algebra, overlaps and counts, consensus and coverage, tokenization, fragment processing, and refget/BEDbase planning across Python, Rust, and…

    48k GitHub starsUsed in 1 repo~3.8k tokens
    Research & ScienceAuto-check: notes

More from maziyarpanahi/openmed

All 74 skills in this repo
  • Checks OpenMed de-identified clinical text against the 18 HIPAA Safe Harbor identifier categories and reports gaps and residual re-identification risk.

    5.5k GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed
  • OpenMed Model Card Writer

    maziyarpanahi/openmed

    Fills in a model card for an OpenMed clinical NER or de-identification model from its evaluation reports: intended use, metrics, subgroups and limitations.

    5.5k GitHub stars~1.8k tokensUpdated yesterday
    Auto-check passed
  • Walks a data pipeline against the HIPAA Privacy and Security Rule checklist and produces a gap report before it processes patient data.

    5.5k GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • OpenMed ETL to OMOP CDM

    maziyarpanahi/openmed

    Maps OpenMed-extracted, terminology-coded conditions, drugs and measurements into OMOP CDM v5.4 tables for OHDSI and ATLAS analytics.

    5.5k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Extracting SDOH and Z-Codes

    maziyarpanahi/openmed

    Finds social risks such as housing instability or food insecurity in clinical notes and proposes matching ICD-10-CM Z-codes for a coder to confirm.

    5.5k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Clinical Document Ingestion

    maziyarpanahi/openmed

    Converts scanned faxes, images, CSV/TSV exports and C-CDA XML into clean text on-device, ready for OpenMed de-identification and named-entity recognition.

    5.5k GitHub stars~2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about ICD-10 Coding Assistant

What does ICD-10 Coding Assistant do?

Suggests candidate ICD-10-CM diagnosis and ICD-10-PCS procedure codes for clinical text extracted by OpenMed, with rationale for a certified coder to review. Working downstream of OpenMed's entity recognition, the skill takes the diagnosis and procedure spans OpenMed extracts and proposes candidate codes, explaining why each fits. It is decision support for a certified coder, not autonomous billing, and a human validates the final billable code.

When should I use ICD-10 Coding Assistant?

ICD-10 Coding Assistant fits situations like: coding a problem list into ICD-10-CM diagnosis codes; routing a diagnosis phrase to the correct ICD-10 chapter; cross-walking legacy ICD-9 codes with GEMs; pre-filling encounter diagnoses for a coder to review.

How do I install ICD-10 Coding Assistant in Claude Code?

Run `npx skills add maziyarpanahi/openmed --skill coding-icd10 -a claude-code`. Or copy the skill folder (skills/coding-icd10 in maziyarpanahi/openmed) into .claude/skills/coding-icd10 in your project. Claude Code loads it when a task matches its description.

How do I install ICD-10 Coding Assistant in Codex?

Run `npx skills add maziyarpanahi/openmed --skill coding-icd10 -a codex`. Or copy the skill folder (skills/coding-icd10 in maziyarpanahi/openmed) into .agents/skills/coding-icd10 in your project. Codex loads it when a task matches its description.

Can I use ICD-10 Coding Assistant in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add maziyarpanahi/openmed --skill coding-icd10 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coding-icd10, .gemini/skills/coding-icd10, .github/skills/coding-icd10 and .opencode/skills/coding-icd10 in your project.

What does ICD-10 Coding Assistant need to run?

SKILL.md names no scripts, command-line tools or credentials: ICD-10 Coding Assistant is instructions for the agent only. Our summary lists: OpenMed for extracting diagnosis and procedure spans; CMS ICD-10-CM and ICD-10-PCS code files, or access to a FHIR terminology server; Python with requests for the lookup example.

Does ICD-10 Coding Assistant access the network?

SKILL.md names 3 domains. In commands or code: clinicaltables.nlm.nih.gov and hl7.org; the agent is likely to contact these when it follows the instructions. As links in the text: cms.gov. This is read from the text; nothing was executed.

Is ICD-10 Coding Assistant safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does ICD-10 Coding Assistant use?

ICD-10 Coding Assistant is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does ICD-10 Coding Assistant use?

About 2k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 745 tokens, read only when the agent opens those files.

What are the alternatives to ICD-10 Coding Assistant?

Skills that share tags, products or a category with ICD-10 Coding Assistant: pydicom DICOM Toolkit (davila7/claude-code-templates, 32k stars), Histolab Whole Slide Image Tiling (davila7/claude-code-templates, 32k stars), NeuroKit2 Biosignal Processing (davila7/claude-code-templates, 32k stars) and PyHealth Clinical ML Toolkit (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains ICD-10 Coding Assistant?

maziyarpanahi (a GitHub user) maintains it in maziyarpanahi/openmed, which has 5,452 GitHub stars. The repository holds 74 skills in this directory. The repository was last updated on October 6, 2026.

Source: maziyarpanahi/openmed on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.