Skill Tracer
Skills › Scientific Agent Skills › depmap

depmap

skill · 233 lines · CC-BY-4.0 · skills/depmap/SKILL.md

The facts

Its description

Retrieves and analyzes Cancer Dependency Map (DepMap) release data, including CRISPR Chronos gene effects, cancer model annotations, omics biomarkers, and PRISM drug sensitivity. Supports cancer-selective dependency, co-essentiality, and candidate synthetic-lethality analyses with release-aware identifiers and statistical checks.

The description the agent reads to decide when to use it.

From its settingsline 3

Runs scripts

scripts/depmap_data.py

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 53

Files it mentions

scripts/depmap_data.py, references/dependency_analysis.md

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 53 line 125 line 210

Licence

CC-BY-4.0, from the skill file

The terms its author shares it under, which let it be shown here.

From its settingsline 4 licence text

Other settings

compatibility: Requires Python 3.10+ with numpy, pandas, and scipy>=1.11 for the bundled helpers. Network access is needed for release discovery; downloading current data may require browser verification through the DepMap portal. metadata: version: "1.2" skill-author: Kuan-lin Huang last-reviewed: "2026-09-30"

More settings at the top of the file, shown as written.

From its settingsline 5 line 6
Other files in this skill (2) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: depmap
3description: Retrieves and analyzes Cancer Dependency Map (DepMap) release data, including CRISPR Chronos gene effects, cancer model annotations, omics biomarkers, and PRISM drug sensitivity. Supports cancer-selective dependency, co-essentiality, and candidate synthetic-lethality analyses with release-aware identifiers and statistical checks.
4license: CC-BY-4.0
5compatibility: Requires Python 3.10+ with numpy, pandas, and scipy>=1.11 for the bundled helpers. Network access is needed for release discovery; downloading current data may require browser verification through the DepMap portal.
6metadata:
7 version: "1.2"
8 skill-author: Kuan-lin Huang
9 last-reviewed: "2026-09-30"
10---
12# DepMap — Cancer Dependency Map

DepMap — Cancer Dependency Map

Raw lines 1 to 13
14## When to use
16Use this skill to rank dependencies in cancer models, compare prespecified biomarker
17cohorts, inspect co-essentiality, or relate genetic dependencies to PRISM compound
18response. These analyses generate target and synthetic-lethality hypotheses; they
19do not establish clinical efficacy, a therapeutic window, or a causal interaction.
21DepMap integrates Broad and Sanger CRISPR screens and hosts independent RNAi and
22drug-screen datasets. Match each question to its assay and pinned release. RNAi
23DEMETER2 is a different perturbation modality, not an older CRISPR scoring method.

When to use

Use this skill to rank dependencies in cancer models, compare prespecified biomarker cohorts, inspect co-essentiality, or relate genetic dependencies to PRISM compound response. These analyses generate target and synthetic-lethality hypotheses; they do not establish clinical efficacy, a therapeutic window, or a causal interaction.

DepMap integrates Broad and Sanger CRISPR screens and hosts independent RNAi and drug-screen datasets. Match each question to its assay and pinned release. RNAi DEMETER2 is a different perturbation modality, not an older CRISPR scoring method.

Raw lines 14 to 24
25## 1. Discover a release, then obtain its files
27Use [DepMap Downloads](https://depmap.org/portal/data_page/) and the selected
28release's README and release notes. On review, the live catalogue's latest
29`DepMap Public` release was **26Q1**, dated 2026-04-01. Rediscover before new work;
30a release name or expected quarter is not evidence a release is available.

1. Discover a release, then obtain its files

Use DepMap Downloads and the selected release's README and release notes. On review, the live catalogue's latest DepMap Public release was 26Q1, dated 2026-04-01. Rediscover before new work; a release name or expected quarter is not evidence a release is available.

Raw lines 25 to 31
32### Verified public endpoint
34`GET https://depmap.org/portal/api/no-captcha/download/files` returns a complete
35CSV catalogue, with no request body, API key, or pagination parameters. Required
36metadata columns are `release`, `release_date`, `filename`, and `md5_hash`.
37The live response also has `url`: **older files can have links, while recent
38release rows have blank links**. All 85 entries for 26Q1 had blank `url` values at
39review. Treat availability per row, not per endpoint.
41The [staff announcement](https://forum.depmap.org/t/provide-an-open-endpoint-for-latest-version-retrieval/4652)
42introduced this metadata route in July 2026. The older
43`https://depmap.org/portal/api/download/files` catalogue can supply download links
44but returned an HTML verification page during review, including with HTTP 200.
45Validate content before parsing. Obtain current files through the portal when
46verification is required. Refresh expiring signed links immediately before use;
47do not fabricate storage URLs or assume every new release is on Figshare.
49No supported contract was verified for the former `/api/gene?gene_id=...` or
50`/api/data/gene_dependency` examples. Use local release matrices for gene slices.
51Do not assume a Python package named `depmap` is an official portal client.
53From the skill root, use the bundled [helpers](scripts/depmap_data.py):
55```python
56from scripts.depmap_data import fetch_catalogue, select_file, verify_md5
58catalogue = fetch_catalogue()
59public = catalogue[catalogue["release"].str.startswith("DepMap Public ")]
60print(public[["release", "release_date"]].drop_duplicates()
61 .sort_values("release_date", ascending=False).head(12))
63# Explicit example pin; inspect discovery output before selecting your release.
64release = "DepMap Public 26Q1"
65record = select_file(catalogue, release, "CRISPRGeneEffect.csv")
66print(record[["release", "filename", "md5_hash"]])
67# After obtaining this file from the portal:
68# verify_md5("CRISPRGeneEffect.csv", record["md5_hash"])
69```
71Save the selected metadata, retrieval date, release citation, local checksum, and
72README alongside analysis outputs. Record source dataset terms separately from
73this skill's license; newer release terms differ from older Figshare releases.
74For a missing published checksum, retain a local SHA-256 and explicitly state
75that it was not compared with a publisher checksum.

Verified public endpoint

GET https://depmap.org/portal/api/no-captcha/download/files returns a complete CSV catalogue, with no request body, API key, or pagination parameters. Required metadata columns are release, release_date, filename, and md5_hash. The live response also has url: older files can have links, while recent release rows have blank links. All 85 entries for 26Q1 had blank url values at review. Treat availability per row, not per endpoint.

The staff announcement introduced this metadata route in July 2026. The older https://depmap.org/portal/api/download/files catalogue can supply download links but returned an HTML verification page during review, including with HTTP 200. Validate content before parsing. Obtain current files through the portal when verification is required. Refresh expiring signed links immediately before use; do not fabricate storage URLs or assume every new release is on Figshare.

No supported contract was verified for the former /api/gene?gene_id=... or /api/data/gene_dependency examples. Use local release matrices for gene slices. Do not assume a Python package named depmap is an official portal client.

From the skill root, use the bundled helpers:

from scripts.depmap_data import fetch_catalogue, select_file, verify_md5

catalogue = fetch_catalogue()
public = catalogue[catalogue["release"].str.startswith("DepMap Public ")]
print(public[["release", "release_date"]].drop_duplicates()
      .sort_values("release_date", ascending=False).head(12))

# Explicit example pin; inspect discovery output before selecting your release.
release = "DepMap Public 26Q1"
record = select_file(catalogue, release, "CRISPRGeneEffect.csv")
print(record[["release", "filename", "md5_hash"]])
# After obtaining this file from the portal:
# verify_md5("CRISPRGeneEffect.csv", record["md5_hash"])

Save the selected metadata, retrieval date, release citation, local checksum, and README alongside analysis outputs. Record source dataset terms separately from this skill's license; newer release terms differ from older Figshare releases. For a missing published checksum, retain a local SHA-256 and explicitly state that it was not compared with a publisher checksum.

Raw lines 32 to 76
Reads a file scripts/depmap_data.py :53
77## 2. Inspect file contracts before joining
79The following names were verified in the 26Q1 catalogue. Check that release's
80README for units and identifier level before treating a file as a numeric matrix.
82| File | Use and important contract |
83|---|---|
84| `CRISPRGeneEffect.csv` | Integrated, model-level Chronos effects; rows are ModelID, columns preserve `Symbol (EntrezID)` |
85| `CRISPRGeneEffectUncorrected.csv` | Uncorrected effects; not interchangeable with corrected effects |
86| `CRISPRGeneDependency.csv` | Release-specific dependency statistics; confirm probability/FDR definition and direction in the README |
87| `Model.csv` | Model metadata keyed by `ModelID` |
88| `ModelCondition.csv` | Growth/treatment conditions keyed by `ModelConditionID`, mapping to `ModelID` |
89| `ScreenGeneEffect.csv`, `ScreenSequenceMap.csv`, `CRISPRScreenMap.csv` | Screen-level effects and mappings; multiple screens can belong to one model |
90| `OmicsExpressionTPMLogp1HumanProteinCodingGenes.csv` | Expression output with sequencing/model metadata and default-entry flags; exclude metadata columns from expression calculations |
91| `OmicsSomaticMutationsMatrixDamaging.csv`, `OmicsSomaticMutationsMatrixHotspot.csv` | Distinct mutation annotations; damaging and hotspot calls answer different biological questions |
92| `OmicsCNGeneWGS.csv`, `OmicsCNGeneMC_WES.csv` | Separate WGS/WES copy-number products; do not concatenate as one uniformly processed cohort |
93| `PortalOmicsCNGeneLog2.csv` | Transformed portal copy-number product; establish the exact transform before inversion |
94| `OmicsProfiles.csv`, `Gene.csv` | Omics provenance/mappings and gene annotations |
95| `AchillesScreenQCReport.csv`, `AchillesSequenceQCReport.csv` | Screen/sequence QC; apply documented eligibility rules rather than invented universal cutoffs |
97Current model annotations include `CellLineName`, `OncotreeLineage`,
98`OncotreePrimaryDisease`, and `OncotreeSubtype`. Legacy `sample_info.csv` fields
99(`DepMap_ID`, `lineage`, `primary_disease`) require an explicit conversion.
100`Model.csv` includes models without CRISPR measurements: absence from the effect
101matrix is not a nondependency score.
103Omics may be indexed by `SequencingID`, `ModelConditionID`, or `ModelID`. For a
104basal model analysis, use the release's `IsDefaultEntryForModel == Yes` flag,
105then require one row per `ModelID`. The condition-level flag
106`IsDefaultEntryForMC` answers a different question. Subset the assay/datatype
107before selecting defaults from a mapping table. Never average repeated conditions
108or count them as independent models without an explicit scientific design.
110See the [mapping guide source](https://github.com/broadinstitute/depmap-portal/blob/master/frontend/packages/portal-frontend/src/dataPage/components/MapSection.tsx)
111and [metadata definitions](https://forum.depmap.org/t/depmap-metadata/3694).

2. Inspect file contracts before joining

The following names were verified in the 26Q1 catalogue. Check that release's README for units and identifier level before treating a file as a numeric matrix.

FileUse and important contract
CRISPRGeneEffect.csvIntegrated, model-level Chronos effects; rows are ModelID, columns preserve Symbol (EntrezID)
CRISPRGeneEffectUncorrected.csvUncorrected effects; not interchangeable with corrected effects
CRISPRGeneDependency.csvRelease-specific dependency statistics; confirm probability/FDR definition and direction in the README
Model.csvModel metadata keyed by ModelID
ModelCondition.csvGrowth/treatment conditions keyed by ModelConditionID, mapping to ModelID
ScreenGeneEffect.csv, ScreenSequenceMap.csv, CRISPRScreenMap.csvScreen-level effects and mappings; multiple screens can belong to one model
OmicsExpressionTPMLogp1HumanProteinCodingGenes.csvExpression output with sequencing/model metadata and default-entry flags; exclude metadata columns from expression calculations
OmicsSomaticMutationsMatrixDamaging.csv, OmicsSomaticMutationsMatrixHotspot.csvDistinct mutation annotations; damaging and hotspot calls answer different biological questions
OmicsCNGeneWGS.csv, OmicsCNGeneMC_WES.csvSeparate WGS/WES copy-number products; do not concatenate as one uniformly processed cohort
PortalOmicsCNGeneLog2.csvTransformed portal copy-number product; establish the exact transform before inversion
OmicsProfiles.csv, Gene.csvOmics provenance/mappings and gene annotations
AchillesScreenQCReport.csv, AchillesSequenceQCReport.csvScreen/sequence QC; apply documented eligibility rules rather than invented universal cutoffs

Current model annotations include CellLineName, OncotreeLineage, OncotreePrimaryDisease, and OncotreeSubtype. Legacy sample_info.csv fields (DepMap_ID, lineage, primary_disease) require an explicit conversion. Model.csv includes models without CRISPR measurements: absence from the effect matrix is not a nondependency score.

Omics may be indexed by SequencingID, ModelConditionID, or ModelID. For a basal model analysis, use the release's IsDefaultEntryForModel == Yes flag, then require one row per ModelID. The condition-level flag IsDefaultEntryForMC answers a different question. Subset the assay/datatype before selecting defaults from a mapping table. Never average repeated conditions or count them as independent models without an explicit scientific design.

See the mapping guide source and metadata definitions.

Raw lines 77 to 112
113## 3. Interpret Chronos and inspect a target
115Chronos gene effect is continuous and unbounded. More negative values indicate
116stronger loss of fitness. In the normalized release matrix, approximately 0 is
117the nonessential-control anchor and −1 is the common-essential-control anchor;
118−1 is not a dependency boundary. A filter such as ≤ −0.5 is exploratory, not a
119p-value, FDR, or probability cutoff. Positive effects may reflect growth advantage
120or technical noise and need validation.
122For binary calls, inspect the selected file's statistic and direction. A high
123dependency probability and a low FDR are different rules. Do not silently convert
124between them. Use release-matched positive/negative control lists and QC outputs.
125See [score and QC caveats](references/dependency_analysis.md).
127The following local-data examples are illustrative until run against your chosen
128files. Helper behavior is tested using synthetic fixtures; current bulk matrices
129were not downloaded during this review.
131```python
132from scripts.depmap_data import load_gene_effect, load_models, gene_profile
134effects = load_gene_effect("CRISPRGeneEffect.csv")
135models = load_models("Model.csv")
136profile = gene_profile(effects, models, "KRAS (3845)")
137print(profile[["CellLineName", "OncotreeLineage", "gene_effect"]].head(20))
139# Inspect actual annotation values, then choose an exact cohort.
140print(profile["OncotreeLineage"].value_counts())
141known = profile.dropna(subset=["OncotreeLineage"])
142lung = known.loc[known["OncotreeLineage"].eq("Lung"), "gene_effect"]
143other = known.loc[~known["OncotreeLineage"].eq("Lung"), "gene_effect"]
144if lung.empty or other.empty:
145 raise ValueError("Both cohorts require observed effects and known lineage")
146print({"n_lung": len(lung), "n_other": len(other),
147 "other_minus_lung_mean": other.mean() - lung.mean(),
148 "lung_fraction_below_exploratory_cutoff": (lung <= -0.5).mean()})
149```
151This is a descriptive comparison against other cancer models, not against normal
152tissue. Keep the denominator and missingness counts. Preserve complete gene labels;
153a symbol can be ambiguous, and the helper refuses ambiguous symbol resolution.

3. Interpret Chronos and inspect a target

Chronos gene effect is continuous and unbounded. More negative values indicate stronger loss of fitness. In the normalized release matrix, approximately 0 is the nonessential-control anchor and −1 is the common-essential-control anchor; −1 is not a dependency boundary. A filter such as ≤ −0.5 is exploratory, not a p-value, FDR, or probability cutoff. Positive effects may reflect growth advantage or technical noise and need validation.

For binary calls, inspect the selected file's statistic and direction. A high dependency probability and a low FDR are different rules. Do not silently convert between them. Use release-matched positive/negative control lists and QC outputs. See score and QC caveats.

The following local-data examples are illustrative until run against your chosen files. Helper behavior is tested using synthetic fixtures; current bulk matrices were not downloaded during this review.

from scripts.depmap_data import load_gene_effect, load_models, gene_profile

effects = load_gene_effect("CRISPRGeneEffect.csv")
models = load_models("Model.csv")
profile = gene_profile(effects, models, "KRAS (3845)")
print(profile[["CellLineName", "OncotreeLineage", "gene_effect"]].head(20))

# Inspect actual annotation values, then choose an exact cohort.
print(profile["OncotreeLineage"].value_counts())
known = profile.dropna(subset=["OncotreeLineage"])
lung = known.loc[known["OncotreeLineage"].eq("Lung"), "gene_effect"]
other = known.loc[~known["OncotreeLineage"].eq("Lung"), "gene_effect"]
if lung.empty or other.empty:
    raise ValueError("Both cohorts require observed effects and known lineage")
print({"n_lung": len(lung), "n_other": len(other),
       "other_minus_lung_mean": other.mean() - lung.mean(),
       "lung_fraction_below_exploratory_cutoff": (lung <= -0.5).mean()})

This is a descriptive comparison against other cancer models, not against normal tissue. Keep the denominator and missingness counts. Preserve complete gene labels; a symbol can be ambiguous, and the helper refuses ambiguous symbol resolution.

Raw lines 113 to 154
155## 4. Test biomarker associations
1571. Define the alteration before inspecting target scores. A damaging-call matrix
158 does not establish biallelic loss; activating KRAS hotspots require a different
159 definition from generic damaging mutations.
1602. Map profiles to the correct model/condition. Use `0` only for an assayed negative,
161 `1` for the prespecified biomarker, and missing for unknown status.
1623. Restrict to scientifically comparable models (lineage, culture conditions,
163 screen source and related-patient structure). Inspect confounding before testing.
1644. Test every eligible gene in the planned family, then adjust all its p-values
165 before selecting hits. Report group sizes, effect sizes, p-values, and q-values.
1665. Validate candidate synthetic lethality with matched/isogenic perturbations and
167 rescue or orthogonal evidence; association alone is insufficient.
169```python
170import pandas as pd
171from scripts.depmap_data import biomarker_scan
173# User-prepared, release-matched annotation after the mapping and curation above.
174status = pd.read_csv("curated_biomarker_status.csv", index_col="ModelID")["status"]
175results = biomarker_scan(effects, status, min_n=5)
176# Positive effect_size means stronger dependency in biomarker-positive models.
177candidates = results.loc[(results["qval"] < 0.1) & (results["effect_size"] > 0)]
178```
180This one-sided Mann–Whitney screen is exploratory and does not adjust for
181covariates. `min_n=5` is an explicit example floor, not a power guarantee. For
182inference across lineages, fit an appropriate adjusted model and inspect effect
183stability within lineages; do not report the helper's q-value as confounder-adjusted.

4. Test biomarker associations

  1. Define the alteration before inspecting target scores. A damaging-call matrix does not establish biallelic loss; activating KRAS hotspots require a different definition from generic damaging mutations.
  2. Map profiles to the correct model/condition. Use 0 only for an assayed negative, 1 for the prespecified biomarker, and missing for unknown status.
  3. Restrict to scientifically comparable models (lineage, culture conditions, screen source and related-patient structure). Inspect confounding before testing.
  4. Test every eligible gene in the planned family, then adjust all its p-values before selecting hits. Report group sizes, effect sizes, p-values, and q-values.
  5. Validate candidate synthetic lethality with matched/isogenic perturbations and rescue or orthogonal evidence; association alone is insufficient.
import pandas as pd
from scripts.depmap_data import biomarker_scan

# User-prepared, release-matched annotation after the mapping and curation above.
status = pd.read_csv("curated_biomarker_status.csv", index_col="ModelID")["status"]
results = biomarker_scan(effects, status, min_n=5)
# Positive effect_size means stronger dependency in biomarker-positive models.
candidates = results.loc[(results["qval"] < 0.1) & (results["effect_size"] > 0)]

This one-sided Mann–Whitney screen is exploratory and does not adjust for covariates. min_n=5 is an explicit example floor, not a power guarantee. For inference across lineages, fit an appropriate adjusted model and inspect effect stability within lineages; do not report the helper's q-value as confounder-adjusted.

Raw lines 155 to 184
185## 5. Co-essentiality and drug sensitivity
187```python
188from scripts.depmap_data import coessentiality
190correlates = coessentiality(effects, "KRAS (3845)", min_n=500)
191print(correlates[["gene", "n", "r", "pval", "qval"]].head(20))
192```
194`min_n` is configurable and should be prespecified for the analysis. Sparse genes
195can dominate rankings with spurious correlations; always retain the pairwise
196sample count. The helper uses pairwise complete observations and skips constant
197genes. Pearson/BH output still needs lineage, library, and screen-quality checks;
198co-essentiality is not proof of a physical interaction or shared pathway.
199The [DepMap team's discussion](https://forum.depmap.org/t/crispr-co-depency-top-hits-obscured-by-newly-added-screens/4503)
200documents this specific sparse-coverage failure mode.
202For PRISM, first select the exact screen/release and endpoint. Treatment-info CSVs
203are annotations, not sensitivity values. The original primary screen's
204`primary-screen-replicate-collapsed-logfold-change.csv` has response rows keyed by
205cell-line `row_name` and columns keyed by treatment `column_name`. Join the
206corresponding cell-line and treatment-info files; retain compound, dose, and
207screen identity. Lower log2 fold change indicates greater loss of viability.
208Secondary-screen AUC comes from dose-response curve parameters and is not the
209same quantity as single-dose log fold change. See the
210[PRISM workflow](references/dependency_analysis.md) before loading these files.

5. Co-essentiality and drug sensitivity

from scripts.depmap_data import coessentiality

correlates = coessentiality(effects, "KRAS (3845)", min_n=500)
print(correlates[["gene", "n", "r", "pval", "qval"]].head(20))

min_n is configurable and should be prespecified for the analysis. Sparse genes can dominate rankings with spurious correlations; always retain the pairwise sample count. The helper uses pairwise complete observations and skips constant genes. Pearson/BH output still needs lineage, library, and screen-quality checks; co-essentiality is not proof of a physical interaction or shared pathway. The DepMap team's discussion documents this specific sparse-coverage failure mode.

For PRISM, first select the exact screen/release and endpoint. Treatment-info CSVs are annotations, not sensitivity values. The original primary screen's primary-screen-replicate-collapsed-logfold-change.csv has response rows keyed by cell-line row_name and columns keyed by treatment column_name. Join the corresponding cell-line and treatment-info files; retain compound, dose, and screen identity. Lower log2 fold change indicates greater loss of viability. Secondary-screen AUC comes from dose-response curve parameters and is not the same quantity as single-dose log fold change. See the PRISM workflow before loading these files.

Raw lines 185 to 211
212## Validation and sources
214Before reporting: verify release/file identity, unique joins, identifier level,
215complete gene labels, cohort membership, missingness, screen eligibility, score
216units/direction, multiple-testing family, and whether evidence is observational.
217Expression, copy number, and CRISPR can share technical confounders; low expression
218does not guarantee a measured score of zero. Broad essentiality motivates normal
219cell/selectivity studies; it does not by itself prove a target is undruggable.
221- [26Q1 release notes](https://forum.depmap.org/t/announcing-the-26q1-release/4606): library correction and updated annotations.
222- [25Q2 release notes](https://forum.depmap.org/t/announcing-the-25q2-release/4257): omics/default mapping and WGS/WES changes.
223- [Chronos upstream](https://github.com/broadinstitute/chronos): normalization, copy-number correction, and hit-calling definitions.
224- [Dempster et al., Genome Biology 22:343 (2021)](https://doi.org/10.1186/s13059-021-02540-7): Chronos method, PMID 34930405.
225- [Original PRISM Repurposing resource](https://depmap.org/repurposing/): release-specific data and READMEs.
227The live no-captcha catalogue and original PRISM READMEs were fetched successfully.
228The helper uses Python urllib, which succeeded at review; the same public endpoint
229returned HTTP 403 with a default requests client. Surface access failures instead
230of treating an error page as data.
231Protected portal endpoints returned verification pages; authenticated downloads
232and current-matrix end-to-end analysis remain unverified. This review makes no
233claim of a working bearer-token API or undocumented gene-query endpoints.

Validation and sources

Before reporting: verify release/file identity, unique joins, identifier level, complete gene labels, cohort membership, missingness, screen eligibility, score units/direction, multiple-testing family, and whether evidence is observational. Expression, copy number, and CRISPR can share technical confounders; low expression does not guarantee a measured score of zero. Broad essentiality motivates normal cell/selectivity studies; it does not by itself prove a target is undruggable.

The live no-captcha catalogue and original PRISM READMEs were fetched successfully. The helper uses Python urllib, which succeeded at review; the same public endpoint returned HTTP 403 with a default requests client. Surface access failures instead of treating an error page as data. Protected portal endpoints returned verification pages; authenticated downloads and current-matrix end-to-end analysis remain unverified. This review makes no claim of a working bearer-token API or undocumented gene-query endpoints.

Raw lines 212 to 233

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.