Тюнинг OpenClaw: маршрутизация моделей, память и контроль расходов
Коротко. Тюнинг OpenClaw — это три независимых рычага, и все три живут в одном файле ~/.openclaw/openclaw.json. Маршрутизация моделей (agents.defaults.model.primary плюс список fallbacks) решает, какая нейросеть отвечает и что происходит, когда она недоступна. Память — это четыре обычных markdown-файла в рабочей папке агента плюс два механизма урезания контекста: компакция (сжимает диалог в резюме) и прунинг (подрезает старые результаты инструментов). Расходы сначала измеряют командами /usage и openclaw status --usage, и только потом сокращают — а самый крупный рычаг здесь не «взять модель подешевле», а не ломать кэш промпта. Ниже — конкретные ключи, команды и значения по умолчанию, каждое сверено с официальной документацией проекта.
На чём это проверено
Все ключи конфигурации, команды и значения по умолчанию в статье сверены с официальной документацией OpenClaw 28 августа 2026 года. В реестре npm на эту дату: канал latest — версия 2026.7.1-2, канал extended-stable — 2026.6.34. Проект выпускает релизы часто, поэтому перед тем как копировать что-то в боевой конфиг, сверьтесь с docs.openclaw.ai — там же лежат исходники всех разделов, на которые мы ссылаемся.
Статья предполагает, что OpenClaw уже установлен и первично настроен: провайдер подключён, модель по умолчанию выбрана, мессенджер отвечает. Если нет — начните с материалов как установить OpenClaw и первичная настройка OpenClaw, а сюда возвращайтесь, когда захочется, чтобы агент работал быстрее, помнил нужное и не удивлял счётом.
Одно правило на весь текст: правьте конфигурацию командой openclaw config set, а не текстовым редактором. Команда проверяет весь файл целиком перед записью, и если результат не проходит проверку схемы, активный конфиг остаётся нетронутым.
Часть 1. Маршрутизация моделей
Порядок, в котором OpenClaw выбирает модель
Это первое, что стоит понять, потому что от него зависит и надёжность, и счёт. Порядок такой:
- Основная модель —
agents.defaults.model.primary(можно записатьagents.defaults.modelпросто строкой). - Запасные модели —
agents.defaults.model.fallbacks, перебираются по порядку. - Ротация учётных записей — если у провайдера настроено несколько профилей авторизации, 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.mode | contextPruning.ttl | heartbeat.every |
|---|---|---|---|
| OAuth / токен (включая переиспользование Claude CLI) | cache-ttl | 1h | 1h |
| API-ключ | cache-ttl | 1h | 30m |
Для остальных провайдеров прунинг выключен, пока вы его не включите руками.
Компакция и прунинг — не одно и то же
| Компакция | Прунинг | |
|---|---|---|
| Что делает | Сворачивает старый разговор в резюме | Подрезает старые результаты инструментов |
| Сохраняется? | Да, записью в стенограмму сессии | Нет, только в памяти, на один запрос |
| Область | Весь разговор | Только результаты инструментов |
Практический вывод из документации: если агент сжимает историю слишком часто, причина обычно не в «маленькой модели», а в объёмном выводе инструментов — и лечится это включением прунинга, а не сменой модели.
Поиск по памяти и фоновая консолидация
У агента три инструмента для работы с памятью: 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 | Без измерения остальные пять пунктов — гадание |
| 2 | heartbeat.isolatedSession: true (если heartbeat используется для мониторинга) | ~100 тыс. → 2–5 тыс. токенов на один фоновый ход |
| 3 | contextPruning.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 года.