Inspect saved Artifacts and manage the Local Registry#

An Artifact is a package of saved problems, results, and other data. Use the ommx command to inspect its contents and manage OMMX’s local storage. These operations are optional for solving, transformation, and candidate evaluation.

Follow the CLI installation instructions. The commands below use the CLI included with the Python SDK; run them from the working project or checkout where the SDK is installed. For the standalone CLI, replace uv run --no-sync ommx with ommx. Check each command’s --help for its options.

Inspect a file or a saved reference#

Inspect the manifest (the list of stored data) in a received archive, or list the names in the current Local Registry:

uv run --no-sync ommx inspect shared.ommx
uv run --no-sync ommx list

Inspection does not evaluate a problem or retrieve its Python objects. The Artifact Reference gives a complete file-import and retrieval example.

Replace the example name below with a saved reference to inspect its contents and logical size:

uv run --no-sync ommx inspect example.com/team/result:trial-1
uv run --no-sync ommx size example.com/team/result:trial-1

The final trial-1 is a tag. Names and tags can be updated, whereas a manifest digest identifies its contents. Several names can refer to the same data. size reports the original manifest’s byte length, its config size, and its unique layers’ sizes; it excludes the parent subject chain. Shared data is counted for each reference, so adding these values does not measure physical disk usage. See Artifact for identity and storage details.

Find records from Python#

list_artifacts() lists generic Artifacts and Experiments; list_experiments() supplies Experiment-specific records and a complete example of filtering project annotations. The latter distinguishes shared catalog metadata from conditions recorded per trial. Both examples work without a solver.

Use list_experiment_checkpoints() and restore_from_checkpoint() to find and restore interrupted editing sessions. Keep the manifest digest when identifying exactly which saved record was analyzed; a listed name may later point to other content.

Remove and restore references, then reclaim storage#

Removing a name and reclaiming its data are separate operations. Replace ./local-registry with the actual storage path. Each command explicitly selects that registry with --root. Without it, OMMX uses OMMX_LOCAL_REGISTRY_ROOT, or the platform default if the variable is unset.

Inspect candidates first#

uv run --no-sync ommx prune-anonymous --root ./local-registry --experiments --older-than 7d
uv run --no-sync ommx gc --root ./local-registry

Both commands report candidates without deleting anything by default. prune-anonymous selects automatically named Artifacts; --experiments also includes anonymous Experiments. --older-than 7d restricts their age. gc (garbage collection) reports data no longer reachable from any saved reference.

Remove or restore one name#

Check the name and replace this example with the intended target. rm removes the reference immediately. It does not delete the payload data.

uv run --no-sync ommx rm example.com/team/experiment:obsolete --root ./local-registry

The printed Rollback command contains the removed name, its immutable manifest digest, and the selected root. Run that ommx restore-ref ... command to restore the name, adding uv run --no-sync when using the Python SDK’s CLI. Restoration validates the complete stored data and refuses to overwrite a name that now points to another digest.

Restoration requires the data to remain in the registry. Restore any needed reference before reclaiming unreferenced data.

Delete the inspected candidates#

After inspecting the report, add --delete to remove matching anonymous names. The command prints a rollback command for each removed name.

uv run --no-sync ommx prune-anonymous --root ./local-registry --experiments --older-than 7d --delete

Reclaim the underlying data separately:

uv run --no-sync ommx gc --root ./local-registry --delete

GC keeps data reachable from retained names, Experiment checkpoints, and parent Artifacts referenced by retained children. Data left by an interrupted write before publication can be unreachable. By default, only unreachable blobs whose last modification is at least 24 hours old are eligible for deletion. This is not a guaranteed 24-hour rollback window after removing a name: older blobs can be reclaimed by the next GC pass. Restoration may be impossible after GC.

Keep a nonzero grace period while any process may be writing to the registry. A custom --grace-period accepts s, m, h, and d; use 0s only when no OMMX process is writing there. Add --show-digests to investigate specific missing, invalid, orphan, or deferred blobs. Normal reports show counts and byte sizes.

uv run --no-sync ommx gc --root ./local-registry --grace-period 2h --show-digests

The Python APIs return structured reports: remove_image(), restore_image(), prune_anonymous(), and gc(). Their Reference entries own exact argument and concurrency contracts. Implementation details of the CAS, index, and cache are in the Rust Local Registry documentation.