---
name: glp1r-variant-expression-screen
description: >
  Screen a personal genomic variant set (VCF, any chrom/pos/ref/alt list, or
  FASTQ/BAM/CRAM that the agent first converts to a GRCh38 VCF) for
  single-nucleotide variants in the GLP1R
  promoter whose predicted effect on GLP1R expression exceeds that of the GWAS
  hit rs10305420, using the default model of the Genomic Intelligence (GI)
  expression API.
  Handles the two annotated variants rs10305420 and rs880067 specially, then
  scores everything else and reports exceeders with interpretation guidance.
  Exploratory research only, not medical advice.
compatible_with: [claude-for-science, codex, biomni, phylo.bio, any-LLM-agent, human]
---

# Screening personal variants for GLP1R-expression effects vs. rs10305420

This is a specification, not a program. Any capable agent (Claude for Science,
Codex, Biomni, phylo.bio, or a human) should read it and **write its own scorer**
in whatever language and environment it has. Everything needed to build and run
that scorer correctly is described below in plain language.

## Background and rationale

Su et al. (Nature 2026, "Genetic predictors of GLP1 receptor agonist weight
loss and side effects", DOI 10.1038/s41586-026-10330-z) identified rs10305420
as the index SNP for GLP-1 medication efficacy. It lies on chromosome 6 at
position 39,048,860 in the GRCh38 assembly, with reference allele C and effect
allele T. Each copy of the T allele conferred an additional 0.641 percent BMI
loss, approximately 0.76 kg of additional weight loss per allele, with a 95
percent confidence interval of minus 1.27 to minus 0.34 kg, at a p-value of
2.9 times ten to the minus tenth. The effect is additive, with no dominance.
The paper attributes it to a missense change, proline-to-leucine at the seventh
amino acid, in the GLP1R signal peptide (p.Pro7Leu). Notably, the authors tested
for colocalization with expression quantitative trait loci at the locus and
found none that colocalized with the GWAS signal, which is why they favor a
protein-coding mechanism rather than a regulatory one.

The hypothesis this skill explores is different. rs10305420 sits only 79 base
pairs downstream of the GLP1R transcription start site, inside an active
promoter element (an ENCODE candidate cis-regulatory element of the
promoter-like class, with H3K4me3 and H3K27ac marks present in pancreatic
tissue). A sequence-to-expression model from Genomic Intelligence predicts that
the T allele slightly raises GLP1R expression. If part of the drug-response
effect is transcriptional rather than purely coding, then other variants in the
same promoter, including rare ones that GWAS cannot detect for lack of
statistical power, might act through the same route. The purpose of
this skill is to screen a personal variant set for exactly those candidates.

Treat the whole exercise as exploratory computational biology. It is a way to
prioritize variants for further study, not a diagnostic. The Caveats section is
mandatory reading before any result is reported to a person.

## Inputs the agent should accept

Accept a VCF file of any version, using only the single-nucleotide variants that
fall inside the GLP1R screening region (defined below). Also accept any simple table of chromosome,
position, reference allele, and alternate allele, in tab-, comma-, or
whitespace-separated form. If the user supplies raw reads (FASTQ) or alignments
(BAM or CRAM), the agent should treat those as valid starting inputs: first align
to GRCh38 and call variants (for example with bwa or minimap2, then GATK,
bcftools, or DeepVariant) to produce a GRCh38 VCF, and then proceed with this
screen.

Coordinates must be on the GRCh38 (hg38) assembly. The agent should verify this
rather than assume it: the reference window has known sequence at known offsets
from the start site (described below), and every input variant carries a reference allele
that must match the hg38 base at that position. If the fetched reference window
fails those checks, or if input reference bases systematically fail to match,
the most likely cause is a GRCh37 input, and the run should stop with a clear
message.

## The window to fetch and the reference sequence

The GLP1R canonical transcript is ENST00000373256, on the plus strand, with its
transcription start site at chromosome 6 position 39,048,781 in GRCh38.

The API accepts gene-sense (coding-strand) sequence of at least 9,198 base
pairs, with the transcription start site at least 4,599 base pairs from each
end. That is only the admission floor. Longer sequence centred on the start
site gives better predictions, so fetch as much flank as the models ask for,
not the minimum.

Work out the flank at the start of every run rather than copying a number from
here. Read the public model listing, a GET to
https://api.genomicintelligence.ai/v1/tasks/expression/models (no key needed).
Each model in it carries a bio_spec with recommended_flank_bp and
request_max_bp. Set the flank F as follows:

1. F is the largest recommended_flank_bp among all the listed models, not only
   the default one.
2. If that is below 4,599, use 4,599.
3. If 2F is more than the smallest request_max_bp among the listed models, use
   half of that request_max_bp (rounded down) instead.

Taking the largest flank means the window is long enough for whichever model
the API is serving that day. The server cuts each model's own slice around the
start site, so extra flank is never wasted on a model that wants less. Write F
and the listing's default_model into your output, so anyone reading the result
can see what it was computed with.

For a plus-strand gene such as GLP1R, the window is chromosome 6 from position
39,048,781 minus F through 39,048,781 plus F minus 1 (1-based, inclusive). That
is 2F bases with the start site at offset F (0-based). Send tss_index equal to F
with every call, for the reference and for every variant.

The agent must obtain the reference sequence for that window on GRCh38. A local
indexed genome works (for example samtools faidx on an hg38 FASTA), but a
network route with no local genome also works: the Ensembl REST sequence
endpoint returns the plain-text sequence for a human GRCh38 region given the
chromosome and the start and end coordinates. Check what comes back before
scoring anything:

- it is exactly 2F bases long;
- the twenty bases starting at offset F minus 4,599 are TGTCAGACTCTAAAAATCTG;
- the twenty bases ending at offset F plus 4,598 are TTTGCCATTGGCTGTGGTTA;
- the base at offset F plus 79 (rs10305420) is C, and so is the base at
  offset F minus 200 (rs880067).

If any of those fail, the sequence or the assembly is wrong and the agent should
not proceed.

The screening region is narrower than the window. Screen only the
single-nucleotide variants within 4,599 base pairs of the start site on either
side: offsets F minus 4,599 through F plus 4,598, which is chromosome 6 from
39,044,182 to 39,053,379. That covers the promoter and keeps results comparable
with the published screen. The rest of the window is context for the model, not
a wider screen.

To build an alternate-allele sequence for a variant, take the reference window,
find the variant's offset (F plus the variant position minus 39,048,781),
confirm the base there equals the variant's reference allele, and substitute the
alternate base at that single position. The length, and so the start site offset
and tss_index, stay unchanged.

## The Genomic Intelligence model and how to reach it

Use whatever model the API serves by default, and do not name one in your
calls. The API takes a DNA sequence (alphabet A, C, G, T, N) around the
transcription start site, as described above, plus a free-text description of
the biological context (a tissue or cell type, for example "endocrine pancreas
tissue"), and returns a predicted expression level as log of transcripts per
million plus one. The models were trained on RNA-seq data across many tissues
and cell types; the listing's training_data field says which.

Documentation for Genomic Intelligence is at https://docs.genomicintelligence.ai/.

There are two access routes. The first is the public MCP server at
https://mcp.genomicintelligence.ai/mcp, which speaks JSON-RPC over
Streamable-HTTP, uses an anonymous shared demo key, and exposes a
predict_expression tool that takes the sequence, the description and
tss_index (leave its optional model argument out). The agent
establishes a session by sending an initialize call and then an
initialized notification, and parses server-sent-event responses by reading the
data line of each event. The second route, if the agent holds a bearer key of
the form beginning with gi underscore, is the typed REST API at
https://api.genomicintelligence.ai, where expression prediction is a POST to the
path /v1/tasks/expression/predict with the bearer token in the Authorization
header; the request body carries sequence, tss_index and options.description,
and no model field.

The shared demo key is rate-limited to roughly 60 requests per minute with about
two concurrent in flight. The agent should pace its calls (a short sleep of
about one second between calls is sufficient), and should retry on a
429-too-many-requests response after waiting the interval named in the
Retry-After header, and retry on transient 5xx errors with a short backoff,
re-establishing the MCP session if it is dropped.

## Recommended tissue context

Use "endocrine pancreas tissue" as the default biological context, because that
is the GLP1R-relevant beta-cell setting where the active promoter marks were
found. The agent may also let the user pick another context (for example "body
of pancreas tissue" or "pancreas tissue"). The context string is passed verbatim
as the description to the model.

## The scoring procedure

First score the reference window once in the chosen context to obtain a
reference expression value. Pass the description exactly as chosen: "endocrine
pancreas tissue" is lower case, with no punctuation or trailing text. A
different phrasing of the same tissue (for example "endocrine pancreas" or
"pancreatic islet") is a different context to the model and gives a different
value. So does a different window length or a different default model, which
is why this skill quotes no reference value. Always use your own freshly
computed one.

Judge whether your window is right by the window rule and the checks in the
previous section (length, the two twenty-base sequences, the C at both known
variant offsets, tss_index), never by matching a number. Then, for each
single-nucleotide variant in the screening region, build its alternate-allele
window, score it in the same context, and compute the effect as the alternate
value minus the reference value. Call this difference the delta.

The threshold is defined by rs10305420 itself. Score rs10305420 (the variant at
chromosome 6 position 39,048,860, C to T) in the same batch, through this same
pipeline, and use its measured delta as the live threshold: a variant is
high-effect, or "exceeding the threshold", when the absolute value of its delta
is greater than the absolute value of the rs10305420 delta. Do not hardcode a
number for it.

That effect is small, close to the model's output resolution. Scores come back
at bfloat16 precision, so they sit on a grid whose step depends on the size of
the score: 2 to the minus tenth (about 0.001) for scores between 0.125 and 0.25
log(TPM+1), twice that between 0.25 and 0.5, half that between 0.0625 and 0.125,
and so on. Work out the step from your own reference value and express each
delta in grid steps as well as in log(TPM+1). A variant whose absolute delta is
within a grid step or two of the rs10305420 delta is a tie, not an exceeder, and
should be reported as such.

When this skill was last checked against the API's default model, rs10305420
gave a small positive delta, a few grid steps, and rs880067 (next section) a
positive delta several times larger. If your run shows that pattern, the
pipeline is behaving; the exact decimals are not the test. If it does not,
recheck the window first (length, sequence checks, tss_index, strand). If the
window passes, the model has moved on: report your own values and say plainly
that the pattern differs from the one described here.

## The decision logic the agent must apply

Handle each in-window single-nucleotide variant according to which of three
cases it falls into, in this order.

First case, the variant is rs10305420, at chromosome 6 position 39,048,860, C to
T. Report the validated GWAS effect from the paper: an additional 0.641 percent
BMI loss, about 0.76 kg of weight loss per T allele, with a 95 percent confidence
interval of minus 1.27 to minus 0.34 kg, at p equals 2.9 times ten to the minus
tenth, acting additively, arising from the missense p.Pro7Leu change in the
signal peptide. Note explicitly that this is a continuous per-allele effect on
weight change and that the paper reports no odds ratio, because the outcome is
continuous rather than case-versus-control, so no odds ratio should be
fabricated. This variant is the one that defines the threshold. Cite DOI
10.1038/s41586-026-10330-z.

Second case, the variant is rs880067, at chromosome 6 position 39,048,581, C to
T. Report its delta from your own run and how many times the rs10305420 delta
it is. When this skill was last checked the model predicted it exceeds the
threshold several times over; if your run disagrees, report your result rather
than this one. Then explain that it is a common variant with an allele frequency
near 0.19 and that it was not reported as a GWAS hit. Make the tension explicit:
a common variant with a genuinely large expression effect would ordinarily be
expected to leave a detectable GWAS signal, and none was reported, so the
in-silico prediction is unconfirmed and its interpretation is uncertain. Do not
tell the user that this variant affects their drug response.

Third case, any other single-nucleotide variant in the screening region. Score it, compute its
delta, and report the variant if the absolute delta exceeds the live rs10305420
threshold (allowing for ties as described above). State the
direction: an expression-raising variant (positive delta) is the closer analogue
to the beneficial rs10305420 effect allele, whereas an expression-lowering
variant (negative delta) is hypothesized to act in the opposite direction. Where
allele-frequency information is available, from the input or from gnomAD, note
whether the variant is rare or common. Interpret exceeders as variants that the
model predicts to change GLP1R expression more than the validated GWAS hit does,
and that therefore may influence GLP-1 drug response by the same transcriptional
route: a hypothesis to investigate, not an established result.

## What to output

The agent should produce a per-variant record containing the variant identifier
(chromosome, position, reference, alternate), the predicted delta, whether it
exceeds the threshold, the direction of effect, and any annotation for the two
known variants, plus F and the default model name from the listing. Indels and
any variant outside the screening region are simply not scored;
the agent should say so rather than silently dropping them. A short human-readable
summary should lead with the two known-variant messages when present, then list
the other exceeders ordered by the magnitude of their effect, and then the
interpretation and caveats.

## Interpretation guidance to place in front of the user

A variant "exceeding the threshold" means only that the model predicts a larger
effect on GLP1R expression than rs10305420. It is a prioritization signal, not
evidence of a real effect in that individual. Direction matters: because the
rs10305420 effect allele raises predicted expression and improves weight loss,
other expression-raising variants are the closest analogues to the beneficial
GWAS allele. Rare exceeders are the scientifically interesting class, being
individually too infrequent for GWAS yet potentially real modifiers; common
exceeders that are nonetheless absent from the GWAS, such as rs880067, are a
caution flag rather than a finding.

## Caveats that must appear in any report

This is not medical advice. It is exploratory research output, and no clinical,
diagnostic, dosing, or treatment decision should be made from it; any personal
health interpretation must come from a qualified clinician and, where relevant, a
certified genetic-testing pathway, not from a model prediction.

The deltas are model predictions, not measured expression quantitative trait loci
or experimental results. The Nature paper itself found no colocalizing eQTL and
favored a coding mechanism, so this transcriptional hypothesis runs partly against
the paper's own functional evidence and would need validation by islet eQTL data,
massively parallel reporter assays, or reporter-gene experiments.

The absolute effects are small on the log(TPM+1) scale, so the rank and the
direction of an effect are more trustworthy than its magnitude. Any "so many
times larger" figure, rs880067's included, is relative to rs10305420's own small
effect, which is only a few steps of the model's output resolution.

Only single-nucleotide variants are handled, because insertions and deletions
change the window length and, upstream of the start site, shift the start site
offset (and so tss_index); they need a separate, length-aware analysis.

The coordinates must be GRCh38 and the window is specific to GLP1R; any other
gene needs its own window around its own transcription start site, with the same
flank F from the model listing, and its own threshold. Always submit gene-sense sequence: the API does not reverse-complement,
and a wrong-strand window returns a confident but meaningless number rather than an
error. For a start site at genomic position tss (1-based) and a flank of F base
pairs, fetch the half-open range from tss minus F to tss plus F (positions tss
minus F through tss plus F minus 1) on a plus-strand gene. On a minus-strand gene,
fetch positions tss minus F plus 1 through tss plus F and then reverse-complement
it. Either way the start site lands at offset F, so send tss_index equal to F.
Fetching the plus-strand range for a minus-strand gene puts the start site at F
minus 1, which the API still accepts, so the mistake is silent.

rs10305420 is a missense variant, so transcriptional and protein-level effects
are not mutually exclusive, and the coding change may still be the dominant
mechanism.

The expression model accessed through the shared public key is a demonstration
tier intended for evaluation.
