MIT · Python 3.10+ · Windows, macOS, Linux
One hub for your GGUF files. Seven runners linked automatically.
One copy of each model on disk, linked into Ollama, LM Studio, Jan, AnythingLLM, Msty, KoboldCpp and text-generation-webui — and checked against your free memory before it downloads anything.
$ curl -fsSL https://raw.githubusercontent.com/omm-hippo/omm/main/install.sh | sh4.37 GB decimal = 4.07 GiB — omm list labels GiB as GB; bug filed upstream.
The state of the disk
Four runners. Four copies. 17.5 GB of the same weights.
Every runner ships its own models directory and downloads into it. Nothing on disk records that these four files are byte-identical, so nothing ever removes three of them.
mistral-7b-instruct-v0.2.Q4_K_M.gguf
- -rw-r--r--4.37 GB~/.ollama/models/
- -rw-r--r--4.37 GB~/.lmstudio/models/
- -rw-r--r--4.37 GB~/.config/Jan/data/llamacpp/models/<model-id>/
- -rw-r--r--4.37 GB~/.config/anythingllm-desktop/storage/models/ollama/
Paths as omm resolves them on Linux
One hub
One file on disk. Seven runners think they own it.
omm writes the GGUF once into ~/.omm/models and links it into every runner directory it can resolve on the machine. Runners that are not installed are skipped rather than guessed at, and Windows falls back from hard link to symlink to an owned copy with a free-space check.
Localfit
It checks whether the model fits before it spends your bandwidth.
A scan reads total RAM, live availability and GPU memory, then holds back 10% of total RAM — never less than 1 GB — for the OS and the apps opened after the scan. The safe budget is whichever is smaller: what is left after that subtraction, or 80% of total RAM. Rerunning the scan re-derives both.
- In use by other apps
- 5.7 GB
- Reserved for apps/OS
- 1.6 GB+
- Safe model budget — the smaller of the two
- 8.2 GB
- Install cap — 80% of total RAM
- 12.4 GB
Benchmarks
Eight problems, fixed seed, median of repeated samples.
The quality pack is versioned and bilingual, runs through Ollama at temperature 0, and grades one number per item against a known answer. Generated text is never stored, and the result it reports is a median over repeated samples rather than a single lucky pass.
| # | prompt | expected | locale |
|---|---|---|---|
| 01 | Janet's ducks lay 16 eggs per day. She eats three for… | 18 | en |
| 02 | A robe takes 2 bolts of blue fiber and half that much… | 3 | en |
| 03 | Josh buys a house for $80,000 and spends $50,000 on… | 70000 | en |
| 04 | James runs 3 sprints, 3 times a week. Each sprint is… | 540 | en |
| 05 | 웬디는 매일 닭 한 마리당 사료 3컵을 세 끼로 나누어 준다. 닭은… | 20 | ko |
| 06 | 카일라는 유리잔 16개를 산다. 일반 가격은 한 개에 5달러이고, 매… | 64 | ko |
| 07 | 시애틀에는 양이 20마리 있다. 찰스턴에는 시애틀의 4배가 있고,… | 260 | ko |
| 08 | 칼라는 200GB 파일을 분당 2GB로 받는다. 40%를 받은 순간… | 160 | ko |
Signed catalogs
Every catalog it replaces is kept, hash and all.
catalog-trust pins an Ed25519 public key and a manifest URL, and refuses any recommendation artifact whose hash or signature does not match. The replaced snapshot is archived under its own sha256, so catalog-rollback puts the previous catalog back.
omm setting catalog-trust \--manifest-url https://raw.githubusercontent.com/omm-hippo/omm/main/published/recommend-model.manifest.json \--public-key <base64 ed25519 public key>Signed catalog verification enabled (key <fingerprint>).~/.omm/recommend-model.jsonartifact_sha256 a07e9a5993b711ad86460e6e7f17d7c26755b2c670d837804f0d466b3e4211fasigned_at 2026-08-19T03:43:59Z · schema_version 1artifact_sha256 <incoming artifact>signature checked against the pinned keyarchived ~/.omm/catalog-history/a07e9a5993b711ad86460e6e7f17d7c26755b2c670d837804f0d466b3e4211fa.jsonomm setting catalog-rollbackRolled back recommendation catalog from a07e9a5993b711ad86460e6e7f17d7c26755b2c670d837804f0d466b3e4211fa.json.
catalog artifact hash does not match manifest and the file on disk is left alone.7 runners · 3 platforms
omm links into these seven. It does not replace any of them.
Where a platform has a package manager omm can drive, installation is automated. Everywhere else omm still links the model into the runner you installed yourself.
- macOS
- Linux
- Windows
- macOS
- Linux
- Windows headless lms CLI
- macOS Homebrew
- Windows winget
- Linux Flatpak
- macOS Homebrew
- macOS Homebrew
- macOS Apple Silicon
- Linux x86_64
- Windows x86_64
- macOS any arch
- Linux x86_64
- Windows x86_64
Install
One line. It verifies the signed commit before it installs anything.
Requires Python 3.10+ on Windows 10 22H2 or later, macOS, or Linux. The script bootstraps whatever is missing, then installs omm as an isolated pipx CLI.
$ curl -fsSL https://raw.githubusercontent.com/omm-hippo/omm/main/install.sh | sh- Open a new shell afterward so your PATH picks up omm.
- Requires Python 3.10+. On Debian and Ubuntu the script installs python3, python3-venv, git and pipx for you through apt; on macOS and other distributions it checks for Python 3.10+ and git and stops if they are missing.
Need them first? python.org/downloads · git-scm.com/downloads
Other ways to install
macOS · Homebrew Tap
$ brew install omm-hippo/omm/ommAny OS via PyPI, no signature verification — the distribution is omm-model, the command stays omm
$ pipx install omm-modelWhat the installer does
- staging clone — The release is cloned into a versioned staging directory, never over the copy you are currently running.
- signed commit verified — The staged commit is checked against a bootstrap trust anchor before any of it is executed.
- pipx switch — Only after that does pipx switch to the staged tree, so omm stays an isolated CLI.