One binary. Local first.
Cloud when you need it.
A 12MB static Zig binary. tomoul serve bge-m3 runs locally on your laptop. --cloud points the same CLI at api.tomoul.ai with your API key. Same models, same API, only the compute moves.
$ brew install tomoul# or, no Homebrew:$ curl -fsSL https://tomoul.ai/install.sh | sh
Two modes. One tool.
Run locally for privacy and free. Flip a flag for cloud-grade scale.
tomoul serve bge-m3
$ tomoul serve bge-m3 Pulling baai/bge-m3... done (1.2GB) Compiling for Metal... done Loading weights... done ▸ http://localhost:11434 ▸ p95: 22ms · OpenAI-compat /v1 Press ^C to stop.
tomoul serve phi-4 --cloud
--cloud. Routes to api.tomoul.ai using your API key.$ tomoul serve phi-4 --cloud Auth via $TOMOUL_KEY ok Region: eu-helsinki1 Routing /v1 → api.tomoul.ai ▸ http://localhost:11434 ▸ p95: 178ms · 14B params · streaming ⚠ Billed: $0.18/$0.54 per 1M tok
Built for builders.
OpenAI-compatible
Whether local or cloud, the CLI exposes /v1/chat/completions and /v1/embeddings. Point any OpenAI SDK at localhost:11434 and it just works.
12MB · zero deps
Single static Zig binary. No Python, no Node, no Docker. Runs on a Pi, a MacBook, or a bare-metal H100.
Apple Silicon native
First-class Metal support. M-series throughput within 18% of an A100 on bge-m3. Zero rosetta, zero ymalfs.
Pull any GGUF
tomoul pull hf://repo/model grabs from Hugging Face. tomoul pull tomoul://… grabs our quantised weights, often 30% smaller.
Doctor on board
tomoul doctor checks GPU drivers, KV-cache headroom, and quant compat. We tell you why a model won't run before you wait.
Cloud bridge
The --cloud flag turns the CLI into an authenticated client. Same model name, same flags — just a connection string change.
Start local. Scale without migrating.
The CLI is the same tool from your first brew install to your scale-up moment. We don't ask you to swap libraries when you outgrow your laptop.