Imaging Data Commons
majiayu000/claude-skill-registry
Query and download NCI Imaging Data Commons (IDC) cancer radiology and pathology datasets via the idc-index Python client.
Comprehensive cheat sheet for using the Pathling Python API.
$ npx skills add aehrc/pathling --skill pathling-python -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aehrc/pathling pathling-python --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pathling-python .claude/skills/pathling-python && rm -rf skills-srcUse ~/.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/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .claude/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-pythonType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add aehrc/pathling --skill pathling-python -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aehrc/pathling pathling-python --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pathling-python .agents/skills/pathling-python && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .agents/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aehrc/pathling --skill pathling-python -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aehrc/pathling pathling-python --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pathling-python .cursor/skills/pathling-python && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .cursor/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/aehrc/pathling.git --path .claude/skills/pathling-python--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add aehrc/pathling --skill pathling-python -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aehrc/pathling pathling-python --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pathling-python .gemini/skills/pathling-python && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .gemini/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install aehrc/pathling pathling-pythonInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add aehrc/pathling --skill pathling-python -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pathling-python .github/skills/pathling-python && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .github/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aehrc/pathling --skill pathling-python -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aehrc/pathling pathling-python --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aehrc/pathling.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pathling-python .opencode/skills/pathling-python && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pathling-python" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/pathling-python into .opencode/skills/pathling-python/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pathling-python", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pathling-pythonComprehensive cheat sheet for using the Pathling Python API.
Pathling Python is an agent skill from aehrc/pathling. Comprehensive cheat sheet for using the Pathling Python API. Use this skill when working with FHIR data in Python, running SQL on FHIR queries, using terminology functions, encoding FHIR resources, or any other Pathling Python operations. Trigger keywords include "pathling", "pathling python", "fhir encoding", "sql on fhir python", "terminology functions", "memberof", "translate", "subsumes", "PathlingContext".
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Research & Science, covering Clinical and healthcare research and SQL. It works with Python and SQL. The repository describes itself as: Tools that make it easier to use FHIR and clinical terminology within data analytics, built on Apache Spark. The licence is Apache-2.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 56a3b4a. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
pipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
snomed.infoontology.nhs.ukloinc.orghl7.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pathling Python loads about 4k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 663 words of instructions outside code blocks.
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.
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.
The full file from aehrc/pathling at commit 56a3b4a, republished under its Apache-2.0 licence (© aehrc). 663 words, ~3,965 tokens.
.claude/skills/pathling-python/SKILL.md (or your agent's skills folder).You are an expert in using the Pathling Python API for working with FHIR data in Python applications and data science workflows.
Prerequisites:
pip install pathlingThe main entry point for all Pathling operations. It manages the Spark session and provides access to data reading, encoding, and terminology functions.
Creating a basic context:
from pathling import PathlingContext
pc = PathlingContext.create()Creating a context with terminology server authentication:
pc = PathlingContext.create(
terminology_server_url='https://ontology.nhs.uk/production1/fhir',
token_endpoint='https://ontology.nhs.uk/authorisation/auth/realms/nhs-digital-terminology/protocol/openid-connect/token',
client_id='[client ID]',
client_secret='[client secret]'
)Creating a context with caching:
pc = PathlingContext.create(
terminology_server_url="http://localhost:8081/fhir",
terminology_verbose_request_logging=True,
cache_override_expiry=2_628_000,
cache_storage_type="disk",
cache_storage_path=".local/tx-cache"
)Accessing the Spark session:
pc.spark # Access the underlying Spark session
pc.spark.sparkContext.setLogLevel("DEBUG") # Set log levelNDJSON is a common format for bulk FHIR data, with one JSON resource per line.
# Read each line from the NDJSON into a row within a Spark data set.
ndjson_dir = '/some/path/ndjson/'
json_resources = pc.spark.read.text(ndjson_dir)
# Convert the data set of strings into a structured FHIR data set.
patients = pc.encode(json_resources, 'Patient')
# Do some stuff.
patients.select('id', 'gender', 'birthDate').show()Using the DataSource API:
data = pc.read.ndjson("/some/file/location")FHIR Bundles contain collections of related resources.
# Read each Bundle into a row within a Spark data set.
bundles_dir = '/some/path/bundles/'
bundles = pc.spark.read.text(bundles_dir, wholetext=True)
# Convert the data set of strings into a structured FHIR data set.
patients = pc.encode_bundle(bundles, 'Patient')
# XML Bundles can be encoded using input type.
# patients = pc.encode_bundle(bundles, 'Patient', inputType=MimeType.FHIR_XML)
# Do some stuff.
patients.select('id', 'gender', 'birthDate').show()# Read from previously persisted Delta tables.
data = pc.read.tables()
# Get available resource types.
data.resource_types()
# Read a specific resource.
patients = data.read('Patient')
patients.count()SQL on FHIR views project FHIR data into easy-to-use tabular forms.
result = data.view(
resource="Patient",
select=[
{"column": [{"path": "getResourceKey()", "name": "patient_id"}]},
{
"forEach": "address",
"column": [
{"path": "line.join('\\n')", "name": "street"},
{"path": "use", "name": "use"},
{"path": "city", "name": "city"},
{"path": "postalCode", "name": "zip"},
],
},
],
)
display(result)view_ds = datasource.view(
resource='Patient',
select=[
{
'column': [
{'path': 'id', 'name': 'id'},
{'path': 'gender', 'name': 'gender'},
{'path': "telecom.where(system='phone').value ", 'name': 'phone_numbers', 'collection': True},
]
}
],
where=[
{'path': "gender = 'male'"},
]
)
view_ds.show()view_ds = datasource.view(
resource='Patient',
select=[
{
'forEach': 'name',
'column': [
{'path': 'use', 'name': 'name_use'},
{'path': 'family', 'name': 'family_name'},
],
'select': [
{
'forEachOrNull': 'given',
'column': [
{'path': '$this', 'name': 'given_name'},
],
}
]
},
]
)
view_ds.show()Terminology functions require a FHIR terminology server to be configured.
to_coding:
from pathling import to_coding
# Convert a column containing codes into a Coding struct.
coding_column = to_coding(df.CODE, 'http://snomed.info/sct')
# With version.
coding_column = to_coding(df.CODE, 'http://snomed.info/sct', version='http://snomed.info/sct/32506021000036107/version/20250831')to_snomed_coding:
from pathling import to_snomed_coding
# Shorthand for SNOMED CT codes.
coding_column = to_snomed_coding(df.CODE)
coding_column = to_snomed_coding(df.CODE, version='http://snomed.info/sct/32506021000036107/version/20250831')to_loinc_coding:
from pathling.functions import to_loinc_coding
# Shorthand for LOINC codes.
coding_column = to_loinc_coding(df.CODE)Coding class:
from pathling import Coding
# Create a Coding object.
coding = Coding('http://snomed.info/sct', '232208008')
# Create a SNOMED Coding using the factory method.
snomed_coding = Coding.of_snomed('232208008')
# Convert to a Spark literal column.
coding_literal = coding.to_literal()to_ecl_value_set:
from pathling import to_ecl_value_set
# Convert a SNOMED CT ECL expression into a FHIR ValueSet URI.
viral_infection_ecl = """
<< 64572001|Disease| : (
<< 370135005|Pathological process| = << 441862004|Infectious process|,
<< 246075003|Causative agent| = << 49872002|Virus|
)
"""
value_set_uri = to_ecl_value_set(viral_infection_ecl)Test if a code is a member of a value set.
from pathling import member_of, to_snomed_coding, to_ecl_value_set
# Using an ECL expression.
result = csv.select(
"CODE",
"DESCRIPTION",
member_of(
to_snomed_coding(csv.CODE),
to_ecl_value_set("<< 64572001") # Viral disease
).alias("VIRAL_INFECTION")
)
result.show()
# Using a predefined value set.
result = csv.select(
"CODE",
"DESCRIPTION",
member_of(
to_coding(csv.CODE, 'http://loinc.org'),
'http://hl7.org/fhir/ValueSet/observation-vitalsignresult'
).alias("IS_VITAL_SIGN")
)Alternative syntax using PathlingContext:
result = transformed_df.withColumn(
"Viral Infection",
pc.snomed.member_of(col("primary_diagnosis_concept"), "<< 64572001")
)Translate codes from one code system to another.
from pathling import translate, to_coding
# Translate SNOMED CT codes to Read CTV3.
result = pc.translate(
csv,
to_coding(csv.CODE, 'http://snomed.info/sct'),
'http://snomed.info/sct/900000000000207008?fhir_cm=900000000000497000',
output_column_name='READ_CODE'
)
# Extract just the code from the Coding struct.
result = result.withColumn('READ_CODE', result.READ_CODE.code)
result.select('CODE', 'DESCRIPTION', 'READ_CODE').show()Test if one code is equal to or a subtype of another code.
from pathling import subsumes, to_snomed_coding, Coding
# Test if codes are subsumed by a specific code.
# 232208008 |Ear, nose and throat disorder|
left_coding = Coding('http://snomed.info/sct', '232208008')
right_coding_column = to_snomed_coding(csv.CODE)
result = pc.subsumes(
csv,
'IS_ENT',
left_coding=left_coding,
right_coding_column=right_coding_column
)
result.select('CODE', 'DESCRIPTION', 'IS_ENT').show()Using subsumed_by (reverse order):
from pathling import subsumed_by
# Test if a code is subsumed by codes in a column.
result = pc.subsumed_by(
csv,
'IS_SUBTYPE',
left_coding_column=to_snomed_coding(csv.CODE),
right_coding=Coding('http://snomed.info/sct', '232208008')
)Retrieve properties associated with codes in terminologies.
from pathling import property_of, to_snomed_coding, PropertyType
# Get the parent codes for each code in the dataset.
parents = csv.withColumn(
"PARENTS",
property_of(to_snomed_coding(csv.CODE), "parent", PropertyType.CODE)
)
# Split each parent code into a separate row.
exploded_parents = parents.selectExpr(
"CODE", "DESCRIPTION", "explode_outer(PARENTS) AS PARENT"
)PropertyType values:
PropertyType.CODE - Returns an array of codes.PropertyType.STRING - Returns an array of strings.PropertyType.INTEGER - Returns an array of integers.PropertyType.BOOLEAN - Returns an array of booleans.PropertyType.DATETIME - Returns an array of timestamps.PropertyType.DECIMAL - Returns an array of decimals.Retrieve the preferred display term for codes.
from pathling import display, to_snomed_coding
# Get the display term for parent codes.
with_displays = exploded_parents.withColumn(
"PARENT_DISPLAY",
display(to_snomed_coding(exploded_parents.PARENT))
)
with_displays.show()Alternative syntax using PathlingContext:
transformed_df = source_df.withColumn(
"Primary Diagnosis Term",
pc.snomed.display(col("primary_diagnosis_concept"))
)Retrieve alternative display terms (synonyms, translations, etc.).
from pathling import designation, to_snomed_coding, Coding
# Get the synonyms for each code in the dataset.
# 900000000000013009 is the SNOMED CT "Synonym" designation use.
synonyms = csv.withColumn(
"SYNONYMS",
designation(
to_snomed_coding(csv.CODE),
Coding.of_snomed("900000000000013009")
)
)
# Split each synonym into a separate row.
exploded_synonyms = synonyms.selectExpr(
"CODE", "DESCRIPTION", "explode_outer(SYNONYMS) AS SYNONYM"
)
exploded_synonyms.show()from pathling import PathlingContext, to_snomed_coding, to_ecl_value_set, member_of
from pyspark.sql.functions import col, when
pc = PathlingContext.create()
# Define value sets using ECL.
viral_infection_ecl = "<< 64572001" # Viral disease
musculoskeletal_injury_ecl = "<< 263534002" # Injury of musculoskeletal system
mental_health_ecl = "<< 40733004 |Mental state finding|"
# Add membership columns for each category.
categorised_df = df.withColumn(
"Viral Infection",
member_of(to_snomed_coding(col("diagnosis_code")), to_ecl_value_set(viral_infection_ecl))
).withColumn(
"Musculoskeletal Injury",
member_of(to_snomed_coding(col("diagnosis_code")), to_ecl_value_set(musculoskeletal_injury_ecl))
).withColumn(
"Mental Health Problem",
member_of(to_snomed_coding(col("diagnosis_code")), to_ecl_value_set(mental_health_ecl))
)
# Create mutually exclusive categories with hierarchy.
mutually_exclusive_df = categorised_df.withColumn(
"Category",
when(col("Viral Infection"), "Viral Infection")
.when(~col("Viral Infection") & col("Musculoskeletal Injury"), "Musculoskeletal Injury")
.when(~col("Viral Infection") & ~col("Musculoskeletal Injury") & col("Mental Health Problem"), "Mental Health Problem")
.otherwise("Other")
)from pathling import display, property_of, to_snomed_coding, PropertyType
# Add display terms to codes.
enriched_df = df.withColumn(
"diagnosis_display",
display(to_snomed_coding(df.diagnosis_code))
)
# Add parent codes.
with_parents = enriched_df.withColumn(
"parent_codes",
property_of(to_snomed_coding(df.diagnosis_code), "parent", PropertyType.CODE)
)After creating a view or running terminology functions, you can convert the result to a Pandas DataFrame for use in Python data science tools.
# Convert to Pandas.
pandas_df = result.toPandas()
# Use with plotting libraries.
import plotly.express as px
fig = px.bar(pandas_df, x="category", y="count")
fig.show()terminology_server_url - URL of the FHIR terminology server.token_endpoint - OAuth2 token endpoint for authentication.client_id - OAuth2 client ID.client_secret - OAuth2 client secret.terminology_verbose_request_logging - Enable verbose logging of terminology requests.cache_override_expiry - Cache expiry time in seconds.cache_storage_type - Cache storage type ("memory" or "disk").cache_storage_path - Path for disk-based cache.When running your own Spark cluster, configure Pathling as a Spark package:
spark.jars.packages au.csiro.pathling:library-api:[version]from pathling import MimeType, Version
# MimeType values.
MimeType.FHIR_JSON # application/fhir+json
MimeType.FHIR_XML # application/fhir+xml
# Version values.
Version.R4 # FHIR R4Install both packages:
pathling PyPI packageau.csiro.pathling:library-api Maven packageEnable Java 21 support in Advanced Options > Spark > Environment Variables:
JNAME=zulu21-ca-amd64Always create Coding structs when using terminology functions - Use to_coding(), to_snomed_coding(), or the Coding class to convert code columns into the proper struct format.
ECL expressions need to be converted to value set URIs - Use to_ecl_value_set() to convert ECL expressions before passing them to member_of().
Terminology functions return new columns - Use .withColumn() or .select() to add terminology function results to your DataFrame.
Resource encoding requires the correct resource type - Make sure to specify the correct FHIR resource type when using encode() or encode_bundle().
SQL on FHIR views use FHIRPath syntax - The path elements in view definitions use FHIRPath expressions, not SQL or Python syntax.
PathlingContext manages the Spark session - Access the Spark session via pc.spark, don't create a separate one.
Use DataSource API for reading data - Prefer pc.read.ndjson() or pc.read.tables() over manual encoding.
Cache terminology results - Configure terminology caching to avoid repeated requests to the terminology server.
Use appropriate terminology server - For Australian FHIR content, use the Australian terminology server.
Batch terminology operations - Process data in batches to improve performance of terminology operations.
Use SQL on FHIR views for complex projections - Views provide a declarative way to flatten and transform FHIR data.
Profile your Spark jobs - Use Spark's monitoring tools to identify performance bottlenecks.
Set appropriate log levels - Use pc.spark.sparkContext.setLogLevel() to control logging verbosity.
© aehrc, 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
Just SKILL.md in .claude/skills/pathling-python of aehrc/pathling.
Open the folder on GitHubat commit 56a3b4a
Pathling Python 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pathling Python this skillaehrc/pathling | 137 | — | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Imaging Data Commonsmajiayu000/claude-skill-registry | 666 | 1 repos | ~4.7k | Automated safety check: Pass | MIT | |
| PaperclipK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Imaging Data CommonsK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~7.8k | Automated safety check: Pass | MIT | |
| Chdb SQLvemetric/vemetric | 394 | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Kolokoloai/kolo | 525 | — | ~1.2k | Automated safety check: Pass | None |
majiayu000/claude-skill-registry
Query and download NCI Imaging Data Commons (IDC) cancer radiology and pathology datasets via the idc-index Python client.
K-Dense-AI/scientific-agent-skills
Searches and reads biomedical papers, FDA/PMDA/EMA documents, clinical trials, and protein records with the GXL Paperclip CLI and Python SDK.
K-Dense-AI/scientific-agent-skills
Queries and downloads public cancer imaging data from NCI Imaging Data Commons.
vemetric/vemetric
A skill your agent uses when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse…
koloai/kolo
Kolo is a text-based Python debugger that captures every executed function, return value, local variable, HTTP request, and SQL query into greppable trace files.
HL7/sql-on-fhir
Analyse whether a SQL query is portable across database implementations using sqlglot transpilation.
aehrc/pathling
Expert guidance for implementing FHIR RESTful API servers and clients following the HL7 FHIR specification.
aehrc/pathling
Expert guidance for implementing FHIR Bulk Data Access (Flat FHIR) following the HL7 specification.
aehrc/pathling
Expert guidance for using the Databricks CLI to manage Databricks workspaces, clusters, jobs, pipelines, Unity Catalog, SQL warehouses, serving endpoints, secrets, bundles, and all other Databricks…
aehrc/pathling
FHIR RESTful search specification expert with access to the official HL7 search specification text and the formal SearchParameter registry.
aehrc/pathling
Design and generate comprehensive FHIRPath test suites using input domain partitioning and Pathling's DSL test framework.
aehrc/pathling
Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework.
Categories
Comprehensive cheat sheet for using the Pathling Python API. Pathling Python is an agent skill from aehrc/pathling. Comprehensive cheat sheet for using the Pathling Python API.
Pathling Python fits situations like: working with FHIR data in Python; running SQL on FHIR queries; using terminology functions; encoding FHIR resources.
Run `npx skills add aehrc/pathling --skill pathling-python -a claude-code`. Or copy the skill folder (.claude/skills/pathling-python in aehrc/pathling) into .claude/skills/pathling-python in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aehrc/pathling --skill pathling-python -a codex`. Or copy the skill folder (.claude/skills/pathling-python in aehrc/pathling) into .agents/skills/pathling-python in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aehrc/pathling --skill pathling-python -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pathling-python, .gemini/skills/pathling-python, .github/skills/pathling-python and .opencode/skills/pathling-python in your project.
Going by SKILL.md and its folder, Pathling Python needs the command-line tools its instructions call (pip). Our summary lists: Python 3.
SKILL.md names 4 domains. In commands or code: snomed.info, ontology.nhs.uk, loinc.org and hl7.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
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.
Pathling Python is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pathling Python: Imaging Data Commons (majiayu000/claude-skill-registry, 666 stars), Paperclip (K-Dense-AI/scientific-agent-skills, 48k stars), Imaging Data Commons (K-Dense-AI/scientific-agent-skills, 48k stars) and Chdb SQL (vemetric/vemetric, 394 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aehrc (a GitHub organization) maintains it in aehrc/pathling, which has 137 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 8, 2026.
Source: aehrc/pathling on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.