CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

anndata

Handles annotated matrices in single-cell analysis, .h5ad and Zarr files, and integration with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.

64

Quality

80%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/anndata/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-structured, highly actionable skill with excellent progressive disclosure — five real reference files, each clearly signaled with a contents preview, and no nested references. The main costs are token redundancy (the backed-mode pattern and 10X example repeated several times) and an inlined scanpy analysis pipeline that the skill's own description routes to the scanpy skill.

Suggestions

State the backed-mode pattern (open backed='r', materialize subset, try/finally adata.file.close()) once — e.g. in io_operations or best_practices — and reference it from the other sections instead of repeating the code four times.

Move or trim the full scanpy preprocessing pipeline (filter/normalize/log1p/PCA/UMAP/Leiden) since the description routes analysis workflows to the scanpy skill; keep only the data-format-relevant steps (load, preserve counts in layers, save).

Consolidate the three duplicated sc.read_10x_h5 examples into one clearly labeled pointer to the scanpy skill.

DimensionReasoningScore

Conciseness

The body is mostly efficient, code-forward, and assumes competence, but includes repeated and off-scope content: the backed-mode try/finally close pattern appears four times (Reading data, Core Capabilities, Best Practices, Troubleshooting), the scanpy 10X read example appears three times, and a full scanpy preprocessing pipeline (normalize/log1p/PCA/UMAP/Leiden) is inlined despite the description itself routing analysis workflows to the scanpy skill. Not 4 because the duplication and the off-scope scanpy pipeline are more than minor trimmable instances; not 2 because most sections are lean, executable, and free of concepts-Claude-already-knows padding.

3 / 5

Actionability

Nearly all guidance is copy-paste-ready executable code covering the common cases (creation, read/write, backed mode, concat, subsetting, QC filtering, index alignment with an explicit wrong/correct pair). Not 5 because of minor gaps: `process(adata_subset)`/`process(chunk)` and undefined `adata1/adata2/adata3` placeholders are illustrative rather than runnable, and the TileDB-SOMA section advises verification without showing any command.

4 / 5

Workflow Clarity

Multi-step workflows are clearly sequenced (numbered single-cell RNA-seq pipeline, batch combination, chunked large-dataset processing) with real checkpoints: `assert adata.obs['batch'].notna().all()`, "Write those edits to a new file and reopen it to verify they survived", try/finally file closes, and the layers['counts'] provenance snapshot before normalization. Not 5 because there is no explicit validate→fix→retry feedback loop for the fragile write/reopen operations; not 3 because validation steps are present and explicit, not merely implicit.

4 / 5

Progressive Disclosure

The body is a genuine overview: each capability section is a short summary plus a clearly signaled one-level-deep pointer ("**See**: references/data_structure.md" with an itemized contents list), and all five referenced files exist in the bundle. Verified that reference files contain only external documentation URLs, not nested .md references, so navigation is one level deep and easy.

5 / 5

Total

16

/

20

Passed

Description

78%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong, third-person description with explicit boundary routing against sibling scverse skills and concrete format triggers (.h5ad, Zarr). Its main gaps are the absence of the package's own name ("AnnData"/"adata") as a trigger keyword and a positive "Use when..." clause — the trigger guidance is entirely framed as when to use other skills instead.

Suggestions

Add the skill's own natural keywords — "AnnData", "adata", "AnnData objects" — so users who name the library directly trigger this skill.

Convert the negative routing into (or augment with) a positive trigger clause, e.g. "Use when creating, reading, writing, or concatenating AnnData objects (.h5ad/.zarr)".

Name 1-2 concrete operations (e.g. "read, write, subset, and concatenate") instead of the single generic verb "Handles".

DimensionReasoningScore

Specificity

"Handles annotated matrices in single-cell analysis, .h5ad and Zarr files, and integration with the scverse ecosystem" names the domain, concrete file formats (.h5ad, Zarr), and a specific ecosystem integration, giving several specific anchors. Not 5 because the only verb is the generic "Handles" — unlike the anchor's multiple distinct actions (extract, fill, merge, convert), no individual operations (read/write/concat/subset) are named; not 3 because the format and ecosystem coverage goes beyond 1-2 bare actions.

4 / 5

Completeness

The "what" is clear (annotated matrices, .h5ad/Zarr files, scverse integration), and "when" is addressed via explicit routing: "This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census." Not 5 because the trigger guidance is phrased negatively (when to use other skills) rather than as a direct positive "Use when creating, reading, or writing AnnData objects" clause with concrete trigger phrases; not 3 because the routing is explicit and actionable, well beyond weakly implied.

4 / 5

Trigger Term Quality

Good natural-term coverage: "single-cell analysis", ".h5ad", "Zarr", "scverse", plus sibling tool names (scanpy, scvi-tools, cellxgene-census) that users actually say. Not 5 because the description never mentions "AnnData"/"adata" itself — the package name and object name users would most naturally type — nor synonyms like "h5ad" without the dot.

4 / 5

Distinctiveness Conflict Risk

The description carves out a clear niche (the data-format layer) and explicitly disambiguates against the three closest sibling skills (scanpy for analysis, scvi-tools for models, cellxgene-census for population queries), matching the anchor for a clear niche with distinct triggers and minimal conflict risk.

5 / 5

Total

17

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

K-Dense-AI/scientific-agent-skills

Path

skills/anndata/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.