Skills Agentes

Medchem

Filtros de química medicinal para triaje de compuestos: reglas de similitud a fármacos (Lipinski, Veber, CNS), catálogos de alertas estructurales (PAINS, NIBR, ChEMBL), métricas de complejidad y lenguaje de consulta.

Solicitaread write edit bash
Estrellas
45.9k

en todo el repo

Actividad
57

0–100, la ruta de este skill

Actualizado
hace 2 meses

último commit aquí

Commits
2

últimos 90 días

Contexto
2.7k tok

55 tok en reposo

Paquete
4 archivos

40 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add K-Dense-AI/scientific-agent-skills --skill medchem --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Aplica reglas de similitud a fármacos (rule_of_five, Veber, CNS, lead-like) a librerías de compuestos
  • Filtra por catálogos de alertas estructurales (PAINS, NIBR, Brenk, ChEMBL) devolviendo motivos y severidad
  • Calcula métricas de complejidad frente a umbrales percentiles derivados de ZINC (bertz, sas, qed, etc.)
  • Detecta grupos funcionales y scaffolds privilegiados con medchem.groups
  • Combina reglas, alertas y propiedades con el lenguaje de consulta QueryFilter (MATCHRULE, HASALERT, HASPROP)

Úsalo cuando

  • Aplicar reglas de similitud a fármacos a una librería de compuestos
  • Filtrar moléculas por alertas estructurales o reglas de cribado tipo PAINS/NIBR
  • Priorizar compuestos para hit-to-lead u optimización de lead
  • Construir filtros multi-criterio con el lenguaje de consulta de medchem

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • “Filtra esta librería de compuestos por rule_of_five y PAINS”
    • “Calcula la complejidad de estas moléculas frente a ZINC”
    • “Aplica los filtros NIBR a mis candidatos de lead optimization”
    • “Detecta warheads covalentes en este conjunto de moléculas”

    SKILL.md

    En inglés

    Medchem

    Overview

    Medchem is a Python library from datamol-io for molecular filtering and prioritization in drug discovery. Apply literature-derived drug-likeness rules, named alert catalogs, complexity thresholds, chemical-group detection, and a custom query language to triage compound libraries at scale. Filters are context-specific guidelines — combine with domain expertise and target knowledge.

    Version note: Examples target medchem 2.0.5 (PyPI stable, Nov 2024). Requires Python ≥3.9. Depends on datamol and RDKit (installed automatically). RuleFilters and structural filter classes return pandas DataFrames. Lilly demerits require optional native binaries (mamba install lilly-medchem-rules).

    When to Use This Skill

    This skill should be used when:

    • Applying drug-likeness rules (Lipinski, Veber, CNS, lead-like) to compound libraries
    • Filtering molecules by structural alerts, PAINS, or NIBR screening-deck rules
    • Prioritizing compounds for hit-to-lead or lead optimization
    • Calculating complexity metrics against ZINC-derived thresholds
    • Detecting functional groups or named substructure catalogs
    • Building multi-criteria filters with the medchem query language

    Installation

    uv pip install medchem datamol
    

    Optional — Eli Lilly demerit filter (requires conda-forge native binaries):

    mamba install -c conda-forge lilly-medchem-rules
    

    Core Capabilities

    1. Medicinal Chemistry Rules

    Apply established drug-likeness rules via medchem.rules.

    List available rules:

    import medchem as mc
    
    mc.rules.RuleFilters.list_available_rules_names()
    # ['rule_of_five', 'rule_of_five_beyond', 'rule_of_four', 'rule_of_three', ...]
    

    Single rule on one molecule:

    import datamol as dm
    import medchem as mc
    
    smiles = "CC(=O)OC1=CC=CC=C1C(=O)O"  # aspirin
    mc.rules.basic_rules.rule_of_five(smiles)   # True
    mc.rules.basic_rules.rule_of_cns(smiles)    # True
    mc.rules.basic_rules.rule_of_veber(smiles)  # True
    

    Multiple rules with RuleFilters (returns a DataFrame):

    import datamol as dm
    import medchem as mc
    
    mols = [dm.to_mol(s) for s in smiles_list]
    
    rfilter = mc.rules.RuleFilters(
        rule_list=["rule_of_five", "rule_of_oprea", "rule_of_cns", "rule_of_leadlike_soft"]
    )
    df = rfilter(mols=mols, n_jobs=-1, progress=True, keep_props=False)
    
    # Columns: mol, pass_all, pass_any, rule_of_five, rule_of_oprea, ...
    passing = df[df["pass_all"]]
    

    Use keep_props=True to include computed descriptors (mw, clogp, tpsa, etc.) in the result.

    2. Structural Alert Filters

    Detect problematic patterns with medchem.structural. Both classes return DataFrames with pass_filter, status, and reasons columns.

    Common alerts (ChEMBL-derived rule sets):

    import medchem as mc
    
    alert_filter = mc.structural.CommonAlertsFilters()
    df = alert_filter(mols=mol_list, n_jobs=-1, progress=True)
    # df columns: mol, pass_filter, status, reasons
    
    clean = df[df["pass_filter"]]
    

    NIBR filters (Novartis screening-deck curation):

    nibr_filter = mc.structural.NIBRFilters()
    df = nibr_filter(mols=mol_list, n_jobs=-1, progress=True)
    # df columns: mol, pass_filter, status, severity, reasons, n_covalent_motif, special_mol
    

    Compounds with severity >= 10 are excluded by default (see NIBR paper).

    3. Named Catalog Filters (PAINS, Brenk, etc.)

    Use medchem.catalogs.NamedCatalogs for RDKit FilterCatalog instances, or the functional API:

    import medchem as mc
    
    # List available named catalogs
    mc.catalogs.list_named_catalogs()
    # ['tox', 'pains', 'pains_a', 'brenk', 'nibr', 'zinc', ...]
    
    # Functional API — True means molecule passes (no alert match)
    passes = mc.functional.alert_filter(mols=mol_list, alerts=["pains"], n_jobs=-1)
    
    # Or via catalog objects
    passes = mc.functional.catalog_filter(
        mols=mol_list,
        catalogs=[mc.catalogs.NamedCatalogs.pains()],
        n_jobs=-1,
    )
    

    4. Functional API

    medchem.functional provides one-call wrappers that return boolean masks (True = passes):

    import medchem as mc
    
    mc.functional.rules_filter(mols=mol_list, rules=["rule_of_five", "rule_of_cns"], n_jobs=-1)
    mc.functional.nibr_filter(mols=mol_list, max_severity=10, n_jobs=-1)
    mc.functional.alert_filter(mols=mol_list, alerts=["pains", "brenk"], n_jobs=-1)
    mc.functional.complexity_filter(mols=mol_list, complexity_metric="bertz", limit="99", n_jobs=-1)
    

    Other helpers: catalog_filter, chemical_group_filter, lilly_demerit_filter (requires optional binaries), macrocycle_filter, bredt_filter, protecting_groups_filter, and more.

    5. Chemical Groups

    Detect functional groups and curated pattern collections via medchem.groups:

    import medchem as mc
    
    # Browse available group collections
    mc.groups.list_default_chemical_groups()
    # ['privileged_scaffolds', 'common_warhead_covalent_inhibitors', 'rings_in_drugs', ...]
    
    group = mc.groups.ChemicalGroup(groups=["privileged_scaffolds"])
    group.has_match(mol)                          # bool
    group.get_matches(mol)                        # dict of group → atom indices
    group.filter(mols)                            # molecules matching the group
    
    # Returns molecules that do NOT match the group
    mc.functional.chemical_group_filter(mols=mol_list, chemical_group=group, n_jobs=-1)
    

    Custom groups can be loaded from a file via groups_db (CSV with smiles/smarts, name, group columns).

    6. Molecular Complexity

    Compare complexity metrics to precomputed ZINC-15 percentile thresholds:

    import medchem as mc
    
    # Single molecule
    cf = mc.complexity.ComplexityFilter(limit="99", complexity_metric="bertz")
    cf(mol)  # True if below 99th-percentile threshold
    
    # Batch via functional API
    mc.functional.complexity_filter(
        mols=mol_list,
        complexity_metric="bertz",  # also: sas, qed, whitlock, barone, smcm, twc
        limit="99",
        n_jobs=-1,
    )
    
    # Direct metric functions
    mc.complexity.WhitlockCT(mol)
    mc.complexity.BaroneCT(mol)
    

    7. Scaffold Constraints

    medchem.constraints.Constraints matches a core scaffold and applies per-atom constraint functions — not simple MW/LogP ranges. For property bounds, use RuleFilters, descriptors via mc.rules.list_descriptors(), or the query language.

    import datamol as dm
    import medchem as mc
    
    core = dm.to_mol("c1ccccc1")
    constraints = mc.constraints.Constraints(
        core=core,
        constraint_fns={"query": lambda mol, atom_idx, query: ...},
    )
    constraints(mol)
    

    8. Medchem Query Language

    Build multi-criteria filters with medchem.query.QueryFilter:

    import medchem as mc
    
    # Rule + alert combination
    qf = mc.query.QueryFilter('MATCHRULE("rule_of_five") AND NOT HASALERT("pains")')
    mask = qf(mols=mol_list, n_jobs=-1)  # list[bool]
    
    # CNS-like with property bounds
    qf = mc.query.QueryFilter('MATCHRULE("rule_of_cns") AND HASPROP("tpsa", <=, 90)')
    mask = qf(mols=mol_list, n_jobs=-1)
    

    Query syntax:

    • MATCHRULE("rule_of_five") — apply a named rule
    • HASALERT("pains") — match a named catalog (pains, brenk, nibr, tox, …)
    • HASPROP("mw", <, 500) — compare a descriptor (unquoted comparator)
    • HASGROUP("privileged_scaffolds") — match a chemical group
    • HASSUBSTRUCTURE("c1ccccc1") — substructure match
    • Operators: AND, OR, NOT

    List available descriptors: mc.rules.list_descriptors()

    Workflow Patterns

    Pattern 1: Initial Triage of a Compound Library

    import datamol as dm
    import medchem as mc
    import pandas as pd
    
    df = pd.read_csv("compounds.csv")
    mols = [dm.to_mol(s) for s in df["smiles"]]
    
    # Drug-likeness rules
    rules_df = mc.rules.RuleFilters(rule_list=["rule_of_five", "rule_of_veber"])(mols=mols, n_jobs=-1)
    
    # PAINS + common alerts via query
    qf = mc.query.QueryFilter('MATCHRULE("rule_of_five") AND NOT HASALERT("pains")')
    pass_mask = qf(mols=mols, n_jobs=-1)
    
    df["passes_rules"] = rules_df["pass_all"].values
    df["drug_like"] = pass_mask
    filtered_df = df[df["drug_like"]]
    filtered_df.to_csv("filtered_compounds.csv", index=False)
    

    Pattern 2: Lead Optimization Filtering

    import medchem as mc
    
    rules_df = mc.rules.RuleFilters(rule_list=["rule_of_leadlike_soft"])(mols=candidates, n_jobs=-1)
    nibr_df = mc.structural.NIBRFilters()(mols=candidates, n_jobs=-1)
    complex_mask = mc.functional.complexity_filter(
        mols=candidates, complexity_metric="bertz", limit="95", n_jobs=-1
    )
    
    passes = (
        rules_df["pass_all"]
        & nibr_df["pass_filter"]
        & complex_mask
    )
    

    Pattern 3: Detect Functional Groups

    import medchem as mc
    
    group = mc.groups.ChemicalGroup(groups=["common_warhead_covalent_inhibitors"])
    matches = [group.has_match(mol) for mol in mol_list]
    warhead_mols = [mol for mol, m in zip(mol_list, matches) if m]
    

    Best Practices

    1. Context matters — marketed drugs often violate Ro5; prodrugs and natural products are common exceptions.
    2. Combine filters — rules, alert catalogs, and complexity thresholds work best together.
    3. Use parallelization — pass n_jobs=-1 for libraries >1000 molecules.
    4. Check return types — RuleFilters and structural classes return DataFrames; functional helpers return boolean arrays.
    5. Lilly demerits are optional — install lilly-medchem-rules separately; default max demerits is 160 in the functional API.
    6. Document decisions — retain status, reasons, and severity columns for audit trails.

    Resources

    references/api_guide.md

    Module-by-module API reference with signatures, return types, and patterns.

    references/rules_catalog.md

    Catalog of available rules, alert sets, complexity metrics, and filter selection guidelines.

    scripts/filter_molecules.py

    Batch filtering script for CSV/TSV/SDF/SMILES inputs with configurable rules, alerts, and complexity thresholds.

    uv run python scripts/filter_molecules.py input.csv \
      --rules rule_of_five,rule_of_cns --pains --nibr --output filtered.csv
    

    Documentation

    Reproducido de K-Dense-AI/scientific-agent-skills bajo licencia Apache-2.0 license. Leer esta página en markdown.

    Archivos

    4 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Necesita Python 3.9+ y datamol (se instala con medchem); el filtro de deméritos Lilly requiere el paquete conda opcional lilly-medchem-rules.

    Detalles

    Creador
    K-Dense-AI
    Licencia
    Apache-2.0 license
    Recursos incluidos
    scripts en python + referencias
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de K-Dense-AI/scientific-agent-skills

    Este repo incluye 163 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack scientific-agent-skills entero y su comando de instalación

    Gestión integral de citas académicas: busca en OpenAlex, PubMed y Google Scholar, extrae metadatos precisos, valida citas y genera entradas BibTeX correctamente formateadas.

    Costo de contexto al activarse
    3.7k tok
    Tamaño del paquete
    21 archivos
    Última actualización
    hace 2 meses
    investigacion

    Realiza revisiones bibliográficas sistemáticas y completas usando varias bases académicas (PubMed, arXiv, bioRxiv, Semantic Scholar). Genera markdown y PDF con citas verificadas en varios estilos (APA, Nature, Vancouver).

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    12 archivos
    Última actualización
    hace 2 meses
    investigacion

    Crea decks de diapositivas y presentaciones para charlas de investigación: PowerPoint, presentaciones de conferencia, seminarios, defensas de tesis. Da estructura, plantillas, guía de tiempos y validación visual.

    Costo de contexto al activarse
    5.1k tok
    Tamaño del paquete
    24 archivos
    Última actualización
    hace 2 meses
    documentos

    Crea infografías profesionales con Nano Banana Pro AI y refinamiento iterativo inteligente. Usa Gemini 3.6 Flash para revisar la calidad e integra investigación con Perplexity Sonar. Soporta 10 tipos, 8 estilos y paletas para daltonismo.

    Costo de contexto al activarse
    2.7k tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 2 meses
    diseno ui

    Crea pósteres de investigación profesionales en LaTeX con beamerposter, tikzposter o baposter, para conferencias y comunicación científica: layout, colores, columnas múltiples e integración de figuras.

    Costo de contexto al activarse
    3.9k tok
    Tamaño del paquete
    17 archivos
    Última actualización
    hace 2 meses
    documentos

    Crea diagramas científicos de calidad de publicación con la IA Nano Banana 2 y refinamiento iterativo inteligente. Gemini 3.6 Flash revisa la calidad y solo regenera si está por debajo del umbral de tu tipo de documento.

    Costo de contexto al activarse
    4.1k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 2 meses
    diseno ui

    Skills relacionados

    Aeon

    45.9k

    Para tareas de machine learning con series temporales: clasificación, regresión, clustering, forecasting, detección de anomalías, segmentación y búsqueda de similitud, con APIs compatibles con scikit-learn.

    Costo de contexto al activarse
    3.1k tok
    Tamaño del paquete
    12 archivos
    Última actualización
    hace 2 meses
    datos analitica

    Anndata

    45.9k

    Estructura de datos para matrices anotadas en análisis de célula única. Úsala con archivos .h5ad o el ecosistema scverse; para análisis usa scanpy, para modelos probabilísticos scvi-tools, para escala poblacional cellxgene-census.

    Costo de contexto al activarse
    3k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    hace 2 meses
    datos analitica

    Infiere redes de regulación génica (GRN) a partir de datos de expresión génica con algoritmos escalables (GRNBoost2, GENIE3), para transcriptómica bulk o de célula única, con computación distribuida.

    Costo de contexto al activarse
    2.1k tok
    Tamaño del paquete
    5 archivos
    Última actualización
    hace 2 meses
    datos analitica