Loading...
Loading...
Prioritize drug targets from a ranked gene list (e.g., scRNA-seq DE output) by orchestrating parallel API queries against UniProt, OpenTargets (with integrated DepMap CRISPR essentiality + gnomAD constraint), PubMed, the Human Protein Atlas (HPA), and ChEMBL tool compounds, then re-ranking by a composite score combining protein localization, druggability, disease genetics, tissue specificity (safety), focus-cell-type expression, CRISPR essentiality, LoF safety constraint, and research maturity. Use whenever the user wants to filter, triage, prioritize, or "do due diligence" on a list of candidate genes for drug discovery, especially after a DE / DEG analysis when they say things like "which of these should I follow up on", "filter for druggable targets", "make a target dossier", "rank these for tractability", "annotate these genes for druggability", or "build a target report". Trigger even when the user says just "filter these candidate genes" or hands over a CSV from a DE pipeline.
npx skill4agent add agents365-ai/365-skills target-prioritizationgeneexpression_table_pass_either_1s.csv<output_dir>/targets_report.mdtargets_summary.csvraw_data/<source>.jsoninput gene list
│
▼
scripts/orchestrate.py
│
├─► fetch_uniprot.py → protein localization, surface, MHC, coding
├─► fetch_opentargets.py → tractability, approved drugs, associated
│ diseases (subsumes GWAS Catalog via OT's
│ integrated genetics evidence), DepMap CRISPR
│ essentiality, gnomAD LOEUF / pLI constraint
├─► fetch_pubmed.py → paper counts (total + focus_disease + cell_context)
├─► fetch_hpa.py → HPA tissue / single-cell specificity + nCPM,
│ expression cluster, cancer prognostics
└─► fetch_chembl.py → top-potency tool compounds per gene (pIC50,
IC50 nM, mechanism) — dossier-only, no score
│
▼
scripts/aggregate.py
│
▼
output_dir/
├─ raw_data/*.json
├─ targets_summary.csv ← composite-score-ranked
└─ targets_report.md ← Claude fills the rationale sectionspython3 ~/myagents/myskills/target-prioritization/scripts/orchestrate.py \
--input <gene_list.csv_or_txt> \
--output <output_dir> \
[--gene-col gene] \
[--top 50]--input--gene-colgene.txt.tsvgenesymbol--toporchestrate.py<output_dir>/raw_data/<source>.jsonaggregate.pyweights.yamltargets_summary.csvtargets_report.mdweights.yaml--weightscomposite_score = w1 * druggability_score (approved drugs, tractability, clin trials)
+ w2 * disease_genetics_score (OpenTargets disease associations + focus-disease bonus)
+ w3 * tractability_bonus (surface or secreted vs intracellular)
+ w4 * tissue_specificity (HPA tissue tag — narrow expression = cleaner window)
+ w5 * cell_context_score (HPA single-cell nCPM rank in FOCUS_CELL_TYPES)
+ w6 * essentiality_score (DepMap CRISPR % essential, pan-essentials capped)
+ w7 * safety_constraint_score (gnomAD LOEUF — high = LoF tolerated → safer to inhibit)
+ w8 * expression_score (from input DE if present)
+ w9 * novelty_bonus (favors moderately studied)
- w10 * over_studied_penalty (PubMed total > cap → diminishing returns)chembl_target_idchembl_best_pchemblchembl_best_ic50_nmchembl_top_compoundsweights.yamlaggregate.pytargets_report.mdprompts/rationale_template.mdaccessionassociatedDiseasessearch_download.php/<ENSG>.jsontarget.depMapEssentialitytarget.geneticConstrainttarget/search.jsonactivity.jsonreferences/api_endpoints.mdscripts/fetch_opentargets.pyscripts/aggregate.pyFOCUS_DISEASE_TERMS("cancer", "carcinoma", "lymphoma")("alzheimer", "parkinson", "huntington", "als")("diabetes", "obesity", "fatty liver", "nash")scripts/aggregate.pyFOCUS_CELL_TYPEScell_context_scorescripts/fetch_pubmed.pyfocus_diseasecell_contextCONTEXTSfocus_disease_*cell_contextscholar-deep-researchliterature-reviewweights.yamlaggregate.pyscripts/fetch_<source>.pyraw_data/<source>.json{gene: {fields}}aggregate.py::compute_composite_score