mmz logo: a skip-forward mark

mmz

memoized command runner

Prefix any command with mmz. When the matched rule's declared inputs are byte-for-byte unchanged since the command last succeeded, mmz skips it and exits 0. Otherwise it runs, streams output, and records the result.

Not a build system: no task graph, no artifact tracking, no remote cache. One question per run — are this rule's inputs unchanged since it last passed?

Install

cargo install mmz

Or grab a binary from the latest release.

Usage

mmz --init            # write a starter .mmz/config.yaml
mmz cargo test        # skipped when the declared inputs are unchanged
mmz --status          # show each rule's freshness and record age
mmz --status=json     # the same, with inputs and hashes, for jq
mmz --is-fresh -- cmd # exit 0 if cmd's rule is fresh; runs nothing (gate hooks)
mmz --prune           # drop cache records whose rule no longer exists
mmz --schema          # print the config JSON Schema

mmz fails closed: it errors when no manifest is found, the manifest is invalid, no rule matches, or a matched rule has no inputs. Relax the last two per project with the strict list.