OpenCode Free limit reached: ждать или продолжать работу
Практическая схема для Free limit reached и бесплатного 429 в OpenCode: определить активные provider и model, не гадать о сбросе, выбрать ожидание, другую модель или отдельный provider и проверить результат коротким запросом.
Содержание

Сообщение Free limit reached или HTTP 429 в OpenCode не означает автоматически, что у всех бесплатных моделей есть единое ежедневное время сброса. Сначала сохраните исходную ошибку, проверьте активные provider и model, а затем ориентируйтесь только на тот reset, который действительно показан в текущем ответе или аккаунте.
Если достоверного времени нет, остаются три рабочих варианта: подождать, выбрать другую доступную сейчас модель через /models или явно перейти на отдельно тарифицируемый provider. Перед возвращением к длинной задаче отправьте короткий безопасный запрос и проверьте ответ, выбранный provider/model и фактическое использование на стороне provider.
Сначала определите ветку по сообщению
| Что видно | На что это похоже | Первое действие |
|---|---|---|
Free limit reached или FreeUsageLimitError, но без таймера | Ограничение бесплатного доступа | Не придумывать период; записать время, подождать или посмотреть актуальные модели в /models |
Go limit reached и реальный обратный отсчёт | Платное окно OpenCode Go | Использовать время, показанное именно этому аккаунту, и не переносить его на бесплатные модели |
Обычный 429, Too Many Requests или Provider is overloaded | Лимит скорости, перегрузка или временная ошибка provider | Сохранить полный ответ, проверить provider/model, повторить позже и посмотреть статус provider |
401, 404 или Model not available | Ошибка авторизации, Base URL или Model ID | Не ждать reset, а исправить credential, endpoint или модель |
Один и тот же HTTP-код может появляться по разным причинам. Поэтому по одному 429 нельзя заключать, что бесплатная квота исчерпана, и тем более нельзя сразу покупать подписку или менять всю конфигурацию.
До переключения сохраните четыре вещи
Зафиксируйте:
- Полный текст ошибки, а не только «429».
- Текущие
providerиmodel, желательно в форматеproviderId/modelId. - Доступные response body, тип ошибки, заголовки и
retry-after, если OpenCode действительно их показывает. - Время ошибки и часовой пояс, каталог проекта и тип подключения: бесплатный Zen, Go или custom provider.
Следуя документации OpenCode Zen, в TUI выполните /models, чтобы увидеть выбранную запись и список, доступный сейчас. В терминале можно запустить opencode models. Не делайте вывод по старому скриншоту или статье: бесплатная модель могла исчезнуть, сменить статус или стать недоступной вашему аккаунту.
Проверьте и приоритет конфигурации. Документация OpenCode по config указывает, что OpenCode объединяет несколько config-файлов, а проектный opencode.json может перекрыть глобальные настройки. То, что модель A указана глобально, ещё не доказывает, что текущий репозиторий обращается к ней. Ориентируйтесь на текущий проект, выбор в /models и итоговую конфигурацию.
Доверяйте только реально показанному reset
Если в текущей ошибке нет достоверного таймера или абсолютного времени, не додумывайте «через несколько часов», «завтра» или «на следующей неделе».
В открытом и проверенном 2026-10-10 snapshot файла retry.ts из ветки OpenCode dev ошибка FreeUsageLimitError попадает в статическую ветку уведомления о бесплатном лимите. Ветка GoUsageLimitError, напротив, читает заголовок retry-after и формирует обратный отсчёт. Это сверка исходного кода, а не runtime-тест вашей версии OpenCode или вашего аккаунта.
В публичных feature request #53252 и #52894 встречаются примеры точного времени сброса, но это иллюстрации желаемого поведения, а не фактический график бесплатной квоты. Даже закрытый issue сам по себе не доказывает, что изменение вошло в установленную у вас версию.
В документации OpenCode Go, открытой 2026-10-10, отдельно описаны 5-часовые, недельные и месячные окна платного использования. Эти правила Go нельзя использовать как доказательство периода reset для бесплатных моделей.
Практическое правило:
- Показан таймер или точное время: сохраните текст, часовой пояс и provider, затем сделайте одну проверку примерно в указанное время.
- Время не показано: считайте его неизвестным, не устраивайте частые повторы и не подставляйте окно другого тарифа.
- Есть только общий 429: сначала проверяйте throttling или перегрузку provider, пока данные не укажут именно на бесплатный лимит.
Вариант 1: подождать и остаться на той же бесплатной модели
Ожидание подходит, если задача не срочная, отдельные API-расходы нежелательны, а ошибка явно относится к бесплатной квоте.
- Запишите время последней неудачи и исходную ошибку.
- Остановите непрерывные повторы, чтобы не смешивать квоту с временным rate limit.
- При наличии надёжного таймера повторите запрос около указанного времени. Без таймера проверяйте через приемлемый для вас интервал, не обещая фиксированный цикл.
- Сначала отправьте короткий запрос, а не возобновляйте задачу, которая читает и меняет множество файлов.
Успех — не запуск OpenCode и не exit code 0. Выбранная модель должна вернуть настоящий ответ, а исходная ошибка не должна появиться снова сразу же.
Вариант 2: выбрать другую модель, доступную сейчас в /models
Если работу нужно продолжить, но исходная модель не обязательна, выберите другую запись, которая реально видна вашему аккаунту и доступна через ожидаемый provider.
Перед переключением проверьте:
- модель есть в текущем списке, а не только в старой инструкции;
- запись относится к нужному
provider, чтобы смена модели незаметно не стала сменой аккаунта и способа списания; - модель подходит задаче — сначала дайте ей небольшой запрос на понимание кода или tool use, и только потом разрешайте изменять репозиторий.
Переключение не гарантирует восстановление. У другой бесплатной модели может быть собственный лимит, региональное ограничение, временное отключение или нехватка мощности. Корректная рекомендация — «выбрать доступную сейчас модель и проверить», а не «любая другая бесплатная модель обязательно заработает».
Вариант 3: явно перейти на отдельно тарифицируемый provider
Этот путь подходит, когда есть дедлайн, допустим отдельный API-расход и нужно отвязать дальнейшие запросы от бесплатной квоты Zen. Это не reset: последующие вызовы идут через другой аккаунт, API Key и учёт использования.
Документация OpenCode по providers подтверждает поддержку custom OpenAI-compatible provider. Минимальная последовательность:
- Выполнить
/connect, выбратьOther, указать уникальный provider ID и сохранить API Key в поле credential. - В
opencode.jsonзадать тот же provider ID, правильный Base URL и фактический Model ID, затем сохранить файл. - Полностью завершить OpenCode и снова запустить его в том же проекте перед проверкой новой конфигурации; не считать, что уже открытый TUI автоматически подхватит новый provider. Если нужен контекст прежней задачи, заранее зафиксировать каталог проекта и нужную задачу или сессию, а после перезапуска безопасно вернуться к ним доступным в вашей среде способом.
- После перезапуска выполнить
/models, убедиться, что новая запись появилась, и выбрать точныйproviderId/modelId, а не только отображаемое имя. - Отправить короткий запрос с явным запретом изменять файлы и получить настоящий новый ответ модели.
- Проверить у целевого provider журнал запросов, usage или изменение баланса, чтобы подтвердить обработку именно этого запроса. Если соответствующей записи нет, не утверждать, что переключение проверено.
BetterToken — один из возможных вариантов для такой независимой схемы. В его инструкции по OpenCode, открытой 2026-10-10, указан Base URL https://www.bettertoken.ai/v1 и ссылка на модель вида bettertoken/YOUR_MODEL_ID. Не добавляйте /chat/completions к Base URL и убедитесь, что верхнее поле model точно совпадает с реальным ID внутри models.
Граница принципиальна: BetterToken не выдаёт бесплатную квоту Zen и не сбрасывает лимит OpenCode/Zen. Он не гарантирует отсутствие всех 429 и не становится автоматически дешевле без сравнения одинакового объёма использования. Это отдельный API-маршрут, а не исправление бесплатной квоты.
Подтвердите восстановление одним коротким запросом
После ожидания, смены модели или смены provider используйте одинаковый тест:
- Ещё раз проверьте выбранный
provider/modelв интерфейсе. - Попросите вернуть только слово
READYи явно запретите изменять файлы. - Сохраните ответ и время; убедитесь, что это новый ответ модели, а не только подтверждение принятой конфигурации или старый кэш.
- Для независимого provider проверьте соответствующее изменение в usage, журнале запросов или балансе. Если таких данных нет, не утверждайте, что списание подтверждено.
- Убедитесь, что исходная ошибка не повторилась, затем вернитесь к настоящей задаче и сначала выполните её самый маленький осмысленный шаг.
Надёжный PASS требует трёх признаков: настоящий ответ модели, ожидаемый provider/model и проверяемое использование на стороне provider. Успешный разбор config, запуск клиента или чистый exit code отдельно этого не доказывают.
Если короткий запрос всё ещё не проходит
Идите по новой ошибке, а не повторяйте все действия подряд:
- Снова
Free limit reached: квота могла ещё не восстановиться, либо выбор фактически не изменился. Проверьте/modelsи проектный config. - Появился
401: убедитесь, что credential сохранён для нужного provider. Выполнитеopencode auth list, при необходимости повторите/connect. - Появился
404илиModel not available: проверьте Base URL, Model ID иproviderId/modelId, затем запуститеopencode models. - Появился общий
429или перегрузка: рассматривайте это как throttling provider, уменьшите частоту повторов и проверьте его статус, а не бесплатную квоту Zen. - Ошибка обрезана: воспользуйтесь официальной инструкцией OpenCode по диагностике, затем приложите время, provider, model, статус и очищенный от секретов response body.
Никогда не вставляйте API Key в issue, скриншот или чат. Оставьте полезные данные об ошибке, но удалите Authorization headers, токены и другие credentials.
Частые вопросы
Бесплатный лимит OpenCode сбрасывается каждый день в одно время?
Нет надёжного первичного источника, подтверждающего единый ежедневный, недельный или месячный цикл для всех бесплатных моделей. Используйте время из текущего ответа; если его нет, считайте время неизвестным.
Любой 429 означает, что бесплатная квота закончилась?
Нет. Это может быть обычный rate limit, ограничение параллельности или перегрузка provider. Нужны provider, model, response body и тип ошибки.
OpenCode Go — единственный способ продолжить?
Нет. Можно подождать, выбрать другую доступную сейчас модель или явно подключить независимый provider. Go — отдельный платный план, и его окна не доказывают период reset бесплатных моделей.
Переход на BetterToken очистит бесплатный лимит?
Нет. Это независимый provider со своим API Key, Base URL, Model ID и учётом использования. Состояние бесплатной квоты Zen от этого не меняется.
Итог
Не пытайтесь решить Free limit reached угадыванием периода reset. Сначала определите реальный provider/model, затем доверяйте только фактическому таймеру. Без него выбирайте по срочности: ожидание, доступная сейчас модель из /models или явно подключённый отдельно тарифицируемый provider. И только после короткого ответа и проверки usage возвращайтесь к исходной задаче.