Create and manage computational chemistry workflows with CatGo. Supports VASP, CP2K, ORCA, MLP, LAMMPS. Build OER/HER/CO2RR workflows, geometry optimization, frequency analysis, Gibbs energy calculations.
Scanned 9/20/2026
Install to Claude Code
npx -y skills add Hello-QM/catgo-LRG --skill workflow --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Workflow?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hello-qm-workflow-catgo-lrg)More formats (shields.io, HTML) on the badges page.
---
name: catgo-workflow
description: Create and manage computational chemistry workflows with CatGo. Supports VASP, CP2K, ORCA, MLP, LAMMPS. Build OER/HER/CO2RR workflows, geometry optimization, frequency analysis, Gibbs energy calculations.
---
# CatGo Workflow Skill
## Quick Start — Python API
```python
from catgo.workflow import Workflow
from catgo.workflow.builtins import geo_opt, freq, gibbs_energy
wf = Workflow("RuO2 OER")
# Input structure
slab = wf.add_task("structure_input", structure=structure_json)
# Geometry optimization → Frequency → Gibbs Energy
opt = wf.add_task(geo_opt, structure=slab.output.structure, ENCUT=520, system_name="*OH")
frq = wf.add_task(freq, structure=opt.output.structure, system_name="*OH",
freeze_mode="layers", freeze_layers=4)
gib = wf.add_task(gibbs_energy, energy=opt.output.energy,
frequencies=frq.output.frequencies, system_name="*OH")
wf.submit() # Engine picks it up automatically
```
> **HPC Confirmation Gate:** By default, HPC tasks pause at `PENDING_REVIEW` after local preprocessing completes, so users can verify structures and parameters before spending HPC resources. Users confirm via the frontend "Confirm & Submit" button (per-task or "Confirm All"). To skip this gate, call `wf.submit(auto_submit=True)`.
>
> **HPC Confirmation Required:** Before calling `wf.submit()` or `catgo_workflow_engine(action="submit")`, you MUST ask the user which HPC cluster to use and confirm job parameters (`partition`, `account`, `walltime`, `ntasks`). These can be set per-task via `add_task` params. Never submit without user confirmation.
## Available Task Types
### HPC Calculations
- `geo_opt` — Geometry optimization (VASP/CP2K/ORCA/MLP)
- `single_point` — Single point energy (VASP/CP2K/ORCA)
- `freq` — Vibrational frequencies (VASP/CP2K/ORCA)
- `cell_opt` — Cell optimization (VASP/CP2K)
- `md` — Molecular dynamics (VASP/CP2K/LAMMPS/MLP)
- `ts_search` — Transition state search (Sella/ORCA NEB-TS)
### Local Analysis
- `gibbs_energy` — G = E_DFT + ZPE - TS
- `free_energy_diagram` — Plot reaction energy diagram
- `dos_analysis` — Density of states analysis
- `charge_analysis` — Bader charge analysis
### Structure Building
- `structure_input` — Provide input structure
- `slab_gen` — Generate surface slab
- `adsorbate_place` — Place adsorbate on surface
## Key Parameters
### VASP
- `software="vasp"`, `ENCUT`, `EDIFF`, `EDIFFG`, `NSW`, `ISIF`, `IBRION`
- `ISMEAR`, `SIGMA`, `ISPIN`, `NCORE`, `KPAR`
### Frequency
- `freeze_mode`: "none", "layers", "z_range", "element", "indices", "manual"
- `freeze_layers`: number of bottom layers to freeze
- `freeze_z_below`: freeze atoms below this z coordinate (Angstrom)
### Gibbs Energy
- `phase`: "adsorbed" (harmonic) or "gas" (ideal gas)
- `temperature`: K (default 298.15)
- `freq_cutoff`: cm-1 (default 50, for adsorbed phase)
## Output References
Connect tasks by passing `.output.key`:
```python
opt.output.structure # optimized structure
opt.output.energy # DFT energy (eV)
frq.output.frequencies # vibrational frequencies
frq.output.zpe # zero-point energy
gib.output.gibbs # Gibbs free energy
```
## Workflow Patterns
### OER Overpotential
```python
for ads in ["OH", "O", "OOH"]:
opt = wf.add_task(geo_opt, structure=slab.output.structure,
system_name=f"*{ads}")
frq = wf.add_task(freq, structure=opt.output.structure,
freeze_mode="layers", freeze_layers=4)
gib = wf.add_task(gibbs_energy, energy=opt.output.energy,
frequencies=frq.output.frequencies, phase="adsorbed")
```
### Convergence Test
```python
for encut in [400, 500, 600, 700]:
wf.add_task(single_point, structure=struct.output.structure,
ENCUT=encut, system_name=f"ENCUT={encut}")
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!