rowan

Cloud-based quantum chemistry platform with Python API. Preferred for computational chemistry workflows including pKa prediction, geometry optimization, conformer searching, molecular property calculations, protein-ligand docking (AutoDock Vina), and AI protein cofolding (Chai-1, Boltz-1/2). Use when tasks involve quantum chemistry calculations, molecular property prediction, DFT or semiempirical methods, neural network potentials (AIMNet2), protein-ligand binding predictions, or automated computational chemistry pipelines. Provides cloud compute resources with no local setup required.

Best use case

rowan is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Cloud-based quantum chemistry platform with Python API. Preferred for computational chemistry workflows including pKa prediction, geometry optimization, conformer searching, molecular property calculations, protein-ligand docking (AutoDock Vina), and AI protein cofolding (Chai-1, Boltz-1/2). Use when tasks involve quantum chemistry calculations, molecular property prediction, DFT or semiempirical methods, neural network potentials (AIMNet2), protein-ligand binding predictions, or automated computational chemistry pipelines. Provides cloud compute resources with no local setup required.

Teams using rowan should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/rowan/SKILL.md --create-dirs "https://raw.githubusercontent.com/foryourhealth111-pixel/Vibe-Skills/main/bundled/skills/rowan/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/rowan/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How rowan Compares

Feature / AgentrowanStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Cloud-based quantum chemistry platform with Python API. Preferred for computational chemistry workflows including pKa prediction, geometry optimization, conformer searching, molecular property calculations, protein-ligand docking (AutoDock Vina), and AI protein cofolding (Chai-1, Boltz-1/2). Use when tasks involve quantum chemistry calculations, molecular property prediction, DFT or semiempirical methods, neural network potentials (AIMNet2), protein-ligand binding predictions, or automated computational chemistry pipelines. Provides cloud compute resources with no local setup required.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Rowan: Cloud-Based Quantum Chemistry Platform

## Overview

Rowan is a cloud-based computational chemistry platform that provides programmatic access to quantum chemistry workflows through a Python API. It enables automation of complex molecular simulations without requiring local computational resources or expertise in multiple quantum chemistry packages.

**Key Capabilities:**
- Molecular property prediction (pKa, redox potential, solubility, ADMET-Tox)
- Geometry optimization and conformer searching
- Protein-ligand docking with AutoDock Vina
- AI-powered protein cofolding with Chai-1 and Boltz models
- Access to DFT, semiempirical, and neural network potential methods
- Cloud compute with automatic resource allocation

**Why Rowan:**
- No local compute cluster required
- Unified API for dozens of computational methods
- Results viewable in web interface at labs.rowansci.com
- Automatic resource scaling

## Installation and Authentication

### Installation

```bash
uv pip install rowan-python
```

### Authentication

Generate an API key at [labs.rowansci.com/account/api-keys](https://labs.rowansci.com/account/api-keys).

**Option 1: Direct assignment**
```python
import rowan
rowan.api_key = "your_api_key_here"
```

**Option 2: Environment variable (recommended)**
```bash
export ROWAN_API_KEY="your_api_key_here"
```

The API key is automatically read from `ROWAN_API_KEY` on module import.

### Verify Setup

```python
import rowan

# Check authentication
user = rowan.whoami()
print(f"Logged in as: {user.username}")
print(f"Credits available: {user.credits}")
```

## Core Workflows

### 1. pKa Prediction

Calculate the acid dissociation constant for molecules:

```python
import rowan
import stjames

# Create molecule from SMILES
mol = stjames.Molecule.from_smiles("c1ccccc1O")  # Phenol

# Submit pKa workflow
workflow = rowan.submit_pka_workflow(
    initial_molecule=mol,
    name="phenol pKa calculation"
)

# Wait for completion
workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

# Access results
print(f"Strongest acid pKa: {workflow.data['strongest_acid']}")  # ~10.17
```

### 2. Conformer Search

Generate and optimize molecular conformers:

```python
import rowan
import stjames

mol = stjames.Molecule.from_smiles("CCCC")  # Butane

workflow = rowan.submit_conformer_search_workflow(
    initial_molecule=mol,
    name="butane conformer search"
)

workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

# Access conformer ensemble
conformers = workflow.data['conformers']
for i, conf in enumerate(conformers):
    print(f"Conformer {i}: Energy = {conf['energy']:.4f} Hartree")
```

### 3. Geometry Optimization

Optimize molecular geometry to minimum energy structure:

```python
import rowan
import stjames

mol = stjames.Molecule.from_smiles("CC(=O)O")  # Acetic acid

workflow = rowan.submit_basic_calculation_workflow(
    initial_molecule=mol,
    name="acetic acid optimization",
    workflow_type="optimization"
)

workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

# Get optimized structure
optimized_mol = workflow.data['final_molecule']
print(f"Final energy: {optimized_mol.energy} Hartree")
```

### 4. Protein-Ligand Docking

Dock small molecules to protein targets:

```python
import rowan

# First, upload or create protein
protein = rowan.create_protein_from_pdb_id(
    name="EGFR kinase",
    code="1M17"
)

# Define binding pocket (from crystal structure or manual)
pocket = {
    "center": [10.0, 20.0, 30.0],
    "size": [20.0, 20.0, 20.0]
}

# Submit docking
workflow = rowan.submit_docking_workflow(
    protein=protein.uuid,
    pocket=pocket,
    initial_molecule=stjames.Molecule.from_smiles("Cc1ccc(NC(=O)c2ccc(CN3CCN(C)CC3)cc2)cc1"),
    name="EGFR docking"
)

workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

# Access docking results
docking_score = workflow.data['docking_score']
print(f"Docking score: {docking_score}")
```

### 5. Protein Cofolding (AI Structure Prediction)

Predict protein-ligand complex structures using AI models:

```python
import rowan

# Protein sequence
protein_seq = "MENFQKVEKIGEGTYGVVYKARNKLTGEVVALKKIRLDTETEGVPSTAIREISLLKELNHPNIVKLLDVIHTENKLYLVFEFLHQDLKKFMDASALTGIPLPLIKSYLFQLLQGLAFCHSHRVLHRDLKPQNLLINTEGAIKLADFGLARAFGVPVRTYTHEVVTLWYRAPEILLGCKYYSTAVDIWSLGCIFAEMVTRRALFPGDSEIDQLFRIFRTLGTPDEVVWPGVTSMPDYKPSFPKWARQDFSKVVPPLDEDGRSLLSQMLHYDPNKRISAKAALAHPFFQDVTKPVPHLRL"

# Ligand SMILES
ligand = "CCC(C)CN=C1NCC2(CCCOC2)CN1"

# Submit cofolding with Chai-1
workflow = rowan.submit_protein_cofolding_workflow(
    initial_protein_sequences=[protein_seq],
    initial_smiles_list=[ligand],
    name="kinase-ligand cofolding",
    model="chai_1r"  # or "boltz_1x", "boltz_2"
)

workflow.wait_for_result()
workflow.fetch_latest(in_place=True)

# Access structure predictions
print(f"Predicted TM Score: {workflow.data['ptm_score']}")
print(f"Interface pTM: {workflow.data['interface_ptm']}")
```

## RDKit-Native API

For users working with RDKit molecules, Rowan provides a simplified interface:

```python
import rowan
from rdkit import Chem

# Create RDKit molecule
mol = Chem.MolFromSmiles("c1ccccc1O")

# Compute pKa directly
pka_result = rowan.run_pka(mol)
print(f"pKa: {pka_result.strongest_acid}")

# Batch processing
mols = [Chem.MolFromSmiles(smi) for smi in ["CCO", "CC(=O)O", "c1ccccc1O"]]
results = rowan.batch_pka(mols)

for mol, result in zip(mols, results):
    print(f"{Chem.MolToSmiles(mol)}: pKa = {result.strongest_acid}")
```

**Available RDKit-native functions:**
- `run_pka`, `batch_pka` - pKa calculations
- `run_tautomers`, `batch_tautomers` - Tautomer enumeration
- `run_conformers`, `batch_conformers` - Conformer generation
- `run_energy`, `batch_energy` - Single-point energies
- `run_optimization`, `batch_optimization` - Geometry optimization

See `references/rdkit_native.md` for complete documentation.

## Workflow Management

### List and Query Workflows

```python
# List recent workflows
workflows = rowan.list_workflows(size=10)
for wf in workflows:
    print(f"{wf.name}: {wf.status}")

# Filter by status
pending = rowan.list_workflows(status="running")

# Retrieve specific workflow
workflow = rowan.retrieve_workflow("workflow-uuid")
```

### Batch Operations

```python
# Submit multiple workflows
workflows = rowan.batch_submit_workflow(
    molecules=[mol1, mol2, mol3],
    workflow_type="pka",
    workflow_data={}
)

# Poll status of multiple workflows
statuses = rowan.batch_poll_status([wf.uuid for wf in workflows])
```

### Folder Organization

```python
# Create folder for project
folder = rowan.create_folder(name="Drug Discovery Project")

# Submit workflow to folder
workflow = rowan.submit_pka_workflow(
    initial_molecule=mol,
    name="compound pKa",
    folder_uuid=folder.uuid
)

# List workflows in folder
folder_workflows = rowan.list_workflows(folder_uuid=folder.uuid)
```

## Computational Methods

Rowan supports multiple levels of theory:

**Neural Network Potentials:**
- AIMNet2 (ωB97M-D3) - Fast and accurate
- Egret - Rowan's proprietary model

**Semiempirical:**
- GFN1-xTB, GFN2-xTB - Fast for large molecules

**DFT:**
- B3LYP, PBE, ωB97X variants
- Multiple basis sets available

Methods are automatically selected based on workflow type, or can be specified explicitly in workflow parameters.

## Reference Documentation

For detailed API documentation, consult these reference files:

- **`references/api_reference.md`**: Complete API documentation - Workflow class, submission functions, retrieval methods
- **`references/workflow_types.md`**: All 30+ workflow types with parameters - pKa, docking, cofolding, etc.
- **`references/rdkit_native.md`**: RDKit-native API functions for seamless cheminformatics integration
- **`references/molecule_handling.md`**: stjames.Molecule class - creating molecules from SMILES, XYZ, RDKit
- **`references/proteins_and_organization.md`**: Protein upload, folder management, project organization
- **`references/results_interpretation.md`**: Understanding workflow outputs, confidence scores, validation

## Common Patterns

### Pattern 1: Property Prediction Pipeline

```python
import rowan
import stjames

smiles_list = ["CCO", "c1ccccc1O", "CC(=O)O"]

# Submit all pKa calculations
workflows = []
for smi in smiles_list:
    mol = stjames.Molecule.from_smiles(smi)
    wf = rowan.submit_pka_workflow(
        initial_molecule=mol,
        name=f"pKa: {smi}"
    )
    workflows.append(wf)

# Wait for all to complete
for wf in workflows:
    wf.wait_for_result()
    wf.fetch_latest(in_place=True)
    print(f"{wf.name}: pKa = {wf.data['strongest_acid']}")
```

### Pattern 2: Virtual Screening

```python
import rowan

# Upload protein once
protein = rowan.upload_protein("target.pdb", name="Drug Target")
protein.sanitize()  # Clean structure

# Define pocket
pocket = {"center": [x, y, z], "size": [20, 20, 20]}

# Screen compound library
for smiles in compound_library:
    mol = stjames.Molecule.from_smiles(smiles)
    workflow = rowan.submit_docking_workflow(
        protein=protein.uuid,
        pocket=pocket,
        initial_molecule=mol,
        name=f"Dock: {smiles[:20]}"
    )
```

### Pattern 3: Conformer-Based Analysis

```python
import rowan
import stjames

mol = stjames.Molecule.from_smiles("complex_molecule_smiles")

# Generate conformers
conf_wf = rowan.submit_conformer_search_workflow(
    initial_molecule=mol,
    name="conformer search"
)
conf_wf.wait_for_result()
conf_wf.fetch_latest(in_place=True)

# Analyze lowest energy conformers
conformers = sorted(conf_wf.data['conformers'], key=lambda x: x['energy'])
print(f"Found {len(conformers)} unique conformers")
print(f"Energy range: {conformers[0]['energy']:.4f} to {conformers[-1]['energy']:.4f} Hartree")
```

## Best Practices

1. **Set API key via environment variable** for security and convenience
2. **Use folders** to organize related workflows
3. **Check workflow status** before accessing data
4. **Use batch functions** for multiple similar calculations
5. **Handle errors gracefully** - workflows can fail due to invalid molecules
6. **Monitor credits** - use `rowan.whoami().credits` to check balance

## Error Handling

```python
import rowan

try:
    workflow = rowan.submit_pka_workflow(
        initial_molecule=mol,
        name="calculation"
    )
    workflow.wait_for_result(timeout=3600)  # 1 hour timeout

    if workflow.status == "completed":
        workflow.fetch_latest(in_place=True)
        print(workflow.data)
    elif workflow.status == "failed":
        print(f"Workflow failed: {workflow.error_message}")

except rowan.RowanAPIError as e:
    print(f"API error: {e}")
except TimeoutError:
    print("Workflow timed out")
```

## Additional Resources

- **Web Interface**: https://labs.rowansci.com
- **Documentation**: https://docs.rowansci.com
- **Python API Docs**: https://docs.rowansci.com/api/python/v2/
- **Tutorials**: https://docs.rowansci.com/tutorials

Related Skills

zinc-database

1174
from foryourhealth111-pixel/Vibe-Skills

Access ZINC (230M+ purchasable compounds). Search by ZINC ID/SMILES, similarity searches, 3D-ready structures for docking, analog discovery, for virtual screening and drug discovery.

zarr-python

1174
from foryourhealth111-pixel/Vibe-Skills

Chunked N-D arrays for cloud storage. Compressed arrays, parallel I/O, S3/GCS integration, NumPy/Dask/Xarray compatible, for large-scale scientific computing pipelines.

yeet

1174
from foryourhealth111-pixel/Vibe-Skills

Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`).

xlsx

1174
from foryourhealth111-pixel/Vibe-Skills

Spreadsheet toolkit (.xlsx/.csv). Create/edit with formulas/formatting, analyze data, visualization, recalculate formulas, for spreadsheet processing and analysis.

xan

1174
from foryourhealth111-pixel/Vibe-Skills

High-performance CSV processing with xan CLI for large tabular datasets, streaming transformations, and low-memory pipelines.

writing-plans

1174
from foryourhealth111-pixel/Vibe-Skills

Use when you have a spec or requirements for a multi-step task, before touching code

writing-docs

1174
from foryourhealth111-pixel/Vibe-Skills

Guides for writing and editing Remotion documentation. Use when adding docs pages, editing MDX files in packages/docs, or writing documentation content.

windows-hook-debugging

1174
from foryourhealth111-pixel/Vibe-Skills

Windows环境下Claude Code插件Hook执行错误的诊断与修复。当遇到hook error、cannot execute binary file、.sh regex误匹配、WSL/Git Bash冲突时使用。

weights-and-biases

1174
from foryourhealth111-pixel/Vibe-Skills

Track ML experiments with automatic logging, visualize training in real-time, optimize hyperparameters with sweeps, and manage model registry with W&B - collaborative MLOps platform

webthinker-deep-research

1174
from foryourhealth111-pixel/Vibe-Skills

Deep web research for VCO: multi-hop search+browse+extract with an auditable action trace and a structured report (WebThinker-style).

vscode-release-notes-writer

1174
from foryourhealth111-pixel/Vibe-Skills

Guidelines for writing and reviewing Insiders and Stable release notes for Visual Studio Code.

visualization-best-practices

1174
from foryourhealth111-pixel/Vibe-Skills

Visualization Best Practices - Auto-activating skill for Data Analytics. Triggers on: visualization best practices, visualization best practices Part of the Data Analytics skill category.