Agent skill

Vcl

by aehrc in aehrc/pathling

Write FHIR ValueSet Compose Language (VCL), a compact URL-friendly syntax for ValueSet.compose.

Apache-2.0Auto-check passedResearch & Science

Install Vcl

skills CLI
$ npx skills add aehrc/pathling --skill vcl -a claude-code

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

GitHub CLI
$ gh skill install aehrc/pathling vcl --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/aehrc/pathling.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/vcl .claude/skills/vcl && 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
vcl
GitHub stars
137
Token cost
~2.9k tokens
SKILL.md length
1,027 words
Files
2 (incl. references)
Skills in repo
25
Repo updated
First seen
Licence
Apache-2.0

At a glance

Write FHIR ValueSet Compose Language (VCL), a compact URL-friendly syntax for ValueSet.compose.

  • Interpreting a VCL expression
  • SKILL.md covers When to use VCL, Lexical rules, Codes and the wildcard and Set operators, plus 10 more sections
  • Reaches loinc.org and snomed.info
  • Building a VCL implicit ValueSet URL (http://fhir.org/VCL?v1=...)

What it does

Vcl is an agent skill from aehrc/pathling. Write FHIR ValueSet Compose Language (VCL), a compact URL-friendly syntax for ValueSet.compose. Use when writing or interpreting a VCL expression, building a VCL implicit ValueSet URL (http://fhir.org/VCL?v1=...), or expressing inclusion/exclusion rules in compact form. Trigger keywords include VCL, ValueSet Compose Language, VCL expression, implicit value set, VCL URL, fhir.org/VCL, compact value set, and operators <<, ~<<, <!, ^ in a ValueSet context.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/grammar.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.

When your agent uses it

  • Interpreting a VCL expression
  • Building a VCL implicit ValueSet URL (http://fhir.org/VCL?v1=...)
  • Expressing inclusion/exclusion rules in compact form
  • Keywords include VCL

Example prompts

  • “/vcl”

What it can do on your machine

Read from SKILL.md and the folder at commit 56a3b4a. 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 json).

    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:

    • loinc.org
    • snomed.info
    • fhir.org
    • hl7.org
    • acme.com
    • ama-assn.org

    Also links to:

    • build.fhir.org

    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

Vcl loads about 2.9k tokens when it runs, and up to ~3.9k if it reads all its reference files. Until then it costs about 115 tokens; SKILL.md has 1,027 words of instructions outside code blocks.

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

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 aehrc/pathling at commit 56a3b4a, republished under its Apache-2.0 licence (© aehrc). 1,027 words, ~2,877 tokens.

Download SKILL.mdSave it as .claude/skills/vcl/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
vcl
description
Write FHIR ValueSet Compose Language (VCL), a compact URL-friendly syntax for ValueSet.compose. Use when writing or interpreting a VCL expression, building a VCL implicit ValueSet URL (http://fhir.org/VCL?v1=...), or expressing inclusion/exclusion rules in compact form. Trigger keywords include VCL, ValueSet Compose Language, VCL expression, implicit value set, VCL URL, fhir.org/VCL, compact value set, and operators <<, ~<<, <!, ^ in a ValueSet context.

You are an expert in the FHIR ValueSet Compose Language (VCL), a domain-specific language for expressing ValueSet.compose content as a compact, URL-safe string. VCL is inspired by SNOMED CT's Expression Constraint Language and is defined in the FHIR IG Guidance.

When to use VCL

Use VCL when the goal is to convey a ValueSet.compose rule in a single string, typically inside a URL passed to $expand or $validate-code. VCL covers everything compose can express: code system selection, enumerated codes, filters, included sub-ValueSets, exclusions, and property navigation - across one or many code systems.

Choose VCL over alternatives when:

  • The ValueSet is short-lived or query-time only and a full ValueSet resource would be heavyweight.
  • The expression spans multiple code systems and needs to be carried in a URL.
  • The use case is dynamic generation (e.g. an autocomplete that builds expressions on the fly).

Prefer SNOMED CT ECL (see the snomed-ecl skill) when working purely within SNOMED CT and the existing http://snomed.info/sct?fhir_vs=ecl/... syntax is sufficient. ECL is richer for SNOMED-specific concept-model navigation; VCL is broader but simpler.

Lexical rules

  • Whitespace (spaces, tabs) is ignored except inside quoted values. Newlines and carriage returns are not permitted.
  • Codes and values use unquoted form (SCODE) when they consist only of alphanumerics, hyphens, and underscores starting with an alphanumeric. Anything else (periods, slashes, colons, spaces) requires double quotes.
  • Inside quoted values, only " and \ are escapable, written as \" and \\.
  • URIs require an ASCII-letter scheme. Round brackets inside a URI must be percent-encoded (%28, %29) because brackets delimit the systemUri.
  • A URI may carry a version pinned with |, e.g. http://loinc.org|2.74.

Codes and the wildcard

ExpressionMeaning
BSingle code B
"B.123"Single code B.123
*All codes in the system

Set operators

OperatorSymbolNotes
Conjunction,AND - intersection of subexpressions
Disjunction;OR - union of subexpressions
Exclusion-Removes the right-hand subset
Grouping( )Disambiguates mixed , and ;

There is no operator precedence between , and ;. Always use brackets when mixing them.

(A;B),C       // (A or B) and C
A;(B,C)       // A or (B and C)
(A;B)-C       // (A or B) minus C

Filter operators

Filters are written as property OP value. They map directly to ValueSet.compose.include.filter triples (property, op, value).

OperatorSymbolRight-hand sideExample
equals=codeparent = 73211009
is-a<<codeconcept << 73211009
is-not-a~<<codeconcept ~<< 46635009
descendent-of<codeconcept < 73211009
child-of<!codeconcept <! 404684003
descendent-leaf!!<codeconcept !!< 64572001
generalizes>>codeconcept >> 44054006
regex/quoted stringcode / "A[0-9]*\\.9"
in (value set)^code list, URI, or filter list^http://acme/VS/x
not-in~^code list, URI, or filter list~^{A,B,C}
exists?code (property name)ingredient ? true

The ^ operator inside a filter checks property values against an enumerated set, an external ValueSet, or a nested filter. As a top-level expression, ^URI includes all codes from another ValueSet.

System URI prefix

A code system is selected by prefixing a systemUri in round brackets:

(http://loinc.org)4548-4
(http://snomed.info/sct)73211009
(http://snomed.info/sct|http://snomed.info/sct/32506021000036107/version/20230831)73211009

The system applies to the immediately following expression. Combine multiple systems with ;, , or -:

(http://loinc.org)(41995-2;4548-4) - (http://loinc.org)29557-6

Property navigation

The . operator (read as "of") flips a filter so the property is taken from a left-hand set of codes:

B.codeprop                    // values of `codeprop` on code B
{concept < B}.codeprop        // values of `codeprop` over all descendants of B
{B.codeprop1}.codeprop2       // chained navigation

This is the inverse of the ordinary property = code form and is useful for "give me everything pointed to by these codes".

Including another ValueSet

^http://hl7.org/fhir/ValueSet/payeetype

Maps to a compose.include.valueSet entry. Combine with codes, filters or other ValueSets through the usual set operators.

Implicit ValueSet URL form

VCL is most often used inside an implicit ValueSet URL passed to $expand:

http://fhir.org/VCL?v1=[percent-encoded-expression]

Rules:

  • The base URL is http://fhir.org/VCL. The query parameter is v1 (the version of the VCL syntax).
  • The expression must be percent-encoded. Servers SHALL percent-decode v1 before parsing.
  • Round brackets must be encoded as %28 and %29; curly braces as %7B and %7D; the caret ^ as %5E.

Example - all LOINC codes whose parent is one of two codes:

http://fhir.org/VCL?v1=(http://loinc.org)(parent%5E%7BLP46821-2,LP259418-4%7D)

Decoded expression:

(http://loinc.org)(parent^{LP46821-2,LP259418-4})
Show full SKILL.md (432 more words)Show less

Mapping to ValueSet.compose

A useful mental model is that a VCL expression compiles down to one or more compose.include (and possibly compose.exclude) entries.

VCL elementValueSet.compose element
(systemUri) prefixinclude.system (with optional version after |)
Bare code Binclude.concept[].code
Filter prop OP valueinclude.filter triple {property, op, value}
^http://.../ValueSet/...include.valueSet
Conjunction ,Multiple filters within the same include (AND)
Disjunction ;Multiple include entries (OR)
Exclusion -Right-hand side becomes a compose.exclude entry
Grouping ( )Determines which include or exclude an element belongs to

Example - this VCL:

(http://loinc.org)(41995-2;4548-4) - (http://loinc.org)29557-6

corresponds to this compose:

json
{
    "compose": {
        "include": [
            {
                "system": "http://loinc.org",
                "concept": [{ "code": "41995-2" }, { "code": "4548-4" }]
            }
        ],
        "exclude": [
            {
                "system": "http://loinc.org",
                "concept": [{ "code": "29557-6" }]
            }
        ]
    }
}

Worked examples

Single concept and descendants
(http://snomed.info/sct)concept << 73211009

All diabetes mellitus concepts (self plus descendants).

Multi-system union
(http://loinc.org)(41995-2;4548-4;4549-2);
(http://snomed.info/sct)(365845005;165679005);
(http://www.ama-assn.org/go/cpt)(83036;83037)

Three code systems unioned together, each with its own enumerated codes.

Inclusion minus exclusion across systems
((http://snomed.info/sct)concept << 17311000168105) - ((http://loinc.org)76573-5)

All descendants of the SNOMED concept, minus a single LOINC code.

Filter on a property
(http://loinc.org)COMPONENT = LP212516-1, PROPERTY = LP6817-3, TIME_ASPCT = LP6960-1

LOINC codes that match all three property filters (AND).

Regex filter
(http://loinc.org)COMPONENT / ".*Dichloroethane.*"

LOINC codes whose COMPONENT term matches the regex.

Property navigation
(http://loinc.org){concept < LP12345}.parent

The parent property values for every descendant of LP12345.

Nested property filter
(http://acme.com/cs)consists_of ^ { has_ingredient ^ { has_tradename = 2201670 } }

Codes that consist of something which has an ingredient with a particular tradename.

Mixing direct codes and an included ValueSet
(http://loinc.org)10007-3 ; ^http://loinc.org/vs/LP257682-7

Direct LOINC code plus everything in the named ValueSet.

Boolean property
(http://snomed.info/sct)inactive = true

All inactive SNOMED codes.

Existence check
(http://acme.com/cs)ingredient ? true

All codes that have an ingredient property defined.

Common pitfalls

  • Forgetting to quote codes with periods or slashes. B.123 is parsed as property navigation, not as a code. Write "B.123".
  • Missing percent-encoding in URLs. (, ), {, }, ^, ,, ; and # all need encoding when the expression is the value of v1.
  • Mixing , and ; without brackets. There is no precedence; the parser may accept it but the meaning is ambiguous to readers. Always group.
  • Using a URI scheme that is not all ASCII letters. The lexer rejects digits or punctuation in the scheme.
  • Forgetting that whitespace excludes newlines. A pretty-printed multi-line VCL expression is invalid. Keep it on a single line.
  • Unbracketed system change. A (systemUri) only applies to the immediately following expression, not the whole document. To apply it to a group, wrap the group: (http://loinc.org)(A;B;C).
  • Confusing ^ operators. As a top-level operator, ^URI means "include this ValueSet". As a filter operator (property ^ {...}), it means "in this set of values".

When to load the formal grammar

For most authoring tasks the operator and example tables above are sufficient. Load references/grammar.md when:

  • A precise lexical question arises (e.g. which characters are allowed in an unquoted code, or how a URI may end).
  • Implementing or debugging a parser.
  • Interpreting an unfamiliar construct that is not covered by the tables.

Resources

© 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

Files

SKILL.md and 1 other file (references) in .agents/skills/vcl of aehrc/pathling.

  • SKILL.md
  • references/grammar.md

Open the folder on GitHubat commit 56a3b4a

Compare with similar skills

Vcl 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.

Vcl compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vcl this skillaehrc/pathling137—~2.9kAutomated safety check: PassApache-2.0
Clinical Trials Databasegoogle-deepmind/science-skills3.2k2 repos~3.2kAutomated safety check: PassApache-2.0
CHARLS Paper Reproduction Guidexjtulyc/MedgeClaw6171 repos~1.8kAutomated safety check: PassNone
Biomedical Analysis Dispatchxjtulyc/MedgeClaw6171 repos~2kAutomated safety check: PassNone
Research Proposalluwill/research-skills858—~4.4kAutomated safety check: NotesNone
Medical Imaging ReviewLeonChaoX/qinyan-academic-skills9433 repos~1.1kAutomated safety check: NotesMIT

Similar skills

  • Clinical Trials Database

    google-deepmind/science-skills

    Query ClinicalTrials.gov via APIv2. An agent skill from google-deepmind/science-skills.

    3.2k GitHub starsUsed in 2 repos~3.2k tokens
    Research & ScienceAuto-check passed
  • Guides an agent through reproducing papers built on the CHARLS health and retirement survey, from variable mapping to cognition, depression and isolation scores.

    617 GitHub starsUsed in 1 repo~1.8k tokens
    Research & ScienceAuto-check passed
  • 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.

    617 GitHub starsUsed in 1 repo~2k tokens
    Research & ScienceAuto-check passed
  • Research Proposal

    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…

    858 GitHub stars~4.4k tokensUpdated 8 days ago
    Research & ScienceAuto-check: notes
  • Medical Imaging Review

    LeonChaoX/qinyan-academic-skills

    Write comprehensive literature reviews for medical imaging AI research.

    943 GitHub starsUsed in 3 repos~1.1k tokens
    Research & ScienceAuto-check: notes
  • Drug Research

    lamm-mit/scienceclaw

    Generates comprehensive drug research reports with compound disambiguation, evidence grading, and mandatory completeness sections.

    244 GitHub starsUsed in 3 repos~1.7k tokens
    Research & ScienceAuto-check passed

More from aehrc/pathling

All 25 skills in this repo
  • Databricks CLI

    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…

    137 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Fhir API

    aehrc/pathling

    Expert guidance for implementing FHIR RESTful API servers and clients following the HL7 FHIR specification.

    137 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Fhir Bulk Data

    aehrc/pathling

    Expert guidance for implementing FHIR Bulk Data Access (Flat FHIR) following the HL7 specification.

    137 GitHub stars~1.8k tokensUpdated yesterday
    Auto-check passed
  • Fhir Search Spec

    aehrc/pathling

    FHIR RESTful search specification expert with access to the official HL7 search specification text and the formal SearchParameter registry.

    137 GitHub stars~649 tokensUpdated yesterday
    Auto-check passed
  • Design and generate comprehensive FHIRPath test suites using input domain partitioning and Pathling's DSL test framework.

    137 GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed
  • Hapi Fhir Server

    aehrc/pathling

    Expert guidance for implementing FHIR servers using HAPI FHIR Plain Server framework.

    137 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed

Questions about Vcl

What does Vcl do?

Write FHIR ValueSet Compose Language (VCL), a compact URL-friendly syntax for ValueSet.compose. Vcl is an agent skill from aehrc/pathling.compose.

When should I use Vcl?

Vcl fits situations like: interpreting a VCL expression; building a VCL implicit ValueSet URL (http://fhir.org/VCL?v1=...); expressing inclusion/exclusion rules in compact form; keywords include VCL.

How do I install Vcl in Claude Code?

Run `npx skills add aehrc/pathling --skill vcl -a claude-code`. Or copy the skill folder (.agents/skills/vcl in aehrc/pathling) into .claude/skills/vcl in your project. Claude Code loads it when a task matches its description.

How do I install Vcl in Codex?

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

Can I use Vcl 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 aehrc/pathling --skill vcl -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vcl, .gemini/skills/vcl, .github/skills/vcl and .opencode/skills/vcl in your project.

What does Vcl need to run?

SKILL.md names no scripts, command-line tools or credentials: Vcl is instructions for the agent only.

Does Vcl access the network?

SKILL.md names 7 domains. In commands or code: loinc.org, snomed.info, fhir.org, hl7.org, acme.com and ama-assn.org; the agent is likely to contact these when it follows the instructions. As links in the text: build.fhir.org. This is read from the text; nothing was executed.

Is Vcl 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 Vcl use?

Vcl 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.

How many tokens does Vcl use?

About 2.9k tokens (SKILL.md is roughly 12k 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 997 tokens, read only when the agent opens those files.

What are the alternatives to Vcl?

Skills that share tags, products or a category with Vcl: Clinical Trials Database (google-deepmind/science-skills, 3.2k stars), CHARLS Paper Reproduction Guide (xjtulyc/MedgeClaw, 617 stars), Biomedical Analysis Dispatch (xjtulyc/MedgeClaw, 617 stars) and Research Proposal (luwill/research-skills, 858 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vcl?

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.