Перейти к содержимому
21 мин чтения

Тюнинг OpenClaw: маршрутизация моделей, память и контроль расходов

openclawнастройкамаршрутизация моделейагентная памятьконтроль расходовai-агенты

Коротко. Тюнинг OpenClaw — это три независимых рычага, и все три живут в одном файле ~/.openclaw/openclaw.json. Маршрутизация моделей (agents.defaults.model.primary плюс список fallbacks) решает, какая нейросеть отвечает и что происходит, когда она недоступна. Память — это четыре обычных markdown-файла в рабочей папке агента плюс два механизма урезания контекста: компакция (сжимает диалог в резюме) и прунинг (подрезает старые результаты инструментов). Расходы сначала измеряют командами /usage и openclaw status --usage, и только потом сокращают — а самый крупный рычаг здесь не «взять модель подешевле», а не ломать кэш промпта. Ниже — конкретные ключи, команды и значения по умолчанию, каждое сверено с официальной документацией проекта.

На чём это проверено

Все ключи конфигурации, команды и значения по умолчанию в статье сверены с официальной документацией OpenClaw 28 августа 2026 года. В реестре npm на эту дату: канал latest — версия 2026.7.1-2, канал extended-stable2026.6.34. Проект выпускает релизы часто, поэтому перед тем как копировать что-то в боевой конфиг, сверьтесь с docs.openclaw.ai — там же лежат исходники всех разделов, на которые мы ссылаемся.

Статья предполагает, что OpenClaw уже установлен и первично настроен: провайдер подключён, модель по умолчанию выбрана, мессенджер отвечает. Если нет — начните с материалов как установить OpenClaw и первичная настройка OpenClaw, а сюда возвращайтесь, когда захочется, чтобы агент работал быстрее, помнил нужное и не удивлял счётом.

Одно правило на весь текст: правьте конфигурацию командой openclaw config set, а не текстовым редактором. Команда проверяет весь файл целиком перед записью, и если результат не проходит проверку схемы, активный конфиг остаётся нетронутым.

Часть 1. Маршрутизация моделей

Порядок, в котором OpenClaw выбирает модель

Это первое, что стоит понять, потому что от него зависит и надёжность, и счёт. Порядок такой:

  1. Основная модельagents.defaults.model.primary (можно записать agents.defaults.model просто строкой).
  2. Запасные моделиagents.defaults.model.fallbacks, перебираются по порядку.
  3. Ротация учётных записей — если у провайдера настроено несколько профилей авторизации, OpenClaw сначала переберёт их внутри текущего провайдера и только потом перейдёт к следующей запасной модели.

Модель указывается в формате провайдер/модель, например anthropic/claude-sonnet-4-6. Разбор идёт по первому символу /, поэтому у моделей вроде OpenRouter префикс провайдера обязателен: openrouter/moonshotai/kimi-k2.

Посмотреть, что получилось на самом деле:

openclaw models status

Команда показывает разрешённую основную модель, список запасных и обзор авторизации. Профили в состоянии «остывания» после ошибки выводятся отдельным блоком с причиной и способом восстановления — это первое место, куда стоит смотреть, когда агент внезапно начал отвечать не той моделью.

Запасные модели: страховка, которая должна быть настроена заранее

Список запасных моделей — единственное, что отделяет «провайдер лёг, агент подождал и ответил» от «провайдер лёг, агент замолчал». Управляется отдельными командами, без ручной правки JSON:

openclaw models fallbacks list
openclaw models fallbacks add <модель-или-алиас>
openclaw models fallbacks remove <модель-или-алиас>
openclaw models fallbacks clear

Практическое правило из документации: основной ставьте самую сильную доступную вам модель актуального поколения, а запасные подбирайте под цену и скорость. Отдельная оговорка для агентов с инструментами (доступ к файлам, терминалу, внешним API): слабые и старые модели в такой роли опаснее, потому что хуже держат границы инструкций.

Одна деталь, о которую спотыкаются: подкоманды fallbacks и image-fallbacks всегда работают с агентом по умолчанию и не принимают флаг --agent. Команды set, set-image, scan, refresh и aliases флаг --agent отвергают явно — они глобальные. А вот status, list и auth его понимают.

Дешёвая модель для служебных задач

Агент тратит токены не только на ваши вопросы. Он придумывает заголовки сессий в панели управления, названия тем в личке Telegram, заголовки веток в Discord, пишет строку «чем я сейчас занят» в статусных черновиках. Гонять на этом флагманскую модель — чистая переплата.

За это отвечает agents.defaults.utilityModel:

openclaw config set agents.defaults.utilityModel "anthropic/claude-haiku-4-5"

Если ключ не задан, OpenClaw сам возьмёт «малую» модель, объявленную вашим основным провайдером: для OpenAI это gpt-5.6-luna, для Anthropic — claude-haiku-4-5. Если у провайдера такой модели нет, служебные заголовки уйдут на основную модель, а повествование о статусе просто выключится. Значение "" (пустая строка) отключает отдельный служебный маршрут.

Важная оговорка про приватность, которую документация делает прямо: служебные задачи — это отдельные вызовы модели, и в них уходит содержимое задачи. Для заголовка сессии это до первой тысячи символов первого сообщения, для статусного повествования — входящий запрос плюс сжатые сводки по инструментам. Если служебная модель у вас от другого провайдера, чем основная, вы тем самым отправляете фрагменты переписки второму подрядчику. Выбирайте провайдера под свои требования к данным, а не только под цену.

Отдельная модель для сжатия истории

Когда диалог упирается в лимит контекста, OpenClaw сжимает старые сообщения в резюме. По умолчанию это делает та же основная модель. Но суммаризация — задача принципиально проще, чем работа агента, и её можно увести:

openclaw config set agents.defaults.compaction.model "ollama/llama3.1:8b"

Значением может быть строка провайдер/модель или алиас, настроенный в agents.defaults.models. Работает и с локальными моделями — в документации это прямо названо поддерживаемым сценарием: вторая модель Ollama, посвящённая только сжатию. Один нюанс: явно заданная модель сжатия строгая и не наследует цепочку запасных моделей сессии. Если она недоступна, компакция не подстрахуется соседней моделью.

Тем же приёмом уводится «сброс памяти» — служебный ход, который агент делает перед сжатием, чтобы записать важное на диск: agents.defaults.compaction.memoryFlush.model.

Белый список моделей

Если агентом пользуется не только владелец, есть смысл ограничить, на что вообще можно переключиться. За это отвечает agents.defaults.modelPolicy.allow. Пустой список или отсутствие ключа означают «разрешено всё»; непустой становится белым списком для команды /model, переопределений сессии и флага --model.

openclaw config set agents.defaults.modelPolicy.allow '["openai/*","anthropic/claude-sonnet-4-6"]' --strict-json

Записи бывают точные (провайдер/модель) и с хвостовой маской: провайдер/* открывает весь каталог провайдера, а более узкая clawrouter/anthropic/* — только это пространство имён. Маска удобнее списка: новые модели провайдера появятся сами, без правки конфига.

Попытка выбрать модель вне списка возвращает понятную ошибку и останавливает ответ — то есть выглядит как «агент замолчал»:

Model override "provider/model" is not allowed by agents.defaults.modelPolicy.allow.

Для локальных моделей в белом списке нужна полная ссылка с префиксом провайдера — ollama/gemma4:26b, а не имя файла. Точную строку подскажет openclaw models list --provider <провайдер>.

Рядом живёт agents.defaults.models — там хранятся алиасы и настройки конкретных моделей. Алиас добавляется командой:

openclaw models aliases add opus anthropic/claude-opus-4-6

Обратите внимание: openclaw models set и openclaw models aliases add пишут в agents.defaults.models, но никогда не меняют modelPolicy.allow. Метаданные моделей и политика переключения намеренно разведены, так что добавление алиаса не откроет доступ к модели.

Переключение модели в чате: три области действия

Команда /model в чате имеет три разных масштаба, и путать их дорого:

КомандаЧто меняет
/model <модель> -sТолько текущую сессию. Настройки по умолчанию не трогаются.
/model <модель> -aСессию и модель по умолчанию для этого агента (agents.entries.<агент>.model).
/model <модель> -gСессию и общую модель по умолчанию (agents.defaults.model).
/model default -sСнимает «закреплённую» за сессией модель, ничего не записывая в конфиг.
/model statusПодробный вид: кандидаты авторизации по провайдерам, адрес и режим API.

Длинные формы флагов — --session, --agent, --global. Запись в настройки по умолчанию требует прав владельца или администратора. В Telegram выбор модели через кнопки всегда остаётся в пределах сессии, что бы вы ни настроили.

Здесь же прячется поведение, о котором стоит знать заранее: модель, выбранная пользователем через /model, строгая. Если она станет недоступна, ответ упадёт с видимой ошибкой, а не тихо съедет на запасную. Это сделано намеренно — чтобы вы не обнаружили через неделю, что месяц отвечала не та модель. Настройки по умолчанию и задания планировщика цепочку запасных моделей по-прежнему используют.

И ещё: смена agents.defaults.model.primary не переписывает уже закреплённые сессии. Если статус пишет, что сессия закреплена за моделью X, снимите закрепление командой /model default.

Чего лучше не делать: менять модель посреди длинного разговора

Документация формулирует это как «продвинутая операция», и причина сугубо практическая. У новой модели может быть другое окно контекста, другое поведение с инструментами и, главное, другая реализация кэша промпта. Поэтому смена модели в середине сессии способна ухудшить связность ответа, потребовать более раннего сжатия истории и обнулить переиспользование кэша — то есть увеличить и задержку, и стоимость.

Правильный ход — выбирать модель при создании сессии. И отдельно: если для вас важно переиспользование кэша, не меняйте посреди сессии ещё и уровень «размышления». У OpenAI смена reasoning effort меняет состояние запроса, пригодное к переиспользованию, и следующий ход может обсчитать весь диалог заново. У других провайдеров конфигурация размышления тоже иногда входит в идентичность кэша.

Сложите всё вместе — основная модель, цепочка запасных, служебная, отдельная для сжатия, белый список, закрепления сессий — и станет видно, что маршрутизация в OpenClaw не одна настройка, а небольшая политика, которую надо ещё и пересматривать, когда провайдеры меняют модели и цены. Если возиться с этим не хочется, пересоберём маршрутизацию моделей и уберём лишние токены из каждого запроса — вы получите готовый конфиг и объяснение, почему он именно такой. Дальше — для тех, кто настраивает сам.

Часть 2. Память

Четыре файла — и это вся память

Здесь у OpenClaw честная и приятно скучная архитектура: агент помнит только то, что записано на диск, скрытого состояния нет. Память — это обычные markdown-файлы в рабочей папке агента (по умолчанию ~/.openclaw/workspace).

ФайлЧто в нёмКогда попадает в контекст
USER.mdУстойчивые предпочтения, стиль общения, роли и контекст текущих проектов — в форме указанийВ начале сессии, с отдельным небольшим бюджетом
MEMORY.mdДолговременная память: устойчивые факты и принятые решенияВ начале сессии
memory/ГГГГ-ММ-ДД.mdЕжедневные заметки, наблюдения, сводки сессийНе подставляется на каждом ходу; доступен через поиск по памяти. Сегодняшний и вчерашний подгружаются на «голых» /new и /reset
DREAMS.mdДневник фоновой консолидации памяти — для чтения человекомНе подставляется автоматически

Чтобы агент что-то запомнил, достаточно попросить словами: «запомни, что я предпочитаю такой-то формат отчёта» — он сам выберет файл. Разделение простое: USER.md — про вас, MEMORY.md — про дело, memory/*.md — рабочий слой, из которого полезное со временем перетекает в MEMORY.md.

Почему MEMORY.md может «не доехать» до модели

Это самая недооценённая настройка во всём разделе. На подстановку файлов рабочей папки в промпт наложены два лимита:

  • agents.defaults.bootstrapMaxChars — сколько символов берётся из одного файла. По умолчанию 20 000.
  • agents.defaults.bootstrapTotalMaxChars — общий потолок на всю подстановку. По умолчанию 60 000.

Если MEMORY.md перерастает бюджет, файл на диске остаётся целым, а в контекст уходит усечённая копия. Агент при этом не жалуется — он просто перестаёт знать часть того, что вы ему записали. Проверяется одной командой в чате:

/context list
/context detail

Первая показывает, что именно подставлено и сколько это весит по файлам; вторая разбирает подробнее — по файлам, схемам инструментов, навыкам и размеру системного промпта. Обе показывают исходный и подставленный размеры и факт усечения. Есть и наглядный вариант — /context map, картинка-теплокарта того, что занимает контекст.

Правильная реакция на усечение — не поднимать лимиты рефлекторно, а разнести материал: подробности в memory/*.md (они и так индексируются для поиска), в MEMORY.md — только устойчивую выжимку. Поднимать bootstrapMaxChars стоит осознанно: это прямая трата бюджета промпта на каждом ходу.

Память агента — это ровно та часть настройки, где ошибка не видна сразу и обнаруживается через месяц по фразе «он же это знал». Если не хочется выяснять это опытным путём — наведём порядок в памяти агента: что хранить, что забывать и как это искать.

Сжатие истории (компакция)

Когда разговор подходит к пределу окна контекста, OpenClaw сворачивает старые ходы в резюме, а свежие сообщения оставляет как есть. Полная история при этом остаётся на диске — компакция меняет только то, что видит модель на следующем ходу.

Что стоит знать:

  • Автосжатие включено по умолчанию. Срабатывает при приближении к лимиту либо когда провайдер вернул ошибку переполнения контекста — в этом случае OpenClaw сжимает и повторяет запрос.
  • Новые конфигурации по умолчанию используют режим safeguard (agents.defaults.compaction.mode): более строгие проверки и аудит качества резюме. Явное mode: "default" — отказ от них.
  • Ручное сжатие — /compact, и его можно направить: /compact Сфокусируйся на решениях по договору. Ручная компакция берёт как бюджет «хвоста» ключ agents.defaults.compaction.keepRecentTokens — по умолчанию 20 000 токенов.
  • Перед сжатием агент молча сохраняет важное в файлы памяти — это и есть memory flush, он включён по умолчанию. Выключается через agents.defaults.compaction.memoryFlush.enabled: false, но выключать его — почти всегда плохая идея: именно он не даёт потерять контекст при сжатии.
  • Сжатие по умолчанию проходит молча. Если хочется видеть, когда это происходит, поставьте agents.defaults.compaction.notifyUser: true. Счётчик сжатий за сессию показывает /status.
  • Нужен чистый лист — это /new, он начинает новую сессию без сжатия.

Прунинг: подрезать результаты инструментов

Компакция сворачивает разговор. Прунинг занимается другим — старыми результатами инструментов: выводом команд, прочитанными файлами, результатами поиска. Именно они в реальных сессиях раздувают контекст быстрее всего.

Включается одним ключом:

openclaw config set agents.defaults.contextPruning.mode "cache-ttl"

Работает так: сначала ждёт, пока истечёт TTL кэша промпта (до этого не трогает ничего, чтобы не сломать переиспользование кэша соседними ходами); затем смотрит на заполненность контекста — ниже примерно 30% пропускает; потом мягко подрезает результаты длиннее 4 000 символов, оставляя первые и последние 1 500 и многоточие между ними; и только если контекст всё ещё занят примерно на 50% и подрезаемого материала осталось не меньше 50 000 символов, жёстко вычищает старые результаты, заменяя их заглушкой.

Две страховки работают всегда, независимо от порогов: последние три хода ассистента не подрезаются никогда, и ничего до первого сообщения пользователя не трогается — это защищает стартовые файлы вроде SOUL.md и USER.md. Сами пороги и окна подрезки зашиты в код и ключами конфигурации не являются; настраиваются mode, ttl, tools.allow / tools.deny (какие инструменты вообще можно подрезать) и hardClear.

Прунинг работает только в памяти. Стенограмма сессии на диске не меняется.

Отдельно: у пользователей Anthropic прунинг, скорее всего, уже включён. Штатный плагин Anthropic при первом распознавании профиля авторизации сам проставляет разумные значения — но только тем полям, которые вы не задали явно:

Способ авторизацииcontextPruning.modecontextPruning.ttlheartbeat.every
OAuth / токен (включая переиспользование Claude CLI)cache-ttl1h1h
API-ключcache-ttl1h30m

Для остальных провайдеров прунинг выключен, пока вы его не включите руками.

Компакция и прунинг — не одно и то же

КомпакцияПрунинг
Что делаетСворачивает старый разговор в резюмеПодрезает старые результаты инструментов
Сохраняется?Да, записью в стенограмму сессииНет, только в памяти, на один запрос
ОбластьВесь разговорТолько результаты инструментов

Практический вывод из документации: если агент сжимает историю слишком часто, причина обычно не в «маленькой модели», а в объёмном выводе инструментов — и лечится это включением прунинга, а не сменой модели.

Поиск по памяти и фоновая консолидация

У агента три инструмента для работы с памятью: memory_search (семантический поиск, находит по смыслу, а не по точной формулировке), memory_get (читает конкретный файл или диапазон строк) и intent (намерения, привязанные к событию, — в отличие от напоминаний по времени, которые остаются задачами планировщика).

Из командной строки:

openclaw memory status
openclaw memory search "договор с подрядчиком"
openclaw memory index --force

Поиск работает гибридно — векторное сходство плюс совпадение по ключевым словам (это важно для идентификаторов, артикулов и номеров). По умолчанию берутся эмбеддинги OpenAI; провайдер меняется ключом memory.search.provider, и в списке поддержанных есть локальные варианты — GGUF, Ollama, LM Studio. Для компании, которая не хочет отправлять содержимое заметок наружу, это рабочий путь: индексация памяти уезжает на своё железо, а основная модель остаётся облачной.

Фоновая консолидация («dreaming») включена по умолчанию: система собирает сигналы обращений к памяти, оценивает кандидатов и переносит в MEMORY.md только то, что прошло пороги по частоте обращений и разнообразию запросов. Отчёты о проходах пишутся в DREAMS.md — их можно просто читать глазами. Выключается ключом plugins.entries.memory-core.config.dreaming.enabled: false.

Часть 3. Контроль расходов

Шаг 1. Сначала включить счётчик

Сокращать расходы вслепую бессмысленно. У OpenClaw есть три разных ответа на вопрос «сколько потрачено», и они отвечают на разные вопросы:

КомандаЧто показывает
/status в чатеКарточка сессии: модель, заполненность контекста, токены последнего ответа, оценка стоимости
/usage off|tokens|fullПриписка с расходом под каждым ответом. tokens — строка «вход/выход», full — модель, контекст, стоимость
/usage costСводка по стоимости, собранная из журналов сессий
openclaw status --usageОстатки квот у провайдера, приведённые к виду «X% left»
openclaw models statusПрофили авторизации и рядом — окно использования по каждому провайдеру

Чтобы приписка была включена по умолчанию и её не приходилось каждый раз вызывать руками, задаётся messages.responseUsage — одним значением на все каналы или картой с ключом default:

{
  "messages": {
    "responseUsage": { "default": "off", "telegram": "tokens" }
  }
}

Тонкость, которая иногда сбивает с толку: явное /usage off запоминается в сессии, и конфигурационное значение по умолчанию потом не может включить приписку обратно. Сбрасывается это командой /usage reset.

Отдельно от локальных оценок стоят настоящие счета провайдера. Переменные ANTHROPIC_ADMIN_KEY и OPENAI_ADMIN_KEY (при желании плюс OPENAI_PROJECT_ID, чтобы сузить до одного проекта) добавляют историю расходов организации из биллинга провайдера. OpenClaw не смешивает эти цифры со своими оценками — намеренно, потому что они отвечают на разные вопросы.

Шаг 2. Понять, откуда берётся оценка стоимости

Локальная оценка считается по вашему же прайсу в конфиге:

models.providers.<провайдер>.models[].cost

Это четыре числа в долларах за 1 млн токенов: input, output, cacheRead и cacheWrite. Если цены для активной модели нет, /usage full просто не показывает стоимость — и это, кстати, частая причина жалобы «а почему у меня не видно расходов». Обновления цен приезжают вместе с каталогом моделей; отключить обращения к каталогу можно ключом models.catalogRefresh.enabled: false, но тогда останутся только зашитые и явно прописанные вами цены.

Обратите внимание на само наличие отдельных строк cacheRead и cacheWrite. Это не бухгалтерская мелочь, а подсказка, где на самом деле лежат деньги.

Шаг 3. Кэш промпта — самый крупный рычаг

У Anthropic чтение из кэша существенно дешевле обычных входных токенов, а вот запись в кэш стоит дороже входных — с повышающим коэффициентом (актуальные ставки и множители TTL смотрите на странице Anthropic про prompt caching, мы их здесь не переписываем, потому что они меняются). Отсюда простое следствие: дорого не то, что агент много думает, а то, что он раз за разом заново записывает в кэш весь длинный промпт.

Три приёма, которые с этим работают:

Прунинг уменьшает размер записи в кэш. После истечения TTL следующий запрос кэширует промпт заново; чем меньше в нём накопившегося вывода инструментов, тем дешевле эта запись. Это прямая экономия, а не косвенная.

Heartbeat может держать кэш тёплым. Если TTL кэша у вашей модели — час, интервал heartbeat чуть меньше часа не даёт кэшу остыть, и полный промпт не приходится записывать заново:

openclaw config set agents.defaults.heartbeat.every "55m"

Политика удержания кэша настраивается по моделям и по агентам. Ключ params.cacheRetention задаётся у модели в agents.defaults.models, а agents.entries.*.params.cacheRetention переопределяет его для конкретного агента, наследуя остальные параметры модели. Логика простая: агенту с длинными исследовательскими сессиями кэш нужен долгий, а агенту, который раз в час присылает короткое уведомление, запись в кэш не нужна вовсе.

Шаг 4. Heartbeat — тихая статья расходов

Heartbeat — это периодический самостоятельный ход агента. По умолчанию интервал 30m при авторизации по API-ключу и 1h при OAuth; значение 0m отключает регулярную работу совсем.

И вот цифра, ради которой стоит открыть конфиг прямо сейчас. Если каждый heartbeat идёт в общей сессии, он тащит за собой всю накопленную историю. Флаг isolatedSession: true запускает каждый heartbeat в свежей сессии без истории — и, по документации, снижает стоимость одного heartbeat примерно со 100 тысяч токенов до 2–5 тысяч:

openclaw config set agents.defaults.heartbeat.isolatedSession true

Рядом лежит lightContext: true — облегчённый стартовый контекст, при котором heartbeat не подтягивает файлы рабочей папки. Смысл в том же: фоновая проверка «всё ли в порядке» не нуждается в полном досье.

Здесь важно не перестараться. Изолированная сессия — это ровно то, что нужно для мониторинга и уведомлений, но неподходяще, если ваш heartbeat должен продолжать вчерашнюю работу. Решайте по задаче, а не по цифре экономии.

Шаг 5. Длинный контекст включается не бесплатно

Здесь документация делает то, что делают редко: объясняет, почему не включила максимум за вас. Модели OpenAI GPT-5.5 и GPT-5.6 объявляют полное окно в 1 050 000 токенов, но рабочий бюджет OpenClaw по умолчанию — 272 000. Опциональное расширение до 922 000 входных токенов резервирует полные 128 000 на вывод. Причина осторожности прямая: как только вход превышает 272 000 токенов, OpenAI применяет повышенную тарификацию длинного контекста ко всему запросу, а не только к превышению.

Практический вывод: расширять окно имеет смысл под конкретную задачу, где это действительно нужно, а не «на всякий случай». Для моделей Claude 4.x поколения Opus 4.6–4.8 и Sonnet 4.6 окно в 1 млн токенов OpenClaw проставляет сам, отдельный флаг не нужен — но учётная запись должна иметь право на длинный контекст, иначе провайдер вернёт ошибку лимита.

Шаг 6. Мелочи, которые в сумме дают много

  • Картинки. OpenClaw уменьшает изображения перед отправкой провайдеру. Порог — agents.defaults.imageMaxDimensionPx, по умолчанию 1200. Меньше значение — меньше «зрительных» токенов; больше — лучше читается мелкий текст на скриншотах. Если агент разбирает сканы документов, это одна из немногих настроек, где повышение оправдано.
  • Описания навыков. Список навыков подставляется в системный промпт целиком (сами инструкции подгружаются по требованию). Длинные описания — это налог на каждый ход. Общий размер блока ограничен ключом skills.limits.maxSkillsPromptChars.
  • Потолки на выдержки из памяти. agents.defaults.contextLimits.memoryGetMaxChars ограничивает, сколько символов вернёт memory_get до усечения.
  • Крупные результаты инструментов ограничены автоматически. Потолок выводится из окна контекста: 16 000 символов при окне меньше 100 тыс. токенов, 32 000 — от 100 тыс., 64 000 — от 200 тыс. Плюс отдельная страховка: один результат инструмента не может занять больше 30% окна.
  • Проверяйте, что съедает контекст, а не гадайте. /context detail раскладывает по полочкам самые крупные схемы инструментов — иногда выясняется, что половину бюджета занимает один подключённый и никем не используемый MCP-сервер.

Чек-лист: шесть изменений по убыванию отдачи

#Что сделатьЗачем
1Включить /usage tokens или messages.responseUsageБез измерения остальные пять пунктов — гадание
2heartbeat.isolatedSession: true (если heartbeat используется для мониторинга)~100 тыс. → 2–5 тыс. токенов на один фоновый ход
3contextPruning.mode: "cache-ttl"Меньше запись в кэш, реже сжатие истории
4Настроить model.fallbacksАгент переживёт сбой провайдера, а не замолчит
5Задать utilityModelЗаголовки и служебные строки перестают идти по цене флагмана
6Проверить /context list на усечение MEMORY.mdМолчаливая потеря памяти — самая дорогая из незаметных проблем

Что ломается чаще всего

  • «Агент перестал отвечать» после правки белого списка. Выбор модели вне modelPolicy.allow прерывает ход до генерации ответа. Проверьте openclaw models status и текст ошибки — он называет конкретный ключ.
  • «Он отвечает не той моделью». Сессия закреплена за старой моделью: смена primary не переписывает закрепления. Лечится /model default.
  • «Стоимость не показывается». Для активной модели нет локального прайса в models.providers.*.models[].cost. Токены при этом видны через /usage tokens.
  • «Он забыл то, что я записал». Смотрите на усечение в /context list раньше, чем на «плохую модель».
  • «Сжимает историю каждые полчаса». Обычно виноват объёмный вывод инструментов, а не размер окна. Включите прунинг.
  • Правка конфига в редакторе. Комментарии не переживут перезапись файла самим OpenClaw, а ошибка схемы обнаружится позже и в неудачный момент. Пользуйтесь openclaw config set.

Когда не стоит настраивать самому

Всё описанное выше реально сделать за вечер — если у вас один агент, одна модель и вы готовы пару раз перечитать документацию. Честная граница проходит там, где появляются: несколько агентов с разными задачами и разными бюджетами; требование, чтобы содержимое переписки не уходило второму провайдеру; договорные обязательства по доступности, при которых «агент замолчал на два часа» — это инцидент, а не неудобство. В этих случаях подбор значений превращается в отдельную работу с измерениями, а не в разовую правку файла, и ошибки в ней стоят дороже, чем сэкономленный вечер.

Что важно: инструкция выше полная — по ней всё работает, ничего специально не спрятано. Аргумент за то, чтобы отдать это нам, ровно один и он честный: это кропотливо и требует возвращаться к настройкам, когда меняются модели, цены и нагрузка. Работаем по подписке, с юрлицами и по договору; текущие тарифы и состав подписки — на отдельной странице.

Если агент нужен в постоянной работе, а не в режиме «поставил и надеюсь» — возьмём OpenClaw на сопровождение: модели, лимиты и счёт под присмотром, вместе с обновлениями и дежурством по инцидентам.

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

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

Включить отображение расхода (/usage tokens) и посмотреть /context list. Это две команды, они ничего не меняют, но после них станет понятно, какая из остальных настроек в вашем случае вообще имеет смысл. Универсального «главного ключа» здесь нет — у агента с длинными сессиями и у агента, который раз в час шлёт сводку, узкие места разные.

Можно ли увести сжатие истории и поиск по памяти на локальную модель, оставив основную облачной?

Да, и это поддержанный сценарий. Модель сжатия задаётся ключом agents.defaults.compaction.model (в документации есть пример с моделью Ollama), модель «сброса памяти» — agents.defaults.compaction.memoryFlush.model, провайдер эмбеддингов для поиска — memory.search.provider, где среди поддержанных есть локальные GGUF, Ollama и LM Studio. Помните про строгость: явно заданная модель сжатия не наследует цепочку запасных моделей, и если локальный сервер лёг, компакция не подстрахуется облаком.

Прунинг удаляет мою историю?

Нет. Прунинг работает только в оперативной памяти, перед отправкой запроса модели, и не трогает стенограмму сессии на диске. Компакция, в отличие от него, записывает резюме в стенограмму — но и она оставляет полную историю на диске нетронутой.

Почему у меня прунинг уже включён, хотя я его не включал?

Скорее всего, вы работаете через Anthropic. Штатный плагин при первом распознавании профиля авторизации сам проставляет contextPruning.mode: "cache-ttl", TTL в час и интервал heartbeat — но только для полей, которые вы не задали явно. Для других провайдеров такого не происходит.

Насколько сильно всё это меняется от версии к версии?

Названия ключей в OpenClaw довольно устойчивы, а вот значения по умолчанию и подсказанные моделью «малые» модели меняются вместе с каталогом провайдеров. Если вам нужна предсказуемость больше, чем свежие возможности, есть канал extended-stable — долгоживущие сборки с переносом исправлений безопасности и надёжности. Перед копированием любых значений из этой статьи в боевой конфиг сверяйтесь с документацией на своей версии.

Источники: официальная документация OpenClaw — разделы concepts/models, cli/models, gateway/config-agents, concepts/memory, concepts/compaction, concepts/session-pruning, concepts/context, concepts/usage-tracking, reference/token-use, cli/status; версии каналов — реестр npm, пакет openclaw. Проверено 28 августа 2026 года.