Scanpy Single-Cell Analysis
davila7/claude-code-templates
Walks through single-cell RNA-seq analysis with Scanpy: loading .h5ad and 10X data, QC, normalization, PCA and UMAP, Leiden clustering, marker genes and cell type annotation.
Loads spatial transcriptomics data from Visium, Visium HD, Xenium, MERFISH/MERSCOPE, CosMx, Slide-seq/Curio, and Stereo-seq into AnnData or SpatialData using spatialdata-io and Squidpy.
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-io --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .claude/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .claude/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-ioType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-io --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .agents/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .agents/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-io --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .cursor/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .cursor/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/GPTomics/bioSkills.git --path spatial-transcriptomics/spatial-data-io--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-io --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .gemini/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .gemini/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-ioInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .github/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .github/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .github/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install GPTomics/bioSkills bio-spatial-transcriptomics-spatial-data-io --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/spatial-transcriptomics/spatial-data-io .opencode/skills/bio-spatial-transcriptomics-spatial-data-io && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "bio-spatial-transcriptomics-spatial-data-io" agent skill from https://github.com/GPTomics/bioSkills/tree/main/spatial-transcriptomics/spatial-data-io into .opencode/skills/bio-spatial-transcriptomics-spatial-data-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bio-spatial-transcriptomics-spatial-data-io", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
bio-spatial-transcriptomics-spatial-data-ioLoads spatial transcriptomics data from Visium, Visium HD, Xenium, MERFISH/MERSCOPE, CosMx, Slide-seq/Curio, and Stereo-seq into AnnData or SpatialData using spatialdata-io and Squidpy.
Bio Spatial Transcriptomics Spatial Data Io is an agent skill from GPTomics/bioSkills. Loads spatial transcriptomics data from Visium, Visium HD, Xenium, MERFISH/MERSCOPE, CosMx, Slide-seq/Curio, and Stereo-seq into AnnData or SpatialData using spatialdata-io and Squidpy. Use when deciding which platform class is in hand (imaging/in-situ vs sequencing/capture), which reader matches the platform (spatialdataio.xenium/merscope/cosmx vs squidpy.read.visium/vizgen/nanostring), whether to work from the per-transcript molecule table (the re-segmentable source of truth) or the segmentation-derived…
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `examples/load_visium.py` and `usage-guide.md`).
It sits in Research & Science, covering Bioinformatics. It works with AnnData. The repository describes itself as: a set of SKILLS.md for doing bioinformatics with agents like claude code. The licence is MIT.
Read from SKILL.md and the folder at commit d91ed3d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
gitpipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Bio Spatial Transcriptomics Spatial Data Io loads about 4.2k tokens when it runs. Until then it costs about 194 tokens; SKILL.md has 1,740 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from GPTomics/bioSkills at commit d91ed3d, republished under its MIT licence (© GPTomics). 1,740 words, ~4,226 tokens.
.claude/skills/bio-spatial-transcriptomics-spatial-data-io/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Reference examples tested with: spatialdata 0.2+, spatialdata-io 0.1.5+, squidpy 1.4+, scanpy 1.10+, anndata 0.10+
Before using code patterns, verify installed versions match. If versions differ:
pip show <package> then help(module.function) to check signaturesIf code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.
"Load my spatial data" -> Parse a platform's output bundle into one coordinate frame holding the expression matrix, coordinates, images, and (for imaging) the molecule table and segmentation shapes.
spatialdata_io.{xenium, merscope, cosmx} -> SpatialData with a per-transcript points table AND a derived per-cell tables matrix.squidpy.read.visium or spatialdata_io.{visium, visium_hd, curio, stereoseq} -> spot/bin matrix + coordinates; NO molecule table.The single most consequential I/O fact is that the two platform classes emit different primary objects, and one class emits two of them that are easy to confuse.
Imaging/in-situ platforms emit TWO physically distinct primary objects. The first is a per-TRANSCRIPT molecule table -- one row per decoded molecule with x, y (and often z), gene, a decoding-quality value, and a cell-assignment-or-unassigned. The second is a per-CELL expression matrix, genes-by-cells, DERIVED by overlaying a segmentation and counting the molecules that fall inside each boundary. The matrix looks exactly like scRNA-seq and is therefore wrongly trusted as ground truth, but it is a downstream product: it inherits every segmentation error and is usually quality-filtered (Xenium keeps Q>=20 in the matrix while the transcript table keeps everything). The molecule table is the source of truth and the ONLY object that lets the analyst re-segment, recover unassigned molecules, or do subcellular work. A loader that returns only the cell matrix has silently discarded the re-segmentable layer.
Sequencing/capture platforms (Visium, Slide-seq, Stereo-seq) have NO molecule table -- a spot/bead/bin is mini-bulk over the cells beneath it, captured as a single barcoded profile. Do not go looking for a transcript table that does not exist; the only objects are the barcode-by-gene matrix, the coordinates, and the tissue image.
A second trap is coordinate frames. Images, spot/cell coordinates, and molecule points each live in their own intrinsic pixel or array axes; overlaying transcripts on histology, or building a neighbor graph with a micron radius, requires the right transform (Visium scalefactors; imaging micron-to-pixel matrices). SpatialData makes the frames explicit (intrinsic vs a shared extrinsic "global" system); the legacy AnnData layout hides them in uns['spatial'][library_id]['scalefactors']. Mixing frames silently places points off the image or builds a graph at the wrong scale.
The first question of any spatial dataset is which side of the fork it sits on, because it decides what objects exist and what the rest of the pipeline must do.
| Class | Platforms | Primary objects | Molecule table? | Cell unit | Downstream |
|---|---|---|---|---|---|
| Imaging / in-situ | Xenium, MERSCOPE/MERFISH, CosMx, seqFISH | molecule table + segmentation-derived cell matrix + images + shapes | YES (source of truth) | from segmentation (a hypothesis) | segment, then label-transfer typing |
| Sequencing / capture | Visium, Visium HD, Slide-seq/Curio, Stereo-seq, GeoMx | barcode/bin-by-gene matrix + coordinates + image | NO | spot/bin = 1-10-cell MIXTURE (GeoMx ROI = many-cell region; sub-cell bins = fraction of a cell) | deconvolution (or bin/segment-up for sub-cell bins) |
Each toolkit is a strategy for co-storing four things in one frame: an expression matrix, geometry (spot circles, cell/nucleus polygons, centroids), raster images (H&E, DAPI, multiplex IF -- often gigapixel), and (imaging only) the molecule point cloud. They differ in how separately they keep these and which is the forward path.
| Framework (language) | Core object | Molecule table | Per-cell matrix | Segmentation geometry | Images | Best when |
|---|---|---|---|---|---|---|
| SpatialData / scverse (Python) | SpatialData of elements | points (dask -> Parquet) | tables (AnnData) | labels (masks) + shapes (geopandas polygons) | images (xarray, OME-NGFF/Zarr, lazy) | Multimodal, larger-than-memory, multiple platforms in one store; re-segmentation |
| Squidpy + AnnData (Python) | AnnData | via SpatialData/readers | adata.X | in obs/external | uns['spatial'] (legacy) | Standard AnnData spatial graph stats on spot or cell matrices |
| Seurat v5 (R) | Seurat, geometry in @images | FOV@molecules | Assay5 counts | FOV@boundaries (Centroids + Segmentation) | platform SpatialImage | R single-cell users; v5 integration |
| SpatialExperiment / SFE-Voyager (Bioc, R) | SpatialExperiment / SpatialFeatureExperiment | rowGeometries (sf points, SFE only) | SCE assay | colGeometries (cellSeg/nucSeg/spotPoly) | imgData() | Bioconductor scran/scater; geospatial ESDA (Moran's I) |
| Giotto Suite (R) | giotto (multi-scale) | subcellular molecule layer | aggregated cell layer | polygon/cell layers | image layers | One technology-agnostic object spanning molecule -> cell -> region |
SpatialData is the forward-path Python standard because it is the only framework that natively keeps the molecule table, multiscale OME-NGFF images, and segmentation shapes as first-class, frame-aware elements. Because a SpatialData table IS an AnnData, all of squidpy.gr.* runs on it unchanged.
| Platform | spatialdata-io reader | squidpy.read | Key I/O fact |
|---|---|---|---|
| Visium | visium | visium | spot, no molecule table; tissue_positions.csv gained a header at Space Ranger v2.0 (readers handle both) |
| Visium HD | visium_hd | -- | bins (2/8/16um); tissue_positions.parquet (PARQUET, not CSV); 8um bin still spans ~2 cells |
| Xenium | xenium | -- (none) | molecule table transcripts.parquet (all Q) + Q>=20 cell matrix; needs experiment.xenium manifest |
| MERSCOPE / MERFISH | merscope | vizgen | there is NO merfish reader -- merscope handles both; boundaries went hdf5-folder -> single cell_boundaries.parquet at instrument SW v232 |
| CosMx | cosmx | nanostring | flat CSVs with a run/slide prefix; tx_file (molecule table) absent for protein-only panels |
| Slide-seq / Curio | curio | -- (none) | bead, no molecule table |
| Stereo-seq | stereoseq | -- | DNB sub-cellular; binned up to cells |
squidpy.read provides ONLY visium, vizgen, and nanostring -- it has no xenium or slideseq reader. For Xenium, Slide-seq/Curio, Stereo-seq, and Visium HD, use the spatialdata_io reader. scanpy.read_visium is deprecated as of scanpy 1.11 -- prefer squidpy.read.visium (identical obsm/uns layout) or spatialdata_io.visium.
Goal: Read a Space Ranger bundle into an AnnData with coordinates, image, and scalefactors, without reaching for the deprecated scanpy reader.
Approach: Use squidpy.read.visium; coordinates land in obsm['spatial'] (pixels of the full-res image), image and scalefactors in uns['spatial'][library_id].
import squidpy as sq
adata = sq.read.visium('spaceranger_out/') # filtered matrix + spatial/; NOT a cell -- each spot is a 1-10-cell mixture
library_id = list(adata.uns['spatial'].keys())[0]
scalef = adata.uns['spatial'][library_id]['scalefactors']
# obsm['spatial'] is in FULL-RES pixels; multiply by tissue_hires_scalef to index the hires image
print(adata.n_obs, 'spots', adata.n_vars, 'genes', '| spot diameter (px):', scalef['spot_diameter_fullres'])Goal: Load Xenium (or MERSCOPE/CosMx) so BOTH the per-transcript molecule table and the derived cell matrix are available, not just the matrix.
Approach: Use the spatialdata_io reader, which returns a SpatialData object; the molecule table lives in sdata.points, the cell matrix in sdata.tables, segmentation polygons in sdata.shapes, images in sdata.images. Inspect element names with print(sdata) -- they vary by platform and reader version.
import spatialdata_io as sdio
sdata = sdio.xenium('xenium_out/') # needs experiment.xenium manifest
print(sdata) # lists points/tables/shapes/images element names
transcripts = sdata.points['transcripts'] # dask DataFrame: x, y, z, feature_name, qv, cell_id -- ALL Q-scores
adata = sdata.tables['table'] # AnnData cell matrix -- Q>=20 filtered, inherits segmentation error
# the matrix is a DERIVED product; the molecule table is the re-segmentable source of truth
print('molecules:', transcripts.shape[0].compute(), '| cells in matrix:', adata.n_obs)For MERSCOPE substitute sdio.merscope('merscope_out/'); for CosMx sdio.cosmx('cosmx_out/'). As an AnnData-only alternative for MERSCOPE, sq.read.vizgen(path, counts_file='cell_by_gene.csv', meta_file='cell_metadata.csv') returns the cell matrix but discards the molecule table.
Goal: Load Visium HD bins, Slide-seq/Curio beads, or Stereo-seq into a SpatialData object.
Approach: Use the matching spatialdata_io reader; none of these has a molecule table, and Visium HD / Stereo-seq bins are smaller than a cell (the inverse-of-deconvolution regime -- see spatial-deconvolution).
import spatialdata_io as sdio
sdata_hd = sdio.visium_hd('visium_hd_out/') # tissue_positions are PARQUET; pick a bin (8um default still ~2 cells)
sdata_ss = sdio.stereoseq('stereoseq_out/') # DNB sub-cellular spots, binned up to cells
sdata_bead = sdio.curio('slideseq_out/') # Slide-seq/Curio beads; ~1 cell but ~1/3 carry >=2 typesGoal: Confirm whether coordinates are in pixels or microns before building a graph or overlaying on histology, so a neighbor radius or a plotted point lands at the right scale.
Approach: In SpatialData read the element transformations (intrinsic vs the shared "global" extrinsic frame); in the AnnData layout read the scalefactors. Never assume obsm['spatial'] units -- Visium is full-res pixels, most imaging readers place a micron "global" frame.
from spatialdata.transformations import get_transformation
# SpatialData: every element carries transforms into shared coordinate systems
print(sdata.coordinate_systems) # e.g. ['global']
print(get_transformation(sdata['transcripts'], get_all=True)) # intrinsic -> global (often micron scaling)Goal: Extract the cell/spot matrix as a plain AnnData for tools that expect one, while keeping coordinates.
Approach: Copy the table, set obsm['spatial'] from the matching shapes/centroids. Persist via sdata.write(...) ONLY to a scratch path -- a .zarr store is a DIRECTORY, not a file, so it must never be committed.
adata = sdata.tables['table'].copy()
# write a zarr STORE (a directory) to scratch, never the repo; rm -rf when done
# sdata.write('/tmp/scratch/store.zarr')| Symptom | Cause | Fix |
|---|---|---|
AttributeError: module 'squidpy.read' has no attribute 'xenium' (or slideseq) | squidpy.read only has visium, vizgen, nanostring | Use spatialdata_io.xenium / spatialdata_io.curio for those platforms |
spatialdata_io has no merfish reader | The reader is named for the instrument, not the chemistry | Use spatialdata_io.merscope (handles MERFISH and MERSCOPE) |
DeprecationWarning / future removal on scanpy.read_visium | Deprecated as of scanpy 1.11 | Use squidpy.read.visium or spatialdata_io.visium (same layout) |
| Cell matrix has far fewer transcripts than the molecule table | Imaging cell matrix is Q>=20 filtered and segmentation-derived | Treat the matrix as provisional; use sdata.points (all Q) to re-segment or audit |
| Trusting the cell matrix as ground truth; weird co-expression | The matrix inherits all segmentation/spillover error | Validate against the molecule table; re-segment (see image-analysis) |
| Looking for a transcript table in Visium/Slide-seq and finding none | Capture platforms have no molecule table | Stop -- a spot is mini-bulk; there is nothing to re-segment |
Visium HD reader fails reading tissue_positions.csv | Visium HD positions are PARQUET (tissue_positions.parquet) | Use spatialdata_io.visium_hd, which expects the parquet bundle |
| Older Visium positions parse with a shifted header | tissue_positions.csv gained a header at Space Ranger v2.0 | Current readers handle both; upgrade spatialdata-io/squidpy if parsing legacy files |
| MERSCOPE boundaries not found | hdf5-folder boundaries became single cell_boundaries.parquet at SW v232 | Match reader version to instrument software; point at the parquet if present |
Seurat @coordinates slot missing (R interop) | Seurat 5.1 VisiumV2 has no coordinates slot (V1 did) | Use GetTissueCoordinates(); there is no V1->V2 converter |
| Transcripts plot off the image | Points and image in different frames/units (pixel vs micron) | Apply the reader's transform / scalefactor before overlaying |
A stray .zarr directory left in the repo after writing | sdata.write makes a directory store; git status hides untracked dirs | Write to scratch; rm -rf the store; run `git status --porcelain |
© GPTomics, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in spatial-transcriptomics/spatial-data-io of GPTomics/bioSkills.
Open the folder on GitHubat commit d91ed3d
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in GPTomics/bioSkills, which our catalogue first saw on October 7, 2026.
Bio Spatial Transcriptomics Spatial Data Io next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Bio Spatial Transcriptomics Spatial Data Io this skillGPTomics/bioSkills | 1.2k | 1 repos | ~4.2k | Automated safety check: Pass | MIT | |
| Scanpy Single-Cell Analysisdavila7/claude-code-templates | 32k | 16 repos | ~2.8k | Automated safety check: Pass | MIT | |
| ScgptJimLiu/science-skills | 227 | 4 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| PyDESeq2 Differential Expressiondavila7/claude-code-templates | 32k | 12 repos | ~4k | Automated safety check: Pass | MIT | |
| Anndatadavila7/claude-code-templates | 32k | 12 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Single-Cell Initial AnalysisLigphiDonk/Oh-my--paper | 738 | 1 repos | ~1.4k | Automated safety check: Pass | MIT |
davila7/claude-code-templates
Walks through single-cell RNA-seq analysis with Scanpy: loading .h5ad and 10X data, QC, normalization, PCA and UMAP, Leiden clustering, marker genes and cell type annotation.
JimLiu/science-skills
Embed and annotate single-cell expression data with scGPT, a foundation model for single-cell biology.
davila7/claude-code-templates
Runs differential gene expression analysis on bulk RNA-seq counts with PyDESeq2: design formulas, Wald tests, FDR correction and volcano or MA plots.
davila7/claude-code-templates
This skill should be used when working with annotated data matrices in Python, particularly for single-cell genomics analysis, managing experimental measurements with metadata, or handling…
LigphiDonk/Oh-my--paper
Runs a seven-step quality-control and exploration pipeline on scRNA-seq, CyTOF or flow cytometry data and writes a plain-language report of what it found.
harrisongzhang/TheVirtualBiotech
Single-cell RNA-seq data preparation and quality control pipeline.
GPTomics/bioSkills
Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO.
GPTomics/bioSkills
Installs the bioSkills collection of 425 bioinformatics skills in one step, or only chosen categories, so sequencing, RNA-seq, single-cell and variant tasks get specialized help.
GPTomics/bioSkills
Write biological sequences to files (FASTA, FASTQ, GenBank, EMBL) using Biopython Bio.SeqIO.
GPTomics/bioSkills
Soft- or hard-clips PCR primer footprints from aligned amplicon BAMs so primer bases stop masquerading as confirmed reference sequence.
GPTomics/bioSkills
Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam.
GPTomics/bioSkills
Sort alignment files by coordinate or read name using samtools and pysam.
Works with
Categories
Loads spatial transcriptomics data from Visium, Visium HD, Xenium, MERFISH/MERSCOPE, CosMx, Slide-seq/Curio, and Stereo-seq into AnnData or SpatialData using spatialdata-io and Squidpy. Bio Spatial Transcriptomics Spatial Data Io is an agent skill from GPTomics/bioSkills. Loads spatial transcriptomics data from Visium, Visium HD, Xenium, MERFISH/MERSCOPE, CosMx, Slide-seq/Curio, and Stereo-seq into AnnData or SpatialData using spatialdata-io and Squidpy.
Bio Spatial Transcriptomics Spatial Data Io fits situations like: deciding which platform class is in hand (imaging/in-situ vs sequencing/capture); which reader matches the platform (spatialdataio.xenium/merscope/cosmx vs squidpy.read.visium/vizgen/nanostring); whether to work from the per-transcript molecule table (the re-segmentable source of truth); the segmentation-derived per-cell matrix (quality-filtered.
Run `npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a claude-code`. Or copy the skill folder (spatial-transcriptomics/spatial-data-io in GPTomics/bioSkills) into .claude/skills/bio-spatial-transcriptomics-spatial-data-io in your project. Claude Code loads it when a task matches its description.
Run `npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a codex`. Or copy the skill folder (spatial-transcriptomics/spatial-data-io in GPTomics/bioSkills) into .agents/skills/bio-spatial-transcriptomics-spatial-data-io in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GPTomics/bioSkills --skill bio-spatial-transcriptomics-spatial-data-io -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bio-spatial-transcriptomics-spatial-data-io, .gemini/skills/bio-spatial-transcriptomics-spatial-data-io, .github/skills/bio-spatial-transcriptomics-spatial-data-io and .opencode/skills/bio-spatial-transcriptomics-spatial-data-io in your project.
Going by SKILL.md and its folder, Bio Spatial Transcriptomics Spatial Data Io needs Python for the scripts in its folder and the command-line tools its instructions call (git and pip). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Bio Spatial Transcriptomics Spatial Data Io is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Bio Spatial Transcriptomics Spatial Data Io: Scanpy Single-Cell Analysis (davila7/claude-code-templates, 32k stars), Scgpt (JimLiu/science-skills, 227 stars), PyDESeq2 Differential Expression (davila7/claude-code-templates, 32k stars) and Anndata (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
GPTomics (a GitHub organization) maintains it in GPTomics/bioSkills, which has 1,215 GitHub stars. The repository holds 553 skills in this directory. The repository was last updated on August 15, 2026.
Source: GPTomics/bioSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.