[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-scrna-seq-qc":3,"mdc--wu3q91-key":36,"related-repo-openai-scrna-seq-qc":614,"related-org-openai-scrna-seq-qc":737},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"scrna-seq-qc","process and visualize single-cell RNA-seq data","Process, quality-control, annotate, and visualize single-cell or single-nucleus RNA-seq datasets across tissues and species. Use when Codex needs to build, adapt, or review a general scRNA-seq QC pipeline; choose dataset-appropriate cell-level filters from QC distributions; run required scDblFinder-based doublet and ambient-RNA filtering; annotate cells with matched references or marker-based fallbacks; or generate global and per-group UMAP visualizations for large scRNA-seq datasets.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Data Pipeline","data-pipeline","tag",{"name":17,"slug":18,"type":15},"Data Analysis","data-analysis",{"name":20,"slug":21,"type":15},"Bioinformatics","bioinformatics",{"name":23,"slug":24,"type":15},"RNA-seq","rna-seq",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-06-30T19:00:57.102",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fngs-analysis\u002Fskills\u002Fscrna-seq-qc","---\nname: scrna-seq-qc\ndescription: Process, quality-control, annotate, and visualize single-cell or single-nucleus RNA-seq datasets across tissues and species. Use when Codex needs to build, adapt, or review a general scRNA-seq QC pipeline; choose dataset-appropriate cell-level filters from QC distributions; run required scDblFinder-based doublet and ambient-RNA filtering; annotate cells with matched references or marker-based fallbacks; or generate global and per-group UMAP visualizations for large scRNA-seq datasets.\n---\n\n# scRNA-seq QC\n\n## Start Here\n\nRead `references\u002Fqc-annotation-umap-heuristics.md` before picking thresholds, annotation backends, or UMAP feature-selection rules.\n\nConfirm what inputs exist before writing code:\n\n- An AnnData object or equivalent with raw counts preserved.\n- Per-sample, per-batch, or per-channel metadata, because QC and doublet detection should respect technical partitions.\n- Organism, tissue, assay type, chemistry, and whether the data are whole-cell or single-nucleus.\n- Whether a matched cell atlas or label-transfer reference exists for the tissue and species.\n\nPreserve provenance in the output: package versions, thresholds, threshold-justification plots, counts removed or flagged at each filter, annotation backend and reference, marker-gene selection heuristic, and any manual cluster exclusions.\n\n## Workflow\n\n1. Choose QC thresholds from the data, not from a fixed template.\n   - Plot detected genes, total UMIs, mitochondrial fraction, and any tissue-specific nuisance signals overall and by batch.\n   - Inspect all available QC metrics, but default filtering should use only the standard metrics: detected genes, total counts, and `percent.mt`.\n   - Pick thresholds from the observed distributions and expected biology.\n   - Save a plot with threshold lines and record why each threshold is appropriate for this dataset.\n   - If another metric looks important enough to filter on, flag it as a dataset-specific issue, explain why, and consult the user before adding that extra filter.\n   - Keep QC plots legible: do not overload a single panel with too many batches or categories when faceting, splitting, or summary views would communicate the result more clearly.\n\n2. Run cell-level QC.\n   - Remove or flag obvious low-quality barcodes using the chosen thresholds on detected genes, total counts, and `percent.mt`.\n   - Use `scDblFinder` for doublet detection. Run it per batch or capture channel, and split very large batches before doublet calling.\n   - Do not skip doublet calling or silently substitute another method. If `scDblFinder` cannot run in the environment, surface the blocker explicitly or get user approval before using a different caller.\n   - Compute ambient-RNA style metrics and use them for filtering when the dataset and workflow support it.\n   - Compute any other informative QC metrics when feasible, but do not turn those additional nonstandard metrics into hard filters without explicit user approval unless the user already asked for a stricter policy.\n   - Prefer adding a `passes_QC` column instead of physically dropping cells when downstream provenance matters.\n\n3. Build a latent space and inspect residual artifacts.\n   - Decide whether `scVI` is warranted for this dataset and use case before training it.\n   - Prefer a standard PCA\u002FScanpy workflow for smaller, simpler datasets with limited batch structure or when a conventional embedding answers the question cleanly.\n   - Prefer `scVI` when integration across batches, donors, chemistries, or related datasets is important, or when the dataset is large and noisy enough that a learned latent space is likely to help.\n   - Record why `scVI` or a conventional PCA workflow was chosen for this dataset.\n   - Cluster and inspect low-quality, mixed-marker, or ambiguous clusters before downstream visualization.\n   - Remove or flag artifact clusters only with explicit evidence, and record the rationale.\n\n4. Annotate cells.\n   - If a suitable Allen Brain Cell Atlas reference exists and the dataset is a compatible brain tissue and species, use MapMyCells or `cell_type_mapper`.\n   - If no suitable Allen reference exists, use the closest matched reference for tissue, species, assay, and chemistry with an appropriate mapping tool.\n   - If no reliable reference exists, annotate conservatively from canonical markers and cluster-level markers. Assign coarse labels first and leave uncertain clusters as unknown or ambiguous rather than overlabeling them.\n   - Persist annotation confidence or probability fields when available, together with at least one coarse and one fine label.\n\n5. Choose a general marker panel for global UMAP.\n   - Do not rely on a perturbation-specific or brain-only marker panel.\n   - Start from HVGs selected in a batch-aware way.\n   - Add genes that distinguish major coarse compartments or high-confidence labels, for example top markers per coarse cluster or class.\n   - Exclude nuisance-dominated genes if they swamp the embedding unless the biology requires them.\n   - Document how the panel was chosen.\n\n6. Generate UMAP visualizations.\n   - For a global UMAP, use the learned latent space or the chosen informative marker panel, depending on which better matches the analytical goal and runtime constraints.\n   - For per-group UMAPs, subset by a stable coarse label and use the latent representation unless there is a strong reason to rebuild on expression features.\n   - Keep plotting separate from filtering so visualization choices do not mutate the core analysis object.\n   - Make every plot legible. Use a reasonable number of categories per panel, prefer coarse labels on overview plots, and split or facet figures when fine labels, batches, or neighborhoods would otherwise make the figure unreadable.\n\n7. Scale to large datasets without copying.\n   - Keep matrices sparse whenever possible.\n   - Avoid densifying whole matrices.\n   - Avoid whole-object copies of AnnData or Seurat objects; use views, backed mode, chunked operations, and per-batch or per-group manifests instead.\n   - When crossing Python and R boundaries, pass only the subset and metadata required for the step.\n   - Write checkpoints after major stages so failures do not require restarting from raw ingest.\n\n## Deliverables\n\nWhen implementing a pipeline, produce an auditable output set:\n\n- Filtered `.h5ad` or equivalent object with raw counts preserved and QC or annotation fields in metadata.\n- QC summary table with input cells, cells removed or flagged by each filter, final cells, and per-batch summaries.\n- Threshold-justification plots for detected genes, UMIs, mitochondrial fraction, plus any additional QC metric that was inspected; clearly separate metrics that informed review from metrics that actually drove filtering.\n- Parameter manifest with thresholds, package versions, annotation backend and reference, marker-panel heuristic, and any manual exclusions.\n- UMAP coordinates and plots for global and per-group views when requested, with category counts and panel layouts chosen so the figures remain legible.\n\n## Embedded Runner\n\nFor 10x-style matrix bundles, a local runner is available:\n\n```bash\npython plugins\u002Fngs-analysis\u002Fscripts\u002Frun_scrnaseq_post_count_qc.py --input-dir path\u002Fto\u002Fscrna_bundle\n```\n\nThe input directory should contain `matrix\u002F`, `manifest.tsv`, and `dataset_metadata.json`, unless explicit paths are supplied. Treat the runner as an auditable analysis surface: its marker-based fallback is PBMC-oriented when no matched reference is provided, so tissue-specific annotation and integration choices still require review.\n\nThe runner writes `visualizations\u002Findex.html` for portable artifact review, `summary.md` plus `provenance\u002Fanalysis_status.json` for explicit completeness\u002Fblocker reporting, and auto-launches a localhost Marimo review app recorded in `notebooks\u002Fmarimo_server.json`. It also writes `notebooks\u002Fscrna_qc_review.marimo.py` as a notebook backup over the generated PNG\u002FCSV\u002FH5AD outputs. Treat the notebook and review app as review layers, not as the source of truth; the run envelope and generated artifacts remain canonical.\n\n## Resources\n\n- `references\u002Fqc-annotation-umap-heuristics.md`: Threshold-selection heuristics, annotation fallback strategy, general marker-panel selection rules, and large-dataset memory practices.\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,49,56,71,76,101,106,112,418,424,429,465,471,476,515,544,589,595,608],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":48},"text","scRNA-seq QC",{"type":42,"tag":50,"props":51,"children":53},"h2",{"id":52},"start-here",[54],{"type":47,"value":55},"Start Here",{"type":42,"tag":57,"props":58,"children":59},"p",{},[60,62,69],{"type":47,"value":61},"Read ",{"type":42,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":47,"value":68},"references\u002Fqc-annotation-umap-heuristics.md",{"type":47,"value":70}," before picking thresholds, annotation backends, or UMAP feature-selection rules.",{"type":42,"tag":57,"props":72,"children":73},{},[74],{"type":47,"value":75},"Confirm what inputs exist before writing code:",{"type":42,"tag":77,"props":78,"children":79},"ul",{},[80,86,91,96],{"type":42,"tag":81,"props":82,"children":83},"li",{},[84],{"type":47,"value":85},"An AnnData object or equivalent with raw counts preserved.",{"type":42,"tag":81,"props":87,"children":88},{},[89],{"type":47,"value":90},"Per-sample, per-batch, or per-channel metadata, because QC and doublet detection should respect technical partitions.",{"type":42,"tag":81,"props":92,"children":93},{},[94],{"type":47,"value":95},"Organism, tissue, assay type, chemistry, and whether the data are whole-cell or single-nucleus.",{"type":42,"tag":81,"props":97,"children":98},{},[99],{"type":47,"value":100},"Whether a matched cell atlas or label-transfer reference exists for the tissue and species.",{"type":42,"tag":57,"props":102,"children":103},{},[104],{"type":47,"value":105},"Preserve provenance in the output: package versions, thresholds, threshold-justification plots, counts removed or flagged at each filter, annotation backend and reference, marker-gene selection heuristic, and any manual cluster exclusions.",{"type":42,"tag":50,"props":107,"children":109},{"id":108},"workflow",[110],{"type":47,"value":111},"Workflow",{"type":42,"tag":113,"props":114,"children":115},"ol",{},[116,162,229,289,324,357,385],{"type":42,"tag":81,"props":117,"children":118},{},[119,121],{"type":47,"value":120},"Choose QC thresholds from the data, not from a fixed template.",{"type":42,"tag":77,"props":122,"children":123},{},[124,129,142,147,152,157],{"type":42,"tag":81,"props":125,"children":126},{},[127],{"type":47,"value":128},"Plot detected genes, total UMIs, mitochondrial fraction, and any tissue-specific nuisance signals overall and by batch.",{"type":42,"tag":81,"props":130,"children":131},{},[132,134,140],{"type":47,"value":133},"Inspect all available QC metrics, but default filtering should use only the standard metrics: detected genes, total counts, and ",{"type":42,"tag":63,"props":135,"children":137},{"className":136},[],[138],{"type":47,"value":139},"percent.mt",{"type":47,"value":141},".",{"type":42,"tag":81,"props":143,"children":144},{},[145],{"type":47,"value":146},"Pick thresholds from the observed distributions and expected biology.",{"type":42,"tag":81,"props":148,"children":149},{},[150],{"type":47,"value":151},"Save a plot with threshold lines and record why each threshold is appropriate for this dataset.",{"type":42,"tag":81,"props":153,"children":154},{},[155],{"type":47,"value":156},"If another metric looks important enough to filter on, flag it as a dataset-specific issue, explain why, and consult the user before adding that extra filter.",{"type":42,"tag":81,"props":158,"children":159},{},[160],{"type":47,"value":161},"Keep QC plots legible: do not overload a single panel with too many batches or categories when faceting, splitting, or summary views would communicate the result more clearly.",{"type":42,"tag":81,"props":163,"children":164},{},[165,167],{"type":47,"value":166},"Run cell-level QC.",{"type":42,"tag":77,"props":168,"children":169},{},[170,181,194,206,211,216],{"type":42,"tag":81,"props":171,"children":172},{},[173,175,180],{"type":47,"value":174},"Remove or flag obvious low-quality barcodes using the chosen thresholds on detected genes, total counts, and ",{"type":42,"tag":63,"props":176,"children":178},{"className":177},[],[179],{"type":47,"value":139},{"type":47,"value":141},{"type":42,"tag":81,"props":182,"children":183},{},[184,186,192],{"type":47,"value":185},"Use ",{"type":42,"tag":63,"props":187,"children":189},{"className":188},[],[190],{"type":47,"value":191},"scDblFinder",{"type":47,"value":193}," for doublet detection. Run it per batch or capture channel, and split very large batches before doublet calling.",{"type":42,"tag":81,"props":195,"children":196},{},[197,199,204],{"type":47,"value":198},"Do not skip doublet calling or silently substitute another method. If ",{"type":42,"tag":63,"props":200,"children":202},{"className":201},[],[203],{"type":47,"value":191},{"type":47,"value":205}," cannot run in the environment, surface the blocker explicitly or get user approval before using a different caller.",{"type":42,"tag":81,"props":207,"children":208},{},[209],{"type":47,"value":210},"Compute ambient-RNA style metrics and use them for filtering when the dataset and workflow support it.",{"type":42,"tag":81,"props":212,"children":213},{},[214],{"type":47,"value":215},"Compute any other informative QC metrics when feasible, but do not turn those additional nonstandard metrics into hard filters without explicit user approval unless the user already asked for a stricter policy.",{"type":42,"tag":81,"props":217,"children":218},{},[219,221,227],{"type":47,"value":220},"Prefer adding a ",{"type":42,"tag":63,"props":222,"children":224},{"className":223},[],[225],{"type":47,"value":226},"passes_QC",{"type":47,"value":228}," column instead of physically dropping cells when downstream provenance matters.",{"type":42,"tag":81,"props":230,"children":231},{},[232,234],{"type":47,"value":233},"Build a latent space and inspect residual artifacts.",{"type":42,"tag":77,"props":235,"children":236},{},[237,250,255,267,279,284],{"type":42,"tag":81,"props":238,"children":239},{},[240,242,248],{"type":47,"value":241},"Decide whether ",{"type":42,"tag":63,"props":243,"children":245},{"className":244},[],[246],{"type":47,"value":247},"scVI",{"type":47,"value":249}," is warranted for this dataset and use case before training it.",{"type":42,"tag":81,"props":251,"children":252},{},[253],{"type":47,"value":254},"Prefer a standard PCA\u002FScanpy workflow for smaller, simpler datasets with limited batch structure or when a conventional embedding answers the question cleanly.",{"type":42,"tag":81,"props":256,"children":257},{},[258,260,265],{"type":47,"value":259},"Prefer ",{"type":42,"tag":63,"props":261,"children":263},{"className":262},[],[264],{"type":47,"value":247},{"type":47,"value":266}," when integration across batches, donors, chemistries, or related datasets is important, or when the dataset is large and noisy enough that a learned latent space is likely to help.",{"type":42,"tag":81,"props":268,"children":269},{},[270,272,277],{"type":47,"value":271},"Record why ",{"type":42,"tag":63,"props":273,"children":275},{"className":274},[],[276],{"type":47,"value":247},{"type":47,"value":278}," or a conventional PCA workflow was chosen for this dataset.",{"type":42,"tag":81,"props":280,"children":281},{},[282],{"type":47,"value":283},"Cluster and inspect low-quality, mixed-marker, or ambiguous clusters before downstream visualization.",{"type":42,"tag":81,"props":285,"children":286},{},[287],{"type":47,"value":288},"Remove or flag artifact clusters only with explicit evidence, and record the rationale.",{"type":42,"tag":81,"props":290,"children":291},{},[292,294],{"type":47,"value":293},"Annotate cells.",{"type":42,"tag":77,"props":295,"children":296},{},[297,309,314,319],{"type":42,"tag":81,"props":298,"children":299},{},[300,302,308],{"type":47,"value":301},"If a suitable Allen Brain Cell Atlas reference exists and the dataset is a compatible brain tissue and species, use MapMyCells or ",{"type":42,"tag":63,"props":303,"children":305},{"className":304},[],[306],{"type":47,"value":307},"cell_type_mapper",{"type":47,"value":141},{"type":42,"tag":81,"props":310,"children":311},{},[312],{"type":47,"value":313},"If no suitable Allen reference exists, use the closest matched reference for tissue, species, assay, and chemistry with an appropriate mapping tool.",{"type":42,"tag":81,"props":315,"children":316},{},[317],{"type":47,"value":318},"If no reliable reference exists, annotate conservatively from canonical markers and cluster-level markers. Assign coarse labels first and leave uncertain clusters as unknown or ambiguous rather than overlabeling them.",{"type":42,"tag":81,"props":320,"children":321},{},[322],{"type":47,"value":323},"Persist annotation confidence or probability fields when available, together with at least one coarse and one fine label.",{"type":42,"tag":81,"props":325,"children":326},{},[327,329],{"type":47,"value":328},"Choose a general marker panel for global UMAP.",{"type":42,"tag":77,"props":330,"children":331},{},[332,337,342,347,352],{"type":42,"tag":81,"props":333,"children":334},{},[335],{"type":47,"value":336},"Do not rely on a perturbation-specific or brain-only marker panel.",{"type":42,"tag":81,"props":338,"children":339},{},[340],{"type":47,"value":341},"Start from HVGs selected in a batch-aware way.",{"type":42,"tag":81,"props":343,"children":344},{},[345],{"type":47,"value":346},"Add genes that distinguish major coarse compartments or high-confidence labels, for example top markers per coarse cluster or class.",{"type":42,"tag":81,"props":348,"children":349},{},[350],{"type":47,"value":351},"Exclude nuisance-dominated genes if they swamp the embedding unless the biology requires them.",{"type":42,"tag":81,"props":353,"children":354},{},[355],{"type":47,"value":356},"Document how the panel was chosen.",{"type":42,"tag":81,"props":358,"children":359},{},[360,362],{"type":47,"value":361},"Generate UMAP visualizations.",{"type":42,"tag":77,"props":363,"children":364},{},[365,370,375,380],{"type":42,"tag":81,"props":366,"children":367},{},[368],{"type":47,"value":369},"For a global UMAP, use the learned latent space or the chosen informative marker panel, depending on which better matches the analytical goal and runtime constraints.",{"type":42,"tag":81,"props":371,"children":372},{},[373],{"type":47,"value":374},"For per-group UMAPs, subset by a stable coarse label and use the latent representation unless there is a strong reason to rebuild on expression features.",{"type":42,"tag":81,"props":376,"children":377},{},[378],{"type":47,"value":379},"Keep plotting separate from filtering so visualization choices do not mutate the core analysis object.",{"type":42,"tag":81,"props":381,"children":382},{},[383],{"type":47,"value":384},"Make every plot legible. Use a reasonable number of categories per panel, prefer coarse labels on overview plots, and split or facet figures when fine labels, batches, or neighborhoods would otherwise make the figure unreadable.",{"type":42,"tag":81,"props":386,"children":387},{},[388,390],{"type":47,"value":389},"Scale to large datasets without copying.",{"type":42,"tag":77,"props":391,"children":392},{},[393,398,403,408,413],{"type":42,"tag":81,"props":394,"children":395},{},[396],{"type":47,"value":397},"Keep matrices sparse whenever possible.",{"type":42,"tag":81,"props":399,"children":400},{},[401],{"type":47,"value":402},"Avoid densifying whole matrices.",{"type":42,"tag":81,"props":404,"children":405},{},[406],{"type":47,"value":407},"Avoid whole-object copies of AnnData or Seurat objects; use views, backed mode, chunked operations, and per-batch or per-group manifests instead.",{"type":42,"tag":81,"props":409,"children":410},{},[411],{"type":47,"value":412},"When crossing Python and R boundaries, pass only the subset and metadata required for the step.",{"type":42,"tag":81,"props":414,"children":415},{},[416],{"type":47,"value":417},"Write checkpoints after major stages so failures do not require restarting from raw ingest.",{"type":42,"tag":50,"props":419,"children":421},{"id":420},"deliverables",[422],{"type":47,"value":423},"Deliverables",{"type":42,"tag":57,"props":425,"children":426},{},[427],{"type":47,"value":428},"When implementing a pipeline, produce an auditable output set:",{"type":42,"tag":77,"props":430,"children":431},{},[432,445,450,455,460],{"type":42,"tag":81,"props":433,"children":434},{},[435,437,443],{"type":47,"value":436},"Filtered ",{"type":42,"tag":63,"props":438,"children":440},{"className":439},[],[441],{"type":47,"value":442},".h5ad",{"type":47,"value":444}," or equivalent object with raw counts preserved and QC or annotation fields in metadata.",{"type":42,"tag":81,"props":446,"children":447},{},[448],{"type":47,"value":449},"QC summary table with input cells, cells removed or flagged by each filter, final cells, and per-batch summaries.",{"type":42,"tag":81,"props":451,"children":452},{},[453],{"type":47,"value":454},"Threshold-justification plots for detected genes, UMIs, mitochondrial fraction, plus any additional QC metric that was inspected; clearly separate metrics that informed review from metrics that actually drove filtering.",{"type":42,"tag":81,"props":456,"children":457},{},[458],{"type":47,"value":459},"Parameter manifest with thresholds, package versions, annotation backend and reference, marker-panel heuristic, and any manual exclusions.",{"type":42,"tag":81,"props":461,"children":462},{},[463],{"type":47,"value":464},"UMAP coordinates and plots for global and per-group views when requested, with category counts and panel layouts chosen so the figures remain legible.",{"type":42,"tag":50,"props":466,"children":468},{"id":467},"embedded-runner",[469],{"type":47,"value":470},"Embedded Runner",{"type":42,"tag":57,"props":472,"children":473},{},[474],{"type":47,"value":475},"For 10x-style matrix bundles, a local runner is available:",{"type":42,"tag":477,"props":478,"children":483},"pre",{"className":479,"code":480,"language":481,"meta":482,"style":482},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python plugins\u002Fngs-analysis\u002Fscripts\u002Frun_scrnaseq_post_count_qc.py --input-dir path\u002Fto\u002Fscrna_bundle\n","bash","",[484],{"type":42,"tag":63,"props":485,"children":486},{"__ignoreMap":482},[487],{"type":42,"tag":488,"props":489,"children":492},"span",{"class":490,"line":491},"line",1,[493,499,505,510],{"type":42,"tag":488,"props":494,"children":496},{"style":495},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[497],{"type":47,"value":498},"python",{"type":42,"tag":488,"props":500,"children":502},{"style":501},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[503],{"type":47,"value":504}," plugins\u002Fngs-analysis\u002Fscripts\u002Frun_scrnaseq_post_count_qc.py",{"type":42,"tag":488,"props":506,"children":507},{"style":501},[508],{"type":47,"value":509}," --input-dir",{"type":42,"tag":488,"props":511,"children":512},{"style":501},[513],{"type":47,"value":514}," path\u002Fto\u002Fscrna_bundle\n",{"type":42,"tag":57,"props":516,"children":517},{},[518,520,526,528,534,536,542],{"type":47,"value":519},"The input directory should contain ",{"type":42,"tag":63,"props":521,"children":523},{"className":522},[],[524],{"type":47,"value":525},"matrix\u002F",{"type":47,"value":527},", ",{"type":42,"tag":63,"props":529,"children":531},{"className":530},[],[532],{"type":47,"value":533},"manifest.tsv",{"type":47,"value":535},", and ",{"type":42,"tag":63,"props":537,"children":539},{"className":538},[],[540],{"type":47,"value":541},"dataset_metadata.json",{"type":47,"value":543},", unless explicit paths are supplied. Treat the runner as an auditable analysis surface: its marker-based fallback is PBMC-oriented when no matched reference is provided, so tissue-specific annotation and integration choices still require review.",{"type":42,"tag":57,"props":545,"children":546},{},[547,549,555,557,563,565,571,573,579,581,587],{"type":47,"value":548},"The runner writes ",{"type":42,"tag":63,"props":550,"children":552},{"className":551},[],[553],{"type":47,"value":554},"visualizations\u002Findex.html",{"type":47,"value":556}," for portable artifact review, ",{"type":42,"tag":63,"props":558,"children":560},{"className":559},[],[561],{"type":47,"value":562},"summary.md",{"type":47,"value":564}," plus ",{"type":42,"tag":63,"props":566,"children":568},{"className":567},[],[569],{"type":47,"value":570},"provenance\u002Fanalysis_status.json",{"type":47,"value":572}," for explicit completeness\u002Fblocker reporting, and auto-launches a localhost Marimo review app recorded in ",{"type":42,"tag":63,"props":574,"children":576},{"className":575},[],[577],{"type":47,"value":578},"notebooks\u002Fmarimo_server.json",{"type":47,"value":580},". It also writes ",{"type":42,"tag":63,"props":582,"children":584},{"className":583},[],[585],{"type":47,"value":586},"notebooks\u002Fscrna_qc_review.marimo.py",{"type":47,"value":588}," as a notebook backup over the generated PNG\u002FCSV\u002FH5AD outputs. Treat the notebook and review app as review layers, not as the source of truth; the run envelope and generated artifacts remain canonical.",{"type":42,"tag":50,"props":590,"children":592},{"id":591},"resources",[593],{"type":47,"value":594},"Resources",{"type":42,"tag":77,"props":596,"children":597},{},[598],{"type":42,"tag":81,"props":599,"children":600},{},[601,606],{"type":42,"tag":63,"props":602,"children":604},{"className":603},[],[605],{"type":47,"value":68},{"type":47,"value":607},": Threshold-selection heuristics, annotation fallback strategy, general marker-panel selection rules, and large-dataset memory practices.",{"type":42,"tag":609,"props":610,"children":611},"style",{},[612],{"type":47,"value":613},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":615,"total":736},[616,634,650,662,682,704,724],{"slug":617,"name":617,"fn":618,"description":619,"org":620,"tags":621,"stars":25,"repoUrl":26,"updatedAt":27},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[622,625,628,631],{"name":623,"slug":624,"type":15},"Accessibility","accessibility",{"name":626,"slug":627,"type":15},"Charts","charts",{"name":629,"slug":630,"type":15},"Data Visualization","data-visualization",{"name":632,"slug":633,"type":15},"Design","design",{"slug":635,"name":635,"fn":636,"description":637,"org":638,"tags":639,"stars":25,"repoUrl":26,"updatedAt":649},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[640,643,646],{"name":641,"slug":642,"type":15},"Agents","agents",{"name":644,"slug":645,"type":15},"Browser Automation","browser-automation",{"name":647,"slug":648,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":651,"name":651,"fn":652,"description":653,"org":654,"tags":655,"stars":25,"repoUrl":26,"updatedAt":661},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[656,657,660],{"name":644,"slug":645,"type":15},{"name":658,"slug":659,"type":15},"Local Development","local-development",{"name":647,"slug":648,"type":15},"2026-04-06T18:41:17.526867",{"slug":663,"name":663,"fn":664,"description":665,"org":666,"tags":667,"stars":25,"repoUrl":26,"updatedAt":681},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[668,669,672,675,678],{"name":641,"slug":642,"type":15},{"name":670,"slug":671,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":673,"slug":674,"type":15},"SDK","sdk",{"name":676,"slug":677,"type":15},"Serverless","serverless",{"name":679,"slug":680,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":683,"name":683,"fn":684,"description":685,"org":686,"tags":687,"stars":25,"repoUrl":26,"updatedAt":703},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[688,691,694,697,700],{"name":689,"slug":690,"type":15},"Frontend","frontend",{"name":692,"slug":693,"type":15},"React","react",{"name":695,"slug":696,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":698,"slug":699,"type":15},"UI Components","ui-components",{"name":701,"slug":702,"type":15},"Vercel","vercel","2026-04-06T18:40:59.619419",{"slug":705,"name":705,"fn":706,"description":707,"org":708,"tags":709,"stars":25,"repoUrl":26,"updatedAt":723},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[710,713,716,719,722],{"name":711,"slug":712,"type":15},"AI Infrastructure","ai-infrastructure",{"name":714,"slug":715,"type":15},"Cost Optimization","cost-optimization",{"name":717,"slug":718,"type":15},"LLM","llm",{"name":720,"slug":721,"type":15},"Performance","performance",{"name":701,"slug":702,"type":15},"2026-04-06T18:40:44.377464",{"slug":725,"name":725,"fn":726,"description":727,"org":728,"tags":729,"stars":25,"repoUrl":26,"updatedAt":735},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[730,731,734],{"name":714,"slug":715,"type":15},{"name":732,"slug":733,"type":15},"Database","database",{"name":717,"slug":718,"type":15},"2026-04-06T18:41:08.513425",600,{"items":738,"total":935},[739,760,783,800,816,833,852,864,878,892,904,919],{"slug":740,"name":740,"fn":741,"description":742,"org":743,"tags":744,"stars":757,"repoUrl":758,"updatedAt":759},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[745,748,751,754],{"name":746,"slug":747,"type":15},"Documents","documents",{"name":749,"slug":750,"type":15},"Healthcare","healthcare",{"name":752,"slug":753,"type":15},"Insurance","insurance",{"name":755,"slug":756,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":761,"name":761,"fn":762,"description":763,"org":764,"tags":765,"stars":780,"repoUrl":781,"updatedAt":782},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[766,769,771,774,777],{"name":767,"slug":768,"type":15},".NET","dotnet",{"name":770,"slug":761,"type":15},"ASP.NET Core",{"name":772,"slug":773,"type":15},"Blazor","blazor",{"name":775,"slug":776,"type":15},"C#","csharp",{"name":778,"slug":779,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":784,"name":784,"fn":785,"description":786,"org":787,"tags":788,"stars":780,"repoUrl":781,"updatedAt":799},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[789,792,795,798],{"name":790,"slug":791,"type":15},"Apps SDK","apps-sdk",{"name":793,"slug":794,"type":15},"ChatGPT","chatgpt",{"name":796,"slug":797,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":801,"name":801,"fn":802,"description":803,"org":804,"tags":805,"stars":780,"repoUrl":781,"updatedAt":815},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[806,809,812],{"name":807,"slug":808,"type":15},"API Development","api-development",{"name":810,"slug":811,"type":15},"CLI","cli",{"name":813,"slug":814,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":817,"name":817,"fn":818,"description":819,"org":820,"tags":821,"stars":780,"repoUrl":781,"updatedAt":832},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[822,825,828,829],{"name":823,"slug":824,"type":15},"Cloudflare","cloudflare",{"name":826,"slug":827,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":670,"slug":671,"type":15},{"name":830,"slug":831,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":834,"name":834,"fn":835,"description":836,"org":837,"tags":838,"stars":780,"repoUrl":781,"updatedAt":851},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[839,842,845,848],{"name":840,"slug":841,"type":15},"Productivity","productivity",{"name":843,"slug":844,"type":15},"Project Management","project-management",{"name":846,"slug":847,"type":15},"Strategy","strategy",{"name":849,"slug":850,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":853,"name":853,"fn":854,"description":855,"org":856,"tags":857,"stars":780,"repoUrl":781,"updatedAt":863},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[858,859,861,862],{"name":632,"slug":633,"type":15},{"name":860,"slug":853,"type":15},"Figma",{"name":689,"slug":690,"type":15},{"name":796,"slug":797,"type":15},"2026-04-12T05:06:47.939943",{"slug":865,"name":865,"fn":866,"description":867,"org":868,"tags":869,"stars":780,"repoUrl":781,"updatedAt":877},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[870,871,874,875,876],{"name":632,"slug":633,"type":15},{"name":872,"slug":873,"type":15},"Design System","design-system",{"name":860,"slug":853,"type":15},{"name":689,"slug":690,"type":15},{"name":698,"slug":699,"type":15},"2026-05-10T05:59:52.971881",{"slug":879,"name":879,"fn":880,"description":881,"org":882,"tags":883,"stars":780,"repoUrl":781,"updatedAt":891},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[884,885,886,889,890],{"name":632,"slug":633,"type":15},{"name":872,"slug":873,"type":15},{"name":887,"slug":888,"type":15},"Documentation","documentation",{"name":860,"slug":853,"type":15},{"name":689,"slug":690,"type":15},"2026-05-16T06:07:47.821474",{"slug":893,"name":893,"fn":894,"description":895,"org":896,"tags":897,"stars":780,"repoUrl":781,"updatedAt":903},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[898,899,900,901,902],{"name":632,"slug":633,"type":15},{"name":860,"slug":853,"type":15},{"name":689,"slug":690,"type":15},{"name":698,"slug":699,"type":15},{"name":778,"slug":779,"type":15},"2026-05-16T06:07:40.583615",{"slug":905,"name":905,"fn":906,"description":907,"org":908,"tags":909,"stars":780,"repoUrl":781,"updatedAt":918},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[910,913,914,917],{"name":911,"slug":912,"type":15},"Animation","animation",{"name":813,"slug":814,"type":15},{"name":915,"slug":916,"type":15},"Creative","creative",{"name":632,"slug":633,"type":15},"2026-05-02T05:31:48.48485",{"slug":920,"name":920,"fn":921,"description":922,"org":923,"tags":924,"stars":780,"repoUrl":781,"updatedAt":934},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[925,926,927,930,933],{"name":915,"slug":916,"type":15},{"name":632,"slug":633,"type":15},{"name":928,"slug":929,"type":15},"Image Generation","image-generation",{"name":931,"slug":932,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]