Model Shelf — плагин
Плагин и CLI для Claude Code: перед скачиванием модели Hugging Face агент ищет ее на вашей локальной полке GGUF, MLX и safetensors
- 128 ★ репозитория
- Последний коммит
- MIT
Расширенный доступ
Почему такой уровень
- CLI скачивает файлы моделей из Hugging Face на диск и запускает установку через `uv`.
Установка
- Работает в
Ручная установка
/plugin install model-shelf@alexziskind1/model-shelfКоманда из раздела Install: плагин ставит скилл и хук SessionStart, который устанавливает CLI.
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- CLI скачивает файлы моделей из Hugging Face на диск и запускает установку через `uv`.
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
Model Shelf ведет локальную библиотеку моделей Hugging Face в трех форматах: GGUF, MLX и safetensors. Команда `model-shelf resolve "Qwen/Qwen3-14B-GGUF" --quant Q4_K_M` отвечает, есть ли файл на полке, и возвращает путь. Формат определяется по идентификатору репозитория. Плагин для Claude Code ставит скилл `resolve`, по которому агент всегда сначала спрашивает полку, и хук SessionStart, который при первой сессии устанавливает CLI через `uv`. При промахе загрузка идет прямо на полку по понятному пути вида `gguf/Qwen/Qwen3-14B-GGUF/`, без параллельного кэша Hugging Face. Раскладка совпадает с ожиданиями LM Studio. Полка может лежать на внешнем диске, NAS или во внутренней папке.
Для кого. Тем, кто запускает локальные модели на нескольких программах и машинах и устал скачивать одни и те же файлы повторно.
Подходит, если
- Агент собирается скачать модель, которая уже лежит на внешнем диске.
- Одну библиотеку моделей делят LM Studio, llama.cpp и MLX.
- Полка лежит на общем NAS, и ее монтируют на нескольких машинах.
- Диск переименовали или подключили другой, а пути в настройках менять не хочется.
Не подходит, если
- Модели скачивают редко и хранят в стандартном кэше Hugging Face.
- Нужна блокировка скачивания: две машины одновременно тянут одну модель.
- Модели берут не с Hugging Face.
Пример запроса к агенту
Найди Qwen3-14B в формате GGUF с квантованием Q4_K_M на моей полке и скачай, только если его там нет.Ограничения
Требуются Python 3.11 или новее и `uv` для автоустановки CLI в плагине. Блокировок скачивания нет: на общей полке не запрашивайте одну отсутствующую модель с двух машин одновременно. Если путь для `init` лежит под точкой монтирования, которая сейчас не подключена, команда завершится ошибкой и ничего не создаст молча. По умолчанию загрузки включены (`allow_downloads = true` в `~/.config/model-shelf/config.toml`), и при промахе CLI скачивает файлы с Hugging Face на полку, что занимает место и трафик.
Как отключить. Отключите плагин в Claude Code и удалите CLI командой `uv tool uninstall model-shelf`. Файлы моделей на полке остаются на диске, удалять их надо вручную.
Частые вопросы
Как поставить Model Shelf в Claude Code?
Команда `/plugin install model-shelf@alexziskind1/model-shelf` ставит скилл и хук. CLI подтянется через `uv` при первом запуске сессии.
Как поставить без Claude Code?
Выполните `uv tool install git+https://github.com/alexziskind1/model-shelf` или `pip install git+https://github.com/alexziskind1/model-shelf`. Нужен Python 3.11 и новее.
Что делает model-shelf init?
Находит внешний диск с папкой `ModelShelf/models` и использует ее молча. Если ее нет, показывает выбор диска, внутреннюю папку или свой путь.
Нужен ли отдельный сервер или протокол?
Нет. Достаточно одной команды `model-shelf resolve … --json`, поэтому подходит любой агент, который умеет запускать shell-команды.
Где ищутся модели?
Сначала на основной полке, потом на всех подключенных томах с папкой `ModelShelf/models`, затем во внутренней папке `~/.cache/model-shelf/models`. Побеждает первое попадание.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
ПлагиныПлагин и MCP-сервер, через которые Claude Code управляет локальной ИИ-студией Guaardvark на вашей видеокарте
Локальный сервер моделей для Mac на Apple Silicon в форматах OpenAI, Anthropic и Ollama: к нему подключают Claude Code, Codex и OpenCode одной командой
Маркетплейс плагинов Claude Code с готовыми наборами агентов, слэш-команд, хуков и скиллов плюс сайт для поиска
Плагин для Claude Code, который прогоняет одну задачу через несколько внешних моделей и подсвечивает расхождения до релиза
Локальная память для Claude Code, Codex и Cursor Agent: учится на вашей активности на Mac и отдает агентам контекст со ссылками на источники по MCP
Набор скиллов, модов, субагентов и хуков для Claude Code: агент осматривает окружение и ставит нужное после вашего согласия.
Коротко о README
Проект решает одну задачу: не скачивать модели повторно. Он выдает путь к файлу одной командой, а плагин для Claude Code включает эту проверку в работу агента.
Бейдж для README
Исходный SKILL.md
---
name: resolve
description: Always resolve Hugging Face models via `model-shelf` before any download. Supports GGUF, MLX, and safetensors. Triggers whenever the user asks to load, run, or use a local LLM model (llama.cpp / Ollama / MLX / vLLM / transformers flows).
---
# Resolve a Hugging Face model locally
When the user wants to load, run, or use a Hugging Face model — **always**
go through `model-shelf`. Do not invoke `huggingface-cli download`, `hf
download`, `snapshot_download`, or any other direct download command.
The user does **not** need to give you an exact `org/repo` id. Loose
descriptions ("qwen 3 4b mlx 4-bit", "the latest llama 3.1") are normal
and expected. Do not push back on whether a model exists — your training
data is stale and Model Shelf can search the live Hub.
## Workflow
1. **Decide whether to search first.**
- If the user gave a clean `org/repo` string (e.g. `Qwen/Qwen3-14B-GGUF`),
skip to step 2.
- Otherwise the input is loose — run:
```
model-shelf find "<user's words>" [--format gguf|mlx|safetensors] --json --limit 5
```
Use any format hint from the user (`mlx`, `gguf`, `safetensors`). Pick the
top result that matches the user's format/quant intent. Use its `repo_id`
as the input to step 2. If `find` returns nothing, tell the user no
matching model was found — do **not** invent a repo id.
2. **Resolve the repo to a local path.**
```
model-shelf resolve <repo_id> [--format gguf|mlx|safetensors] [--quant <QUANT>] --json
```
- `--format` is auto-detected from `repo_id` if omitted:
- `*-GGUF` (case-insensitive) → `gguf`
- `mlx-community/*` or `*-mlx` → `mlx`
- everything else → `safetensors`
- `--quant` is **required for `gguf`** (e.g. `Q4_K_M`); ignored otherwise.
3. **Use the returned `path`** with the user's runtime:
- **gguf**: file path → `llama.cpp` / `llama-server` / Ollama / LM Studio
- **mlx**: directory path → `mlx_lm.generate` / `mlx_lm.server` (Apple Silicon)
- **safetensors**: directory path → `transformers` / `vllm`
4. **Error handling:**
- If `status == "missing"`, downloads are disabled in their config —
surface that to the user and stop.
- If `model-shelf` exits **non-zero with a message on stderr**, surface