OneKGPd: Individual-Level Queries over the 1000 Genomes Project
Scope
This skill queries the 1000 Genomes Project dataset — the extended high-coverage cohort
of 3,202 whole-genome-sequenced individuals, on the GRCh38 assembly. All results
are drawn from this cohort, and sample names returned by the skill (for example
HG00096 or NA21130) identify its participants.
Queries resolve against the cohort's per-individual genotype data. This supports
two complementary classes of question: selecting variants carried within a
region (across the whole cohort or within a specified set of individuals), and
selecting the individuals who carry variants matching given criteria.
Variant selection can be filtered by allele frequency, predicted consequence,
clinical significance, AlphaMissense classification, and the other annotation
axes listed below. Relatedness between two named individuals is also available.
The genotype state in which a variant is carried — heterozygous or homozygous —
is a criterion that queries may specify; results are returned as variants or as
sample names, not as raw genotypes.
When to Use
Use this skill when you need to:
- Find variants carried in a region or set of regions matching some criteria
across the whole cohort (
select-variants).
- Find variants carried in a region or set of regions matching some criteria
in specific set of individuals (
select-variants-in-samples).
- Find which 1000 Genomes individuals carry variants matching some criteria
in a region or set of regions (
select-samples).
- Count how many individuals carry specific variants (
count-samples).
- Restrict any variant query to heterozygous-only or homozygous-only
carriage, or query both together (default).
- Identify which individuals are homozygous reference at a single position
(
select-samples-hom-ref).
- Determine the relatedness between two named 1000 Genomes individuals —
both the degree (twin / 1st / 2nd / 3rd / unrelated) and the KING kinship
coefficient (
kinship).
- Get dataset totals — sample count, sex split, variant count, assembly
(
dataset-info).
- Variant selection can be specified by KGP allele frequency, gnomAD 4.1 exome and
gnomAD 4.1 genome allele frequency, AlphaMissense Score and AlphaMissense Class,
ClinVar significance (202502), and VEP annotations (impact, biotype, feature type,
variant class, consequences).
Do NOT use this skill for:
- Resolving a gene symbol, rsID, or transcript to coordinates, or fetching
reference sequence. Resolve coordinates first (see Coordinate Provenance
below), then query this skill with the resolved GRCh38 region.
- Any cohort other than the 1000 Genomes Project — this skill serves only that
dataset.
Prerequisites
uv: This skill's script is run with uv run, which reads the script's
inline dependency metadata and provisions an ephemeral environment. Ensure
uv is installed and on PATH (https://docs.astral.sh/uv/).
- Data use terms: The 1000 Genomes Project data is open; users should be
aware of the 1000 Genomes Project / IGSR data-use terms
(https://www.internationalgenome.org/data).
- Access constraints: There is no API key, no
.env file, and no
rate-limit token to configure.
- No credentials required
Core Rules
- Use the Wrappers: ALWAYS execute the provided helper scripts rather than
constructing your own client calls or network requests. Use
scripts/onekgpd_api.py for variant/sample/kinship queries (it handles the
connection, streaming, pagination, and JSON serialization), and
scripts/onekgpd_meta.py for sample/population metadata (offline, see
Sample & population metadata).
- Coordinates MUST be resolved against an authoritative source first — see
Coordinate Provenance. This
is mandatory, not advisory.
- Count before you select: every variant and sample selection has a paired
counting command. Call the count command FIRST to size the result set, then
select only if the count is manageable.
- Zygosity defaults to both: selection and counting commands include both
heterozygous and homozygous carriage by default. Narrow with
--het-only
or --hom-only when the question is specifically about one state. (You do
not need to pass anything to get both.)
- Output: scripts write full JSON to a file (
--output, default under
/tmp/) and print a concise summary to stdout. Do not read large JSON files
into context — use jq or a small disposable uv run python snippet to
extract fields.
Coordinate Provenance (MANDATORY FIRST STEP)
Before any region-based query, resolve the gene or feature to GRCh38
coordinates against an authoritative source (for example Ensembl), and query
with those resolved coordinates. The assembly must be explicit, and a gene-range
must be resolved to precise positions before use. This is structural, not
advisory: there is no source-side guardrail that would catch a misplaced region,
so an unverified coordinate produces results for an unintended location with no
error.
# Resolve gene symbol -> GRCh38 region with an authoritative source FIRST,
# then pass the verified coordinates to the OneKGPd query below.
[!CAUTION]
The dataset is GRCh38. A GRCh37 coordinate, or any region that does not
correctly correspond to the intended feature on GRCh38, will return
results for an unintended location without raising an error. Verify the
assembly and the resolved coordinates before querying.
Command Selection Guide
Match the question to the command. Counting commands are cheap and should
precede their selection counterpart.
- Which individuals carry matching variants in a region →
count-samples
then select-samples
- Which variants are carried in a region, cohort-wide →
count-variants
then select-variants
- Which variants are carried in a region, within a named set of individuals →
count-variants-in-samples then select-variants-in-samples
- Who is homozygous-reference at a single position →
count-samples-hom-ref
then select-samples-hom-ref
- Relatedness (degree + coefficient) between two named individuals →
kinship
- Dataset totals (sample count, sex split, variant total, assembly) →
dataset-info
Annotation filters (shared across variant and sample selection/counting)
All variant- and sample-selection commands (count-variants,
select-variants, their -in-samples forms, count-samples, select-samples)
accept the same annotation filters. Different filter fields are combined with
AND; multiple values within one field are combined with OR. Enum values
are case-insensitive (e.g. missense_variant or MISSENSE_VARIANT).
These are selection criteria applied on the server. The fields returned on a
selected variant are listed under
Variant-returning commands; a criterion used for
filtering is not necessarily echoed back on the returned variant.
--af-lt / --af-gt: 1000 Genomes dataset allele frequency bounds
--gnomad-exomes-af-lt / --gnomad-exomes-af-gt: gnomAD v4.1 exome AF bounds
--gnomad-genomes-af-lt / --gnomad-genomes-af-gt: gnomAD v4.1 genome AF bounds
--clin-significance: ClinVar significance terms, CSV (e.g. PATHOGENIC,LIKELY_PATHOGENIC)
--consequence: Sequence Ontology consequence terms, CSV (e.g. MISSENSE_VARIANT,STOP_GAINED)
--impact: VEP impact, CSV (HIGH,MODERATE,LOW,MODIFIER)
--variant-type, --feature-type, --bio-type: SO variant class / VEP feature / VEP biotype, CSV
--alpha-missense-class: AM_LIKELY_BENIGN,AM_LIKELY_PATHOGENIC,AM_AMBIGUOUS (CSV)
--alpha-missense-score-lt / --alpha-missense-score-gt: AlphaMissense score bounds
--biallelic-only / --multiallelic-only
--exclude-males / --exclude-females
--min-len-bp / --max-len-bp: alternate-allele length bounds (bp)
[!NOTE]
--alpha-missense-class and --alpha-missense-score-* are mutually exclusive
(the engine ignores the class when a score bound is set). --biallelic-only
and --multiallelic-only are mutually exclusive. --exclude-males and
--exclude-females are mutually exclusive. Setting a *-gt bound greater than
or equal to its matching *-lt bound defines an empty range and will return
nothing.
[!NOTE]
Allele-frequency fields use 0.0 to mean "not present in that source." So
--gnomad-exomes-af-gt 0 selects variants that are in gnomAD exomes; a
returned gnomad_exomes_af of 0.0 means the variant is absent from gnomAD
exomes. The same convention for gnomAD genomes AF.
Conversely, --gnomad-exomes-af-lt / --gnomad-genomes-af-lt bounds include
unannotated variants: "AF < X in gnomAD" includes variants with gnomAD AF = 0,
i.e. unannotated; pair it with --gnomad-*-af-gt 0 to require presence in gnomAD.
[!NOTE]
am_score of 0.0 means not scored or not annotated by AlphaMissense - it does not mean benign.
A real AlphaMissense score is always greater than 0.
Quick Start
# Step 1. Resolve coordinates against an authoritative source — see Coordinate Provenance.
# example: BRCA1: chr17:43044292-43170245
# Step 2. Size the result set: how many individuals carry predicted likely-pathogenic
# missense variants in this region?
uv run scripts/onekgpd_api.py count-samples \
--chrom chr17 --start 43044292 --end 43170245 \
--consequence MISSENSE_VARIANT \
--alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/count.json
# Step 3. If the count is manageable, list those individuals.
uv run scripts/onekgpd_api.py select-samples \
--chrom chr17 --start 43044292 --end 43170245 \
--consequence MISSENSE_VARIANT \
--alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/samples.json
# Step 4: For that set of individuals, see the actual variants they carry.
uv run scripts/onekgpd_api.py select-variants-in-samples \
--chrom chr17 --start 43044292 --end 43170245 \
--samples HG03169,NA20506 \
--consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/variants.json
Commands
Each command writes full JSON to a file (--output PATH, default a temp file)
and prints a concise stdout summary. All region/sample commands share: the
region input (--chrom/--start/--end with optional --ref/--alt, or one
or more repeated --region CHR:START-END), the zygosity flags
(--het-only/--hom-only, default both), and the annotation filters above.
The full per-flag tables live in
references/onekgpd_commands.md.
Variant-returning commands
select-* return matching variants; count-* return an integer count.
count-variants — count variants in a region, cohort-wide.
select-variants — select variants in a region, cohort-wide. Use --limit N
(hard cap, default 200) or --page-size N (retrieve the full set in
pages); the two are mutually exclusive. The summary flags truncated when
the cap is reached.
count-variants-in-samples — as count-variants, restricted to
--samples NAME1,NAME2,... (required).
select-variants-in-samples — as select-variants, restricted to
--samples NAME1,NAME2,... (required).
Each returned variant carries these 22 keys: chr, start, end, ref,
alt, af, ac, an, hom_samples, het_samples, mis_samples,
hom_samples_fx, het_samples_fx, mis_samples_fx, hom_samples_mxy,
het_samples_mxy, mis_samples_mxy, gnomad_exomes_af, gnomad_genomes_af,
am_score, amino_acids, biallelic.
ClinVar significance and VEP consequence are filter criteria only and are not
returned. Full schema:
references/onekgpd_commands.md.
Sample-returning commands
count-samples — count individuals carrying a matching variant in a region.
select-samples — list the names of individuals carrying a matching variant.
Supports --skip N and --limit N. Returns names only; to see which
variants qualified an individual, feed the names into
select-variants-in-samples.
Homozygous-reference commands
Single position via --chrom + --position (not a region).
count-samples-hom-ref — count individuals with a 0/0 call at the position.
The count is a sentinel: -1 = no variant exists at that position at all;
0 = a variant exists but no individual is homozygous reference; >0 = the
number of homozygous-reference individuals. The summary states which case.
select-samples-hom-ref — list the individuals with a 0/0 call at the position.
Relatedness command
kinship --sample1 NAME --sample2 NAME — relatedness between two named
individuals: the degree (TWINS_MONOZYGOTIC / FIRST_DEGREE /
SECOND_DEGREE / THIRD_DEGREE / UNRELATED) and the KING kinship
coefficient (phi_bwf).
Dataset metadata command
dataset-info — dataset totals: samples_total (3,202), female/male split,
variants_total, assembly (GRCh38), and the cohort breakdown. No region
required; doubles as a connectivity check.
Sample & population metadata (offline)
Population, sex, pedigree, and superpopulation questions are answered by a second
script, scripts/onekgpd_meta.py, from a data file bundled in the skill — no
network, no credentials, no coordinates. The sample IDs are the same names the
variant commands use, so the two layers compose (e.g. pick a cohort by population,
then query its variants). Run uv run scripts/onekgpd_meta.py <command>.
The cohort has 5 superpopulations (AFR, AMR, EAS, EUR, SAS) and 26
populations. Population/superpopulation values match case-insensitively by
short code or full name; sample IDs are case-sensitive.
sample-metadata --samples NA19240,HG00096 — family, gender, parents,
children, population, superpopulation, and phase3 status for the given samples.
list-populations — all 26 populations with superpopulation and sample count
(use to discover valid values).
list-superpopulations — the 5 superpopulations with sample count and
constituent populations.
population-stats --populations YRI [--populations CHS …] — per-population sex
split, phase3 count, and trio membership. Repeat --populations for multiple
values (full names contain commas, so they are not comma-separated).
superpopulation-summary --superpopulations EAS [--superpopulations EUR …] —
per-superpopulation totals with a per-population breakdown.
select-samples-by-population --population YRI and/or --superpopulation AFR,
with optional --skip/--limit (default 0 / 50, max 3202) — the sample IDs in
a population and/or superpopulation; both given intersects. Feed the names into
select-variants-in-samples to see their variants.
See references/onekgpd_commands.md for full
argument tables and JSON output schemas.
Typical Workflows
Which individuals, then which variants they carry
# Step 1: resolve gene -> verified GRCh38 region (authoritative source).
# Step 2: count individuals carrying a qualifying variant in the region.
uv run scripts/onekgpd_api.py count-samples \
--chrom <chr> --start <start> --end <end> \
--consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/n.json
# Step 3: list those individuals.
uv run scripts/onekgpd_api.py select-samples \
--chrom <chr> --start <start> --end <end> \
--consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/who.json
# Step 4: for that set of individuals, see the actual variants they carry.
uv run scripts/onekgpd_api.py select-variants-in-samples \
--chrom <chr> --start <start> --end <end> \
--samples <name1,name2,...> \
--consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
--output /tmp/variants.json
Homozygous-reference carriers at a position of interest
# After identifying a position of interest (verified coordinate):
uv run scripts/onekgpd_api.py count-samples-hom-ref \
--chrom <chr> --position <pos> --output /tmp/homref_n.json
uv run scripts/onekgpd_api.py select-samples-hom-ref \
--chrom <chr> --position <pos> --output /tmp/homref.json
Common Mistakes
- Mistake: Querying with an unverified coordinate.
Fix: Always resolve gene/feature → GRCh38 against an authoritative
source first.
A misplaced region returns results for an unintended location without error.
- Mistake: Calling a selection command before its counting command.
Fix: Count first; selection result sets can be large.
- Mistake: Assuming a GRCh37 coordinate will work.
Fix: The dataset is GRCh38 only.
References
- references/onekgpd_commands.md — full
per-command argument tables and the returned-variant output schema.
- references/annotation_vocabularies.md
— the controlled-vocabulary terms accepted by the CSV filter flags
(consequence, impact, biotype, feature type, ClinVar significance,
AlphaMissense class, variant class).
- 1000 Genomes Project / IGSR: https://www.internationalgenome.org/
- 1000 Genomes Project dataset online: https://dnaerys.org/online/
Source: K-Dense-AI/scientific-agent-skills → skills/onekgpd/SKILL.md
1---2name: onekgpd3description: > Query the 1000 Genomes Project dataset (3,202 whole-genome-sequenced individuals, GRCh38) at the level of individual participants. Use when a question is about individuals or variants in the 1000 Genomes Project cohort: which individuals carry variants matching specific criteria in a gene or region, which individuals are homozygous-reference at a position, which variants exist in the dataset or carried by specified individuals in a gene or region, the relatedness between two specified individuals. Variants are returned with 1000 Genomes allele frequencies (AF), gnomAD v4.1 exome and genome AF, AlphaMissense score, and HGVSp annotations.4---5
6
7# OneKGPd: Individual-Level Queries over the 1000 Genomes Project
8
9## Scope
10
11This skill queries the 1000 Genomes Project dataset — the extended high-coverage cohort
12of 3,202 whole-genome-sequenced individuals, on the GRCh38 assembly. All results
13are drawn from this cohort, and sample names returned by the skill (for example
14`HG00096` or `NA21130`) identify its participants.
15
16Queries resolve against the cohort's per-individual genotype data. This supports
17two complementary classes of question: selecting **variants** carried within a
18region (across the whole cohort or within a specified set of individuals), and
19selecting the **individuals** who carry variants matching given criteria.
20Variant selection can be filtered by allele frequency, predicted consequence,
21clinical significance, AlphaMissense classification, and the other annotation
22axes listed below. Relatedness between two named individuals is also available.
23
24The genotype state in which a variant is carried — heterozygous or homozygous —
25is a criterion that queries may specify; results are returned as variants or as
26sample names, not as raw genotypes.
27
28## When to Use
29
30**Use this skill when you need to:**
31
32- Find **variants** carried in a region or set of regions matching some criteria
33 across the whole cohort (`select-variants`).
34- Find **variants** carried in a region or set of regions matching some criteria
35 in specific set of individuals (`select-variants-in-samples`).
36- Find **which 1000 Genomes individuals** carry variants matching some criteria
37 in a region or set of regions (`select-samples`).
38- Count how many individuals carry specific variants (`count-samples`).
39- Restrict any variant query to **heterozygous-only or homozygous-only**
40 carriage, or query both together (default).
41- Identify which individuals are **homozygous reference** at a single position
42 (`select-samples-hom-ref`).
43- Determine the **relatedness** between two named 1000 Genomes individuals —
44 both the degree (twin / 1st / 2nd / 3rd / unrelated) and the KING kinship
45 coefficient (`kinship`).
46- Get **dataset totals** — sample count, sex split, variant count, assembly
47 (`dataset-info`).
48- Variant selection can be specified by KGP allele frequency, gnomAD 4.1 exome and
49 gnomAD 4.1 genome allele frequency, AlphaMissense Score and AlphaMissense Class,
50 ClinVar significance (202502), and VEP annotations (impact, biotype, feature type,
51 variant class, consequences).
52
53**Do NOT use this skill for:**
54
55- Resolving a gene symbol, rsID, or transcript to coordinates, or fetching
56 reference sequence. Resolve coordinates first (see Coordinate Provenance
57 below), then query this skill with the resolved GRCh38 region.
58- Any cohort other than the 1000 Genomes Project — this skill serves only that
59 dataset.
60
61## Prerequisites
62
631. **`uv`**: This skill's script is run with `uv run`, which reads the script's
64 inline dependency metadata and provisions an ephemeral environment. Ensure
65 `uv` is installed and on PATH (https://docs.astral.sh/uv/).
662. **Data use terms**: The 1000 Genomes Project data is open; users should be
67 aware of the 1000 Genomes Project / IGSR data-use terms
68 (https://www.internationalgenome.org/data).
693. **Access constraints**: There is no API key, no `.env` file, and no
70 rate-limit token to configure.
714. **No credentials required**
72
73## Core Rules
74
75- **Use the Wrappers**: ALWAYS execute the provided helper scripts rather than
76 constructing your own client calls or network requests. Use
77 `scripts/onekgpd_api.py` for variant/sample/kinship queries (it handles the
78 connection, streaming, pagination, and JSON serialization), and
79 `scripts/onekgpd_meta.py` for sample/population metadata (offline, see
80 [Sample & population metadata](#sample--population-metadata-offline)).
81- **Coordinates MUST be resolved against an authoritative source first** — see
82 [Coordinate Provenance](#coordinate-provenance-mandatory-first-step). This
83 is mandatory, not advisory.
84- **Count before you select**: every variant and sample selection has a paired
85 counting command. Call the count command FIRST to size the result set, then
86 select only if the count is manageable.
87- **Zygosity defaults to both**: selection and counting commands include both
88 heterozygous and homozygous carriage by default. Narrow with `--het-only`
89 or `--hom-only` when the question is specifically about one state. (You do
90 not need to pass anything to get both.)
91- **Output**: scripts write full JSON to a file (`--output`, default under
92 `/tmp/`) and print a concise summary to stdout. Do not read large JSON files
93 into context — use `jq` or a small disposable `uv run python` snippet to
94 extract fields.
95
96## Coordinate Provenance (MANDATORY FIRST STEP)
97
98Before any region-based query, resolve the gene or feature to **GRCh38**
99coordinates against an authoritative source (for example Ensembl), and query
100with those resolved coordinates. The assembly must be explicit, and a gene-range
101must be resolved to precise positions before use. This is structural, not
102advisory: there is no source-side guardrail that would catch a misplaced region,
103so an unverified coordinate produces results for an unintended location with no
104error.
105
106```bash
107# Resolve gene symbol -> GRCh38 region with an authoritative source FIRST,
108# then pass the verified coordinates to the OneKGPd query below.
109```
110
111> [!CAUTION]
112> The dataset is GRCh38. A GRCh37 coordinate, or any region that does not
113> correctly correspond to the intended feature on GRCh38, will return
114> results for an unintended location without raising an error. Verify the
115> assembly and the resolved coordinates before querying.
116
117## Command Selection Guide
118
119Match the question to the command. Counting commands are cheap and should
120precede their selection counterpart.
121
122- Which individuals carry matching variants in a region → `count-samples`
123 then `select-samples`
124- Which variants are carried in a region, cohort-wide → `count-variants`
125 then `select-variants`
126- Which variants are carried in a region, within a named set of individuals →
127 `count-variants-in-samples` then `select-variants-in-samples`
128- Who is homozygous-reference at a single position → `count-samples-hom-ref`
129 then `select-samples-hom-ref`
130- Relatedness (degree + coefficient) between two named individuals →
131 `kinship`
132- Dataset totals (sample count, sex split, variant total, assembly) →
133 `dataset-info`
134
135## Annotation filters (shared across variant and sample selection/counting)
136
137All variant- and sample-selection commands (`count-variants`,
138`select-variants`, their `-in-samples` forms, `count-samples`, `select-samples`)
139accept the same annotation filters. Different filter fields are combined with
140**AND**; multiple values within one field are combined with **OR**. Enum values
141are case-insensitive (e.g. `missense_variant` or `MISSENSE_VARIANT`).
142
143These are selection criteria applied on the server. The fields returned on a
144selected variant are listed under
145[Variant-returning commands](#variant-returning-commands); a criterion used for
146filtering is not necessarily echoed back on the returned variant.
147
148- `--af-lt` / `--af-gt`: 1000 Genomes dataset allele frequency bounds
149- `--gnomad-exomes-af-lt` / `--gnomad-exomes-af-gt`: gnomAD v4.1 exome AF bounds
150- `--gnomad-genomes-af-lt` / `--gnomad-genomes-af-gt`: gnomAD v4.1 genome AF bounds
151- `--clin-significance`: ClinVar significance terms, CSV (e.g. `PATHOGENIC,LIKELY_PATHOGENIC`)
152- `--consequence`: Sequence Ontology consequence terms, CSV (e.g. `MISSENSE_VARIANT,STOP_GAINED`)
153- `--impact`: VEP impact, CSV (`HIGH,MODERATE,LOW,MODIFIER`)
154- `--variant-type`, `--feature-type`, `--bio-type`: SO variant class / VEP feature / VEP biotype, CSV
155- `--alpha-missense-class`: `AM_LIKELY_BENIGN,AM_LIKELY_PATHOGENIC,AM_AMBIGUOUS` (CSV)
156- `--alpha-missense-score-lt` / `--alpha-missense-score-gt`: AlphaMissense score bounds
157- `--biallelic-only` / `--multiallelic-only`
158- `--exclude-males` / `--exclude-females`
159- `--min-len-bp` / `--max-len-bp`: alternate-allele length bounds (bp)
160
161> [!NOTE]
162> `--alpha-missense-class` and `--alpha-missense-score-*` are mutually exclusive
163> (the engine ignores the class when a score bound is set). `--biallelic-only`
164> and `--multiallelic-only` are mutually exclusive. `--exclude-males` and
165> `--exclude-females` are mutually exclusive. Setting a `*-gt` bound greater than
166> or equal to its matching `*-lt` bound defines an empty range and will return
167> nothing.
168
169> [!NOTE]
170> Allele-frequency fields use `0.0` to mean "not present in that source." So
171> `--gnomad-exomes-af-gt 0` selects variants that *are* in gnomAD exomes; a
172> returned `gnomad_exomes_af` of `0.0` means the variant is absent from gnomAD
173> exomes. The same convention for gnomAD genomes AF.
174> Conversely, `--gnomad-exomes-af-lt` / `--gnomad-genomes-af-lt` bounds **include**
175unannotated variants: "AF < X in gnomAD" includes variants with gnomAD AF = 0,
176i.e. unannotated; pair it with `--gnomad-*-af-gt 0` to require presence in gnomAD.
177
178> [!NOTE]
179> `am_score` of `0.0` means not scored or not annotated by AlphaMissense - it does not mean `benign`.
180> A real AlphaMissense score is always greater than 0.
181
182## Quick Start
183
184```bash
185# Step 1. Resolve coordinates against an authoritative source — see Coordinate Provenance.
186# example: BRCA1: chr17:43044292-43170245
187# Step 2. Size the result set: how many individuals carry predicted likely-pathogenic
188# missense variants in this region?
189uv run scripts/onekgpd_api.py count-samples \
190 --chrom chr17 --start 43044292 --end 43170245 \
191 --consequence MISSENSE_VARIANT \
192 --alpha-missense-class AM_LIKELY_PATHOGENIC \
193 --output /tmp/count.json
194# Step 3. If the count is manageable, list those individuals.
195uv run scripts/onekgpd_api.py select-samples \
196 --chrom chr17 --start 43044292 --end 43170245 \
197 --consequence MISSENSE_VARIANT \
198 --alpha-missense-class AM_LIKELY_PATHOGENIC \
199 --output /tmp/samples.json
200# Step 4: For that set of individuals, see the actual variants they carry.
201uv run scripts/onekgpd_api.py select-variants-in-samples \
202 --chrom chr17 --start 43044292 --end 43170245 \
203 --samples HG03169,NA20506 \
204 --consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
205 --output /tmp/variants.json
206```
207
208## Commands
209
210Each command writes full JSON to a file (`--output PATH`, default a temp file)
211and prints a concise stdout summary. All region/sample commands share: the
212region input (`--chrom`/`--start`/`--end` with optional `--ref`/`--alt`, or one
213or more repeated `--region CHR:START-END`), the zygosity flags
214(`--het-only`/`--hom-only`, default both), and the annotation filters above.
215The full per-flag tables live in
216[references/onekgpd_commands.md](references/onekgpd_commands.md).
217
218### Variant-returning commands
219
220`select-*` return matching variants; `count-*` return an integer count.
221
222- `count-variants` — count variants in a region, cohort-wide.
223- `select-variants` — select variants in a region, cohort-wide. Use `--limit N`
224 (hard cap, default 200) **or** `--page-size N` (retrieve the full set in
225 pages); the two are mutually exclusive. The summary flags `truncated` when
226 the cap is reached.
227- `count-variants-in-samples` — as `count-variants`, restricted to
228 `--samples NAME1,NAME2,...` (required).
229- `select-variants-in-samples` — as `select-variants`, restricted to
230 `--samples NAME1,NAME2,...` (required).
231
232Each returned variant carries these 22 keys: `chr`, `start`, `end`, `ref`,
233`alt`, `af`, `ac`, `an`, `hom_samples`, `het_samples`, `mis_samples`,
234`hom_samples_fx`, `het_samples_fx`, `mis_samples_fx`, `hom_samples_mxy`,
235`het_samples_mxy`, `mis_samples_mxy`, `gnomad_exomes_af`, `gnomad_genomes_af`,
236`am_score`, `amino_acids`, `biallelic`.
237ClinVar significance and VEP consequence are filter criteria only and are not
238returned. Full schema:
239[references/onekgpd_commands.md](references/onekgpd_commands.md).
240
241### Sample-returning commands
242
243- `count-samples` — count individuals carrying a matching variant in a region.
244- `select-samples` — list the names of individuals carrying a matching variant.
245 Supports `--skip N` and `--limit N`. Returns names only; to see which
246 variants qualified an individual, feed the names into
247 `select-variants-in-samples`.
248
249### Homozygous-reference commands
250
251Single position via `--chrom` + `--position` (not a region).
252
253- `count-samples-hom-ref` — count individuals with a 0/0 call at the position.
254 The count is a sentinel: `-1` = no variant exists at that position at all;
255 `0` = a variant exists but no individual is homozygous reference; `>0` = the
256 number of homozygous-reference individuals. The summary states which case.
257- `select-samples-hom-ref` — list the individuals with a 0/0 call at the position.
258
259### Relatedness command
260
261- `kinship --sample1 NAME --sample2 NAME` — relatedness between two named
262 individuals: the degree (`TWINS_MONOZYGOTIC` / `FIRST_DEGREE` /
263 `SECOND_DEGREE` / `THIRD_DEGREE` / `UNRELATED`) and the KING kinship
264 coefficient (`phi_bwf`).
265
266### Dataset metadata command
267
268- `dataset-info` — dataset totals: `samples_total` (3,202), female/male split,
269 `variants_total`, `assembly` (GRCh38), and the cohort breakdown. No region
270 required; doubles as a connectivity check.
271
272## Sample & population metadata (offline)
273
274Population, sex, pedigree, and superpopulation questions are answered by a second
275script, `scripts/onekgpd_meta.py`, from a data file bundled in the skill — **no
276network, no credentials, no coordinates**. The sample IDs are the same names the
277variant commands use, so the two layers compose (e.g. pick a cohort by population,
278then query its variants). Run `uv run scripts/onekgpd_meta.py <command>`.
279
280The cohort has 5 superpopulations (`AFR`, `AMR`, `EAS`, `EUR`, `SAS`) and 26
281populations. Population/superpopulation values match **case-insensitively** by
282short code or full name; **sample IDs are case-sensitive**.
283
284- `sample-metadata --samples NA19240,HG00096` — family, gender, parents,
285 children, population, superpopulation, and phase3 status for the given samples.
286- `list-populations` — all 26 populations with superpopulation and sample count
287 (use to discover valid values).
288- `list-superpopulations` — the 5 superpopulations with sample count and
289 constituent populations.
290- `population-stats --populations YRI [--populations CHS …]` — per-population sex
291 split, phase3 count, and trio membership. Repeat `--populations` for multiple
292 values (full names contain commas, so they are not comma-separated).
293- `superpopulation-summary --superpopulations EAS [--superpopulations EUR …]` —
294 per-superpopulation totals with a per-population breakdown.
295- `select-samples-by-population --population YRI` and/or `--superpopulation AFR`,
296 with optional `--skip`/`--limit` (default 0 / 50, max 3202) — the sample IDs in
297 a population and/or superpopulation; both given intersects. Feed the names into
298 `select-variants-in-samples` to see their variants.
299
300See [references/onekgpd_commands.md](references/onekgpd_commands.md) for full
301argument tables and JSON output schemas.
302
303## Typical Workflows
304
305### Which individuals, then which variants they carry
306
307```bash
308# Step 1: resolve gene -> verified GRCh38 region (authoritative source).
309# Step 2: count individuals carrying a qualifying variant in the region.
310uv run scripts/onekgpd_api.py count-samples \
311 --chrom <chr> --start <start> --end <end> \
312 --consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
313 --output /tmp/n.json
314# Step 3: list those individuals.
315uv run scripts/onekgpd_api.py select-samples \
316 --chrom <chr> --start <start> --end <end> \
317 --consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
318 --output /tmp/who.json
319# Step 4: for that set of individuals, see the actual variants they carry.
320uv run scripts/onekgpd_api.py select-variants-in-samples \
321 --chrom <chr> --start <start> --end <end> \
322 --samples <name1,name2,...> \
323 --consequence MISSENSE_VARIANT --alpha-missense-class AM_LIKELY_PATHOGENIC \
324 --output /tmp/variants.json
325```
326
327### Homozygous-reference carriers at a position of interest
328
329```bash
330# After identifying a position of interest (verified coordinate):
331uv run scripts/onekgpd_api.py count-samples-hom-ref \
332 --chrom <chr> --position <pos> --output /tmp/homref_n.json
333uv run scripts/onekgpd_api.py select-samples-hom-ref \
334 --chrom <chr> --position <pos> --output /tmp/homref.json
335```
336
337## Common Mistakes
338
339- **Mistake:** Querying with an unverified coordinate.
340 **Fix:** Always resolve gene/feature → GRCh38 against an authoritative
341 source first.
342 A misplaced region returns results for an unintended location without error.
343- **Mistake:** Calling a selection command before its counting command.
344 **Fix:** Count first; selection result sets can be large.
345- **Mistake:** Assuming a GRCh37 coordinate will work.
346 **Fix:** The dataset is GRCh38 only.
347
348## References
349
350- [references/onekgpd_commands.md](references/onekgpd_commands.md) — full
351 per-command argument tables and the returned-variant output schema.
352- [references/annotation_vocabularies.md](references/annotation_vocabularies.md)
353 — the controlled-vocabulary terms accepted by the CSV filter flags
354 (consequence, impact, biotype, feature type, ClinVar significance,
355 AlphaMissense class, variant class).
356- 1000 Genomes Project / IGSR: https://www.internationalgenome.org/
357- 1000 Genomes Project dataset online: https://dnaerys.org/online/
358
359---
360
361**Source:** [`K-Dense-AI/scientific-agent-skills`](https://github.com/K-Dense-AI/scientific-agent-skills) → `skills/onekgpd/SKILL.md`