catgo-workflow
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 calculati
SKILL.mdserver/catgo/workflow/SKILL.md
GitHubCatGo Workflow Skill
Quick Start — Python API
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_REVIEWafter 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, callwf.submit(auto_submit=True).HPC Confirmation Required: Before calling
wf.submit()orcatgo_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 viaadd_taskparams. 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 - TSfree_energy_diagram— Plot reaction energy diagramdos_analysis— Density of states analysischarge_analysis— Bader charge analysis
Structure Building
structure_input— Provide input structureslab_gen— Generate surface slabadsorbate_place— Place adsorbate on surface
Key Parameters
VASP
software="vasp",ENCUT,EDIFF,EDIFFG,NSW,ISIF,IBRIONISMEAR,SIGMA,ISPIN,NCORE,KPAR
Frequency
freeze_mode: "none", "layers", "z_range", "element", "indices", "manual"freeze_layers: number of bottom layers to freezefreeze_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:
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
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
for encut in [400, 500, 600, 700]:
wf.add_task(single_point, structure=struct.output.structure,
ENCUT=encut, system_name=f"ENCUT={encut}")