Quickstart¶
With gmlx installed, create a configuration file and download a model:
gmlx init writes a configuration file that lists your models
and the folders that hold them. Run it with no flags for a wizard that scans
the folders where you already keep models. gmlx pull downloads Qwen3.8-27B
at the quality tier that suits this Mac, with image input and faster
replies, a 23 GB download on a 64 GB Mac. It registers the model under the
name qwen3.8-27b, which every command accepts in place of a path.
Running a model¶
Give the model a prompt, or chat with it in the terminal:
In the chat, type /help for the commands, press Esc to stop a reply, and
type /exit to quit. Both commands also take the path of a GGUF file, with
no configuration file. Chat describes the rest.
Both start from the sampling values that the model's publisher recommends. An intent after the id picks the values for one kind of task:
gmlx profiles lists the intents of each family.
Serving models¶
A server keeps models loaded and answers requests from any app:
The server starts in the background on port 8080, and on a Mac desktop the menu bar app opens with it. A model you pull while it runs is available at once. These commands manage it:
| Command | Result |
|---|---|
gmlx list |
Lists the model ids in the configuration file |
gmlx status |
Shows the server's process id, uptime and URL |
gmlx ps |
Lists the loaded models |
gmlx logs -n 20 -f |
Shows the last 20 log lines and follows the log |
gmlx stop |
Stops the server |
Sending requests¶
The server answers the OpenAI Chat Completions, OpenAI Responses and Anthropic Messages APIs on one port. A request names its model by id:
curl localhost:8080/v1/chat/completions -d '{
"model": "qwen3.8-27b",
"messages": [{"role": "user", "content": "Explain entropy in one paragraph."}]
}'
Add "stream": true to stream the reply. Intents work here too, as in
"model": "qwen3.8-27b@coding". The OpenAI Python client works
unchanged:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="none")
reply = client.chat.completions.create(
model="qwen3.8-27b",
messages=[{"role": "user", "content": "Explain entropy in one paragraph."}],
)
print(reply.choices[0].message.content)
Tool calls, structured output, log probabilities and images also work, as the HTTP API describes.
Choosing a model¶
gmlx pull with no name opens a picker of recommended models that fit
this Mac. Each shows its size, whether it reads images, and how much
context it leaves room for. Pick one, or pull it by name and chat with it:
The first recommendation at each memory size:
| Mac memory | Model | Command |
|---|---|---|
| 8 GB | Ternary Bonsai 2 9B | gmlx pull ternary-bonsai-2-9b |
| 16 GB | gemma-4-12B | gmlx pull gemma-4-12b |
| 24 GB | gemma-4-26B-A4B | gmlx pull gemma-4-26b-a4b |
| 32, 48, 64 or 96 GB | Qwen3.8-27B | gmlx pull qwen3.8-27b |
| 128, 192 or 256 GB | Qwen3.8-Flash-Next | gmlx pull qwen3.8-flash-next |
| 512 GB | DeepSeek-V4.1-Flash | gmlx pull deepseek-v4.1-flash-1017 |
gmlx pull --list prints every recommended model with its download size
and what it is good for, and the pull reference lists
them all.
A model needs memory for about its file size, plus its KV cache, which grows with the conversation. Memory and the KV cache shows how to estimate and shrink it. A mixture-of-experts model larger than memory can still run from the SSD, as Models larger than memory describes.
Any GGUF on Hugging Face pulls by reference. To see which files of a repository fit your Mac before you download one:
A gated repository needs a Hugging Face token, as Troubleshooting describes. Models you already have from LM Studio or llama.cpp run as they are, and Migrating from other tools says what else carries over.
Connecting a client¶
gmlx launch connects an app to your server. pi is a coding agent that you
install separately. These commands install it and connect it:
launch starts the server if it is not running, adds the server to pi's
settings, and starts pi. The same command connects the other coding agents
and chat apps, as Agents and chat apps describes.
To run pi in an Apple container instead, add --container:
The container sees only the current folder, and gmlx installs pi in it for you. This needs Apple container, and Container mode covers the rest.
Next steps¶
- Configuration: profiles, aliases, the prompt cache and memory limits.
- Voice chat:
gmlx talkanswers spoken questions aloud. - Image generation: images from a text prompt, on the command line, from an app or in ComfyUI.
- Video generation: clips with sound from a text prompt, on the command line.
- Menu bar app: the server's status, models and voice sessions in the macOS menu bar.
- Performance tuning: speculative decoding, KV cache quantization and other speed settings.
When something fails, run gmlx doctor. It checks the runtime, the
configuration file, the model paths and the services, and gives a fix for
each problem. Troubleshooting covers common failures.