Unit Tests
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing CI coverage, automated checks, or test strategy related to Write unit tests.
Reference guide for energy, force, and stress units across MLIPs, DFT codes, and ASE, including conversion factors.
$ npx skills add learningmatter-mit/AtomisticSkills --skill general-property-units -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-property-units --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/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/general-property-units .claude/skills/general-property-units && 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 "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .claude/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-unitsType 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 learningmatter-mit/AtomisticSkills --skill general-property-units -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-property-units --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/general-property-units .agents/skills/general-property-units && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .agents/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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 learningmatter-mit/AtomisticSkills --skill general-property-units -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-property-units --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/general-property-units .cursor/skills/general-property-units && 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 "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .cursor/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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/learningmatter-mit/AtomisticSkills.git --path skills/general-property-units--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 learningmatter-mit/AtomisticSkills --skill general-property-units -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-property-units --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/general-property-units .gemini/skills/general-property-units && 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 "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .gemini/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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 learningmatter-mit/AtomisticSkills general-property-unitsInstalls 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 learningmatter-mit/AtomisticSkills --skill general-property-units -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/general-property-units .github/skills/general-property-units && 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 "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .github/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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 learningmatter-mit/AtomisticSkills --skill general-property-units -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install learningmatter-mit/AtomisticSkills general-property-units --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/general-property-units .opencode/skills/general-property-units && 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 "general-property-units" agent skill from https://github.com/learningmatter-mit/AtomisticSkills/tree/main/skills/general-property-units into .opencode/skills/general-property-units/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "general-property-units", 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.
general-property-unitsReference guide for energy, force, and stress units across MLIPs, DFT codes, and ASE, including conversion factors.
General Property Units is an agent skill from learningmatter-mit/AtomisticSkills. Reference guide for energy, force, and stress units across MLIPs, DFT codes, and ASE, including conversion factors.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Integrating AtomisticSkills into Agentic IDEs (Cursor, Claude Code, Codex, Google Antigravity, Hermes Agent, etc). The licence is MIT.
Read from SKILL.md and the folder at commit 7f2d86d. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
General Property Units loads about 1.9k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 756 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); files beside SKILL.md are not scanned.
The full file from learningmatter-mit/AtomisticSkills at commit 7f2d86d, republished under its MIT licence (© learningmatter-mit). 756 words, ~1,860 tokens.
.claude/skills/general-property-units/SKILL.md (or your agent's skills folder).Provide a single authoritative reference for units of energy, forces, and stress across all MLIPs, DFT codes, and simulation tools used in this project, including the conversions applied internally.
All internal representations follow the ASE (Atomic Simulation Environment) convention:
| Quantity | Standard Unit | Notes |
|---|---|---|
| Energy | eV | Total energy of the system |
| Energy per atom | eV/atom | Used for MAE reporting and training labels |
| Forces | eV/Å | Negative gradient of energy w.r.t. position |
| Stress | eV/ų | Voigt notation, 6-component (xx, yy, zz, yz, xz, xy) |
The raw torch model and the ASE calculator do not return the same stress units. Most calculators apply a unit conversion on the way out; two do not. Read the stress column for the layer you are actually calling.
Energy is eV and forces are eV/Å everywhere, at both layers. Only stress varies:
| Model (calculator class) | raw model output | ASE calculator output | conversion in the ASE layer |
|---|---|---|---|
MACE (MACECalculator) | eV/ų | eV/ų | none |
UMA / FairChem (FAIRChemCalculator) | eV/ų | eV/ų | none |
CHGNet standalone (CHGNetCalculator) | GPa | eV/ų | × stress_weight, default 1/160.21766208 |
CHGNet / M3GNet / TensorNet via MatGL (PESCalculator) | GPa | GPa unless asked otherwise | none by default — pass stress_unit="eV/A3" |
Measured on one compressed Si cell (xx component), 2026-08-25:
| path | raw | calculator default | calculator eV/ų |
|---|---|---|---|
| MACE-MP small | -0.0762876 | -0.0762876 | — |
UMA uma-s-1p1 (omat) | -0.0821809 | -0.0821810 | — |
| CHGNet standalone 0.4.2 | -13.906347 | -0.0867966 | — |
MatGL TensorNet-PES-MatPES-PBE-2025.2 | -10.780773 | -10.780773 | -0.067288 |
MatGL CHGNet-PES-MatPES-PBE-1M-2026.9 | — | -15.229350 | -0.095054 |
MatGL M3GNet-PES-MatPES-2025.2 | — | -20.293510 | -0.126662 |
Every ratio above is exactly 160.21766208, i.e. GPa per eV/ų.
[!IMPORTANT]
matgl.ext.ase.PESCalculatortakesstress_unit: Literal["eV/A3", "GPa"] = "GPa", so using it as a drop-in ASE calculator gives GPa, not ASE units — it prints a runtime warning saying so. CallingPotential.forwarddirectly also returns GPa. PassPESCalculator(potential=model, stress_unit="eV/A3"), or divide by160.21766208. Mixing this up is a 160x error, not a sign error.
[!NOTE] All of the above are in the ASE sign convention: positive = tensile, compression negative. A compressed cell therefore gives negative diagonal stress at both layers. DFT codes may differ — see VASP below.
Training labels in training_data.json are stored in ASE standard units (eV, eV/Å, eV/ų). Conversions to trainer-specific units are handled automatically inside each wrapper:
| Trainer | Energy Input | Force Input | Stress Input | Internal Conversion |
|---|---|---|---|---|
| MACE | eV | eV/Å | eV/ų | None — trains in eV/ų |
| FairChem (UMA) | eV | eV/Å | eV/ų | None — trains in eV/ų |
| MatGL (CHGNet/M3GNet) | eV | eV/Å | GPa (converted) | eV/ų → GPa in _prepare_training_data |
[!IMPORTANT] MatGL is the only trainer that requires stress conversion. The conversion from eV/ų → GPa is performed automatically inside
MATGLWrapper._prepare_training_data(). Users should always provide stress labels in eV/ų.
Each MLIP trainer natively reports MAE in eV. All wrappers apply a ×1000 conversion to save MAE values in meV to training_history.json and plot axes in training_history.png, for human readability and consistent cross-model comparison:
| Trainer | Native Energy MAE | Native Force MAE | Native Stress MAE | Saved Unit |
|---|---|---|---|---|
| MACE | eV/atom | eV/Å | eV/ų | meV (×1000) |
| FairChem (UMA) | eV/atom | eV/Å | eV/ų | meV (×1000) |
| MatGL (CHGNet/M3GNet) | eV/atom | eV/Å | GPa → eV/ų | meV (×1000) |
The training_history.json keys and their units:
| Key | Unit |
|---|---|
energy_mae_train / energy_mae_val | meV/atom |
force_mae_train / force_mae_val | meV/Å |
stress_mae_train / stress_mae_val | meV/ų |
loss_train / loss_val | Dimensionless (weighted combination) |
[!NOTE] For MatGL stress: the trainer computes MAE in GPa internally. The wrapper converts back to eV/ų first, then multiplies by 1000 to get meV/ų, matching the other wrappers.
| Quantity | VASP Internal | VASP OUTCAR | Conversion to ASE Standard |
|---|---|---|---|
| Energy | eV | eV | None needed |
| Forces | eV/Å | eV/Å | None needed |
| Stress | kB (kilo-Bar) | kB (and GPa) | kB × 0.1 = GPa, then GPa × 0.0062415 = eV/ų |
[!NOTE] VASP stores stress internally in kB (kilo-Bar). The
vasprun.xmlparser in pymatgen returns stress in kB. The Atomate2 MCP tool applies the conversionkB → eV/ųautomatically whenconvert_units=True(default).
VASP reports stress with the opposite sign to the physics and ASE convention:
The sign flip is handled during VASP output parsing (e.g. in the atomate2 MCP tool, VASP stress is multiplied by -1 in addition to the unit conversion).
| From | To | Factor | ASE Code |
|---|---|---|---|
| GPa | eV/ų | 0.00624150913 | ase.units.GPa |
| eV/ų | GPa | 160.21766208 | 1.0 / ase.units.GPa |
| kB | GPa | 0.1 | — |
| kB | eV/ų | 0.000624150913 | 0.1 * ase.units.GPa |
| eV | kJ/mol | 96.4853 | ase.units.kJ / ase.units.mol |
| eV | kcal/mol | 23.0605 | ase.units.kcal / ase.units.mol |
| Å | Bohr | 1.8897259886 | 1.0 / ase.units.Bohr |
from ase import units
# Stress conversions
stress_GPa = stress_eV_per_A3 / units.GPa # eV/ų → GPa
stress_eV_per_A3 = stress_GPa * units.GPa # GPa → eV/ų
stress_eV_per_A3 = stress_kB * 0.1 * units.GPa # kB → eV/ų
# Energy conversions
energy_kJ_per_mol = energy_eV * units.kJ / units.mol
energy_kcal_per_mol = energy_eV * units.kcal / units.molAuthor: Bowen Deng Contact: GitHub @learningmatter-mit
© learningmatter-mit, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/general-property-units of learningmatter-mit/AtomisticSkills.
Open the folder on GitHubat commit 7f2d86d
General Property Units 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 |
|---|---|---|---|---|---|---|
| General Property Units this skilllearningmatter-mit/AtomisticSkills | 175 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Unit Teststhedaviddias/Front-End-Checklist | 74k | — | ~382 | Automated safety check: Pass | MIT | |
| Warp Rust Unit Testswarpdotdev/warp | 65k | 1 repos | ~3.4k | Automated safety check: Pass | AGPL-3.0 | |
| CSS At Propertythedaviddias/Front-End-Checklist | 74k | — | ~602 | Automated safety check: Pass | MIT | |
| Writing Unit TestsTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Responsive Unitsthedaviddias/Front-End-Checklist | 74k | — | ~472 | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing CI coverage, automated checks, or test strategy related to Write unit tests.
warpdotdev/warp
Guides writing, improving and running crate-level Rust unit tests in the Warp codebase, and says when a unit test is the wrong level.
thedaviddias/Front-End-Checklist
A skill your agent uses when implementing animated gradients, complex CSS transitions that involve custom property values, or building a typed design token system where custom property misuse should…
TriliumNext/Trilium
A skill your agent uses when writing, extending, or debugging Vitest unit tests anywhere in the Trilium monorepo — Preact components, jQuery widgets, client services, or the server/trilium-core…
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use relative units for responsive layouts.
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use CSS logical properties for i18n and RTL support.
learningmatter-mit/AtomisticSkills
Define a docking search box (center coordinates + box dimensions in Angstroms) from a co-crystal ligand, binding-site residues, or a saved JSON specification.
learningmatter-mit/AtomisticSkills
Build a solvated, charge-neutralized protein-ligand complex for OpenMM molecular dynamics simulation.
learningmatter-mit/AtomisticSkills
Identify and rank ligandable pockets on a protein structure or model using geometry (fpocket) or an ML predictor (P2Rank).
learningmatter-mit/AtomisticSkills
Calculate homolytic and heterolytic bond dissociation energies (BDEs) for all single bonds in a molecule using MLIPs with RDKit fragmentation.
learningmatter-mit/AtomisticSkills
Generate molecular conformers with RDKit ETKDG, relax with MLIPs, and rank by energy with Boltzmann weighting.
learningmatter-mit/AtomisticSkills
Query multiple MOF databases (QMOF via MPContribs; ARC-MOF DB7/Majumdar et al.
Reference guide for energy, force, and stress units across MLIPs, DFT codes, and ASE, including conversion factors. General Property Units is an agent skill from learningmatter-mit/AtomisticSkills. Reference guide for energy, force, and stress units across MLIPs, DFT codes, and ASE, including conversion factors.
Run `npx skills add learningmatter-mit/AtomisticSkills --skill general-property-units -a claude-code`. Or copy the skill folder (skills/general-property-units in learningmatter-mit/AtomisticSkills) into .claude/skills/general-property-units in your project. Claude Code loads it when a task matches its description.
Run `npx skills add learningmatter-mit/AtomisticSkills --skill general-property-units -a codex`. Or copy the skill folder (skills/general-property-units in learningmatter-mit/AtomisticSkills) into .agents/skills/general-property-units 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 learningmatter-mit/AtomisticSkills --skill general-property-units -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/general-property-units, .gemini/skills/general-property-units, .github/skills/general-property-units and .opencode/skills/general-property-units in your project.
SKILL.md names no scripts, command-line tools or credentials: General Property Units is instructions for the agent only. Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: 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. Review the folder before installing.
General Property Units is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.4k 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 General Property Units: Unit Tests (thedaviddias/Front-End-Checklist, 74k stars), Warp Rust Unit Tests (warpdotdev/warp, 65k stars), CSS At Property (thedaviddias/Front-End-Checklist, 74k stars) and Writing Unit Tests (TriliumNext/Trilium, 38k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
learningmatter-mit (a GitHub organization) maintains it in learningmatter-mit/AtomisticSkills, which has 175 GitHub stars. The repository holds 129 skills in this directory. The repository was last updated on October 6, 2026.
Source: learningmatter-mit/AtomisticSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.