JSON Output Reference¶
mlmm provides machine-readable JSON output for programmatic consumption by AI agents, scripts, and downstream tools.
--out-json flag¶
Most MLIP-based and reporting subcommands (opt, sp, tsopt, freq, irc, scan, scan2d, scan3d, path-opt, dft, extract, trj2fig, and energy-diagram) support --out-json / --no-out-json (default: off).
When enabled, authoritative result.json and its identical summary.json compatibility mirror are written beside the normal outputs.
mlmm opt -i r_complex_layered.pdb --parm real.parm7 -q 0 -m 1 \
--max-cycles 5 --out-json --out-dir result_opt
cat result_opt/result.json | python -m json.tool
The all and path-search commands write summary.json without an --out-json flag once execution reaches their summary writer. Early CLI or input validation can fail before the file exists.
summary.json mirror¶
write_result_json stages the same bytes for both names, publishes the
summary.json compatibility mirror first, and publishes authoritative
result.json last. A successful return guarantees identical bytes. If
publication is interrupted, treat result.json as authoritative and require
successful process/writer completion; when an orchestrator assigned run_id,
validate it as well rather than assuming both names identify one generation.
Common envelope¶
The shared writer and aggregate summary producers supply the fields below. Rows marked optional are present only when the producer supplies that data:
Field |
Type |
Description |
|---|---|---|
|
string |
Envelope schema version; current value comes from |
|
string |
Leaf envelopes use the subcommand name (e.g. |
|
string |
Package version ( |
|
string |
Command-specific: |
|
float |
Optional wall-clock time; omitted when the producer does not pass timing to the shared writer. |
|
object |
Hardware info (see below) |
|
string |
Optional. Present when an orchestrator (including MCP) assigns a current invocation identity; conflicting caller values are rejected. |
MLIP/ML/MM calculator stages additionally record:
Field |
Type |
Description |
|---|---|---|
|
string | null |
Backend identifier ( |
|
string | null |
Exact model/checkpoint; |
|
string | null |
Effective public precision ( |
|
string | null |
MM Hessian/energy backend ( |
|
string | null |
Link-atom placement ( |
|
bool | null |
Whether CMAP terms were enabled; null for plot-only output |
Execution and scientific truth¶
Multi-stage and scan producers add the fields below when they can evaluate constituent work. These fields are additive and producer-dependent; the command-specific status remains in place. Consumers should gate scientific use on scientific_status and the leaf outcomes. Missing or ambiguous convergence is fail-closed and cannot promote a leaf to usable.
Field |
Type |
Description |
|---|---|---|
|
string |
Normally |
|
string |
|
|
string[] |
Reasons for unusable or missing leaves; omitted on clean success. This is distinct from an aggregate workflow’s legacy |
|
string[] |
Expected and observed leaf identifiers used to detect missing aggregate work. |
|
object[] |
Stage leaves with |
|
object[] |
Scan points with |
When present, run_id identifies the current invocation. The all aggregate
rebuilds current_output_paths and key_output_files from that invocation’s
manifest, so stale files in a reused output tree are excluded.
Error envelope (when status == "error")¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Exception class name (e.g. |
|
list[string] |
Full MRO class names (e.g. |
|
string |
Module the exception class was defined in |
|
string |
High-level CLI stage label (e.g. |
environment:
Field |
Type |
Example |
|---|---|---|
|
string |
|
|
string |
|
|
float |
|
|
string |
|
|
string |
|
|
int |
|
|
float |
|
An optimizer may also report "status": "stalled": the energy stopped decreasing over the configured window (an energy plateau) while the configured force/step convergence criteria remained unmet. A stall is a distinct, non-converged outcome — it is never reported as converged — and it stops further flatten/retry work rather than repeating a non-progressing optimization. When present, a stop_reason string records the energy range, window, and the failed criteria. A stall may be retried (e.g. from a perturbed geometry or with tighter step control); it is not an alias for max_cycles exhaustion or a generic failure. In microiteration, a stalled macro step or latest micro (MM) relaxation remains a stalled result and cannot satisfy macro convergence.
Subcommand schemas¶
sp¶
Field |
Type |
Description |
|---|---|---|
|
string / string |
|
|
string |
Input structure path |
|
string |
Full-system Amber topology path |
|
int / int |
Model-region charge and multiplicity |
|
float |
ONIOM single-point energy (Hartree) |
|
string |
Path to |
|
string | null |
Path to |
|
string |
Human-readable elapsed time |
opt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Present only for a non-converged stop (stalled/stopped); records the energy plateau range/window and failed criteria |
|
float |
Final ONIOM energy (Hartree) |
|
int |
Optimization cycles completed |
|
string |
One of |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
int |
Total atoms (all layers) |
|
int |
Frozen atoms |
|
string |
Convergence threshold preset |
|
int |
Maximum allowed cycles |
|
string |
Input filename |
|
float |
Last max gradient (Hartree/Bohr) |
|
float |
Last RMS gradient |
|
float |
Last max displacement (Bohr) |
|
float |
Last RMS displacement |
|
object |
Numeric thresholds for the named preset |
|
object|null |
Present when |
|
object |
Output file map |
tsopt¶
Field |
Type |
Description |
|---|---|---|
|
string |
Backward-compatible numerical outcome; use |
|
string |
Numerical optimizer outcome: |
|
string |
|
|
bool |
|
|
string |
|
|
int|null |
Selected negative exact-PHVA root for downstream IRC; fallback root 0 is explicitly labelled and does not verify reaction identity |
|
float|null |
Frequency of the selected negative root |
|
string|null |
Reference-aligned or explicit fallback source used for root selection |
|
float |
TS energy (Hartree) |
|
int|null |
Number of imaginary frequencies; |
|
float[]|null |
Imaginary frequencies (cm⁻¹, negative); no PHVA: |
|
string |
One of |
|
int |
Total atoms |
|
int |
Optimization cycles |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
string|null |
Advanced path-derived mode supplied with |
|
object |
Hessian-family rejection/recovery, exact-saddle, and target-mode diagnostics |
|
object |
Frozen-boundary TR provenance for Dimer/flatten/final saddle analysis |
|
object |
Final geometry + vib mode files |
Terminal exact PHVA runs only after numerical convergence. A non-converged or
stalled run retains the terminal geometry and records PHVA as skipped. A PHVA failure is recorded as
hessian_status: "failed" without discarding the structure or fabricating
frequencies. Numerical status and saddle order are separate: a converged
higher-order stationary point remains optimization_status: "converged" with
saddle_validation: "higher_order", and is not a certified first-order TS.
all may continue warning-labelled diagnostic IRC only with a validated
negative root. Numerical non-convergence, zero imaginary modes, failed/skipped
PHVA, or no valid negative root stops after TS artifact registration and before
IRC. Explicit --skip-final-freq retains the final structure with
n_imaginary_modes: null and imaginary_frequencies_cm: [].
freq¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Total normal modes |
|
int |
Imaginary frequency count |
|
float[] |
All frequencies (cm⁻¹) |
|
float[] |
Negative frequencies only |
|
object|null |
Thermodynamic data (see below) |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
int |
Total atoms |
|
int |
Frozen atoms |
|
object |
Frozen-boundary TR provenance used for frequencies and thermochemistry |
|
object |
Output map; includes |
thermochemistry (null if thermoanalysis unavailable):
Field |
Type |
Unit |
|---|---|---|
|
float |
K |
|
float |
atm |
|
string |
Automatically detected molecular point group |
|
string |
|
|
int |
External rotational symmetry number |
|
string |
|
|
float |
Hartree — the |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
cal/mol |
|
float |
cal/(mol K) |
|
float |
cal/(mol K) |
irc¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
IRC frames |
|
float |
First stitched-path endpoint; standalone IRC assigns no chemical identity |
|
float |
TS energy |
|
float |
Last stitched-path endpoint; standalone IRC assigns no chemical identity |
|
string |
|
|
float |
Compatibility aliases for first/last; do not infer R/P identity from the names |
|
bool|null |
Directional convergence flags |
|
bool |
Whether opt-in physical endpoint-stop bypass mode was enabled |
|
int |
Number of energy-rise or one-step energy-change stops actually bypassed |
|
object |
Frozen-boundary TR provenance for the initial/updated Hessian |
|
bool |
For a file-seeded Hessian, whether model charge and multiplicity were identity-verified |
|
object |
Directed first→last |
|
string |
|
|
object |
Trajectory and endpoint files (XYZ plus available PDB/CIF companions) |
rigid_projection provenance: the object records the selected treatment
(treatment), effective_rank, active/frozen atom counts and indices, and the
Hessian source/shape used by that workflow. The treatment is always
constrained; a stale non-constrained configuration fails explicitly. A freq --dump
run writes the same object to thermoanalysis.yaml. Field names for the final
two values follow the producing workflow (hessian_source / hessian_shape,
or source / raw_hessian_shape).
scan¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Number of scan stages |
|
object[] |
Per-stage data |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
Output files |
stages[]: n_steps, converged, pairs_1based, energies_hartree, final_energy_hartree, bond_changes, and (additive) optimizer_status (converged/not_converged/stalled) plus stop_reason when the stage’s last optimizer stopped without convergence
scan2d / scan3d¶
Field |
Type |
Description |
|---|---|---|
|
int |
Total grid points |
|
int |
Fresh-run grid points attempted (preoptimization row excluded) |
|
int |
Fresh-run points with explicit convergence, finite energy/coordinates, and a written geometry artifact |
|
object[] |
Explicit grid-index, distances, energy, convergence, and |
|
string[] |
Current-run CSV/HTML/PNG and grid geometries; consumers can exclude stale files without filename inference |
|
object |
|
|
float |
Surface minimum energy |
|
int | null |
Model-region charge; null for plot-only |
|
int | null |
Model-region multiplicity; null for plot-only |
|
object |
CSV + plot files |
Fresh scan2d/scan3d results include the common MLIP/ML/MM calculator
provenance. Plot-only scan3d --csv keeps the same keys but writes null because
the imported energy grid does not identify the calculator that produced it.
Plot-only results omit n_points_attempted; they include n_points_usable
only when the imported CSV has complete convergence and artifact provenance.
path-opt¶
Field |
Type |
Description |
|---|---|---|
|
bool |
Convergence flag |
|
string |
|
|
float[] |
All image energies |
|
int |
Image count |
|
int |
Highest-energy image index |
|
float |
Forward barrier (kcal/mol) |
|
float |
Reaction energy (kcal/mol) |
|
object |
Trajectory + HEI files |
dft¶
Field |
Type |
Description |
|---|---|---|
|
bool |
SCF converged? |
|
string |
|
|
float |
DFT energy |
|
string |
XC functional |
|
string |
Basis set |
|
bool |
GPU acceleration used? |
|
object |
|
|
object |
|
|
int |
QM-region atom count |
|
int |
DFT grid level |
|
float |
SCF convergence tolerance |
|
int |
Effective maximum SCF iterations after YAML/CLI resolution |
|
string |
Actual runtime engine label ( |
|
object |
|
trj2fig¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Number of trajectory frames. |
|
float |
Minimum and maximum frame energies. |
|
string |
|
|
string | null |
Resolved recomputation provenance; all are null in comment mode. |
|
int | null |
Resolved recomputation state; null in comment mode. Omitted recomputation values resolve to 0 and 1. |
|
string[] |
Canonical ordered paths for every output; preserves files with the same basename in different directories. |
|
object |
Legacy basename-to-path map; retained for compatibility and therefore lossy when basenames collide. |
Supplying either -q/--charge or -m/--multiplicity recomputes every frame with the selected MLIP. This is a direct MLIP frame rescore; the command has no topology or model-region input and does not calculate an ONIOM energy.
extract¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Atoms after extraction |
|
float |
Computed total charge |
|
float |
Protein charge |
|
float |
Ligand charge sum |
|
float |
Ion charge sum |
|
object |
|
|
string |
Substrate specification (raw |
|
float |
Extraction radius (angstrom) |
|
string[] |
Input PDB paths |
|
int |
Atom count in the raw input before extraction |
|
int |
Count of link H atoms added at severed bonds |
|
object |
Map of emitted file names (per-input pocket PDB, etc.) |
|
bool |
Value of |
|
bool |
Value of |
|
string |
Raw |
|
array |
List of |
energy-diagram¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Number of energy data points |
|
object |
Output diagram filename-to-path map |
summary.json (path-search / all)¶
The all and path-search commands write summary.json:
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string / string |
Execution completeness and scientific usability; evaluate these separately from legacy |
|
string[] |
Reasons for incomplete or unusable science; omitted on clean success. |
|
string[] |
Expected and observed aggregate leaves. |
|
int |
Segment count |
|
object[] |
Per-segment barrier, delta, bond changes |
|
object[] |
Energy profiles with labels and kcal/mol values |
|
string |
Backend name ( |
|
string | null |
Exact model/checkpoint name, recorded separately from the backend |
|
string | null |
Effective |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
Hardware info |
|
object[] |
Methods actually used by the resolved workflow, as |
The all command additionally includes:
Field |
Type |
Description |
|---|---|---|
|
int |
Number of non-bridge (reactive) segments |
|
object |
Legacy key for the highest independently referenced local segment barrier. It is not a microkinetic rate-limiting-step assignment. |
|
float |
Overall reaction energy |
|
list |
Per-segment TS/IRC/freq/DFT results |
|
object |
Child-reported point-group and rotational-symmetry provenance by state: R/TS/P for MEP runs and E1/TS/E2 for TS-only runs. States with valid symmetry-number provenance are included; missing states are omitted, and the field is absent only when no state has valid provenance. |
|
object |
Current-run output index: root filename → description; each |
|
string[] |
Sorted paths relative to |
Usage examples¶
Python¶
import json
with open("result_opt/result.json") as f:
result = json.load(f)
if result["status"] == "converged":
print(f"Energy: {result['energy_hartree']:.6f} Hartree")
else:
print(f"Not converged after {result['n_opt_cycles']} cycles")
print(f"Max force: {result['final_max_force']:.6f}")
jq¶
# Check convergence
jq '.status' result.json
# Get barrier from path-opt
jq '.barrier_kcal' result.json
# List imaginary frequencies from tsopt
jq '.imaginary_frequencies_cm' result.json
# Get thermochemistry from freq
jq '.thermochemistry.sum_EE_and_thermal_free_energy_ha' result.json