llama-buddy
A friendly CLI wrapper for llama.cpp
Manage, download, and serve local LLMs with a single command.
Think of it as an ollama-like experience built on top of llama-server.
Features
- Background server — start/stop/restart
llama-serveras a daemon - Multi-model routing — uses llama.cpp's own preset file, so nothing llb writes is llb-specific
- Interactive downloads — search HuggingFace, pick a quant, download with progress and resume
- Rich terminal UI — tables, panels, interactive selectors, and live search
- GGUF inspector — view model metadata, architecture, and sampling parameters
- Server props — inspect active sampling parameters on loaded models
- Sampling sync — automatically applies GGUF-recommended sampling params to your preset
- Per-model settings — context size, GPU layers, flash attention, and more
- Multi-token prediction — models that ship an MTP head get speculative decoding switched on by themselves. A head shipped as a separate file is downloaded with the model and only wired in once the installed llama.cpp is confirmed to load it; the check runs again after every llama.cpp upgrade
- Idle sleeping —
llama-serverreleases the weights of a model after a configurable idle timeout - VRAM tracking — automatically parses server logs to show memory usage per model
- Live changes — downloads, removals and settings changes reload the running router's model list instead of restarting it
Screenshots
Model listing — llb models
Interactive download — llb download
Model info — llb info
Installation
pipx install llama-buddy
Or with uv:
uv tool install llama-buddy
This installs the llb command into an isolated environment and adds it to your PATH.
Prerequisites
- Python 3.10+
- llama.cpp installed and
llama-serveron yourPATH
Quick start
# Download a model (interactive search)
llb download
# Or specify directly
llb download mistralai/Ministral-3-3B-Instruct-2512-GGUF:Q4_K_M
# Start the server
llb start
# List all models
llb models
# Chat with a model (uses llama-cli)
llb chat
# Inspect model metadata
llb info
# Show active sampling params for a loaded model
llb props
# Apply GGUF-recommended sampling params to all models
llb info --apply-sampling
# Configure settings (interactive TUI)
llb settings
# Open the web UI in your browser
llb open
# Stop the server
llb stop
Commands
| Command | Description |
|---|---|
llb start |
Start llama-server in the background. Extra args are forwarded. |
llb stop |
Stop the running server. |
llb restart |
Restart the server. |
llb status |
Show whether the server is running. |
llb models |
List all models with status, size, VRAM usage, and grouping. Supports --sort size. |
llb download [model] |
Download a model. Interactive HF search when no model given. |
llb remove [model] |
Remove a model with confirmation dialog. --keep-files to preserve GGUFs. |
llb info [model] |
Show GGUF metadata. Interactive selector when no model given. |
llb info --apply-sampling [model] |
Write GGUF sampling params into the preset. All models when no model given. |
llb props [model] |
Show active server sampling params for a loaded model. |
llb settings |
Interactive editor for the preset's [*] section and per-model sections. |
llb chat [model] |
Interactive chat via llama-cli. Model selector when no model given. |
llb open |
Open the llama-server web UI in your browser. |
llb logs |
Tail the server log file. |
Configuration
llb keeps no configuration format of its own. Settings live in llama.cpp's
preset file,
which llama-server --models-preset reads, and the port lives in llama.cpp's
config.ini. Anything llb writes works the same without llb.
| File | Purpose |
|---|---|
~/.config/llama/models.ini |
The preset file, unless you already have one (see below) |
~/.config/llama.cpp/config.ini |
llama.cpp's own config; llb only writes port there, and only when it is not 8080 |
The router lists every cached model by itself, so the preset only has a
section for a model whose settings differ from the defaults. [*] holds the
settings for all models; a model's own section overrides them. Defaults are
llama-server's own: context from the model (shrunk to fit memory), no idle
sleep. llb edits the file line by line, so comments and hand-written keys
survive.
Using your own preset file
If you already point llama-server at a preset, llb uses that one instead.
It looks at LLAMA_ARG_MODELS_PRESET, then models-preset in
~/.config/llama.cpp/config.ini. Sections can give a model any name and
point it at an HF repo or a local file:
[*]
sleep-idle-seconds = 300
[coder]
hf-repo = unsloth/Qwen3.8-27B-GGUF:Q8_0
temp = 0.6
[laguna]
model = /data/models/laguna-s-2.1-Q4_K_M.gguf
Per-model settings
Run llb settings and select Model Settings to configure per-model overrides:
- Context size, GPU layers, flash attention
- Custom aliases
- Any
llama-serverparameter
Other files in ~/.config/llama/ are llb's own state: server.pid,
server.log, models.effective.ini (the copy the router reads, with context
clamped to each model's maximum), and caches for VRAM usage, MTP detection
and llama-server's flags.
Development
# Clone and install
git clone https://github.com/thilomichael/llama-buddy.git
cd llama-buddy
uv sync
# Run
uv run llb <command>
# Test
uv run pytest
# Lint
uv run ruff check src/ tests/
License
MIT
Metadata
Release files for llama-buddy 0.1.16
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| llama_buddy-0.1.16.tar.gz | 47.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| llama_buddy-0.1.16-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.4 kB
Release files / llama_buddy-0.1.16.tar.gz
| Download URL | llama_buddy-0.1.16.tar.gz |
|---|---|
| Size | 47.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2fe7512a763b08d00fee57bce547f7f3e545434d7cf0cc22dafb95f4d6d3f55f
|
|
BLAKE2b-256 checksum How to use checksums |
7d9328e31ffd0a4c4ee285e8f77586a1ea9f5d8f9752a3be08b95fed7fefbc99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / llama_buddy-0.1.16-py3-none-any.whl
| Download URL | llama_buddy-0.1.16-py3-none-any.whl |
|---|---|
| Size | 56.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a7c673b80329346802af04ae84891d01883d26f632d4c446fa86e1273b05d82d
|
|
BLAKE2b-256 checksum How to use checksums |
88b67a5ab091c0ff6736d4abe27f058e421cc1f3eb2030f02dc62e3719236228
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|