k-dense-ai/scientific-agent-skills/pysam
- community
Checking that the SKILL.md file is still in the repository.
Provides Python/HTSlib workflows for genomic files. Used when reading, querying, filtering, or writing SAM/BAM/CRAM, VCF/BCF, FASTA/FASTQ, or tabix data with pysam, including pileup, coverage, indexing, and CRAM references.
Install
npx vskill@latest install k-dense-ai/scientific-agent-skills/pysamSKILL.md
pysam
Overview
Use pysam for low-level, streaming access to HTSlib-supported genomic formats:
AlignmentFileandAlignedSegmentfor SAM/BAM/CRAMVariantFile,VariantHeader, andVariantRecordfor VCF/BCFFastaFilefor indexed FASTA andFastxFilefor sequential FASTA/FASTQTabixFilefor BGZF-compressed, tabix-indexed BED/GFF/GTF/custom tablespysam.samtoolsandpysam.bcftoolsfor wrapped command dispatchers
Current upstream baseline: pysam 0.24.1 (7 September 2026), wrapping HTSlib/samtools/bcftools 1.24. Read references/sources.md before updating version-specific guidance.
Installation
Use the pinned release for reproducible work:
Confirm the runtime:
Prebuilt wheels are available for supported macOS and Linux platforms. A source build needs a C compiler and HTSlib build dependencies; read the official installation guide linked from references/sources.md.
First Decide
Before writing code:
- Identify the real format, compression, sort order, and available index.
- Decide whether coordinates are numeric Python coordinates or a region
string. Do not mix them.
- For CRAM, identify the exact reference assembly and FASTA.
- Prefer indexed region access; use sequential iteration only when intended.
- Preserve headers when writing and write to a new path by default.
- State filtering semantics: mapping/base quality, flags, overlap handling,
duplicate handling, and pileup depth cap.
For unfamiliar files, start with the bundled read-only inspector:
Bundled Scripts
| Script | Purpose | Typical call | |
|---|---|---|---|
scripts/inspect_hts.py | Metadata-only inspection for alignment, variant, FASTA, FASTQ, and tabix files | python scripts/inspect_hts.py sample.cram --reference ref.fa | |
scripts/alignment_qc.py | Streaming aggregate read/QC counts as JSON | python scripts/alignment_qc.py sample.bam --max-records 100000 | |
scripts/variant_summary.py | Streaming variant, FILTER, and genotype summary as JSON | python scripts/variant_summary.py cohort.vcf.gz --region chr1:1-1000000 | |
scripts/filter_alignments.py | Filter SAM/BAM/CRAM without changing record order | python scripts/filter_alignments.py input.bam output.bam --exclude-secondary |
All scripts refuse to overwrite existing outputs. The filter also refuses stale output indexes and offers --index --csi for large BAM contigs. FASTA inspection requires an existing .fai; create it explicitly with pysam.faidx() first. Run each with --help for coordinate, index, and privacy notes.
Examples use illustrative filenames and assay-specific thresholds. The local synthetic suite exercises these API patterns on pysam 0.24.1; remote storage and biological datasets are not part of that validation.
Coordinate Contract
Numeric coordinates accepted by pysam APIs are 0-based, half-open. This includes numeric AlignmentFile.fetch(), VariantFile.fetch(), FastaFile.fetch(), TabixFile.fetch(), and pileup() arguments.
Region strings are samtools-style: 1-based and inclusive.
VCF text uses 1-based POS, while record properties expose both systems:
Read references/coordinates_and_indexing.md for format conversions, overlap semantics, index choices, and contig-name checks.
Alignment Files
Use context managers and explicit modes:
Use fetch(until_eof=True) to stream every record in file order, including unplaced unmapped reads, without requiring an index:
Important distinctions:
fetch()returns placed alignment records overlapping a region; even an
unmapped-flagged record can have a reference position. Filter is_unmapped.
count()counts records and defaults toread_callback="nofilter".count_coverage()returns A/C/G/T base counts and defaults to base quality
15 plus read_callback="all".
pileup()exposes per-column reads and has its own filtering, base-quality,
overlap, orphan, and max_depth=8000 defaults.
For exact-region pileups, set truncate=True and explicit filters:
Read references/alignment_files.md for flags, CIGAR operations, tags, modified bases, writing records, pileup details, and iterator lifetime.
Variant Files
Input format is auto-detected. Numeric fetch coordinates remain 0-based:
Subset samples before retrieving records:
When changing a header, copy each record and translate it to the destination header before assigning newly declared INFO/FORMAT/FILTER fields. Do not manually clear and rebuild header.samples.
Read references/variant_files.md for safe headers, writing, sample subsetting, missing genotypes, symbolic alleles, filtering, translation, and indexing.
FASTA, FASTQ, and Tabix
Indexed FASTA uses numeric 0-based coordinates:
FastxFile is sequential. persist=False is faster but yielded records become invalid after iteration advances:
Tabix input must be coordinate-sorted and BGZF-compressed, not ordinary gzip. Use a non-destructive two-step workflow:
Read references/sequence_files.md for FASTA/FASTQ records and safe tabix creation.
CRAM, Remote I/O, and Threads
pysam 0.24 changed inherited HTSlib behavior:
- Newly written CRAM defaults to CRAM 3.1, not 3.0.
- HTSlib no longer contacts the EBI reference server by default.
- Prefer
reference_filename="reference.fa"for deterministic local reads and
writes.
Only configure REF_PATH/REF_CACHE when reference-by-MD5 lookup is intentional. Do not assume a CRAM is self-contained. threads= accelerates compression/decompression; it does not parallelize Python analysis.
Read references/cram_and_performance.md before CRAM conversion, remote access, or concurrent iteration.
Wrapped samtools and bcftools
Import command modules explicitly. Pass each command-line token as a separate string:
Dispatchers capture stdout by default. For large or binary output, use the tool's -o option with catch_stdout=False, or save_stdout=..., rather than returning the complete output in memory.
Use the Python API for record-level logic and dispatchers for mature bulk operations such as sort, index, merge, view, and normalization. Never compose dispatcher arguments by splitting an untrusted shell command.
Writing Rules
- Copy or construct a valid header before opening output.
- Write to a new path; do not use
force=Trueunless replacement is explicit. - Preserve sort order if the output will be indexed.
- Set
query_sequencebeforequery_qualities. - Prefer
pysam.CIGAR_OPSenum members; top-level constants such as
pysam.CMATCH are compatibility aliases slated for future removal.
- Use
pysam.samtools.quickcheck()as a fast alignment header/EOF preflight;
it does not read the middle of the file and cannot rule out internal corruption. When full readability must be established, perform a complete sequential decode with the matching CRAM reference and compare expected counts/checksums. Reopen variant/sequence outputs before downstream use. See the samtools quickcheck contract.
- Use CSI rather than BAI/TBI when references or coordinates exceed legacy
index limits.
Reference Map
| Need | Read | |
|---|---|---|
| Alignment API, flags, CIGAR, pileup, modified bases | references/alignment_files.md | |
| VCF/BCF headers, records, samples, writing | references/variant_files.md | |
| FASTA/FASTQ and tabix-indexed tables | references/sequence_files.md | |
| Coordinate conversion and index selection | references/coordinates_and_indexing.md | |
| CRAM references, remote I/O, threads, performance | references/cram_and_performance.md | |
| Correct integrated analysis patterns | references/common_workflows.md | |
| Compact current API signatures and defaults | references/api_reference.md | |
| Upgrade notes for existing environments | references/migration_to_0_24.md | |
| Official docs, specifications, and release sources | references/sources.md |
Common Failure Modes
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/pysam/SKILL.md
Popularity
- Repository stars
- 32,274
- Repository forks
- 3,200
- 7-day trend score
- 52
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 31 Jul 2026, 2 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/k-dense-ai/scientific-agent-skills/pysam)