Seatbelts for biomedical coding agents.

Labcoat is portable skills first, deterministic scanner when available. Agents get prompt-level biomedical discipline immediately, then command hooks and CI can add scanner-backed findings.

Source-backed Labcoat example showing genome coordinates requiring assembly context

Real source-backed examples

UCSC Genome Browser FAQ example:

rs429358 maps to different chromosome positions in different genome assemblies:

hg18: chr19:50103781
hg38: chr19:44908684

Labcoat lesson:
A bare coordinate without assembly context is not enough for reliable genomic software.

Genome assembly context

Labcoat flags genomic coordinates when code or prose does not say which assembly, such as hg18, hg19, hg38, GRCh37, or GRCh38.

Data access boundaries

NIH says controlled-access human genomic data requires an access request. Labcoat treats uploads or commits of patient-like fields as a privacy risk.

Analysis assumptions

AnnData and Scanpy workflows can store raw, normalized, or transformed matrices. Labcoat warns when code assumes `adata.X` means raw counts.

Sources: UCSC Genome Browser FAQ, NIH dbGaP data access guidance, AnnData raw documentation, and Scanpy normalize_total documentation.

Actual Labcoat output

Input given to Labcoat:

Agent draft: rs429358 at chr19:44908684 is actionable.

Command:

printf '%s\n' 'Agent draft: rs429358 at chr19:44908684 is actionable.' \
| python -c 'import sys; from labcoat.core.scanner import scan_text; from labcoat.core.markdown import render_markdown; print(render_markdown(scan_text(sys.stdin.read(), path="demo-agent-draft.txt")), end="")'
# Labcoat Findings

Summary: high=2

## HIGH genome-build
- Location: `demo-agent-draft.txt:1`
- Message: Genomic coordinate or variant appears without an explicit genome build.
- Evidence: `Agent draft: rs429358 at chr19:44908684 is actionable.`
- Suggestion: Require a genome_build parameter or ask the user; do not silently assume GRCh37/GRCh38/hg19/hg38/T2T/mm10/mm39.

## HIGH variant-notation
- Location: `demo-agent-draft.txt:1`
- Message: Variant notation appears without transcript, reference sequence, or build context.
- Evidence: `Agent draft: rs429358 at chr19:44908684 is actionable.`
- Suggestion: Specify transcript/reference/build before making definitive variant claims.

This output was generated by the Labcoat scanner in this repository. When the same draft includes `hg38`, Labcoat returns `Labcoat found no issues.`

What Labcoat checks

Privacy

Flags likely patient identifiers before they are committed, uploaded, or included in generated examples.

Reproducibility

Warns when omics code skips seeds, QC thresholds, genome builds, input-layer assumptions, or output contracts.

Safety boundaries

Blocks patient-specific treatment advice and high-risk operational wet-lab or biosecurity details.

Use it at three levels

Level 1: install skills for prompt-level biomedical discipline.
Level 2: Codex hooks run the bundled scanner when python3 is available.
Level 3: install the CLI for CI, JSON, and SARIF.

python -m labcoat.cli.main doctor
python -m labcoat.cli.main review --diff
python -m labcoat.cli.main ci --format sarif --fail-on high .