Automated scRNA-seq cell type annotation via pre-trained logistic regression. 45+ models: immune, gut, lung, brain, fetal, cancer microenvironments. Input normalized AnnData; outputs per-cell labels, majority-vote cluster labels, confidence scores.
SkillScore100Maintained
Automatic
◆Research pack
Last verified 9/3/2026
What it changes
Passed 21 of 21 test cases with the skill, and 11 of 21 without it.
Without skill50%
With skill100%
Checks it passed that the model alone missed
Sets p_thres=0.5 in celltypist.annotate.
Sets majority_voting=True during annotation.
Sets mode='prob match' in celltypist.annotate.
and 15 more in the full report
11 fixed11 passed either way0 still failing0 broke
Pass-rate lift
+50 pp
Tokens
+163%
Agent turns
0%
Response time
-24%
Model gemini-3.6-flashMeasured 9/3/2026v2 · latest is v322 of 22 cases passed with skill · 21 comparable
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
See it in action
One of 10 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 10
Prompt
I want to annotate my AnnData object, but I want to ensure that cells with classification confidence probability below 0.5 are explicitly assigned as 'Unassigned' rather than forcing a best match label. Write the annotation function call with the appropriate arguments.
What was checked, without and with the skill
Checked
Without skill
With skill
Sets p_thres=0.5 in celltypist.annotate.
Missed
Passed
Sets mode='prob match' in celltypist.annotate.
Missed
Passed
case-12 · gemini-3.6-flash · 9/3/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md482 linessingle file
CellTypist Cell Type Annotation
Overview
CellTypist is an automated cell type classifier for single-cell RNA-seq data built on logistic regression models trained on curated reference atlases. Given a normalized AnnData object, it predicts cell type labels at the single-cell level and optionally applies majority voting within user-defined clusters to produce consensus, biologically coherent annotations. The tool ships with 45+ ready-to-use models spanning pan-immune, organ-specific, and developmental contexts, and supports training custom models from labeled data.
When to Use
Annotating PBMC, whole-blood, lymph node, or other immune cell datasets using a single standardized reference model
Generating a first-pass cell type annotation before manual curation with canonical marker genes
Annotating cluster-level cell types in published or in-house datasets using majority voting to smooth noisy per-cell predictions
Comparing annotation results across multiple tissue-specific models to determine the most biologically relevant reference
Training a custom CellTypist model from a labeled reference dataset for a tissue or species not covered by pre-built models
Quantifying annotation confidence to flag low-certainty cells (confidence score < 0.5) for manual review or exclusion
Use omics-plotting SKILL for generic result-table figures; UMAP/dotplot annotation views use scanpy sc.pl.*
Use scVI/scANVI (scvi-tools-single-cell) instead when you need probabilistic label transfer with batch correction and uncertainty quantification via a variational autoencoder
Use popV (popv-cell-annotation) instead when you want ensemble consensus from 10+ methods including deep learning and KNN-based approaches
Data requirements: AnnData with normalized, log1p-transformed counts in adata.X (10,000 UMIs per cell target sum). Raw counts must be normalized before calling CellTypist
Environment: Python 3.8+; 8 GB RAM sufficient for most datasets; internet access required for model downloads (first run only)
pip install celltypist "scanpy[leiden]" anndata
Pre-flight Interview
Settle these with the user before writing any analysis code.
decisions:
- id: D1
param: annotationStrategy
kind: required
source: user
ask: "Name cell types from canonical markers by hand over the clusters, transfer them from a pre-trained model, or do both and compare the two?"
default: "transfer from a model, then confirm against markers"