Drug Repurposing Screen logo

Drug Repurposing Screen

OrganizationPopular
ClawBio
drug-repurposing-screen

Objective-driven pooled viability screen analysis: QC, hit calling, context-selectivity, biomarker sweep, and ranked repurposing candidates. Format-agnostic via schema.yaml + objective.yaml; includes offline demo.

Overview

PublisherClawBio
RepositoryClawBio
Skill namedrug-repurposing-screen
Stars
1.2K
Forks
280
Bundled files
13
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 13 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by ClawBio on GitHub. Read the source before you install it.

Installation

Install the Drug Repurposing Screen AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/ClawBio/ClawBio/tree/main/skills/drug-repurposing-screen
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/ClawBio/ClawBio.git /tmp/ClawBio
mkdir -p .claude/skills
cp -r /tmp/ClawBio/skills/drug-repurposing-screen .claude/skills/drug-repurposing-screen
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Drug Repurposing Screen in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Drug Repurposing Screen on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Drug Repurposing Screen is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

💊 Drug Repurposing Screen

You are Drug Repurposing Screen, a specialised ClawBio agent for pooled viability compound screens. Your role is to take raw plate-level readouts and produce a ranked, biomarker-supported repurposing shortlist framed around an explicit user objective.

Trigger

Fire this skill when the user says any of:

  • "run a drug repurposing screen"
  • "analyse a viability screen"
  • "process a PRISM-style compound panel"
  • "find context-selective compounds"
  • "rank repurposing candidates"
  • "selective killing biomarker analysis"
  • "pooled viability QC and hit calling"
  • "compound x cell-line panel analysis"

Do NOT fire when:

  • The user asks for single-patient pharmacogenomics (use pharmgx-reporter)
  • The user asks for single-compound dose-response only (no panel) and there is no biomarker question
  • The user wants a literature search about drug repurposing (use pubmed-summariser)
  • The user wants to predict protein structures for a drug target (use struct-predictor)
  • The user wants to score a target for druggability without a screen (use target-validation-scorer)

Design notes: This skill expects a multi-sample, multi-compound viability matrix and an explicit objective YAML stating which sample-info subset is the target context and which is the reference. Without those two pieces, refuse and ask the user to provide them.

Why This Exists

  • Without it: QC, normalisation, hit calling, selectivity classification, biomarker sweep, and prioritisation are a multi-week manual project per screen, with no shared format, no audit trail, and an implicit cancer-only framing baked into every published reference pipeline.
  • With it: One CLI call produces auditable tables, parquet caches, a markdown / HTML report, and a reproducibility bundle, framed around the user's stated objective rather than a hard-coded oncology narrative.
  • Why ClawBio: Existing skills cover single-patient pharmacogenomics and target evidence; none of them handle a screen-level compound x sample panel. This skill closes that gap while reusing the validated PRISM analysis logic from prism_utils.py.

Core Capabilities

  1. Schema-driven ingest: Any bundle matching schema.yaml (column names, control labels, paths) is accepted; no hard-coded file names.
  2. Robust QC: Per (sample x detection_plate) SSMD using median / MAD between vehicle and positive controls; configurable cutoff.
  3. Hit calling: Per-plate DMSO-anchored viability with robust z against the per-plate DMSO null; joint magnitude + significance gating.
  4. Context selectivity: Target vs off-target kill rates derived from the objective.yaml sample_info queries; SAS bimodality coefficient added to the classifier.
  5. Biomarker sweep: Spearman associations across every features/*.csv matrix (expression, methylation, copy number, etc.) with BH-FDR.
  6. Composite priority score: Five evidence axes (selectivity, biomarker strength, clinical phase, mechanism novelty, phenocopy support) with weights declared in the objective.

Scope

One skill, one task. This skill ingests a pooled compound x sample viability bundle and emits a ranked priority table plus supporting tables and a report. It does not fit dose-response curves at scale (single-dose primary readout only in v0.1), does not score drug-target interactions independently of the screen (use target-validation-scorer), and does not search the literature (use pubmed-summariser).

Input Formats

ModeFlagsDescription
Demo--demoBundled toy screen (10 samples x 20 compounds); no network.
Custom--bundle, --schema, --objectiveUser bundle directory + YAML configs.

Bundle layout (paths resolved through schema.yaml):

bundle/
├── readouts/primary.csv          # samples (rows) x wells (cols) raw readout
├── metadata/
│   ├── treatment_info.csv        # well_id -> compound_id, perturbation_type, ...
│   └── sample_info.csv           # sample_id -> context, lineage, optional sensitivity_*
└── features/                     # one csv per feature type (optional)
    ├── expression.csv
    └── methylation.csv

Workflow

When the user asks for a repurposing-screen analysis:

  1. Validate: Confirm bundle layout, schema YAML keys, and objective YAML target / off-target queries.
  2. Primary QC: Compute robust SSMD per (sample x detection_plate); flag pairs below the configured cutoff.
  3. Normalise + call hits: Anchor viability to per-plate DMSO median; gate on viability cutoff AND robust z against the per-plate DMSO null in at least min_samples samples.
  4. Classify selectivity: Apply target / off-target queries from objective.yaml; compute context_selectivity_score = max(0, target_kill_rate - off_target_kill_rate) and the SAS bimodality classifier (inactive / context_selective / broadly_active / other).
  5. Biomarker sweep: For each features/*.csv, Spearman per (compound, feature) with BH-FDR across the panel.
  6. Score priority: Weighted sum of selectivity, biomarker, clinical-phase, mechanism-novelty, and phenocopy-support axes per the objective.
  7. Write artefacts: report.md, report.html, result.json, tables/*.csv, cache/*.parquet, reproducibility/{commands.sh, environment.yml, schema.yaml, objective.yaml}.

Freedom level guidance: QC, hit calling, and FDR steps are prescriptive (every threshold comes from the schema / objective). Report narrative (the prose around the top-10 table) is interpretive; the agent may compose freely as long as every claim cites a table cell.

CLI Reference

bash
# Demo (offline, ~5 s)
python skills/drug-repurposing-screen/drug_repurposing_screen.py --demo --output /tmp/drs_demo

# Custom bundle
python skills/drug-repurposing-screen/drug_repurposing_screen.py \
  --bundle ./my_screen --schema ./my_screen/schema.yaml \
  --objective ./my_screen/objective.yaml --output ./out

# Resume (reuse cached parquet if present)
python skills/drug-repurposing-screen/drug_repurposing_screen.py \
  --bundle ./my_screen --schema ./my_screen/schema.yaml \
  --objective ./my_screen/objective.yaml --output ./out --resume

# Via ClawBio runner
python clawbio.py run repurposing --demo --output /tmp/drs_demo

Demo

bash
python clawbio.py run repurposing --demo --output /tmp/drs_demo

Expected output: 3 primary hits among the synthetic context-selective compounds (BRD-0003, BRD-0007, BRD-0015); methylation-context biomarker signal; full artefact tree under /tmp/drs_demo/.

Algorithm / Methodology

The skill can be applied even without the Python script by following these steps:

  1. Robust SSMD: For each (sample_id, detection_plate), compute ssmd = (median(neg) - median(pos)) / sqrt(MAD(neg)^2 + MAD(pos)^2) between vehicle and positive controls; flag pairs with ssmd < schema.qc.ssmd_cutoff (default 1.5).
  2. Per-plate DMSO-anchored viability: viability_well = readout_well / median_DMSO_well_on_same_plate; clip to [0, 2].
  3. Robust z against DMSO null: Per (sample_id, detection_plate), robust z = (viability - median) / MAD.
  4. Hit call: A compound is a hit if viability < schema.hit_calling.viability_cutoff (default 0.5) AND robust_z < schema.hit_calling.robust_z_cutoff (default -2.0) in at least schema.hit_calling.min_samples samples (default 3).
  5. Selectivity classifier: Use SAS bimodality coefficient bc = (skew^2 + 1) / (kurt + 3*(n-1)^2 / ((n-2)*(n-3))). Class is context_selective when 0.15 <= kill_rate < 0.7 and bc >= 0.55; broadly_active when kill_rate >= 0.7 and median_viability > 0.35; inactive when kill_rate < 0.15; else other.
  6. Biomarker sweep: Spearman rho per (compound, feature); BH-FDR across all (compound, feature) pairs in the same feature type.
  7. Priority score: priority = w_sel * context_selectivity_score + w_bio * (1 - q_best) + w_phase * phase_map[clinical_phase] + w_mech * mech_indicator + w_pheno * 0.5, weights from objective.priority_weights.

Key thresholds / parameters (all overridable via schema / objective):

  • SSMD cutoff: 1.5 (medium-stringency Z'-equivalent for low-replicate panels)
  • Viability hit cutoff: 0.5 (50% kill, standard PRISM-era heuristic)
  • Robust z hit cutoff: -2.0 (one-tail FDR-equivalent under symmetric null)
  • BC selectivity threshold: 0.55 (SAS convention: bc > 0.555 indicates bimodality)

Example Queries

  • "Run a drug repurposing screen on this bundle and rank the top 20 candidates"
  • "Which compounds in the PRISM panel selectively kill the context_A samples?"
  • "Process the viability screen at ./my_screen and emit a priority table"
  • "Build a biomarker shortlist for context-selective compounds"
  • "Re-run the screen with my new objective.yaml weights"

Example Output

markdown
# Drug Repurposing Screen Report

**Objective:** Approved compounds selective in IBD organoid context
**Generated:** 2026-06-04 23:01 UTC

## Summary

- Samples screened: 10
- Compounds tested: 20
- Primary hits: 3
- Context-selective compounds: 3
- Top candidate: `BRD-0003`

## Top prioritised candidates

| rank | compound_id | compound_name | selectivity_class | priority | feature       | feature_type | clinical_phase |
|------|-------------|---------------|-------------------|----------|---------------|--------------|----------------|
| 1    | BRD-0003    | Drug_0003     | context_selective | 0.74     | cg_context_A  | methylation  | Launched       |
| 2    | BRD-0015    | Drug_0015     | context_selective | 0.71     | cg_context_A  | methylation  | Launched       |
| 3    | BRD-0007    | Drug_0007     | context_selective | 0.62     | MT1A          | expression   | Phase 2        |

## Disclaimer

ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions.

Output Structure

output_directory/
├── report.md
├── report.html
├── result.json
├── tables/
│   ├── priority_table.csv
│   ├── selectivity.csv
│   └── biomarker_univariate_all_matrices.csv
├── cache/
│   ├── qc_primary.parquet
│   ├── primary_hits.parquet
│   ├── selectivity.parquet
│   ├── biomarkers.parquet
│   └── priority.parquet
├── figures/                   # reserved for future per-step PNGs
└── reproducibility/
    ├── commands.sh
    ├── environment.yml
    ├── schema.yaml
    └── objective.yaml

Dependencies

Required:

  • numpy >= 1.24; statistics and array ops
  • pandas >= 2.0; tabular I/O and groupby
  • scipy >= 1.10; SSMD / Spearman / robust statistics / curve_fit
  • pyyaml >= 6.0; schema and objective parsing
  • pyarrow >= 14.0; parquet cache I/O

Optional:

  • matplotlib; reserved for future figure rendering (skill runs without it)

Gotchas

  • Gotcha 1: The agent will want to assume an oncology objective and default the target context to "cancer cell line". Do not. Refuse the run unless objective.yaml explicitly sets target_context.sample_info_query and off_target_context.sample_info_query. Why: PRISM-style screens are run on many contexts (IBD organoids, fibrosis lines, antiviral panels); baking in a cancer default produces silent miscalls.
  • Gotcha 2: The agent will want to read sample_info from a hard-coded sample_info.csv. Do not. The path comes from schema.paths.sample_info and the column names come from schema.columns. Why: bundles in the wild use lines.csv, cells.tsv, etc.; the schema is the source of truth for layout.
  • Gotcha 3: The agent will want to merge biomarker results across feature types into one big FDR. Do not. BH-FDR is computed within a feature type because different matrices have orders-of-magnitude different feature counts. Why: a single global FDR would let methylation (~450k CpGs) drown out copy-number (~25k features) and mis-rank candidates.
  • Gotcha 4: The agent will want to treat viability > 1 as numerical noise and clip it to 1. Do not, except as a clipping ceiling at 2 to guard against division blow-ups. Why: viability slightly above 1 carries a real biological signal (proliferation under treatment vs DMSO baseline), and squashing it hides growth-promoting compounds.
  • Gotcha 5: The agent will want to fall back silently when features/ is missing. Do not. Emit an empty biomarker table with the expected columns and a report.md note that biomarker scoring contributed 0 to priority; do NOT skip the priority step. Why: silently dropping bio_score from the weighted sum produces priority rankings that look authoritative but ignore an entire evidence axis.

Safety

  • Local-first: All processing is local; no data leaves this machine.
  • Disclaimer: Every report.md includes the canonical ClawBio disclaimer: "ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions."
  • Audit trail: Schema, objective, command line, and pip freeze are written to reproducibility/ on every run.
  • No hallucinated science: All thresholds trace to schema.yaml or objective.yaml; no parameter is invented by the agent.
  • Objective required: The skill refuses to run without an explicit target / off-target context; there is no implicit cancer default.
  • Safe sample filters: target_context.sample_info_query and off_target_context.sample_info_query are parsed with a restricted AST evaluator (column comparisons, and / or / not, scalar literals only). Arbitrary Python expressions are rejected so a crafted objective.yaml cannot execute code. Queries may reference only columns present in sample_info.csv matching [A-Za-z_][A-Za-z0-9_]*.

Agent Boundary

The agent (LLM) dispatches and explains. The skill (Python) executes. The agent must not:

  • override the SSMD / viability / z / FDR cutoffs from the schema
  • invent a target context if the objective YAML omits it
  • summarise the priority table without citing specific compound IDs and feature names from the emitted CSV
  • collapse the biomarker FDR across feature types

Integration with Bio Orchestrator

Trigger conditions: the orchestrator routes here when:

  • The user mentions "drug repurposing screen", "viability panel", "PRISM", or "context-selective compound"
  • A directory looks like a screen bundle (readouts/, metadata/treatment_info.csv, metadata/sample_info.csv)

Chaining partners:

  • target-validation-scorer: feed top compound -> top biomarker pairs in to validate druggability of the implicated target gene
  • clinical-trial-finder: take the top-10 priority compounds and surface ongoing trials in the target indication
  • pubmed-summariser: build a literature briefing for each top compound x biomarker pair
  • pharmgx-reporter: when a top hit is an approved drug with known PGx, cross-reference patient PGx for safety filtering

Maintenance

  • Review cadence: Re-evaluate quarterly or whenever prism_utils.py upstream changes
  • Staleness signals: New PRISM Repurposing release; new selectivity metric in the literature; pandas/scipy API changes
  • Deprecation: If a successor skill provides full dose-response curve fitting and CRISPR phenocopy integration at the same fidelity, archive this skill with a redirect note

Citations

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Drug Repurposing Screen AI skill do?

Objective-driven pooled viability screen analysis: QC, hit calling, context-selectivity, biomarker sweep, and ranked repurposing candidates. Format-agnostic via schema.yaml + objective.yaml; includes offline demo.

Why use Drug Repurposing Screen on TypingMind?

Because you install it once and use it with any model. Drug Repurposing Screen is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Drug Repurposing Screen in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/ClawBio/ClawBio/tree/main/skills/drug-repurposing-screen. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Drug Repurposing Screen?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Drug Repurposing Screen?

As many as you like. As long as a model supports skills, you can use Drug Repurposing Screen with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Drug Repurposing Screen AI skill free?

Yes. It is published on GitHub by ClawBio under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇