← Back to Skills Marketplace
bombert

NoahAI drug pipeline

by yichen · GitHub ↗ · v1.0.6 · MIT-0
cross-platform ✓ Security Clean
213
Downloads
1
Stars
0
Active Installs
7
Versions
Install in OpenClaw
/install drug-pipeline
Description
Search a pharmaceutical drug database for pipeline and development information. Use this skill whenever the user asks about drugs by name, target, indication...
README (SKILL.md)

Drug Pipeline Search Skill

This skill converts natural language questions into structured API queries against a pharmaceutical drug database, then presents the results in a readable format.

Workflow

  1. Parse user intent — Extract key entities from the user's question
  2. Build query parameters — Map entities to the query schema below
  3. Execute the query — Run scripts/search.py
  4. Present results — Format and display drug records to the user

Step 1: Extract Keywords

Identify the following entity types from the user's question:

Field Type Description Example
drug_name dict Drug name(s) {"logic": "or", "data": ["pembrolizumab"]}
company List[str] Sponsor / developer company ["Pfizer", "Roche"]
indication List[str] Disease / indication ["lung cancer", "NSCLC"]
target dict Biological target(s) {"logic": "or", "data": ["PD-1", "VEGF"]}
drug_modality dict Drug modality {"logic": "or", "data": ["Vaccine", "mRNA"]}
drug_feature dict Drug feature(s) {"logic": "or", "data": ["Biologic", "Non-NME"]}
phase List[str] Development phase(s) ["Preclinical", "I", "II", "III", "IV", "Others", "IND", "Suspended", "Approved", "Unknow", "Withdraw from Market", "BLA/NDA"]
route_of_administration dict Route of administration (requires exact formatted values) {"logic": "or", "data": ["Intravenous (IV)", "Oral (PO)"]}
page_num int Page index (0-based) 0
page_size int Results per page (1–2000) 200

Dict field format:

{"logic": "or", "data": ["value1", "value2"]}
  • logic controls how multiple values are combined: "or" (any match) or "and" (all must match). Default to "or" unless the user explicitly wants all terms to apply simultaneously.
  • data is the list of keyword strings to match.

Type rules:

  • company, indication, phase, location → plain List[str]

  • drug_name, target, drug_modality, drug_feature, route_of_administrationdict with logic and data

  • Default to page_num: 0, page_size: 10 unless the user specifies otherwise

  • Prefer English keywords (the database is indexed in English); translate non-English terms

  • drug_modality must use exact strings from this set:

    [
      "Steroids", "Vaccine", "Antisense RNA", "Antibody-Drug Conjugates, ADCs", "Unknown", "Protein Degrader",
      "Monoclonal Antibodies", "mRNA", "Others", "Cell-based Therapies", "Imaging Agents", "Gene Therapy",
      "miRNA", "Polypeptide", "Recombinant Proteins", "Small Molecule", "siRNA/RNAi", "Trispecific Antibodies",
      "Polyclonal Antibodies", "Bi-specific Antibodies", "Glycoconjugates", "Radiopharmaceutical",
      "Nucleic Acid-based", "Carbohydrates"
    ]
    
  • drug_feature must use exact strings from this set:

    [
      "505b2", "Bacterial Product", "Biologic", "Biosimilar", "Device", "Fixed-Dose Combination", "Immuno-Oncology",
      "New Molecular Entity (NME)", "Non-NME", "Precision Medicine", "Reformulation", "Specialty Drug", "Viral"
    ]
    
  • route_of_administration must use exact strings from this set:

    [
      "Intraarterial", "Intraurethral", "Inhaled", "Intranasal", "Subcutaneous (SQ) - Unspecified", "Transdermal",
      "Intraocular/Subretinal/Subconjunctival", "Subcutaneous (SQ) Injection", "Intrauterine", "Intralymphatic",
      "Intradiscal", "Intra-amniotic", "Intrathecal", "Intracerebral/cerebroventricular", "Intramuscular (IM)",
      "Intraarticular", "Intracochlear", "Surgical Implantation", "Hemoperfusion", "Subcutaneous (SQ) Infusion",
      "Intravitreal", "Intravenous (IV)", "Oral (PO)", "Intradermal", "Percutaneous Catheter/Injection",
      "Intranodal", "Intravesical", "Intracameral", "Intratympanic", "Intratumoral",
      "Sublingual (SL)/Oral Transmucosal", "Intravaginal", "N/A", "Rectal", "Intracavitary",
      "Intra-Cisterna Magna (ICM) Injection", "Injectable - Unspecified", "Intratracheal", "Topical",
      "Instillation", "Intraintestinal", "Submucosal"
    ]
    

Step 2: Execute the Query

python scripts/search.py --params '\x3CJSON string>'

Or using a parameter file:

python scripts/search.py --params-file /tmp/query.json

Add --raw to receive the unformatted JSON response.

Step 3: Interpret Results

The response contains:

  • total_count — total number of matching drugs
  • results — current page of drug records, each with name, phase, modality, targets, companies, indication, development progress, etc.

Step 4: Review and Fallback Search Strategies

If no results are returned, apply the fallback strategies below before giving up. When an initial query returns zero or poor results, try these strategies in order:

Strategy 1 — Drug Name Variant Expansion

Drug names in the database may use different formats (with/without hyphens, partial codes, aliases). Expand the drug_name field to include common variants and merge deduplicated results.

{
  "drug_name": {"logic": "or", "data": ["SHR-A1904", "SHR A1904", "A1904", "SHR1904"]},
  "page_num": 0,
  "page_size": 50
}

Common variant patterns to try:

  • Remove or replace hyphens: SHR-A1904SHR A1904, SHRA1904
  • Strip prefix/suffix: 9MW-2821MW-2821, 9MW2821
  • Known alias: include trade names or INN alongside internal codes

Strategy 2 — Company-First with Application-Layer Filtering

When drug name matching is unreliable, use the company as the anchor. Fetch a broad set of the company's drugs, then filter by modality/indication/target in post-processing.

{
  "company": ["Roche", "Roche Inc"],
  "page_num": 0,
  "page_size": 500
}

After retrieving results, apply local filters:

  • modality == "Monoclonal Antibodies"
  • indication contains "breast cancer"
  • drug_name matches known code pattern

Use this strategy when the drug code is ambiguous or the API match rate is low.


Strategy 3 — Broad Target/Modality Search with Post-Filtering

When neither name nor company is reliable, search by biological target and modality, then narrow results client-side.

{
  "target": {"logic": "or", "data": ["CLDN18.2", "Nectin-4", "HER2"]},
  "drug_modality": {"logic": "or", "data": ["Monoclonal Antibodies"]},
  "page_num": 0,
  "page_size": 200
}

After retrieval, filter by company name or drug code pattern using substring matching (e.g. code starts with SHR, 9MW, A166).

Note: If the API supports regex, patterns like (SHR|9MW|A166) can be passed directly in drug_name.data to broaden matching in a single call.


Decision Tree

Initial query returns results?
├── Yes → present results
└── No  → Strategy 1: expand drug_name variants
          └── Still no results → Strategy 2: company anchor + local filter
                                 └── Still no results → Strategy 3: target/modality broad search
Any step hits HTTP 429?
└── Pause entire chain 30s → resume from current strategy
    (sleep ≥5s between every request to avoid triggering 429)

Conversion Examples

User: "Find PD-1 antibodies in Phase 3"

{
  "target": {"logic": "or", "data": ["PD-1"]},
  "drug_modality": {"logic": "or", "data": ["Monoclonal Antibodies"]},
  "phase": ["III"],
  "page_num": 0,
  "page_size": 30
}

User: "Roche bispecific antibodies for lung cancer"

{
  "company": ["Roche"],
  "drug_modality": {"logic": "or", "data": ["Bi-specific Antibodies"]},
  "indication": ["lung cancer"],
  "page_num": 0,
  "page_size": 30
}

User: "Oral small molecule KRAS G12C inhibitors"

{
  "target": {"logic": "or", "data": ["KRAS"]},
  "drug_modality": {"logic": "or", "data": ["Small Molecule"]},
  "route_of_administration": {"logic": "or", "data": ["Oral (PO)"]},
  "page_num": 0,
  "page_size": 30
}

User: "Drugs targeting both PD-1 and VEGF"

{
  "target": {"logic": "and", "data": ["PD-1", "VEGF"]},
  "page_num": 0,
  "page_size": 30
}

User: "Look up pembrolizumab"

{
  "drug_name": {"logic": "or", "data": ["pembrolizumab"]},
  "page_num": 0,
  "page_size": 30
}

Dependencies

  • Python 3.8+
  • requests library (pip install requests)
  • Environment variable NOAH_API_TOKEN — API authentication token (required)
    • Register for a free account at noah.bio to obtain your API key.

Security & Packaging Notes

  • This skill only calls NoahAI official HTTPS endpoints under https://www.noah.bio/api/ and does not contact third-party services.
  • It requires exactly one environment variable: NOAH_API_TOKEN. Store it in the environment or a local .env file, and never place it inline in commands, chats, or packaged files.
  • The token is scoped to read medical public details only and cannot access private user records.
  • The skill does not intentionally persist request parameters locally. Any server-side retention is determined by the NoahAI API service and its operational logging policies.
  • It does not request persistent or system-level privileges and does not modify system configuration.
  • The skill is source-file based (Python scripts only) and does not require runtime installs, package downloads, or external bootstrap steps.
Usage Guidance
This skill appears coherent with its stated purpose, but consider the following before installing: 1) NOAH_API_TOKEN is a secret — only provide a token you trust to be used with https://www.noah.bio and avoid sharing high-privilege credentials. 2) The script sends whatever text you query to an external API; avoid including patient-identifying or sensitive data in queries. 3) The script prints the query payload to stderr (for debugging), so logs could contain your query text; confirm your logging/monitoring policies. 4) Ensure your environment can run python3 and has the 'requests' package (or allow installation). 5) If you need stronger assurance, verify the operator/owner of noah.bio and audit network traffic or run the script in an isolated environment before granting the token.
Capability Analysis
Type: OpenClaw Skill Name: drug-pipeline Version: 1.0.6 The skill is a legitimate tool designed to search a pharmaceutical drug database via the Noah AI API. It uses a Python script (scripts/search.py) to send structured queries to https://www.noah.bio/api/ using a user-provided NOAH_API_TOKEN. The code is well-documented, follows secure practices (such as disabling redirects to prevent token leakage), and the SKILL.md instructions are strictly focused on optimizing search results through logical fallback strategies without any signs of malicious intent or prompt injection.
Capability Tags
requires-sensitive-credentials
Capability Assessment
Purpose & Capability
Name/description say 'drug pipeline search' and the included script POSTS JSON queries to https://www.noah.bio/api/skills/drug_search/ using a NOAH_API_TOKEN. The requested binary (python3) and single env var are appropriate for this purpose.
Instruction Scope
SKILL.md instructs the agent to parse user queries into structured parameters and call scripts/search.py. The script only reads the provided query params (or a params file), the NOAH_API_TOKEN env var, and optional output path — it does not attempt to read other system files, shell history, or unrelated environment variables.
Install Mechanism
There is no automated install spec (instruction-only), which minimizes disk changes. The bundled script requires the third-party 'requests' Python package; if requests is missing the script exits with an error and suggests pip install requests. This is expected but means the environment must allow installing Python packages if not already present.
Credentials
Only a single credential (NOAH_API_TOKEN) is required and declared as the primaryEnv. That matches the script's behavior (it uses the token as a Bearer header). No unrelated secrets or config paths are requested.
Persistence & Privilege
always is false and the skill is user-invocable; it does not request permanent platform-level presence or modify other skills. Autonomous invocation is allowed (platform default) but not combined with other privilege concerns.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install drug-pipeline
  3. After installation, invoke the skill by name or use /drug-pipeline
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.6
- Updated valid values for `drug_modality`, `drug_feature`, and `route_of_administration` fields; these must now use exact strings from provided lists. - `route_of_administration` and example values now require exact formatting (e.g., "Intravenous (IV)", "Oral (PO)"). - Clarified that `drug_modality` and `drug_feature` fields have new standardized options (e.g., "Monoclonal Antibodies", "Biologic"). - Updated fallback strategies to use new terminology and valid values for modality and features. - Adjusted sample JSON queries and examples to match new field value requirements.
v1.0.5
No changes were detected in this version.
v1.0.4
Added robust fallback search strategies for zero-result queries: - Introduced a new step-by-step fallback process to expand and improve search coverage when initial queries return no results. - Specifies variant expansion for drug names (e.g., hyphen removal, alias inclusion). - Describes company-anchored searching with client-side post-filtering when name matching fails. - Outlines broad target/modality queries with local narrowing as a final fallback. - Includes a decision tree and guidance on handling HTTP 429 rate-limit errors. - Updated documentation to reflect these advanced fallback strategies and workflow.
v1.0.3
- No changes detected in this version; documentation and functionality remain the same.
v1.0.2
- No file or documentation changes detected in this version. - Functionality and workflow remain unchanged.
v1.0.1
- Added metadata section specifying OpenClaw emoji, environment requirements, and primary environment variable. - Expanded allowed values for the `phase` field to include specific phases like "Preclinical", "I", "II", "III", "IV", and others. - Updated `location` examples for greater specificity. - Increased the allowable `page_size` to a maximum of 2000 and changed the default to 10. - Aligned example parameter values for phases (e.g., using "III" instead of "Phase 3") to reflect updated schema.
v1.0.0
Initial release of drug-search (drug-pipeline) skill. - Enables natural language search of a pharmaceutical drug database for pipeline and development details. - Parses user questions to structured query parameters (drug name, target, indication, company, modality, phase, etc.). - Executes backend API calls and formats matching drug records for easy review. - Supports flexible filters (logical "and"/"or", pagination, translation to English, etc.). - Includes usage workflow, parameter guidelines, and conversion examples.
Metadata
Slug drug-pipeline
Version 1.0.6
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 7
Frequently Asked Questions

What is NoahAI drug pipeline?

Search a pharmaceutical drug database for pipeline and development information. Use this skill whenever the user asks about drugs by name, target, indication... It is an AI Agent Skill for Claude Code / OpenClaw, with 213 downloads so far.

How do I install NoahAI drug pipeline?

Run "/install drug-pipeline" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is NoahAI drug pipeline free?

Yes, NoahAI drug pipeline is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does NoahAI drug pipeline support?

NoahAI drug pipeline is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created NoahAI drug pipeline?

It is built and maintained by yichen (@bombert); the current version is v1.0.6.

💬 Comments