memoized command runner
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?
cargo install mmz
Or grab a binary from the latest release.
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.