Fhir Developer Skill
FreedomIntelligence/OpenClaw-Medical-Skills
FHIR API development guide for building healthcare endpoints.
Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework.
$ npx skills add aehrc/pathling --skill hapi-fhir-server -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aehrc/pathling hapi-fhir-server --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/hapi-fhir-server .claude/skills/hapi-fhir-server && 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 "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .claude/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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/hapi-fhir-serverType 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 hapi-fhir-server -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aehrc/pathling hapi-fhir-server --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/hapi-fhir-server .agents/skills/hapi-fhir-server && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .agents/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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 hapi-fhir-server -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aehrc/pathling hapi-fhir-server --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/hapi-fhir-server .cursor/skills/hapi-fhir-server && 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 "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .cursor/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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/hapi-fhir-server--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 hapi-fhir-server -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aehrc/pathling hapi-fhir-server --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/hapi-fhir-server .gemini/skills/hapi-fhir-server && 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 "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .gemini/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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 hapi-fhir-serverInstalls 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 hapi-fhir-server -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/hapi-fhir-server .github/skills/hapi-fhir-server && 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 "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .github/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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 hapi-fhir-server -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 hapi-fhir-server --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/hapi-fhir-server .opencode/skills/hapi-fhir-server && 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 "hapi-fhir-server" agent skill from https://github.com/aehrc/pathling/tree/main/.claude/skills/hapi-fhir-server into .opencode/skills/hapi-fhir-server/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hapi-fhir-server", 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.
hapi-fhir-serverExpert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework.
Hapi Fhir Server is an agent skill from aehrc/pathling. Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework. Use this skill when creating RESTful FHIR server implementations, implementing resource providers, adding FHIR operations (read, create, update, delete, search, $operations), implementing server interceptors for logging, security, and validation, setting up authentication and authorisation, or configuring FHIR server behaviour. Trigger keywords include "HAPI", "FHIR server", "RestfulServer", "resource provider"…
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/interceptors.md`, `references/operations.md` and `references/resource-providers.md`).
It sits in Research & Science, covering Clinical and healthcare research. 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.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are java).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Hapi Fhir Server loads about 2.6k tokens when it runs, and up to ~22k if it reads all its reference files. Until then it costs about 164 tokens; SKILL.md has 284 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). 284 words, ~2,646 tokens.
.claude/skills/hapi-fhir-server/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.public class MyFhirServer extends RestfulServer {
@Override
protected void initialize() throws ServletException {
setFhirContext(FhirContext.forR4());
setResourceProviders(List.of(
new PatientResourceProvider(),
new ObservationResourceProvider()
));
registerInterceptor(new ResponseHighlighterInterceptor());
}
}public class PatientResourceProvider implements IResourceProvider {
@Override
public Class<Patient> getResourceType() { return Patient.class; }
@Read
public Patient read(@IdParam IdType id) {
return loadPatient(id.getIdPart());
}
@Search
public List<Patient> search(
@OptionalParam(name = Patient.SP_FAMILY) StringParam family) {
return searchPatients(family);
}
}RestfulServer (Servlet)
├── FhirContext (version-specific, expensive to create - reuse)
├── Resource Providers (IResourceProvider per resource type)
├── Plain Providers (cross-resource operations)
├── Interceptors (request/response hooks)
└── Configuration (paging, address strategy, encoding)| Operation | Annotation | Key Parameters |
|---|---|---|
| Read | @Read | @IdParam IdType |
| VRead | @Read(version=true) | @IdParam IdType (with version) |
| Create | @Create | @ResourceParam Patient |
| Update | @Update | @IdParam, @ResourceParam |
| Delete | @Delete | @IdParam IdType |
| Patch | @Patch | @IdParam, PatchTypeEnum, @ResourceParam String |
Add @ConditionalUrlParam String to support conditional create/update/delete:
@Update
public MethodOutcome update(
@ResourceParam Patient patient,
@IdParam IdType id,
@ConditionalUrlParam String conditional) {
if (conditional != null) {
// Find by search criteria in conditional URL
}
// Perform update
}MethodOutcome outcome = new MethodOutcome();
outcome.setId(new IdType("Patient", "123", "1"));
outcome.setCreated(true); // For create operations
return outcome;| Type | Class | Example URL |
|---|---|---|
| String | StringParam | ?family=Smith |
| Token | TokenParam | ?identifier=mrn|123 |
| Date | DateParam/DateRangeParam | ?date=ge2020-01-01 |
| Reference | ReferenceParam | ?subject=Patient/123 |
| Quantity | QuantityParam | ?value-quantity=gt5||kg |
// OR logic (comma-separated): ?family=Smith,Jones
@OptionalParam(name = "family") StringOrListParam families
// AND logic (repeated param): ?family=Smith&family=Jones
@OptionalParam(name = "family") StringAndListParam familiesFor large results, return IBundleProvider instead of List<IBaseResource>:
@Search
public IBundleProvider search(...) {
List<String> ids = findMatchingIds();
return new SimpleBundleProvider(ids) {
@Override
public List<IBaseResource> getResources(int from, int to) {
return loadResources(ids.subList(from, Math.min(to, ids.size())));
}
};
}Configure paging provider on server:
FifoMemoryPagingProvider paging = new FifoMemoryPagingProvider(10);
paging.setDefaultPageSize(20);
paging.setMaximumPageSize(100);
setPagingProvider(paging);@Operation(name = "$everything", idempotent = true)
public Bundle everything(
@IdParam IdType patientId,
@OperationParam(name = "start") DateType start,
@OperationParam(name = "end") DateType end) {
// Return bundle with patient and related resources
}@IdParam@IdParam, register on resource providerIResourceProvider)idempotent = true: Allows HTTP GET (only for primitive params)registerInterceptor(new LoggingInterceptor());
registerInterceptor(new ResponseHighlighterInterceptor());@Interceptor
public class MyInterceptor {
@Hook(Pointcut.SERVER_INCOMING_REQUEST_PRE_HANDLED)
public void preHandle(RequestDetails details, HttpServletRequest request) {
// Before request processing
}
@Hook(Pointcut.SERVER_OUTGOING_RESPONSE)
public void postHandle(RequestDetails details, IBaseResource resource) {
// After response generated
}
}SERVER_INCOMING_REQUEST_PRE_PROCESSED: Earliest hookSERVER_INCOMING_REQUEST_PRE_HANDLED: After handler selectedSERVER_OUTGOING_RESPONSE: Before response sentSERVER_HANDLE_EXCEPTION: On any exception| Interceptor | Purpose |
|---|---|
LoggingInterceptor | Request/response logging |
ResponseHighlighterInterceptor | HTML view for browsers |
RequestValidatingInterceptor | Validate incoming resources |
ResponseValidatingInterceptor | Validate outgoing resources |
CorsInterceptor | CORS support |
ExceptionHandlingInterceptor | Custom error responses |
@Interceptor
public class AuthInterceptor {
@Hook(Pointcut.SERVER_INCOMING_REQUEST_PRE_HANDLED)
public void authenticate(RequestDetails details, HttpServletRequest request) {
String auth = request.getHeader("Authorization");
if (!validateToken(auth)) {
throw new AuthenticationException("Invalid credentials");
}
details.getUserData().put("user", extractUser(auth));
}
}public class MyAuthInterceptor extends AuthorizationInterceptor {
@Override
public List<IAuthRule> buildRuleList(RequestDetails details) {
String userId = (String) details.getUserData().get("user");
return new RuleBuilder()
.allow().read().allResources()
.inCompartment("Patient", new IdType("Patient", userId))
.andThen()
.allow().write().allResources()
.inCompartment("Patient", new IdType("Patient", userId))
.andThen()
.denyAll()
.build();
}
}ValidationSupportChain chain = new ValidationSupportChain(
new DefaultProfileValidationSupport(ctx),
new InMemoryTerminologyServerValidationSupport(ctx),
new CommonCodeSystemsTerminologyService(ctx)
);
FhirInstanceValidator validator = new FhirInstanceValidator(chain);
RequestValidatingInterceptor interceptor = new RequestValidatingInterceptor();
interceptor.addValidatorModule(validator);
interceptor.setFailOnSeverity(ResultSeverityEnum.ERROR);
registerInterceptor(interceptor);Add NpmPackageValidationSupport for implementation guide validation:
NpmPackageValidationSupport npm = new NpmPackageValidationSupport(ctx);
npm.loadPackageFromClasspath("classpath:package/us.core.tgz");| Exception | HTTP Status | Use Case |
|---|---|---|
ResourceNotFoundException | 404 | Resource not found |
InvalidRequestException | 400 | Bad request parameters |
UnprocessableEntityException | 422 | Validation failure |
AuthenticationException | 401 | Auth required |
ForbiddenOperationException | 403 | Access denied |
ResourceVersionConflictException | 409 | Version mismatch |
InternalErrorException | 500 | Server error |
// For reverse proxy
setServerAddressStrategy(new HardcodedServerAddressStrategy("https://api.example.com/fhir"));
// For Apache mod_proxy
setServerAddressStrategy(new ApacheProxyAddressStrategy(true));setDefaultResponseEncoding(EncodingEnum.JSON);
setDefaultPrettyPrint(true);setTenantIdentificationStrategy(new UrlBaseTenantIdentificationStrategy());
// Access via: details.getTenantId()© 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
SKILL.md and 5 other files (references) in .claude/skills/hapi-fhir-server of aehrc/pathling.
Open the folder on GitHubat commit 56a3b4a
Hapi Fhir Server 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 |
|---|---|---|---|---|---|---|
| Hapi Fhir Server this skillaehrc/pathling | 137 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Fhir Developer SkillFreedomIntelligence/OpenClaw-Medical-Skills | 3.1k | 1 repos | ~2.5k | Automated safety check: Pass | None | |
| Clinical Trials Databasegoogle-deepmind/science-skills | 3.2k | 2 repos | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| CHARLS Paper Reproduction Guidexjtulyc/MedgeClaw | 617 | 1 repos | ~1.8k | Automated safety check: Pass | None | |
| Biomedical Analysis Dispatchxjtulyc/MedgeClaw | 617 | 1 repos | ~2k | Automated safety check: Pass | None | |
| Research Proposalluwill/research-skills | 858 | — | ~4.4k | Automated safety check: Notes | None |
FreedomIntelligence/OpenClaw-Medical-Skills
FHIR API development guide for building healthcare endpoints.
google-deepmind/science-skills
Query ClinicalTrials.gov via APIv2. An agent skill from google-deepmind/science-skills.
xjtulyc/MedgeClaw
Guides an agent through reproducing papers built on the CHARLS health and retirement survey, from variable mapping to cognition, depression and isolation scores.
xjtulyc/MedgeClaw
Routes bioinformatics, drug discovery, clinical and multi-omics tasks from a chat interface to Claude Code sessions running K-Dense scientific skills, with a live dashboard per task.
luwill/research-skills
A skill your agent uses when the user asks to write or draft a PhD / doctoral research proposal, research plan, 研究计划书, or 开题报告 — a forward-looking plan of background, gap, research questions…
LeonChaoX/qinyan-academic-skills
Write comprehensive literature reviews for medical imaging AI research.
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
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
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 writing end-to-end tests with Playwright Test framework.
Categories
Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework. Hapi Fhir Server is an agent skill from aehrc/pathling. Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework.
Hapi Fhir Server fits situations like: creating RESTful FHIR server implementations; implementing resource providers; adding FHIR operations (read; implementing server interceptors for logging.
Run `npx skills add aehrc/pathling --skill hapi-fhir-server -a claude-code`. Or copy the skill folder (.claude/skills/hapi-fhir-server in aehrc/pathling) into .claude/skills/hapi-fhir-server in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aehrc/pathling --skill hapi-fhir-server -a codex`. Or copy the skill folder (.claude/skills/hapi-fhir-server in aehrc/pathling) into .agents/skills/hapi-fhir-server 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 hapi-fhir-server -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hapi-fhir-server, .gemini/skills/hapi-fhir-server, .github/skills/hapi-fhir-server and .opencode/skills/hapi-fhir-server in your project.
SKILL.md names no scripts, command-line tools or credentials: Hapi Fhir Server is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Hapi Fhir Server 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 2.6k tokens (SKILL.md is roughly 11k 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 19k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Hapi Fhir Server: Fhir Developer Skill (FreedomIntelligence/OpenClaw-Medical-Skills, 3.1k stars), Clinical Trials Database (google-deepmind/science-skills, 3.2k stars), CHARLS Paper Reproduction Guide (xjtulyc/MedgeClaw, 617 stars) and Biomedical Analysis Dispatch (xjtulyc/MedgeClaw, 617 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.