Communitygithub.com

rowan

Rowan es una plataforma de flujos de trabajo de modelado molecular y química medicinal nativa de la nube con una API de Python. Se utiliza para predicción de pKa y macropKa, conjuntos de conformeros y tautómeros, acoplamiento y acoplamiento de análogos, co-plegado proteína-ligando, generación de MSA, dinámica molecular, permeabilidad, flujos de trabajo de descriptores y tareas relacionadas de modelado de moléculas pequeñas o proteínas. Ideal para cribado por lotes programático, pipelines químicos de varios pasos y flujos de trabajo que de otro modo requerirían mantener infraestructura local de HPC/GPU.

¿Qué es rowan?

Rowan es una plataforma de flujos de trabajo para modelado molecular y diseño de fármacos nativa de la nube, accesible a través de una API de Python. Su objetivo es reemplazar la necesidad de mantener infraestructura local de HPC o GPU, ofreciendo un único punto de acceso para tareas como predicción de pKa, búsqueda de conformeros y tautómeros, acoplamiento molecular (docking), dinámica molecular, co-plegado proteína-ligando y generación de descriptores. La plataforma gestiona la ejecución, el escalado y el almacenamiento de resultados, permitiendo a los científicos de datos y desarrolladores centrarse en la ciencia. Rowan es especialmente útil para campañas de química medicinal por lotes, pipelines de múltiples pasos y flujos de trabajo que requieren consistencia y escalabilidad sin complejidad operativa. Soporta moléculas en formato SMILES, InChI y objetos de RDKit, y ofrece resultados tipados con propiedades de conveniencia para un acceso rápido a los datos. **Plataformas compatibles:** Claude Code, Cursor, Codex, y cualquier otra interfaz que ejecute código Python. **Nota:** La traducción del SKILL.md mantiene intactos los nombres de funciones, parámetros, código y rutas de archivos, adaptando únicamente el texto descriptivo y de documentación.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/K-Dense-AI/scientific-agent-skills/tree/main/skills/rowan

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Rowan: Flujos de trabajo de modelado molecular y diseño de fármacos nativos de la nube

Resumen

Rowan es una plataforma de flujos de trabajo nativa de la nube para simulación molecular, química medicinal y diseño basado en estructuras. Su API de Python expone una interfaz unificada para el modelado de moléculas pequeñas, predicción de propiedades, acoplamiento, dinámica molecular y flujos de trabajo de IA estructural.

Usa Rowan cuando quieras ejecutar flujos de trabajo de química medicinal o diseño molecular de forma programática sin mantener infraestructura local de HPC, aprovisionamiento de GPU o un conjunto de herramientas de modelado separadas. Rowan maneja toda la infraestructura, gestión de resultados y escalado computacional.

Cuándo usar Rowan

Rowan es una buena opción para:

  • Química cuántica, métodos semiempíricos o potenciales de redes neuronales
  • Predicción de propiedades por lotes (pKa, descriptores, permeabilidad, solubilidad)
  • Generación de conjuntos de conformeros y tautómeros
  • Flujos de trabajo de acoplamiento (ligando único, series de análogos, refinamiento de poses)
  • Co-plegado proteína-ligando y generación de MSA
  • Pipelines químicos de múltiples pasos (ej., búsqueda de tautómeros → acoplamiento → análisis de poses)
  • Campañas de química medicinal por lotes donde necesites infraestructura consistente y escalable

Rowan no es la opción adecuada para:

  • E/S molecular simple (usa RDKit directamente)
  • Química cuántica ab initio post-HF o cálculos relativistas

Inicio rápido

uv pip install rowan-python
import rowan
rowan.api_key = "tu_api_key_aqui"  # o establece la variable de entorno ROWAN_API_KEY

# Los descriptores requieren una molécula 3D, no una cadena SMILES simple.
mol = rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O")
wf = rowan.submit_descriptors_workflow(mol, name="aspirina")
result = wf.result()

print(result.descriptors["MW"])       # 180.042 — masa exacta
print(result.descriptors["SLogP"])    # 1.31
print(result.descriptors["TopoPSA"])  # 63.6 — PSA topológico

Si eso imprime sin errores, estás configurado correctamente. Estos valores y ejemplos se verificaron con rowan-python 3.1.13.

Instalación

uv pip install rowan-python
# o: uv pip install rowan-python

Gestión de usuarios y webhooks

Autenticación

Establece una clave API mediante variable de entorno (recomendado):

export ROWAN_API_KEY="tu_api_key_aqui"

O directamente en Python:

import rowan
rowan.api_key = "tu_api_key_aqui"

Verificar autenticación:

import rowan
user = rowan.whoami()  # Devuelve información del usuario si está autenticado
print(f"Usuario: {user.email}")
print(f"Créditos disponibles: {user.credits_available_string()}")

Formatos de entrada de moléculas

Rowan acepta moléculas en los siguientes formatos:

  • SMILES (preferido): "CCO", "c1ccccc1O"
  • Patrones SMARTS (para algunos flujos de trabajo): subconjunto de SMARTS para búsqueda de subestructuras
  • InChI (si es compatible con tu versión de API): "InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3"

La API valida las moléculas de entrada y lanza ValueError para un SMILES no analizable o un tipo de entrada incompatible con el flujo de trabajo. Siempre usa SMILES canonicalizados para reproducibilidad.

Cadenas SMILES frente a objetos molécula

Los tipos de entrada aceptados varían según el flujo de trabajo en rowan-python 3.1.13. Solo estos flujos de trabajo comunes aceptan una cadena simple: pKa, búsqueda de conformeros, permeabilidad de membrana, ADMET, LogP, macropKa, solubilidad y MD de análisis de poses. La mayoría de los demás —incluyendo descriptores, búsqueda de tautómeros, acoplamiento, acoplamiento de análogos, BDE, RMN y Fukui— requieren rowan.Molecule.from_smiles(smiles) o un Mol/RWMol de RDKit. Un tipo incorrecto lanza ValueError antes del envío.

Consejo: Usa RDKit para validar SMILES antes del envío:

from rdkit import Chem
smiles = "CCO"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
    raise ValueError(f"SMILES no válido: {smiles}")

Patrón de uso principal

La mayoría de las tareas de Rowan siguen el mismo patrón de tres pasos:

  1. Enviar un flujo de trabajo
  2. Esperar la finalización (con streaming opcional)
  3. Recuperar resultados tipados con propiedades de conveniencia
import rowan

# 1. Enviar — usa la función de flujo de trabajo específica (no la genérica submit_workflow)
workflow = rowan.submit_descriptors_workflow(
    rowan.Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"),
    name="descriptores aspirina",
)

# 2. y 3. Esperar y recuperar
result = workflow.result()  # Bloquea hasta que termine (por defecto: wait=True, poll_interval=5)
print(result.data)              # Diccionario sin procesar
print(result.descriptors["MW"]) # 180.042 masa exacta; no hay propiedad result.molecular_weight

Para flujos de trabajo de larga duración, usa streaming:

for partial in workflow.stream_result(poll_interval=5):
    print(f"Completado: {partial.complete}")  # bool, no un porcentaje
    print(partial.data)

result() vs. stream_result()

PatrónCuándo usarloDuración
result()Puedes esperar el resultado completo<5 min típico
stream_result()Quieres retroalimentación de progreso o necesitas resultados parciales tempranos>5 min, o uso interactivo

Directriz: Usa result() para descriptores, pKa. Usa stream_result() para búsqueda de conformeros, acoplamiento, co-plegado.

Trabajar con resultados

La API de Rowan incluye objetos de resultado de flujo de trabajo tipados con propiedades de conveniencia.

Usar propiedades tipadas y .data

Los resultados tienen dos patrones de acceso:

  1. Propiedades de conveniencia (recomendado primero): result.descriptors, result.best_pose, result.scores. Las clases de resultado difieren: la búsqueda de conformeros usa los métodos get_energies() y get_conformers().
  2. Respaldo sin procesar: result.data — diccionario sin procesar de la API

Ejemplo:

result = rowan.submit_descriptors_workflow(
    rowan.Molecule.from_smiles("CCO"),
    name="etanol",
).result()

# Propiedad de conveniencia (devuelve todos los descriptores):
print(result.descriptors["MW"])       # masa exacta/monoisotópica
print(result.descriptors["SLogP"])
print(result.descriptors["TopoPSA"])  # PSA topológico habitual

# Respaldo de datos sin procesar:
print(result.data["descriptors"])

Nota: DescriptorsResult no tiene una propiedad molecular_weight. MW es la masa exacta/monoisotópica, no el peso molecular promedio. TPSA es un descriptor 3D de superficie cargada; usa TopoPSA para el área de superficie polar topológica habitual utilizada en reglas de similitud a fármacos.

Invalidación de caché

Algunas propiedades de resultado se cargan de forma diferida (ej., geometrías de conformeros, estructuras de proteínas). Para refrescar:

result.clear_cache()
nuevas_estructuras = result.get_conformers()  # Recuperado de nuevo para ConformerSearchResult

Proyectos, carpetas y organización

Para campañas no triviales, usa proyectos y carpetas para mantener el trabajo organizado.

Proyectos

import rowan

# Crear un proyecto
project = rowan.create_project(name="Optimización líder CDK2")
rowan.set_project("Optimización líder CDK2")

# Todos los flujos de trabajo posteriores van a este proyecto
wf = rowan.submit_descriptors_workflow(
    rowan.Molecule.from_smiles("CCO"), name="compuesto de prueba"
)

# retrieve_project toma un UUID; list_workflows limita el alcance con parent_uuid.
project = rowan.retrieve_project(project.uuid)
workflows = rowan.list_workflows(parent_uuid=project.uuid, size=50)

Carpetas

# Crear una estructura jerárquica de carpetas
folder = rowan.create_folder(name="acoplamiento/lote_1/cribado")

wf = rowan.submit_docking_workflow(
    # ... parámetros de acoplamiento ...
    folder=folder,
    name="compuesto_001",
)

# Listar flujos de trabajo en una carpeta
results = rowan.list_workflows(parent_uuid=folder.uuid)

Árboles de decisión de flujos de trabajo

pKa vs. MacropKa

Usa pKa microscópico cuando:

  • Necesites el pKa de un solo grupo ionizable
  • Estés interesado en transiciones ácido-base y termodinámica de protonación
  • La molécula tenga uno o dos sitios ionizables
  • La velocidad sea crítica (más rápido, menos créditos)

Usa macropKa cuando:

  • Necesites un comportamiento dependiente del pH en un rango fisiológicamente relevante (ej., 0–14)
  • Quieras poblaciones agregadas de carga y estado de protonación en función del pH
  • La molécula tenga múltiples grupos ionizables con protonación acoplada
  • Necesites propiedades posteriores como solubilidad acuosa a diferentes pH

Ejemplo de decisión:

Fenol (pKa ~10): Usa pKa microscópico
Amina (pKa ~9–10): Usa pKa microscópico
Fármaco multiionizable (N, O, grupo ácido): Usa macropKa
Evaluación ADME en pH GI: Usa macropKa

Búsqueda de conformeros vs. búsqueda de tautómeros

Usa búsqueda de conformeros cuando:

  • Se conozca una sola forma tautomérica
  • Necesites un conjunto 3D diverso para acoplamiento, DM o análisis SAR
  • Los enlaces rotables dominen el espacio químico

Usa búsqueda de tautómeros cuando:

  • El equilibrio tautomérico sea incierto (ej., heterociclos, sistemas ceto-enol)
  • Necesites modelar todos los isómeros de protonación relevantes
  • Los cálculos posteriores (acoplamiento, pKa) dependan de la forma tautomérica

Flujo de trabajo combinado:

# Paso 1: Encontrar el mejor tautómero
taut_wf = rowan.submit_tautomer_search_workflow(
    initial_molecule=rowan.Molecule.from_smiles("O=c1[nH]ccnc1"),
    name="tautómeros imidazol",
)
mejor_taut = taut_wf.result().best_tautomer

# Paso 2: Generar conformeros a partir del mejor tautómero
conf_wf = rowan.submit_conformer_search_workflow(
    initial_molecule=mejor_taut,
    name="conformeros imidazol",
)

Acoplamiento vs. acoplamiento de análogos vs. co-plegado

Flujo de trabajoCuándo usarloEntradaSalida
AcoplamientoLigando único, bolsillo conocidoProteína + SMILES + coordenadas de bolsilloPose, puntuación, dG
Acoplamiento de análogos5–100+ compuestos relacionadosProteína + lista de SMILES + ligando de referenciaTodas las poses, alineadas con referencia
Co-plegado proteína-ligandoSecuencia + ligando, sin estructura cristalinaSecuencia de proteína + SMILESComplejo unido predicho por ML

Utilidades de proteínas

Subir proteínas

# Desde archivo PDB local
protein = rowan.upload_protein(
    name="dominio quinasa EGFR",
    file_path="egfr_kinase.pdb",
)

# Desde base de datos PDB
protein_from_pdb = rowan.create_protein_from_pdb_id(
    name="CDK2 (1M17)",
    code="1M17",
)

# Recuperar proteína subida previamente
protein = rowan.retrieve_protein("uuid-proteína")

# Listar todas las proteínas
mis_proteinas = rowan.list_proteins()

Guía de preparación de proteínas

  • Formato de archivo: PDB, mmCIF (Rowan lo detecta automáticamente)
  • Moléculas de agua: Rowan normalmente mantiene el agua relevante; elimina el agua a granel previamente si lo deseas
  • Heteroátomos: Cofactores, iones y ligandos unidos generalmente se conservan; elimina heteroátomos no deseados antes de subir
  • Proteínas multicadena: Totalmente compatibles
  • Resolución: Funciona con estructuras de RMN, modelos de homología y crio-EM; la calidad importa para predicciones posteriores
  • Validación: Rowan valida la sintaxis PDB; los archivos severamente malformados pueden ser rechazados

Catálogo de flujos de trabajo

Nueve categorías comunes de flujos de trabajo — descriptores, pKa microscópico, MacropKa, búsqueda de conformeros, búsqueda de tautómeros, acoplamiento, acoplamiento de análogos, generación de MSA y co-plegado proteína-ligando — cada una con código de envío y formas de resultado, más la lista completa de cada tipo de flujo de trabajo compatible (modelado central, diseño basado en estructura, química computacional avanzada, química de reacciones, propiedades avanzadas, energía libre de unión, y biología de secuencias y estructural) están en references/workflow_catalog.md.

Envío por lotes, webhooks y trabajo asíncrono

El patrón de enviar/poll/recuperar por lotes, el patrón de disparar y verificar sin bloqueo, configuración de webhooks, creación y rotación de secretos, verificación de carga útil y firma (con un manejador de FastAPI), y mejores prácticas de webhooks están en references/batch_and_webhooks.md.

Acceso, precios y créditos

Los límites del nivel gratuito, el consumo de créditos por flujo de trabajo y las estimaciones de costo típicas están en references/access_and_pricing.md.

Ejemplo práctico y solución de problemas

Una campaña completa de optimización líder — configuración de proyecto, tautómeros, pKa en una serie de análogos, recopilación de resultados y un seguimiento de acoplamiento — está en references/end_to_end_example.md.

Errores comunes con sus soluciones y consejos de depuración están en references/troubleshooting.md.

Patrones de uso recomendados

  • Prefiere flujos de trabajo nativos de Rowan sobre el ensamblaje de bajo nivel cuando existan
  • Usa proyectos y carpetas para cualquier campaña no trivial (>5 flujos de trabajo)
  • Usa result() para bloquear hasta completar (por defecto: wait=True, poll_interval=5)
  • Usa primero las propiedades de resultado tipadas, recurre a .data para campos no mapeados
  • Usa envío por lotes para bibliotecas de compuestos o series de análogos
  • Encadena flujos de trabajo para campañas químicas de múltiples pasos:
    • pKa → macropKa → permeabilidad (evaluación ADME)
    • búsqueda de tautómeros → acoplamiento → MD de análisis de poses (refinamiento de poses)
    • generación de MSA → co-plegado proteína-ligando (predicción de estructura con IA)
  • Usa webhooks para campañas de larga duración (>50 flujos de trabajo) o pipelines asíncronos
  • Usa streaming para retroalimentación interactiva en búsquedas grandes de conformeros/acoplamiento

Resumen

Usa Rowan cuando tu flujo de trabajo requiera ejecución en la nube para tareas de diseño molecular, especialmente cuando quieras una API unificada y un manejo consistente de resultados en modelado de moléculas pequeñas, proteínas, acoplamiento, predicción ADME y generación de estructuras con ML.

Rowan es una plataforma de flujos de trabajo de diseño molecular, no solo un motor de química remoto. Maneja el escalado de infraestructura, la persistencia de resultados y la orquestación de pipelines de múltiples pasos para que puedas centrarte en la ciencia.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

adaptyv

How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.

aeon

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.

alphagenome

Look up precomputed AlphaGenome Atlas effects for any GRCh38 single-nucleotide variant (AVI score with Phred and 18 SHAP feature attributions, plus raw and quantile scores for RNA-seq, DNase, ATAC, ChIP-TF, ChIP-histone, CAGE, PRO-cap, splicing, polyadenylation and contact-map tracks), score variants or scan windows on demand with the AlphaGenome model for human and mouse (variant scoring, in silico mutagenesis, REF-versus-ALT track prediction), and build Atlas website deep links. Use when the user mentions AlphaGenome, AlphaGenome Atlas, AVI or AlphaGenome Variant Impact, DeepMind variant effect prediction, or wants to prioritise or mechanistically interpret non-coding, regulatory, splicing, enhancer, promoter, or chromatin-accessibility effects of SNVs from a VCF, credible set, or region. Research use only; not a clinical tool.

analytical-method-validation

Plan, execute, and document validation, verification, and transfer of analytical procedures under the governing framework - ICH Q2(R2) and Q14, USP <1220>/<1225>/<1226>, ICH M10 bioanalytical, CLSI EP, or ISO/IEC 17025. Use for HPLC, LC-MS/MS, GC, CE, ICP-MS, dissolution, qNMR, qPCR, NIR, and ligand binding or cell-based assays whenever the question is whether a procedure is fit for its intended purpose. Triggers include

anndata

Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.

arbor

Autonomously improve a real artifact (code, training recipe, agent harness, data pipeline, prompt) against an objective and an evaluator, using Hypothesis Tree Refinement (HTR) from the Arbor paper. Use this whenever someone wants to iteratively optimize something over many experiments without overfitting — e.g.

arboreto

Infer gene regulatory networks (GRNs) from gene expression data using scalable algorithms (GRNBoost2, GENIE3). Use when analyzing transcriptomics data (bulk RNA-seq, single-cell RNA-seq) to identify transcription factor-target gene relationships and regulatory interactions. Supports distributed computation for large-scale datasets.

astropy

Core Python library for astronomy and astrophysics workflows that need Astropy APIs, including units/quantities, coordinates, FITS I/O, tables, time systems, WCS, and cosmology. Use when implementing or debugging astronomical data analysis code with Astropy.

autoskill

Observe the user

benchling-integration

Benchling Python SDK and REST API integration for registry entities, inventory, ELN entries, workflows, Benchling Apps, and Data Warehouse queries. Use when automating lab data with benchling-sdk or the v2 API.

bgpt-paper-search

Search scientific papers and retrieve structured experimental data extracted from full-text studies via the BGPT MCP server. Returns 25+ fields per paper including methods, results, sample sizes, quality scores, and conclusions. Use for literature reviews, evidence synthesis, and finding experimental details not available in abstracts alone.

bids

>

biopython

Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.

bioservices

Unified Python interface to 40+ bioinformatics services. Use when querying multiple databases (UniProt, KEGG, ChEMBL, Reactome) in a single workflow with consistent API. Best for cross-database analysis, ID mapping across services. For quick single-database lookups use gget; for sequence/file manipulation use biopython.

bulk-rnaseq

End-to-end bulk RNA-seq orchestrator — takes raw FASTQ reads through QC and trimming (FastQC, fastp/Trim Galore), alignment and quantification (STAR, Salmon, featureCounts), assembles a gene-level counts matrix, then hands off to differential expression (pydeseq2), pathway/GSEA enrichment (pathway-enrichment), and publication figures (scientific-visualization). Use whenever the user has bulk RNA-seq reads or quant output and wants a complete, reproducible differential-expression workflow — e.g.

cellxgene-census

Query the CZ CELLxGENE Census programmatically for versioned public single-cell and spatial transcriptomics data. Use when you need population-scale cell metadata, gene expression slices, Census summary counts, source H5AD URIs/downloads, embeddings, spatial Census data, or reference atlas comparisons across organisms, tissues, diseases, assays, and cell types. For analyzing your own local single-cell data use scanpy, anndata, or scvi-tools.

cirq

Google quantum computing framework. Use when targeting Google Quantum AI hardware, designing noise-aware circuits, or running quantum characterization experiments. Best for Google hardware, noise modeling, and low-level circuit design. For IBM hardware use qiskit; for quantum ML with autodiff use pennylane; for physics simulations use qutip.

citation-management

Comprehensive citation management for academic research. Search OpenAlex, PubMed, and Google Scholar for papers, extract accurate metadata, validate citations, and generate properly formatted BibTeX entries. This skill should be used when you need to find papers, verify citation information, convert DOIs to BibTeX, or ensure reference accuracy in scientific writing.

clinical-decision-support

Prepare and validate research-only clinical decision-support evaluation, evidence-profile, cohort, survival, biomarker/model, privacy, and governance artifacts. Use for aggregate or synthetic research documentation and traceability—not patient care or live clinical operation.

clinical-reports

Create safety-bounded draft structures and run local deterministic checks for clinical case, diagnostic, trial, safety, and aggregate research reports. Use only with synthetic, de-identified, or aggregate inputs and verified source-fact manifests; every output requires qualified review.

Skills relacionados