Экономия токенов в opencode: чек-лист настроек и привычек

Расход в opencode складывается из привычек и нескольких строк конфига. Собрали проверяемый чек-лист: что включить, что убрать и как посмотреть результат в кабинете.

6 мин · · экономия · агенты

Расход токенов в opencode почти никогда не определяется одним запросом. Агент на каждом шаге отправляет модели всю накопленную переписку, поэтому дорого обходятся не сложные задачи, а длинные сессии с лишним контекстом. Ниже чек-лист по экономии токенов в opencode: каждый пункт объясняет, зачем он нужен, и подсказывает, как проверить эффект. Цены даны на 18 октября 2026, актуальный список — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.

Почему расход растёт: короткий расчёт

Допустим, контекст сессии дорос до 120 000 токенов, а агент делает 30 шагов подряд на claude-sonnet-5-5 (вход $0.4, чтение кэша $0.05 за 1M токенов). Считаем только входящий контекст, без выхода и записи в кэш:

  • без кэша: 120 000 × 0.4 / 1 000 000 = $0.048 за шаг, 30 шагов = $1.44;
  • с чтением из кэша: 120 000 × 0.05 / 1 000 000 = $0.006 за шаг, 30 шагов = $0.18.

Это верхняя оценка для наглядности, а не прогноз: реальный кэш попадает не на каждом шаге. Но вывод рабочий: каждый лишний токен в контексте оплачивается на каждом следующем шаге, поэтому все пункты ниже сводятся к двум вещам. Меньше контекста и дешевле модель там, где сильная не нужна.

Чек-лист

1. Одна сессия — одна задача

Когда задача закрыта, начинайте новую сессию (в TUI это команда /new, по умолчанию сочетание ctrl+x n). Старые чтения файлов и логи тестов не нужны для следующей задачи, но продолжают ехать в каждом запросе. Это самая дешёвая привычка из списка: она ничего не требует настраивать.

2. Сжимайте контекст вручную на границах этапов

Команда /compact (она же /summarize, ctrl+x c) заменяет историю кратким резюме. Делайте это после завершённого этапа, а не когда окно почти заполнено: автосжатие сработает в неудобный момент и может потерять нужное.

3. Включите prune и проверьте блок compaction

По документации opencode, сжатие настраивается в opencode.json:

bash
{
  "$schema": "https://opencode.ai/config.json",
  "compaction": {
    "auto": true,
    "prune": true,
    "reserved": 10000
  }
}

auto (по умолчанию включён) сжимает сессию при заполнении контекста, prune удаляет старые выводы инструментов (по умолчанию выключен), reserved оставляет запас окна на время самого сжатия. Вывод команд и содержимое прочитанных файлов — главный балласт в агентной сессии, поэтому prune: true стоит попробовать. Значения по умолчанию могут меняться между версиями: сверьтесь с документацией opencode.

4. Держите AGENTS.md коротким

Файл правил попадает в контекст каждой сессии. Команда /init создаёт стартовый вариант, но его стоит сократить до того, что действительно нужно агенту: команды сборки и тестов, структура проекта, неочевидные соглашения. Если подключаете через поле instructions целые каталоги по маске (например .cursor/rules/*.md), помните, что все найденные файлы тоже едут в каждый запрос.

5. Назначьте дешёвую модель на мелкие задачи

В opencode есть поле small_model для лёгких операций вроде генерации названия сессии. Если не задавать, opencode пытается взять более дешёвую модель у провайдера, а иначе использует основную. Через Zukko это может выглядеть так: Claude идёт через провайдера Anthropic (подключение описано в документации Zukko по opencode), а для мелких задач добавлен отдельный OpenAI-совместимый провайдер с дешёвой моделью:

bash
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "anthropic": {
      "options": {
        "baseURL": "https://api.zukko.pro/v1",
        "apiKey": "fetch_..."
      },
      "models": {
        "claude-sonnet-5-5": {},
        "claude-opus-5-5": {}
      }
    },
    "zukko-openai": {

Адрес с /v1 здесь нужен именно для opencode: без него запросы уходят не туда и возвращается 404. Через провайдера Anthropic работают модели Claude, а deepseek-v4.1-flash подключена через пакет @ai-sdk/openai-compatible и указывается как <id-провайдера>/<id-модели>. Идентификатор zukko-openai произвольный. Формат описания провайдера сверяйте с разделом Providers документации opencode.

6. Разделите агентов по ролям

В opencode есть основные агенты Build и Plan и встроенные субагенты General, Explore и Scout, а в конфиге можно задать своего агента со своей моделью:

bash
{
  "agent": {
    "review": {
      "description": "Проверка диффа без правок",
      "mode": "subagent",
      "model": "anthropic/claude-sonnet-5-5",
      "permission": { "edit": "deny", "bash": "deny" }
    }
  }
}

Идея простая: исследование и ревью не требуют самой дорогой модели, а запретив правки, вы заодно режете лишние шаги. Для планирования удобен встроенный агент Plan, он по документации ограничен в изменениях.

7. Цена модели против индекса силы

Сравнение на 18 октября 2026, $ за 1M токенов (вход / выход), индекс силы Artificial Analysis:

МодельВход / выходИндекс
claude-opus-5-50.8 / 458
claude-sonnet-5-50.4 / 248
gpt-6.1-sol0.27 / 1.3252
deepseek-v4.1-flash0.013 / 0.03839
glm-5.3-flash0.04 / 0.0442

Индекс не заменяет проверку: возьмите две-три типовые задачи из своего проекта и прогоните их на разных моделях. Тогда решение о том, где хватит дешёвой, будет вашим, а не чужим.

8. Не переключайте модель посреди сессии

У промптового кэша есть своя логика: он привязан к префиксу запроса и, как правило, к модели. Смена модели в середине длинной сессии обычно означает, что весь накопленный контекст снова оплачивается как свежий вход (и, для Claude, как запись в кэш). Меняйте модель на границе задач.

9. Следите за кэшем

Скидку за кэш у Claude шлюз видит в Anthropic-формате: чтение и запись кэша оплачиваются по своим ценам (у claude-sonnet-5-5 чтение $0.05, запись $0.5 против входа $0.4). В opencode провайдер Anthropic работает именно в этом формате, так что кэш учитывается. Проверить это на практике можно в разделе «Использование» кабинета: сравните стоимость двух одинаковых сессий.

10. Ограничьте инструменты и MCP-серверы

Описание каждого подключённого MCP-сервера и инструмента, как правило, добавляется в запрос. Отключите то, чем не пользуетесь в этом проекте. А через раздел permission можно требовать подтверждение для опасных действий:

bash
{
  "permission": { "edit": "ask", "bash": "ask" }
}

По документации opencode, большинство разрешений по умолчанию стоит в allow, то есть выполняется без подтверждения; в ask по умолчанию только external_directory и doom_loop (срабатывает, когда один и тот же вызов инструмента повторяется трижды с одинаковыми аргументами). Подтверждение правок и команд заодно прерывает бесполезные циклы: вы видите, что агент в третий раз запускает одну и ту же команду.

11. Давайте точные задания

«Исправь всё» заставляет агента читать полпроекта. «В src/api/client.ts функция retry не учитывает 429, поправь и запусти npm test» читает два файла. Указывайте файл, симптом и способ проверки.

12. Поставьте лимит на ключ

Отдельный ключ для opencode с дневным и месячным лимитом в $ защитит от зациклившегося агента. Лимиты мягкие: запрос, начатый до достижения потолка, будет выполнен, поэтому закладывайте запас. Кроме того, можно ограничить список разрешённых моделей (allowed_models). Подробности — в документации по лимитам ключа. Если агент упрётся в лимит, вы получите 429 с кодом key_daily_limit_reached или key_monthly_limit_reached.

Как убедиться, что стало дешевле

  1. Запишите расход за обычный рабочий день в разделе «Использование» кабинета.
  2. Внесите по одному изменению из чек-листа (например, prune и дешёвая модель для ревью).
  3. Через несколько дней сравните расход на схожих задачах.

Не ждите универсального результата: он зависит от проекта, длины сессий и выбранных моделей. Ключ создаётся в кабинете Zukko, и один и тот же ключ работает в обоих форматах API.

Частые вопросы

Достаточно ли включить prune и compaction?

Они убирают балласт, но не заменяют привычки. Если сессия охватывает пять разных задач, сжатие сохранит резюме всех пяти. Начинайте новую сессию на новую задачу.

Можно ли использовать для мелких задач модель не из семейства Claude?

Да, но через отдельный OpenAI-совместимый провайдер в конфиге opencode с адресом https://api.zukko.pro/v1. Помните: в OpenAI-формате Claude не получает скидку за кэш, а GPT получает, поэтому для Claude оставьте провайдера Anthropic.

Сколько стоит один день работы?

Зависит от модели и длины сессий. Используйте формулу: свежий вход × цена входа + чтение кэша × цена чтения + запись кэша × цена записи + выход × цена выхода. Подставьте числа из usage ответов или из кабинета.

Что делать, если агент упёрся в лимит ключа?

Поднимите лимит в кабинете или создайте новый ключ под задачу. Остальные ключи аккаунта продолжают работать, лимит действует на ключ, а не на баланс.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.