ML Generative Adit
learningmatter-mit/AtomisticSkills
Generate novel crystal structures and molecules using ADiT (All-atom Diffusion Transformer), a unified latent diffusion model.
Run structure relaxation and phonon calculations using Meta's UMA (Universal Materials Accelerator) via fairchem
$ npx skills add lamm-mit/scienceclaw --skill uma -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lamm-mit/scienceclaw uma --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/uma .claude/skills/uma && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .claude/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/lamm-mit/scienceclaw/tree/main/skills/umaType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add lamm-mit/scienceclaw --skill uma -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lamm-mit/scienceclaw uma --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/uma .agents/skills/uma && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .agents/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lamm-mit/scienceclaw --skill uma -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lamm-mit/scienceclaw uma --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/uma .cursor/skills/uma && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .cursor/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/lamm-mit/scienceclaw.git --path skills/uma--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add lamm-mit/scienceclaw --skill uma -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lamm-mit/scienceclaw uma --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/uma .gemini/skills/uma && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .gemini/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install lamm-mit/scienceclaw umaInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add lamm-mit/scienceclaw --skill uma -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/uma .github/skills/uma && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .github/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lamm-mit/scienceclaw --skill uma -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lamm-mit/scienceclaw uma --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lamm-mit/scienceclaw.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/uma .opencode/skills/uma && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "uma" agent skill from https://github.com/lamm-mit/scienceclaw/tree/main/skills/uma into .opencode/skills/uma/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "uma", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
umaRun structure relaxation and phonon calculations using Meta's UMA (Universal Materials Accelerator) via fairchem
Uma is an agent skill from lamm-mit/scienceclaw. Run structure relaxation and phonon calculations using Meta's UMA (Universal Materials Accelerator) via fairchem
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `scripts/uma_relax.py` and `scripts/uma_screen.py`).
It sits in AI & LLM Engineering, covering Physical and earth sciences. It works with CUDA. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ab9aba1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3pipcondaFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
huggingface.cogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
HF_TOKENMP_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Uma loads about 3.5k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 709 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from lamm-mit/scienceclaw at commit ab9aba1, republished under its Apache-2.0 licence (© lamm-mit). 709 words, ~3,476 tokens.
.claude/skills/uma/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Run structure relaxation, single-point energy calculations, and phonon property calculations using UMA (Universal Materials Accelerator), a machine-learned interatomic potential from Meta FAIR. UMA is a fast alternative to DFT, achieving near-DFT accuracy at a fraction of the cost.
Built on the fairchem framework.
fairchem-core installed (pip install fairchem-core)phonopy installed (pip install phonopy) — for phonon calculationsHF_TOKEN environment variable set (gated model on HuggingFace)uma_relax.py — Relax a crystal structure (CLI)python3 {baseDir}/scripts/uma_relax.py \
--structure path/to/structure.cif \
--relax-cell --pressure 150 \
--format json| Parameter | Description |
|---|---|
--structure | Path to CIF, POSCAR, or XYZ structure file |
--mp-id | Materials Project ID (fetches structure automatically) |
--model | uma-s-1p1, uma-s-1p2, uma-m-1p1 (default: uma-m-1p1) |
--task | omat (default), omol, omc, oc20, odac |
--device | cuda (default) or cpu |
--relax-cell | Enable full cell relaxation |
--pressure | External pressure in GPa (default: 0). Implies --relax-cell |
--fmax | Force convergence threshold in eV/A (default: 0.05) |
--steps | Max optimizer steps (default: 200) |
--output-cif | Path to save relaxed structure as CIF |
--format | summary | json |
For batch workflows (screening, phonon), use the Python API directly:
from fairchem.core import pretrained_mlip, FAIRChemCalculator
predictor = pretrained_mlip.get_predict_unit("uma-m-1p1", device="cuda")
calc = FAIRChemCalculator(predictor, task_name="omat")from ase.build import bulk
from ase.optimize import FIRE
from ase.filters import FrechetCellFilter
atoms = bulk("Si") # or: ase.io.read("structure.cif")
atoms.calc = calc
# Relax with external pressure (1 GPa = 1/160.21766208 eV/A^3)
pressure_gpa = 150.0
pressure_ev_per_A3 = pressure_gpa / 160.21766208
opt = FIRE(FrechetCellFilter(atoms, scalar_pressure=pressure_ev_per_A3))
opt.run(fmax=0.05, steps=500)
energy = atoms.get_potential_energy() # eV
volume = atoms.get_volume() # A^3import phonopy
from phonopy.structure.atoms import PhonopyAtoms
import numpy as np
# Convert ASE Atoms to PhonopyAtoms
ph_atoms = PhonopyAtoms(
symbols=atoms.get_chemical_symbols(),
cell=atoms.get_cell(),
scaled_positions=atoms.get_scaled_positions(),
)
# Create phonopy object with supercell
ph = phonopy.Phonopy(ph_atoms, supercell_matrix=np.diag([2, 2, 2]))
ph.generate_displacements(distance=0.01, is_diagonal=False)
# Compute forces on each displaced supercell using UMA
force_sets = []
for scell in ph.supercells_with_displacements:
from ase import Atoms as ASEAtoms
ase_scell = ASEAtoms(
symbols=scell.symbols, positions=scell.positions,
cell=scell.cell, pbc=True,
)
ase_scell.calc = FAIRChemCalculator(predictor, task_name="omat")
forces = ase_scell.get_forces()
forces -= forces.mean(axis=0) # acoustic sum rule
force_sets.append(forces)
ph.forces = force_sets
ph.produce_force_constants()
ph.symmetrize_force_constants()
# Get phonon frequencies
ph.run_mesh([8, 8, 8])
frequencies = ph.get_mesh_dict()["frequencies"] # (n_qpoints, n_bands) in THz
# Check dynamic stability (no imaginary modes)
min_freq = frequencies.min()
dynamically_stable = min_freq > -0.5 # THz threshold
# Thermal properties
ph.run_thermal_properties(t_min=0, t_max=600, t_step=100)
tp = ph.get_thermal_properties_dict()
# tp["temperatures"], tp["free_energy"], tp["entropy"], tp["heat_capacity"]def auto_supercell(n_atoms):
if n_atoms <= 4: return [3, 3, 3]
elif n_atoms <= 16: return [2, 2, 2]
elif n_atoms <= 48: return [2, 2, 1]
else: return [1, 1, 1]from pymatgen.core import Structure, Lattice
# LaH10 clathrate (Fm-3m, SG 225)
structure = Structure.from_spacegroup(
225, Lattice.cubic(5.1),
["La", "H", "H"],
[[0, 0, 0], [0.25, 0.25, 0.25], [0.118, 0.118, 0.118]],
)
# CaH6 sodalite (Im-3m, SG 229)
structure = Structure.from_spacegroup(
229, Lattice.cubic(3.54),
["Ca", "H"],
[[0, 0, 0], [0.25, 0, 0.5]],
)from pymatgen.transformations.standard_transformations import SubstitutionTransformation
sub = SubstitutionTransformation({"La": "Y"})
new_structure = sub.apply_transformation(structure)from pymatgen.io.ase import AseAtomsAdaptor
atoms = AseAtomsAdaptor.get_atoms(structure) # pymatgen → ASE
structure = AseAtomsAdaptor.get_structure(atoms) # ASE → pymatgenfrom mp_api.client import MPRester
from pymatgen.analysis.phase_diagram import PhaseDiagram, PDEntry
from pymatgen.core import Composition
import os
with MPRester(os.environ["MP_API_KEY"]) as mpr:
entries = mpr.get_entries_in_chemsys("La-H")
my_entry = PDEntry(Composition("LaH10"), total_energy_eV, name="UMA-LaH10")
pd = PhaseDiagram(list(entries) + [my_entry])
e_above_hull = pd.get_e_above_hull(my_entry) # eV/atom; 0 = on hullUMA requires a GPU. Structure your code with a GPU check at the top. When no GPU
is available, write a SLURM script that re-runs the SAME script on a GPU node.
The script file is at agent_scripts/agent_code.py relative to the project root.
import torch, subprocess, os, sys, json
# GPU check — must be at the TOP of the script, before any UMA imports
if not torch.cuda.is_available():
print("No GPU — submitting to SLURM", file=sys.stderr)
venv = os.environ.get("VIRTUAL_ENV", "")
script_path = os.path.abspath(sys.argv[0]) # path to this script
slurm = f"""#!/bin/bash
#SBATCH --partition=venkvis-h100
#SBATCH --gres=gpu:1
#SBATCH --mem=64G
#SBATCH --time=04:00:00
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
source {venv}/bin/activate
export HF_TOKEN="{os.environ.get('HF_TOKEN', '')}"
export MP_API_KEY="{os.environ.get('MP_API_KEY', '')}"
cd {os.getcwd()}
{sys.executable} {script_path}
"""
with open("submit.sh", "w") as f:
f.write(slurm)
result = subprocess.run(["sbatch", "submit.sh"], capture_output=True, text=True)
job_id = result.stdout.strip().split()[-1] if result.returncode == 0 else None
print(json.dumps({"status": "SUBMITTED_TO_SLURM", "job_id": job_id}))
sys.exit(0)
# === GPU code below (only runs on GPU node) ===
from fairchem.core import pretrained_mlip, FAIRChemCalculator
# ... rest of computationFor job dependency (ensure job B runs after job A):
sbatch --dependency=afterok:<job_A_id> submit_B.shBefore submitting or executing code that uses UMA, verify:
pretrained_mlip.get_predict_unit("uma-m-1p1", device="cuda") — NOT pretrained_mlip("UMA") or pretrained_mlip.load()FAIRChemCalculator(predictor, task_name="omat") — NOT FAIRChemCalculator(model)FrechetCellFilter from ase.filters — NOT ExpCellFilter from ase.constraintspressure_gpa / 160.21766208 — NOT * 0.0006242 or other approximationsvenkvis-h100 or venkvis-a100 — NOT gpu or standardsource <venv>/bin/activate — NOT conda activate or module loados.environ.get("VIRTUAL_ENV", "") — NOT hardcodedos.environ.get("HF_TOKEN") and os.environ.get("MP_API_KEY")| Model | Parameters | Speed | Accuracy |
|---|---|---|---|
uma-s-1p1 | 6.6M active / 150M total | Fast | Good |
uma-s-1p2 | 6.6M active / 290M total | Fast | Better |
uma-m-1p1 | 50M active / 1.4B total | Slower | Best |
uma_screen.py — Batch structure relaxation and stability screeningRelax all CIF files in a directory with UMA at multiple pressures, compute
formation energies, and check 0 GPa stability against the Materials Project
convex hull. No hardcoded prototypes — structures come from the
structure-enumeration skill or any other source.
Typical workflow:
materials skill to find prototype structures from MPstructure-enumeration skill to generate candidates by metal substitutionuma_screen.py to relax all candidates and assess stability# Relax all CIFs in the default enumeration directory
python3 {baseDir}/scripts/uma_screen.py --format json
# From a custom directory
python3 {baseDir}/scripts/uma_screen.py \
--structures-dir ./my_candidates \
--pressures 0,150 \
--format jsonIf no GPU is available, the script auto-submits to SLURM (venkvis-h100).
| Parameter | Description |
|---|---|
--structures-dir | Directory of CIF files to relax (default: ~/.scienceclaw/enumerated_structures) |
--pressures | Pressures in GPa (default: 0,150) |
--after-job | SLURM job ID to wait for before starting (ensures prior job completes first) |
--model | UMA checkpoint (default: uma-m-1p1) |
--device | cuda (default) or cpu |
--fmax | Force convergence threshold (default: 0.05) |
--steps | Max optimizer steps (default: 200) |
--output-dir | Directory for relaxed CIFs (default: ./uma_screen_output) |
--format | json or summary |
--dry-run | Show plan without running |
--structures-dir for CIF files{
"status": "COMPLETED",
"model": "uma-m-1p1",
"ranking": [
{
"rank": 1,
"formula": "LaH10",
"prototype": "LaH10-type",
"formation_energy_eV_per_atom": -0.1234,
"converged": true,
"e_above_hull_eV_per_atom_0GPa": 0.045
}
],
"candidates": [ ... ],
"reference_energies": { ... }
}You can also use UMA directly in Python without the CLI script:
from fairchem.core import pretrained_mlip, FAIRChemCalculator
from ase.build import bulk
from ase.optimize import FIRE
from ase.filters import FrechetCellFilter
# Load model (do this once, reuse for many structures)
predictor = pretrained_mlip.get_predict_unit("uma-m-1p1", device="cuda")
calc = FAIRChemCalculator(predictor, task_name="omat")
# Build or load structure
atoms = bulk("Si") # or: ase.io.read("structure.cif")
atoms.calc = calc
# Relax with optional external pressure
pressure_gpa = 150.0
pressure_ev_per_A3 = pressure_gpa / 160.21766208
filtered = FrechetCellFilter(atoms, scalar_pressure=pressure_ev_per_A3)
opt = FIRE(filtered)
opt.run(fmax=0.05, steps=500)
# Read results
energy = atoms.get_potential_energy() # eV
forces = atoms.get_forces() # eV/A
volume = atoms.get_volume() # A^3Since UMA requires a GPU, a typical workflow on Artemis is:
uma_relax.py (see hpc skill for script format)sbatch to venkvis-h100 or venkvis-a100squeue -j <job_id>To enumerate candidate structures for screening, use pymatgen directly:
from pymatgen.core import Structure, Lattice
# Build a structure from spacegroup + Wyckoff positions
structure = Structure.from_spacegroup(
225, # Fm-3m
Lattice.cubic(5.1), # lattice parameter
["La", "H", "H"], # species at each site
[[0, 0, 0], # 4a: metal
[0.25, 0.25, 0.25], # 8c: H
[0.118, 0.118, 0.118]], # 32f: H (clathrate cage)
)
structure.to("LaH10.cif", fmt="cif")To substitute metals in a prototype:
from pymatgen.transformations.standard_transformations import SubstitutionTransformation
# Replace La with Y in a prototype
sub = SubstitutionTransformation({"La": "Y"})
new_structure = sub.apply_transformation(structure)To check thermodynamic stability at 0 GPa, compare against the Materials Project convex hull:
from mp_api.client import MPRester
from pymatgen.analysis.phase_diagram import PhaseDiagram, PDEntry
from pymatgen.core import Composition
with MPRester("YOUR_MP_API_KEY") as mpr:
# Fetch all known phases in the La-H system
entries = mpr.get_entries_in_chemsys("La-H")
# Add your UMA-computed entry
my_entry = PDEntry(Composition("LaH10"), total_energy_eV, name="UMA-LaH10")
all_entries = list(entries) + [my_entry]
# Build phase diagram and check stability
pd = PhaseDiagram(all_entries)
e_above_hull = pd.get_e_above_hull(my_entry) # eV/atom; 0 = on hull (stable)© lamm-mit, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (scripts) in skills/uma of lamm-mit/scienceclaw.
Open the folder on GitHubat commit ab9aba1
Uma next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Uma this skilllamm-mit/scienceclaw | 244 | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| ML Generative Aditlearningmatter-mit/AtomisticSkills | 175 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Mat Lammps Mdlearningmatter-mit/AtomisticSkills | 175 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Optimize For GPUmajiayu000/claude-skill-registry | 666 | 1 repos | ~8.5k | Automated safety check: Pass | MIT | |
| Esmfold2JimLiu/science-skills | 227 | 4 repos | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| MUSA GPU Training Optimizeropen-infra-skills/infra-skills | 141 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 |
learningmatter-mit/AtomisticSkills
Generate novel crystal structures and molecules using ADiT (All-atom Diffusion Transformer), a unified latent diffusion model.
learningmatter-mit/AtomisticSkills
Build and run LAMMPS molecular dynamics with isolated MLIP-specific binaries (MACE, MatGL/CHGNet, FairChem) to avoid Python and Torch stack conflicts.
majiayu000/claude-skill-registry
GPU-accelerate Python code using CuPy, Numba CUDA, Warp, cuDF, cuML, cuGraph, KvikIO, cuCIM, cuxfilter, cuVS, cuSpatial, and RAFT.
JimLiu/science-skills
Biohub ESMFold2 / ESMFold2-Fast all-atom co-folding (Candido et al.
open-infra-skills/infra-skills
Profiles, benchmarks and tunes AI training workloads on Moore Threads MUSA GPUs with a measurement-first process that keeps model behavior unchanged.
Mesh-LLM/mesh-llm
A skill your agent uses when running, debugging, interpreting, or documenting mesh-llm benchmark tune model-serving throughput trials, including choosing…
lamm-mit/scienceclaw
Query FRED (Federal Reserve Economic Data) API for 800,000+ economic time series from 100+ sources.
lamm-mit/scienceclaw
Generates comprehensive drug research reports with compound disambiguation, evidence grading, and mandatory completeness sections.
lamm-mit/scienceclaw
Query and download public cancer imaging data from NCI Imaging Data Commons using idc-index.
lamm-mit/scienceclaw
Cloud-based quantum chemistry platform with Python API. An agent skill from lamm-mit/scienceclaw.
lamm-mit/scienceclaw
Create professional infographics using Nano Banana Pro AI with smart iterative refinement.
lamm-mit/scienceclaw
Generate comprehensive disease research reports using 100+ ToolUniverse tools.
Works with
Categories
Run structure relaxation and phonon calculations using Meta's UMA (Universal Materials Accelerator) via fairchem. Uma is an agent skill from lamm-mit/scienceclaw.
Uma fits situations like: tasks that involve Physical and earth sciences.
Run `npx skills add lamm-mit/scienceclaw --skill uma -a claude-code`. Or copy the skill folder (skills/uma in lamm-mit/scienceclaw) into .claude/skills/uma in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lamm-mit/scienceclaw --skill uma -a codex`. Or copy the skill folder (skills/uma in lamm-mit/scienceclaw) into .agents/skills/uma in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lamm-mit/scienceclaw --skill uma -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/uma, .gemini/skills/uma, .github/skills/uma and .opencode/skills/uma in your project.
Going by SKILL.md and its folder, Uma needs Python for the scripts in its folder, the command-line tools its instructions call (python3, pip and conda) and credentials named HF_TOKEN and MP_API_KEY. Our summary lists: Python 3; A credential in MP_API_KEY.
SKILL.md names 2 domains. As links in the text: huggingface.co and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Uma is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Uma: ML Generative Adit (learningmatter-mit/AtomisticSkills, 175 stars), Mat Lammps Md (learningmatter-mit/AtomisticSkills, 175 stars), Optimize For GPU (majiayu000/claude-skill-registry, 666 stars) and Esmfold2 (JimLiu/science-skills, 227 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lamm-mit (a GitHub user) maintains it in lamm-mit/scienceclaw, which has 244 GitHub stars. The repository holds 85 skills in this directory. The repository was last updated on August 21, 2026.
Source: lamm-mit/scienceclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.