active-genome-index
GitHub用于注册、解析和数字化私有基因组源文件至本地 Active Genome Index。支持 VCF、BAM、FASTQ 及多种消费级基因检测原始数据,通过 genomi.parse_source 将输入文件转换为结构化索引记录,供后续样本特定查询使用。
Trigger Scenarios
Install
npx skills add exon-research/genomi --skill active-genome-index -g -y
SKILL.md
Frontmatter
{
"name": "active-genome-index",
"tools": [
"genomi.describe_context",
"active_genome_index.approve_access",
"active_genome_index.select_user",
"active_genome_index.assign_user_genome",
"genomi.parse_source",
"active_genome_index.rename_user",
"active_genome_index.set_default_user",
"active_genome_index.clear_default_user",
"active_genome_index.summarize",
"active_genome_index.classify_callset_qc",
"active_genome_index.classify_genotype_support",
"active_genome_index.classify_region_callability",
"active_genome_index.clear_selection",
"active_genome_index.revoke_access",
"active_genome_index.list",
"active_genome_index.remove"
],
"mutating": true,
"description": "Register, parse, and digitize private genome source files into a local Active Genome Index and\nsupporting evidence stores. Use when the session explicitly supplies a VCF\/gVCF, BAM,\ngenome.computer .genome\/1.0 bundle, 23andMe raw genotype export, AncestryDNA raw genotype export, MyHeritage raw\ngenotype export, FamilyTreeDNA Family Finder export, Living DNA autosomal export, supported source zip\/tar,\nor known Active Genome Index.\n"
}
Active Genome Index
Use this skill when the user provides a genome result file, asks to parse a genome source, asks what local Active Genome Index context exists, or asks a sample-specific question that requires a user file.
Goal
Create or refresh the private Active Genome Index and local evidence stores. Interpret health meaning only after the relevant evidence skill gathers support for the user's claim.
Convention: See
skills/conventions/context-routing.md. Convention: Seeskills/_output-rules.md.
Contract
Contract:
- A supplied source file, an approved
agi_id, or a default user's selected Active Genome Index is accessible before sample-specific work. GENOMI_HOMEstores durable Active Genome Index records.- Every genome source parsed by Genomi becomes an Active Genome Index record.
- User/profile nicknames belong to users, not genome artifacts.
- A user can have multiple genome records and one selected Active Genome Index.
- A default user is auto-selected for every session using this
GENOMI_HOME, and readable access is scoped only to that user's selected Active Genome Index. genomi.parse_sourcedigitizes the intake file so future inquiries use the Active Genome Index.- The original intake path is hidden from normal agent-facing context after parsing.
- Parsing success creates a source-appropriate Active Genome Index for later interpretation.
Supported Sources
- VCF/gVCF: variant callsets with VCF records, genotype fields, optional depth/quality, and possible region callability.
- BAM: aligned sequencing reads. Genomi derives a local VCF from the reads with a matching reference FASTA, then builds an Active Genome Index for the derived callset for normal sample-specific tools.
- FASTQ (paired-end): raw reads from sequencing services such as Nebula, Dante Labs, and Sequencing.com. Genomi auto-detects the R2 sibling, picks minimap2 (long reads) or bwa-mem2 (short reads) by the median sniffed read length, sorts the aligned BAM with samtools, then hands the BAM off to the standard BAM → derived-VCF path. Requires the
wgs-alignmentinstall purpose (or aligner binaries on PATH); a missing aligner returnsrequires_library_installinstead of failing. - 23andMe raw genotype text or zip/tar archive: consumer SNP-array calls with
rsid, chromosome, position, and plus-strand genotype on GRCh37. - genome.computer
.genome/1.0bundle directory or archive withmanifest.json,schema.json, and partitionedvariants.parquetrecords. - AncestryDNA raw genotype text or zip/tar archive: consumer SNP-array calls with
rsid, chromosome, position,allele1, andallele2on GRCh37/build 37.1. - MyHeritage raw genotype CSV or zip/tar archive: comma-delimited
RSID,CHROMOSOME,POSITION,RESULTexports prefixed with a# MyHeritage DNA raw databanner, GRCh37. - FamilyTreeDNA Family Finder autosomal CSV or compressed/zip/tar archive: same
RSID,CHROMOSOME,POSITION,RESULTcolumns as MyHeritage but with no banner, build encoded in the filename (_o37_), GRCh37. - Living DNA autosomal text or zip/tar archive: tab-separated
rsid/chromosome/position/genotyperows with a# Living DNA customer genotype databanner on GRCh37.
VCF deliverables from named consumer sequencing services (Nebula Genomics, Dante Labs, Sequencing.com) are accepted through the generic VCF path; the source provider is detected from header signatures and surfaced as provider on the parse result.
Cross-Capability Synthesis
A scope-limited result from this capability is not a final user-facing answer when other Genomi capabilities can contribute orthogonal evidence to the same question. Returning "cannot answer" while applicable capabilities remain unexamined is a host-agent failure mode.
Tools
active_genome_index.classify_callset_qc
Classify genome callset shape, depth/quality field availability, and absence-claim boundaries using an Active Genome Index.
Use when: Use before broad Active Genome Index claims when the agent needs callset shape, QC fields, and absence-claim boundaries.
Why necessary: Broad Active Genome Index claims depend on whether the artifact actually contains the fields and coverage needed to support them.
active_genome_index.summarize
Summarize local parse/readiness/evidence state for an Active Genome Index.
Use when: The agent needs a compact status check for an Active Genome Index before deciding whether parsing, library-scoped evidence materialization, or evidence refresh is needed.
Why necessary: Agents need Active Genome Index readiness and artifact status before deciding whether to reuse, resume, materialize, or answer.
Example prompts: What Active Genome Index context is active?
Result semantics: Summarizes local Active Genome Index and evidence artifact state; it does not parse new input or perform interpretation.
active_genome_index.assign_user_genome
Assign an existing or supplied genome source to a user/profile and optionally make it that user's selected Active Genome Index.
Use when: A genome source or existing genomi agi should belong to a named user/profile.
Why necessary: One user can own multiple genome artifacts while selecting exactly one Active Genome Index as active for that profile.
Not for: Parsing a source into a complete Active Genome Index; use genomi.parse_source when digitization is needed.
Example prompts: Assign this VCF to Alice.
Result semantics: Links user metadata to genomi agi metadata. Supplying a source path grants scoped session access to that source's resolved Active Genome Index.
active_genome_index.clear_default_user
Clear persistent default user/profile selection for this GENOMI_HOME.
Use when: The user no longer wants any user/profile auto-selected by default.
Why necessary: Users need an explicit way to remove persistent default Active Genome Index context without deleting users or Active Genome Index artifacts.
Example prompts: Stop auto-selecting the default user.
Result semantics: Clears default=true from all known users; session selections and artifacts remain.
active_genome_index.list
List users and Active Genome Index records.
Use when: The user asks what AGIs or users exist, or gives a vague AGI lifecycle request that needs disambiguation before selecting exact records.
Result semantics: Returns structured users and active_genome_indexes; AGI records include IDs, hashes, names, typed source references, source metadata, linked users, readiness, and artifact availability. It does not approve private reads.
active_genome_index.remove
Remove confirmed Active Genome Index records, user/profile records, and Genomi-owned AGI artifacts.
Use when: The user has confirmed the exact AGI and/or user/profile record(s) to remove.
Result semantics: AGI targets remove the targeted AGI registry/session record, session access grant, user/profile AGI links, and Genomi-owned run artifacts. User targets remove user/profile metadata and default/session user selection; linked AGIs remain unless the same confirmed call also targets those AGIs. The original intake source and shared evidence database are not deleted.
genomi.parse_source
genomi.parse_source is a core genomi.* tool, documented in the root Genomi
skill (SKILL.md → "Parsing A Genome Source"). This skill drives the workflow
around it — select user, approve access, assign the parsed genome to a profile,
and lifecycle reparse — plus the active_genome_index.* interpretation tools.
active_genome_index.rename_user
Rename a user/profile nickname.
Use when: The user wants to rename a person/profile.
Why necessary: Human-friendly names belong to users, while Active Genome Index IDs remain stable hash-based artifact identifiers.
Example prompts: Rename this user to Alice.
Result semantics: Updates one user nickname. Active Genome Index artifact IDs are unchanged.
active_genome_index.select_user
Select a user/profile for this session without granting private artifact access.
Use when: The user names a person/profile and the agent needs to make that user's selected Active Genome Index the session metadata context.
Why necessary: Selecting another user should be metadata-only until active_genome_index.approve_access grants access to that user's selected Active Genome Index.
Example prompts: Use Alice's genome context.
Result semantics: Sets the selected user and selected Active Genome Index metadata; private reads still require scoped access approval unless this is the default user.
active_genome_index.set_default_user
Set the default user/profile for this GENOMI_HOME.
Use when: The user wants one profile's selected Active Genome Index available by default in every session.
Why necessary: Default access is scoped to a user's selected Active Genome Index rather than all genomes or all users.
Example prompts: Make Alice the default user.
Result semantics: Sets exactly one default user. Persistent private read access applies only to that user's active_agi_id.
Selection Notes
- Use
genomi.describe_contextto inspect selected session context. - If the user supplied a source file and the answer needs sample evidence, first
inspect whether the same source or a known complete Active Genome Index is
already selected. Use the existing complete Active Genome Index when available; call
genomi.parse_source --params '{"source":"<path>"}'only when no complete matching Active Genome Index exists or Genomi reports the Active Genome Index is incomplete. - If
genomi.parse_sourcereturnsstatus="in_progress"with ajob_id, keep pollinggenomi.check_background_jobfor that job. Do not switch to a capped parse or raw text scan as a substitute for the full active Active Genome Index unless the user explicitly asks for a temporary fallback. - Do not add
max_recordsfor user-facing inspection when a complete Active Genome Index may already exist. A capped parse is only an explicit sampling/debug choice, not the normal path for "anything notable?". - If a focused evidence tool returns
status="requires_library_install", explain what the named library enables for the user's intent and ask whether they want it installed. Do not treat missing library data as negative evidence. - If the user supplied a known
agi_id, callactive_genome_index.approve_access --params '{"approved_by_user":true,"agi_id":"..."}'only after explicit approval for this session. - If the user supplied a user nickname, call
active_genome_index.select_userfor metadata selection, then callactive_genome_index.approve_accessif sample evidence is needed and the selected user is not the default user. - For interpretation work, load the matching focused capability skill and call its capability tools through
genomi.invoke.
Boundaries
- Raw genome source files stay local.
- Durable Active Genome Index records in
GENOMI_HOMEbecome readable only when the session explicitly approves the resolvedagi_id, supplies a source path, or uses the default user's selected Active Genome Index. - VCF/gVCF parsing does not import public sources or build whole-callset static
artifacts. Use focused tools such as
clinvar.match_variants,active_genome_index.classify_genotype_support, orregion.retrieve_featureswhen that evidence is needed. BAM parsing also requires localsamtoolsandbcftools. - Consumer array calls support rsID/locus presence checks. Sequencing depth, genotype quality, phasing, and region callability come from sequencing-derived sources.
- If the user asks a tiny factual question and an Active Genome Index already exists, prefer
variant.resolvefrom the variant evidence skill to resolve the target and query the Active Genome Index. - If parsing already succeeded, the original file is an intake source. Future inquiries should normally use the Active Genome Index.
- For genetics questions outside Active Genome Index workflows, use Journal source-review memory, GWAS, or normal agent research without adding a routine source-status line.
Reference pass (variants_ready → completed)
A gVCF parse returns variants_ready once every variant is stored, then
appends the reference-block tail in a detached background job. At
variants_ready every variant query is correct; only "is this locus confirmed
reference vs not-callable" coverage answers are provisional (readiness and the
individual coverage/callability/genotype-support results carry
reference_pending). Don't reparse to "finish" it — poll
genomi.check_background_job with the surfaced job_id, or simply re-query
once readiness reports completed.
active_genome_index.build_reference_pass
Internal — do not invoke by hand. genomi.parse_source launches this
automatically as a background job after a gVCF reaches variants_ready, and
surfaces its job_id in the parse result's next_actions. It appends the
reference-block tail to the variants_ready index and flips it to completed.
It is idempotent (a no-op on an already-complete index). The only thing you do
with it is poll its job_id via genomi.check_background_job if the user is
waiting on reference-coverage answers.
After Parsing
Select the focused skill from the user intent:
- ClinVar discovery: ClinVar skill
- Specific variant/gene/rsID: variant evidence skill
- GWAS phenotype plus rsIDs: GWAS Catalog skill
- All-at-once dashboard / one-shot rundown: decode skill
Lifecycle: handle needs_reparse and schema_too_new automatically
genomi.describe_context (and every read op's error envelope) returns an
active_genome_index_readiness block with status and a structured reason code. The
agent must reconcile lifecycle state on its own before falling back to the
user.
status: needs_reparse (reason: active_genome_index_needs_reparse)
The on-disk Active Genome Index was built by an older Genomi runtime than the current
SCHEMA_VERSION. Reparse rebuilds it at the current schema.
- Read
active_genome_index.agi_intake_source_pathfromgenomi.describe_context. Checkactive_genome_index.availability.agi_intake_source_path. - If
availability.agi_intake_source_pathis true (path is still on disk), callgenomi.parse_source({"source": "<path-from-describe_context>"})without prompting the user — this is routine maintenance. - If
availability.agi_intake_source_pathis false (path moved or deleted), ask the user once: "Your Active Genome Index needs to be reparsed at the new schema, but the original source isn't at<recorded path>anymore. Send me the current path, or restore the file there." Wait for the user, then parse that path. - After reparse, call
genomi.describe_contextagain to confirmactive_genome_index_readiness.status == "complete". Then continue the original request (decode, variant lookup, PharmCAT, whatever the user asked for).
status: schema_too_new (reason: active_genome_index_schema_too_new)
The Active Genome Index was built by a newer Genomi than the current process. Do not reparse — that would downgrade the Active Genome Index. Tell the user the runtime is out of date and they need to upgrade Genomi.
Incomplete (missing objects)
Continue with what's available; surface honest "Not gathered" notes in any downstream artifacts. Do not silently substitute mock or placeholder data.
Context Checks
- Select the Active Genome Index from the session's source path, approved
agi_id, or default user. - Use an existing Active Genome Index when it answers the question.
- Use
variant.resolvefor rsID, allele, locus, or region checks after parsing. - Treat broad candidate inventories as triage inputs.
- Keep raw genome source content and broad match files local.
Version History
- 47e0d05 Current 2026-07-05 10:53


