{"id":"b650186b-7d00-4331-b93c-f447552470c2","slug":"biomarker-sdtm","kind":"skill","name":"biomarker-sdtm","summary":"Agent skill that turns biomarker assay specs and patient lab data into BioCompute Objects and BiomarkerKB records, and converts them to and from CDISC SDTM.","owner":"clinical-biomarkers","repoUrl":"https://github.com/clinical-biomarkers/biomarker-sdtm","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-10-15T20:58:52.000Z","addedAt":"2026-10-21T10:31:58.276Z","logoUrl":"https://avatars.githubusercontent.com/u/120682159?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["data-analytics"],"tags":["biocompute-objects","cdisc","clinical-data","fair-data","biomarkerkb"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-27T01:03:40.037Z","sample":false,"url":"https://conduits.dev/tools/biomarker-sdtm","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# biomarker-sdtm\n\nAn agent skill for transforming clinical data. It converts documents produced from a study into\n**CDISC SDTM** outputs, and generates reproducible computational records that follow the\nofficial **BioCompute Object** standard (IEEE 2791) alongside a **BiomarkerKB** record built\non a unified biomarker knowledge framework.\n\n<p align=\"center\">\n  Jump to <a href=\"#quick-start\">Quick Start</a>\n</p>\n\n## 🔬 Generate submission-ready SDTM from your study documents\n\nProvide the documents a biomarker study already produces: assay specification,\ncontext of use, method validation report, patient results; and the skill returns\n**CDISC SDTM** domains ready for downstream review:\n\n> **DM · LB · SUPPLB · BM + further domains required**\n\n`BM` is a **proposed** SDTM domain for **Biomarker** data. It supplies the biomarker context\nfor an assessment that already exists elsewhere, rather than duplicating patient-level results.\n\nThis skill also supports the reverse direction: given existing SDTM output, it reconstructs the\ncorresponding BioCompute Object and BiomarkerKB records, so legacy tabulations can be brought\ninto the modern pipeline with ease.\n\n```mermaid\nflowchart LR\n    docs[\"Study Documents<br/>(protocol · context · assay specs · results)\"]\n    agent[\"Agent\"]\n    sdtm[\"CDISC SDTM<br/>(DM · LB · SUPPLB · BM ...)\"]\n\n    subgraph comp[\"Biomarker record set\"]\n        direction TB\n        tbco[\"¹ tBCO<br/>assay specification\"]\n        rbco[\"² rBCO<br/>per-patient run\"]\n        bmkb[\"³ BMKB<br/>BiomarkerKB record\"]\n    end\n\n    docs --> agent\n    agent --> tbco\n    agent --> rbco\n    agent --> bmkb\n    tbco --> sdtm\n    rbco --> sdtm\n    bmkb --> sdtm\n    sdtm -. \"reverse\" .-> agent\n```\n\nEach full run produces a **biomarker record set** that travel with the data:\n\n**¹ tBCO**: the _template_ BioCompute Object, the assay specification\n\n**² rBCO**: the _run_ BioCompute Object, one record per subject per analytical run\n\n**³ BMKB**: the BiomarkerKB record, what the biomarker means in controlled vocabulary\n\nSDTM records _what the measured values were_. The record set records _how they were produced_\nand _what they mean_, so the study remains reproducible and comparable long after the\nspreadsheet is gone.\n\n## Standards & knowledge frameworks\n\n### BioCompute Object (BCO)\n\nA [BCO](https://www.biocomputeobject.org/) is a machine-readable record of _how_ a computation was\nperformed: the scientific intent, the computational steps, the parameters, the software, and\nthe inputs and outputs. It is an IEEE standard (IEEE 2791), community-driven and peer-reviewed. For clinical\nresearch it supplies a regulatory-grade audit trail, allowing an analysis to be re-executed and\nverified years later rather than accepted on trust.\n\n### BiomarkerKB\n\n[BiomarkerKB](https://biomarkerkb.org) is a knowledgebase that harmonizes and standardizes biomarker data. It\ncaptures the measured entity, the condition, and its role (diagnostic, prognostic, monitoring,\nand others) in a controlled vocabulary, so that a finding from one study is directly\ncomparable with a finding from another. Full project description can be found in [_Patterns_ (2026)](https://doi.org/10.1016/j.patter.2026.101636).\nFor clinical research, it converts one-off biomarker measurements into\nstructured evidence that can be pooled, queried, and reused across trials.\n\nThe two close the gap that SDTM leaves open: SDTM standardises the\n_tabulation_, while BioCompute Objects and BiomarkerKB standardise the _provenance_ and the\n_meaning_.\n\n> Both projects are developed at George Washington University. BioCompute was developed with\n> support from the U.S. Food and Drug Administration (-2026). BiomarkerKB is funded by the\n> NIH Common Fund Data Ecosystem (CFDE).\n\n**Resources**\n\n- BioCompute Object Portal: <https://www.biocomputeobject.org/>\n- IEEE 2791-2020 (BCO standard): <https://standards.ieee.org/standard/2791-2020.html>\n- BiomarkerKB Portal: <https://biomarkerkb.org>\n- BiomarkerKB data submission: <https://wiki.biomarkerkb.org/Data_Submission/Data_Upload>\n- CDISC SDTM: <https://www.cdisc.org/standards/foundational/sdtm>\n- BEST (Biomarkers, EndpointS, and other Tools) Resource, FDA-NIH Biomarker Working Group: <https://www.ncbi.nlm.nih.gov/books/NBK326791/>\n\n## Quick Start\n\n> [!Note]\n> Skill uploads are not supported on mobile devices. However, you can upload them from a computer and then use them on your phone while signed into your account.\n\n### 1. **Download** the repository as a ZIP\n\n- On the repository page, choose `< > Code` → [`Download ZIP`](https://github.com/clinical-biomarkers/biomarker-sdtm/archive/refs/heads/main.zip).\n\n### 2. **Upload** the ZIP to your preferred application\n\n> Claude\n\n- Go to `Settings` → (Side bar) Customize: `Skills` → `+ Add` dropdown → `Upload skill`.\n- Drag and drop the **ZIP** file to the drop zone → `Upload`.\n\n> ChatGPT\n\n- Go to `Plugins` → Toggle to `Skills` → `Add` → `Upload from your computer`.\n- Drag and drop the **ZIP** file to the drop zone to upload.\n\n> Gemini\n\n- Go to `Settings` → Preferences: `Skills` → `Create` dropdown → `Upload`.\n- Drag and drop the **ZIP** file to the drop zone to upload.\n\n### 3. **Invoke** it from any chat with the slash command:\n\n- Upload your clinical documents using `+` (Add files).\n- Invoke the skill with the slash command:\n\n```\n/biomarker-sdtm\n```\n\nWe have included a set of simulated clinical documents in the skill package for demos. Try:\n\n```\n/biomarker-sdtm help me build a full biomarker record set and SDTM output from the troponin I study documents under the skill's fixtures/ folder. You are not allowed to open anything under the example/ folder in the process.\n```\n\n> [!TIP]\n> Claude also loads `SKILL.md` automatically when a request matches it. Mention BioCompute, a\n> tBCO or rBCO, BiomarkerKB, or SDTM and it will pick the skill up without the slash command.\n\n## Layout\n\n```\nbiomarker-sdtm/\n├── SKILL.md              # workflow (start here)\n├── README.md\n├── CHANGELOG.md\n├── references/           # docs + schemas, loaded on demand\n│   ├── README.md         # index, naming and versioning convention\n│   ├── bmkb-model.md     # BiomarkerKB submission schema + accession lookup\n│   ├── sdtmig-guide.md   # SDTMIG rules for DM, LB, SUPPLB, BM\n│   ├── sdtmig-v3.4.pdf   # the full SDTMIG v3.4 specification\n│   ├── bco-schema.md     # IEEE 2791 field spec\n│   ├── best-definitions.md\n│   ├── pitfalls.md\n│   └── schemas/          # IEEE 2791 JSON Schemas\n├── scripts/              # accessed by agent at runtime\n│   ├── finalize_draft.py        # strip //_ annotations, compute/verify the etag\n│   ├── validate_bco.py          # IEEE 2791 structural validation\n│   ├── validate_bmkb.py         # BMKB submission-schema validation\n│   ├── biomarker_accessions.py  # entity type → accession resource\n│   ├── censor_state.py          # analytic censoring logic\n│   ├── record_set_to_sdtm.py     # record set → SDTM\n│   └── sdtm_to_record_set.py     # SDTM → record set\n├── assets/              # annotated templates the agent fills\n├── examples/            # VALIDATED reference outputs + adjudication log\n└── fixtures/            # SIMULATED input documents for testing\n```\n\n## Compatibility checks (Developers)\n\nChecks to confirm the helpers run correctly in your environment. No documents required.\n\n```bash\npython scripts/run_checks.py\n```\n\nIt runs every script's self-test plus a comparison against the Troponin I gold example, and exits\nnon-zero if anything fails.\n\nTo score an agent's test run (its output folder) against the gold, on SDTM cells and controlled\nrecord-set fields only:\n\n```bash\npython scripts/grade_run.py <run_folder>\n```\n\n## Standard versions\n\n| Resource                           | Version         | Reference                                                       |\n| ---------------------------------- | --------------- | --------------------------------------------------------------- |\n| BioCompute Object (BCO)            | IEEE 2791-2020  | https://standards.ieee.org/ieee/2791/7337/                      |\n| SDTM (Study Data Tabulation Model) | v2.1 2024-06-07 | https://www.cdisc.org/standards/foundational/sdtm/sdtm-v2-1     |\n| SDTMIG (SDTM Implementation Guide) | v3.4 2022-07-21 | https://www.cdisc.org/standards/foundational/sdtmig/sdtmig-v3-4 |\n\n---\n\n**This work is supported by [BiomarkerKB](https://biomarkerkb.org).**\n\n---\n\n## Disclaimer\n\n> [!IMPORTANT]\n> This skill is a **research and development tool**. It drafts structured records from study\n> documents; it does not make decisions, and it does not submit anything to any regulator,\n> sponsor or data provider. Everything it produces is a **draft requiring expert review**\n> before it is used for anything.\n>\n> - **Not a regulatory submission.** The SDTM domains, BioCompute Objects and BiomarkerKB\n>   records it produces are drafts. They are not validated for submission to any health\n>   authority, and this skill does not provide regulatory advice. The sponsoring organisation\n>   remains responsible for its own submissions and for verifying every value against the\n>   source documents.\n> - **Verify before relying on it.** Automated extraction from documents can be wrong, and a\n>   `PLACEHOLDER` marks a value the documents did not supply; it is not a default. Treat every\n>   generated field as a proposal to check, not a fact.\n> - **Standards and schemas move.** The output formats follow the versions listed above.\n>   Confirm them against the current published versions before submitting.\n> - **No warranty or liability.** The skill is provided \"as is\", without warranty of any kind,\n>   express or implied, including fitness for a particular purpose. The authors and their\n>   institutions accept no liability for any loss or damage arising from its use.\n"}