dsh-our-free-model — бесплатные фронтир-модели в DeepSeek Harness без ключа и регистрации
📂 Исходный код на GitHubПлагин (MIT, JavaScript, ноль зависимостей) для DeepSeek Harness: бесплатные фронтир-модели без API-ключа через публичные шлюзы OpenCode и Kilo, 13 готовых каналов, агрегация 75 провайдеров с собственными ключами, локальный OpenAI- и Anthropic-совместимый шлюз, цепочки деградации, сжатие вывода инструментов, дашборд расхода токенов и обновление из приложения.
Бесплатные модели уже никого не удивили — но обычно за ними стоит либо регистрация, либо API-ключ, либо лимит в несколько запросов в день. Плагин dsh-our-free-model снимает все три ограничения сразу: ставится в DeepSeek Harness (dsh) как обычный плагин, и в списке моделей появляются DeepSeek V4.1 Flash, Kimi K3, GLM 5.3 Flash, MiMo V2.6 и другие. Ни логина, ни подписки, ни ключа, ни счётчика запросов.
При этом это не «обёртка над одним провайдером». Внутри — 75 провайдеров с собственными ключами, локальный шлюз с нативной поддержкой протокола Anthropic, цепочки деградации, сжатие вывода инструментов и апгрейд без перезапуска. Лицензия MIT, язык JavaScript, ноль зависимостей, шага сборки нет, 27 тысяч звёзд.
Что даёт бесплатная полоса
Основной источник моделей — публичный шлюз OpenCode (путь opencode.ai/inference/v1/*). Ключ не нужен: плагин отправляет заголовок Authorization: Bearer public, и это публичный доступ без регистрации. Второй источник — публичный шлюз Kilo AI: там берётся срез бесплатных моделей из листинга, включая автоматический маршрутизатор kilo-auto/free, тоже без аккаунта и ключа.
Третий источник — EAC-полоса, доступная только в десктопных сборках. Её учёт идёт на стороне сервера: нужен вход в GitHub и звезда на репозитории. Плагин показывает только имя пользователя и вердикт, сам токен до браузера не доходит и периодически перепроверяется (по умолчанию раз в 12 часов, снятая звезда отзывает доступ).
Отдельно стоит сказать про 13 готовых каналов с авторизацией: CodeArts, CodeBuddy и WorkBuddy, LobsterAI, Qoder, TRAE, Cline, Loomy, Raccoon, MiniMax Code, ZCode, Gemini — плюс анонимная полоса и Kilo. У каждого канала свой вход, свой запас бесплатных баллов и свой чёрный список моделей.
Список моделей не зашит в плагин, а перечитывается при каждом обновлении. Важная деталь: если шлюз прямо отказывает в маршрутизации модели, она уходит из выпадающего списка, но остаётся видимой на странице настроек вместе с причиной отказа и временем проверки. Всё остальное — 5xx, окно квоты, таймаут, оборванное соединение — модель из списка не убирает: она жива, просто временно не отвечает. Модели, заблокированные по географии, собираются в отдельную группу region-limited, и при смене VPN следующая проверка сама переносит их между группами.
Агрегация: 75 провайдеров со своими ключами
Вкладка Aggregate добавляет в тот же общий список модели сторонних провайдеров. В реестре 75 записей: NVIDIA NIM, OpenRouter, Groq, Cerebras, SambaNova, Gemini, DeepSeek, Mistral, Together, Fireworks, SiliconFlow, Nebius, Chutes, Hugging Face, Cloudflare, Z.ai, Kimi, MiniMax, QwenCloud, Bedrock, Vertex, Vercel AI Gateway, Azure OpenAI, а также локальные и не требующие аккаунта Ollama, LM Studio и llama.cpp.
Как только провайдер настроен, каждая его модель становится строкой вида provider/model — её видно и в выпадающем списке, и в локальном шлюзе. Формат обмена выбирает сам провайдер: OpenAI Chat Completions, OpenAI Responses или Anthropic Messages.
Ключи лежат только в локальном файле settings.json с правами 0600. API никогда не отдаёт их целиком — только признак hasKey и отпечаток вида …abcd. Кнопка Test проверяет ключ через листинг моделей, не тратя генерацию; Discover запрашивает список моделей у провайдера. Есть переопределение базового URL (оно нужно Azure, Cloudflare и Vertex, у которых нет рабочего адреса по умолчанию) и переопределение списка моделей.
Локальный шлюз
Плагин поднимает собственный HTTP-слушатель, чтобы другие локальные программы пользовались теми же моделями. По умолчанию он слушает только 127.0.0.1 и отклоняет запросы без ключа; попытка привязать доступный из сети адрес отвергается с кодом 400. Если порт занят, слушатель пробует следующий свободный и пишет в настройки реальный номер.
| Маршрут | Что делает |
|---|---|
GET /v1/models |
Отдаёт все полосы, строки агрегации и цепочки |
POST /v1/chat/completions |
OpenAI Chat Completions, со streaming и без |
POST /v1/responses |
Формат OpenAI Responses |
POST /v1/messages |
Нативный протокол Anthropic Messages: потоковый и обычный, блоки thinking и tool_use, настоящий stop_reason |
POST /v1/messages/count_tokens |
Локальная оценка числа токенов (свой токенизатор в плагине не поставляется) |
Благодаря POST /v1/messages на шлюз можно направить Claude Code и Anthropic SDK напрямую. На странице шлюза есть раздел «Connect a client», который собирает готовые копированию примеры: переменные окружения для Claude Code, config.toml для Codex, сниппеты для OpenAI SDK, Anthropic SDK и curl.
Отдельный переключатель открывает доступ из локальной сети: ретранслятор цепляется за сетевой адрес и требует собственный ключ, не тот, что у локального порта. Ключи сравниваются через timingSafeEqual, хранятся в том же файле 0600 и ротируются отдельно. Пока ретранслятор включён, любой, кто дотянется до машины, сможет тратить её бесплатную квоту — включайте только в доверенной сети.
Маршрутизация и деградация
Цепочка деградации — это именованный упорядоченный список моделей из любых полос, который появляется в списке как виртуальная модель combo:<имя>. Если модель в цепочке не отвечает, плагин молча переходит к следующей: ссылка, упавшая до появления первого фрагмента ответа, отбрасывается целиком, и вызов для пользователя выглядит непрерывным. Думающие дельты намеренно не считаются содержимым, поэтому случай «подумал минуту, потом упёрся в стену квоты» — ровно тот, ради которого цепочки и нужны.
Две стратегии: fallback всегда начинает с головы списка, round-robin прокручивает стартовую позицию и удерживает её следующие N ходов. Возможности цепочки — пересечение возможностей её участников: зрение есть только если оно есть у всех, контекст берётся минимальный.
Отдельно решается проблема обрезанного потока. Если модель отдала только размышление и упала, плагин делает один дополнительный запрос: исходный ввод плюс полученные размышления как текстовый чекпоинт, с просьбой сразу дать ответ. Это не настоящее продолжение на стороне шлюза, и уже показанные размышления не повторяются. Один логический ход даёт максимум два физических запроса, общий лимит времени — 15 минут.
Экономия токенов
Сжатие вывода инструментов (RTK) переписывает содержимое tool_result прямо перед отправкой запроса: diff и статус git, лог git, результаты grep, find, ls, tree, вывод сборщиков, дампы файлов с номерами строк, списки результатов поиска, повторяющиеся строки в логах. Замеры приведены прямо в репозитории: diff на 40 КБ теряет 90 % байтов, а модель всё равно отвечает по его содержимому. Правила безопасности: результаты с ошибкой не трогаются, слишком короткие тела не трогаются, замена никогда не бывает больше оригинала, сбой фильтра означает «пропустить как есть», а повторный проход ничего не меняет.
Плюс две группы промптов: caveman (краткие ответы, семь уровней вплоть до вэньянь) и ponytail (ответы по принципу YAGNI, четыре уровня). По умолчанию все выключены, вставка идемпотентна и обратима.
И пять локальных ответов, которые вообще не доходят до провайдера: проверка квоты, определение префикса команды оболочки, генерация заголовка сессии, режим подсказок и извлечение путей к файлам.
Глубина размышления
У моделей два разных способа управлять «размышлением». Если модель объявляет уровни (DeepSeek V4.1 Flash, GLM 5.3 Flash), плагин показывает меню уровней и отправляет выбранный уровень в поле reasoning_effort — шлюз его проверяет и отвечает 400 на значение вне набора. Если уровней нет (MiMo V2.6), включается бюджетная лестница: Light, Balanced, Deep — это 2 048, 8 192 и полная ёмкость модели по числу выходных токенов. У модели, которая не умеет выключать размышление, вся лестница удваивается: 4 096, 16 384, ёмкость.
Апгрейд, анонсы, горячая перезагрузка
Горячая перезагрузка — это применение нового кода без перезапуска приложения: плагин очищает кэш модулей, перерегистрирует себя и умеет откатиться, если что-то пошло не так. Доступна кнопкой, через API и через файловый наблюдатель. Встроенный апгрейд идёт по цепочке: скачивание → проверка подписи манифеста Ed25519 → сверка SHA-256 каждого файла → резервная копия → атомарная замена → проверка чтением обратно → горячая перезагрузка; при любом сбое старая версия восстанавливается.
Центр анонсов: владелец правит один JSON-файл и отправляет его, установка подхватывает сообщение в пределах одного цикла опроса (30 минут по умолчанию, либо кнопкой «проверить сейчас»). Обычные записи показываются всплывающим уведомлением, срочные — полноэкранным окном. HTML в тексте анонсов рендерится через строгий белый список, так что скрипты из ленты не выполняются.
Приватность и оговорки
Плагин — это клиент, а не провайдер моделей. Ответы генерируют и отдают сторонние шлюзы, названные выше. Плагин ничего не хостит и не подменяет. Набор моделей и правила квоты принадлежат шлюзам и могут измениться в любой момент; всё, что может сделать плагин, — убрать недоступную модель из списка и объяснить почему.
Бесплатно не значит безлимитно: у бесплатной полосы нет баланса и тарифа, но она ограничена по частоте запросов, и при злоупотреблении приходит 429. Плагин помечает модель как исчерпавшая квоту, а не прячет её, и следующая проверка снимает отметку.
Отдельно предупреждение из README: бесплатный пул Kilo прямо в карточках моделей пишет, что промпты могут логироваться провайдером и использоваться для улучшения его сервисов, и что это не подходит для продакшена и чувствительных данных. Пароли, ключи, персональные данные и коммерческие секреты через бесплатные полосы отправлять нельзя. Для продакшена — свой платёжный API.
Остальное состояние — дашборд, настройки, ключи — лежит в DSH_HOME/our-free-model/ и никуда не выгружается. У дашборда есть тепловая карта токенов по неделям, накопительная кривая, скорость вывода и время до первого токена, замеренные по каждому вызову.
Установка
dsh plugin --profile web add /absolute/path/to/dsh-our-free-model
Дальше — один перезапуск приложения и выбор модели в списке. Пакет на npm с тем же именем к этому репозиторию отношения не имеет: авторы предупреждают, что это сторонняя перепаковка с изменёнными файлами, и ставить её не стоит. Официальный способ — релизный архив из репозитория или локальная директория с исходниками. Поддерживаются ядра dsh 0.1.5, 0.1.7 и rc.2; нужен Node.js ^22.19.0 || >=24.0.0.