Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Query the Cancer Dependency Map (DepMap) for cancer cell line gene dependency scores (CRISPR Chronos), drug sensitivity data, and gene effect profiles. Use for identifying cancer-specific vulnerabilities, synthetic lethal interactions, and validating oncology drug targets.
.claude/skills/mkurman-depmap/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 162% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 186% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-18 | ✓→✓ | = Same ✓ | 177% | 0% |
-|-------|---------| | Chronos (CRISPR) | ~ -3 to 0+ | More negative = more essential. Common essential threshold: −1. Pan-essential genes ~−1 to −2 | | RNAi DEMETER2 | ~ -3 to 0+ | Similar scale to Chronos | | Gene Effect | normalized | Normalized Chronos; −1 = median effect of common essential genes |
Key thresholds:
Each cell line has:
DepMap_ID: unique identifier (e.g., ACH-000001)cell_line_name: human-readable nameprimary_disease: cancer typelineage: broad tissue lineagelineage_subtype: specific subtypepythonimport requests import pandas as pd BASE_URL = "https://depmap.org/portal/api" def depmap_get(endpoint, params=None): url = f"{BASE_URL}/{endpoint}" response = requests.get(url, params=params) response.raise_for_status() return response.json()
pythondef get_gene_dependency(gene_symbol, dataset="Chronos_Combined"): """Get CRISPR dependency scores for a gene across all cell lines.""" url = f"{BASE_URL}/gene" params = { "gene_id": gene_symbol, "dataset": dataset } response = requests.get(url, params=params) return response.json() # Alternatively, use the /data endpoint: def get_dependencies_slice(gene_symbol, dataset_name="CRISPRGeneEffect"): """Get a gene's dependency slice from a dataset.""" url = f"{BASE_URL}/data/gene_dependency" params = {"gene_name": gene_symbol, "dataset_name": dataset_name} response = requests.get(url, params=params) data = response.json() return data
For large-scale analysis, download DepMap data files and analyze locally:
pythonimport pandas as pd import requests, os def download_depmap_data(url, output_path): """Download a DepMap data file.""" response = requests.get(url, stream=True) with open(output_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) # DepMap 24Q4 data files (update version as needed) FILES = { "crispr_gene_effect": "https://figshare.com/ndownloader/files/...", # OR download from: https://depmap.org/portal/download/all/ # Files available: # CRISPRGeneEffect.csv - Chronos gene effect scores # OmicsExpressionProteinCodingGenesTPMLogp1.csv - mRNA expression # OmicsSomaticMutationsMatrixDamaging.csv - mutation binary matrix # OmicsCNGene.csv - copy number # sample_info.csv - cell line metadata } def load_depmap_gene_effect(filepath="CRISPRGeneEffect.csv"): """ Load DepMap CRISPR gene effect matrix. Rows = cell lines (DepMap_ID), Columns = genes (Symbol (EntrezID)) """ df = pd.read_csv(filepath, index_col=0) # Rename columns to gene symbols only df.columns = [col.split(" ")[0] for col in df.columns] return df def load_cell_line_info(filepath="sample_info.csv"): """Load cell line metadata.""" return pd.read_csv(filepath)
pythonimport numpy as np import pandas as pd def find_selective_dependencies(gene_effect_df, cell_line_info, target_gene, cancer_type=None, threshold=-0.5): """Find cell lines selectively dependent on a gene.""" # Get scores for target gene if target_gene not in gene_effect_df.columns: return None scores = gene_effect_df[target_gene].dropna() dependent = scores[scores <= threshold] # Add cell line info result = pd.DataFrame({ "DepMap_ID": dependent.index, "gene_effect": dependent.values }).merge(cell_line_info[["DepMap_ID", "cell_line_name", "primary_disease", "lineage"]]) if cancer_type: result = result[result["primary_disease"].str.contains(cancer_type, case=False, na=False)] return result.sort_values("gene_effect") # Example usage (after loading data) # df_effect = load_depmap_gene_effect("CRISPRGeneEffect.csv") # cell_info = load_cell_line_info("sample_info.csv") # deps = find_selective_dependencies(df_effect, cell_info, "KRAS", cancer_type="Lung")
pythonimport pandas as pd from scipy import stats def biomarker_analysis(gene_effect_df, mutation_df, target_gene, biomarker_gene): """ Test if mutation in biomarker_gene predicts dependency on target_gene. Args: gene_effect_df: CRISPR gene effect DataFrame mutation_df: Binary mutation DataFrame (1 = mutated) target_gene: Gene to assess dependency of biomarker_gene: Gene whose mutation may predict dependency """ if target_gene not in gene_effect_df.columns or biomarker_gene not in mutation_df.columns: return None # Align cell lines common_lines = gene_effect_df.index.intersection(mutation_df.index) scores = gene_effect_df.loc[common_lines, target_gene].dropna() mutations = mutation_df.loc[scores.index, biomarker_gene] mutated = scores[mutations == 1] wt = scores[mutations == 0] stat, pval = stats.mannwhitneyu(mutated, wt, alternative='less') return { "target_gene": target_gene, "biomarker_gene": biomarker_gene, "n_mutated": len(mutated), "n_wt": len(wt), "mean_effect_mutated": mutated.mean(), "mean_effect_wt": wt.mean(), "pval": pval, "significant": pval < 0.05 }
pythonimport pandas as pd def co_essentiality(gene_effect_df, target_gene, top_n=20): """Find genes with most correlated dependency profiles (co-essential partners).""" if target_gene not in gene_effect_df.columns: return None target_scores = gene_effect_df[target_gene].dropna() correlations = {} for gene in gene_effect_df.columns: if gene == target_gene: continue other_scores = gene_effect_df[gene].dropna() common = target_scores.index.intersection(other_scores.index) if len(common) < 50: continue r = target_scores[common].corr(other_scores[common]) if not pd.isna(r): correlations[gene] = r corr_series = pd.Series(correlations).sort_values(ascending=False) return corr_series.head(top_n) # Co-essential genes often share biological complexes or pathways
CRISPRGeneEffect.csv and sample_info.csvprimary-screen-replicate-treatment-info.csv)| File | Description | |------|-------------| | CRISPRGeneEffect.csv | CRISPR Chronos gene effect (primary dependency data) | | CRISPRGeneEffectUnscaled.csv | Unscaled CRISPR scores | | RNAi_merged.csv | DEMETER2 RNAi dependency | | sample_info.csv | Cell line metadata (lineage, disease, etc.) | | OmicsExpressionProteinCodingGenesTPMLogp1.csv | mRNA expression | | OmicsSomaticMutationsMatrixDamaging.csv | Damaging somatic mutations (binary) | | OmicsCNGene.csv | Copy number per gene | | PRISM_Repurposing_Primary_Screens_Data.csv | Drug sensitivity (repurposing library) |
Download all files from: https://depmap.org/portal/download/all/
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | 7,367 | 5,280 | -28% | 1 | 1 | 0% | 1,259 | 3,487 | +177% | 0 | 0 | — |
case-01 | fail→pass | 16,477 | 16,129 | -2% | 1 | 1 | 0% | 3,717 | 6,083 | +64% | 0 | 0 | — |
case-02 | pass→pass | 6,304 | 5,799 | -8% | 1 | 1 | 0% | 1,263 | 3,920 | +210% | 0 | 0 | — |
case-03 | pass→pass | 9,281 | 4,885 | -47% | 1 | 1 | 0% | 1,491 | 3,502 | +135% | 0 | 0 | — |
case-04 | pass→pass | 7,097 | 3,812 | -46% | 1 | 1 | 0% | 1,205 | 3,233 | +168% | 0 | 0 | — |
case-05 | fail→pass | 8,544 | 9,952 | +16% | 1 | 1 | 0% | 1,627 | 4,268 | +162% | 0 | 0 | — |
case-06 | pass→pass | 8,910 | 4,722 | -47% | 1 | 1 | 0% | 1,366 | 3,344 | +145% | 0 | 0 | — |
case-07 | fail→pass | 32,658 | 14,499 | -56% | 1 | 1 | 0% | 1,910 | 5,455 | +186% | 0 | 0 | — |
case-08 | pass→pass | 6,047 | 5,818 | -4% | 1 | 1 | 0% | 1,076 | 3,643 | +239% | 0 | 0 | — |
case-09 | pass→pass | 5,888 | 2,588 | -56% | 1 | 1 | 0% | 989 | 3,108 | +214% | 0 | 0 | — |
case-10 | pass→pass | 5,909 | 3,327 | -44% | 1 | 1 | 0% | 1,025 | 3,212 | +213% | 0 | 0 | — |
case-11 | pass→pass | 12,839 | 4,835 | -62% | 1 | 1 | 0% | 2,425 | 3,385 | +40% | 0 | 0 | — |
case-12 | fail→pass | 11,717 | 7,574 | -35% | 1 | 1 | 0% | 2,097 | 4,167 | +99% | 0 | 0 | — |
case-13 | pass→pass | 11,427 | 10,447 | -9% | 1 | 1 | 0% | 1,799 | 4,280 | +138% | 0 | 0 | — |
case-14 | pass→pass | 14,084 | 11,779 | -16% | 1 | 1 | 0% | 2,130 | 4,483 | +110% | 0 | 0 | — |
case-15 | pass→pass | 6,867 | 6,859 | -0% | 1 | 1 | 0% | 1,074 | 3,707 | +245% | 0 | 0 | — |
case-16 | pass→pass | 7,498 | 9,131 | +22% | 1 | 1 | 0% | 1,356 | 4,346 | +221% | 0 | 0 | — |
case-17 | pass→pass | 13,665 | 11,097 | -19% | 1 | 1 | 0% | 2,127 | 4,557 | +114% | 0 | 0 | — |
case-19 | pass→pass | 15,030 | 14,222 | -5% | 1 | 1 | 0% | 2,859 | 5,296 | +85% | 0 | 0 | — |
case-20 | pass→pass | 23,193 | 17,774 | -23% | 1 | 1 | 0% | 4,564 | 6,304 | +38% | 0 | 0 | — |
case-21 | pass→pass | 9,003 | 11,849 | +32% | 1 | 1 | 0% | 1,784 | 4,990 | +180% | 0 | 0 | — |
case-22 | pass→pass | 9,824 | 11,974 | +22% | 1 | 1 | 0% | 1,856 | 4,892 | +164% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.