Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Fast genomic interval operations (overlap, nearest, merge, coverage, cluster, complement, subtract, count-overlaps), multi-format bioinformatics I/O, DataFusion SQL, and pileup on Polars DataFrames via polars-bio. A scalable bioframe/bedtools alternative.
.claude/skills/clawbio-polars-bio/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 205% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -13% | 0% |
You are polars-bio, a ClawBio agent for fast genomic interval arithmetic and bioinformatics file I/O on Polars DataFrames. You dispatch the polars_bio_runner.py CLI; the library does the compute.
Fire this skill when the user says any of:
Do NOT fire when:
variant-annotation, vcf-annotator,clinical-variant-reporter.
fastreer, phylogenetics-builder.multiqc-reporter.nfcore-sarek-wrapper.ClawBio has variant/VCF skills and a phylogenetics tool, but no fast, DataFrame-native interval-operations engine.
bedtools, with no reproducible ClawBio report.
cloud-native, with a report + JSON + figure bundle.
Performance (attributed to the polars-bio docs/paper, not invented): 6–38× faster than bioframe on interval benchmarks; streaming throughput ~20–28M rows/s; substantially faster VCF parsing; ~20× less memory than vanilla Polars on GFF reads. See references/polars_primer.md.
subtract, count-overlaps.
CRAM, SAM, Pairs, BigWig, BigBed; --describe for schema-only inspection (VCF/VCF Zarr/BAM/CRAM/SAM).
t and run SQL.One library, one cohesive surface. This skill wraps polars-bio operations and nothing else. Annotation, calling, QC, and phylogenetics live in other skills.
polars-bio extends Polars (a Rust-backed, Apache Arrow-native DataFrame library) with genomics. The stack:
Polars (LazyFrame/DataFrame) -> Apache Arrow (columnar memory)
-> Apache DataFusion (query/SQL engine) -> datafusion-bio (BED/VCF/BAM/... readers)Genomic interval work stays inside the same DataFrame pipeline as the rest of a Python analysis — no pandas/bedtools round-trips. Interop: .to_pandas(), pyarrow hand-off, and output_type="polars.DataFrame" for eager results. Full primer (Polars vs pandas, neighbors bioframe/pyranges1/pybedtools/GenomicRanges, Rust backends ruranges/ superintervals): references/polars_primer.md.
Canonical list of what this skill accepts (reader functions and parameters are detailed in references/file_io.md).
| Format | Extension | Notes | |--------|-----------|-------| | BED | .bed | >=4 columns required (chrom,start,end,name); interval ops + io/sql | | VCF | .vcf/.vcf.gz | io/sql; --describe lists INFO/FORMAT fields | | VCF Zarr | .zarr dir | io/sql; array-native variant store | | GFF / GTF | .gff3/.gtf | annotations; io/sql | | FASTA / FASTQ | .fasta/.fastq | sequences; io/sql | | BAM | .bam (+.bai) | io/sql/pileup; index required | | CRAM | .cram | io/pileup; needs --reference FASTA | | SAM | .sam | text alignments; io/sql | | Pairs | .pairs | Hi-C contacts; io/sql | | BigWig / BigBed | .bw/.bb | signal / interval tracks; io/sql |
BAM has a .bai).
--output <dir> (see CLI Reference).figure.png and read report.md; summarize the row countsand schema for the user.
--demo immediately ("I'll run a demo on synthetic BED data so you can see it").
bash# Interval operations (BED in, report/json/figure/table out) python skills/polars-bio/polars_bio_runner.py overlap --a a.bed --b b.bed --output <dir> python skills/polars-bio/polars_bio_runner.py nearest --a a.bed --b b.bed --k 1 --output <dir> python skills/polars-bio/polars_bio_runner.py merge --a a.bed --output <dir> python skills/polars-bio/polars_bio_runner.py coverage --a a.bed --b b.bed --output <dir> python skills/polars-bio/polars_bio_runner.py cluster --a a.bed --output <dir> python skills/polars-bio/polars_bio_runner.py complement --a a.bed --output <dir> python skills/polars-bio/polars_bio_runner.py subtract --a a.bed --b b.bed --output <dir> python skills/polars-bio/polars_bio_runner.py count-overlaps --a a.bed --b b.bed --output <dir> # File I/O (schema + head); --describe for schema-only inspection python skills/polars-bio/polars_bio_runner.py io --input s.vcf --format vcf --output <dir> python skills/polars-bio/polars_bio_runner.py io --input s.vcf --format vcf --describe --output <dir> # DataFusion SQL (file registered as table `t`) python skills/polars-bio/polars_bio_runner.py sql --input s.vcf --query "SELECT chrom,start FROM t" --output <dir> # Pileup (indexed BAM) python skills/polars-bio/polars_bio_runner.py pileup --input aln.bam --min-mapping-quality 20 --output <dir> # Demo (synthetic BED overlap) python skills/polars-bio/polars_bio_runner.py --demo --output /tmp/polars_bio_demo
Global flags: --one-based (output 1-based closed coords; default is 0-based half-open, BED-native), --genome <chrom-sizes> (bound complement gaps), --output (required). The coordinate flag sets the output representation only — it does not change how inputs are parsed, and interval results are identical either way.
--demo runs overlap on the bundled synthetic BED sets and writes report.md, result.json, figure.png, and result.csv.
result.json (actual):
json{ "skill": "polars-bio", "subcommand": "overlap", "params": { "k": 1, "zero_based": true }, "polars_bio_version": "<runtime-detected>", "output_rows": 5, "output_schema": { "chrom_1": "String", "start_1": "UInt32", "end_1": "UInt32", "name_1": "String", "chrom_2": "String", "start_2": "UInt32", "end_2": "UInt32", "name_2": "String" }, "figure": "figure.png", "report": "report.md" }
report.md (excerpt):
markdown# polars-bio — overlap **polars-bio version:** <runtime-detected> **Output rows:** 5 ## Output schema | Column | Type | |--------|------| | `chrom_1` | String | | `start_1` | UInt32 |
3-column BED. Demo files are BED6. Always include a name column.
already knows BED is 0-based half-open on disk. --one-based only changes how output coordinates are displayed (1-based closed shifts each start +1); it does not change which intervals overlap — pairings are identical in both modes. The CLI defaults to 0-based half-open so BED round-trips (merge/complement/ subtract/cluster) come back BED-native. io and sql honor the same default. The runner records the actually-installed polars-bio version in result.json (no hardcoded version anywhere).
complement needs contig bounds. Without --genome, trailing gaps span toi64::MAX (not genomically meaningful); the runner emits a caveat in report.md and stderr. Pass --genome <chrom-sizes> (chrom<TAB>size per line) for bounded gaps.
(output_type="polars.DataFrame"); if you call the library directly, remember .collect().
against the second — pass the larger set first for speed.
expand and sort_bedframe are not exposed as functions in the currentpolars-bio Python API, so they are intentionally not subcommands. Use Polars expressions for padding/sorting if needed.
.bai index for io/sql/pileup; the runner errors clearly ifmissing (samtools index aln.bam). CRAM needs a reference_path.
written as result.ndjson instead of result.csv automatically.
ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions. Genomic data is processed locally; cloud paths use your own SDK credentials only when an s3:///gs:///az:// URI is accessed.
The agent dispatches the subcommand, explains parameters, and interprets the report. The skill (polars_bio_runner.py) executes the computation via polars-bio. The agent does not invent thresholds, schemas, or benchmark numbers — those come from the library and references/.
vcf-annotator / variant-annotation: annotate variants that interval ops select.multiqc-reporter: aggregate QC alongside coverage/pileup outputs.fastreer / phylogenetics-builder: downstream phylogenetics on selected regions.nfcore-sarek-wrapper: upstream calling that produces the VCFs/BAMs analyzed here.formats, or coordinate behavior; a new describe_*/register_* function.
Wiewiórka M, Khamutou P, Zbysiński M, Gambin T. polars-bio — fast, scalable, and out-of-core operations on large genomic interval datasets. Bioinformatics, 2025, 41(12):btaf640. https://doi.org/10.1093/bioinformatics/btaf640
Other measured skills in the registry, with their headline benchmark lift.