Model Shelf — плагин

Плагин и CLI для Claude Code: перед скачиванием модели Hugging Face агент ищет ее на вашей локальной полке GGUF, MLX и safetensors

  • 128 ★ репозитория
  • Последний коммит
  • MIT
Плагин

Расширенный доступ

Почему такой уровень

  • CLI скачивает файлы моделей из Hugging Face на диск и запускает установку через `uv`.
Все причины и проверки

alexziskind1/model-shelf

Установка

Работает в

Ручная установка

/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 на вашей видеокарте

ПлагинШирокий доступ318Звезды репозитория
Официальный

Локальный сервер моделей для Mac на Apple Silicon в форматах OpenAI, Anthropic и Ollama: к нему подключают Claude Code, Codex и OpenCode одной командой

CLIШирокий доступ2,4 тыс.Звезды репозитория

Маркетплейс плагинов Claude Code с готовыми наборами агентов, слэш-команд, хуков и скиллов плюс сайт для поиска

ПлагинРасширенный доступ3,7 тыс.Звезды репозитория

Плагин для Claude Code, который прогоняет одну задачу через несколько внешних моделей и подсвечивает расхождения до релиза

ПлагинРасширенный доступ4,4 тыс.Звезды репозитория

Локальная память для Claude Code, Codex и Cursor Agent: учится на вашей активности на Mac и отдает агентам контекст со ссылками на источники по MCP

MCP-серверШирокий доступ1,3 тыс.Звезды репозитория

Набор скиллов, модов, субагентов и хуков для Claude Code: агент осматривает окружение и ставит нужное после вашего согласия.

СкиллРасширенный доступ98Звезды репозитория

Коротко о 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

Сообщить о проблеме