---
read_when:
    - Потрібно налагодити ідентифікатори сеансів, JSONL транскриптів або поля sessions.json
    - Ви змінюєте поведінку автоматичної Compaction або додаєте підготовче обслуговування перед Compaction
    - Ви хочете реалізувати скидання пам’яті або тихі системні ходи
summary: 'Глибокий розбір: сховище сеансів + транскрипти, життєвий цикл і внутрішні механізми (авто)Compaction'
title: Поглиблений огляд керування сеансами
x-i18n:
    generated_at: "2026-05-02T13:59:33Z"
    model: gpt-5.5
    provider: openai
    source_hash: 8271d7b0786e1c47a8cec6e7bd73c3c86a433d629e17937fdd87fa756ed78d73
    source_path: reference/session-management-compaction.md
    workflow: 16
---

OpenClaw керує сеансами від початку до кінця в таких областях:

- **Маршрутизація сеансів** (як вхідні повідомлення зіставляються з `sessionKey`)
- **Сховище сеансів** (`sessions.json`) і те, що воно відстежує
- **Збереження транскриптів** (`*.jsonl`) та їхня структура
- **Гігієна транскриптів** (специфічні для провайдера виправлення перед запусками)
- **Обмеження контексту** (контекстне вікно проти відстежуваних токенів)
- **Compaction** (ручна та автоматична Compaction) і де під’єднувати роботу перед Compaction
- **Тихе обслуговування** (записи в пам’ять, які не мають створювати видимий для користувача вивід)

Якщо спершу потрібен загальніший огляд, почніть із:

- [Керування сеансами](/uk/concepts/session)
- [Compaction](/uk/concepts/compaction)
- [Огляд пам’яті](/uk/concepts/memory)
- [Пошук у пам’яті](/uk/concepts/memory-search)
- [Обрізання сеансів](/uk/concepts/session-pruning)
- [Гігієна транскриптів](/uk/reference/transcript-hygiene)

---

## Джерело істини: Gateway

OpenClaw спроєктовано навколо єдиного **процесу Gateway**, який володіє станом сеансів.

- UI (застосунок macOS, веб Control UI, TUI) мають запитувати в Gateway списки сеансів і кількість токенів.
- У віддаленому режимі файли сеансів розміщені на віддаленому хості; «перевірка файлів на локальному Mac» не відображатиме того, що використовує Gateway.

---

## Два рівні збереження

OpenClaw зберігає сеанси на двох рівнях:

1. **Сховище сеансів (`sessions.json`)**
   - Карта ключ/значення: `sessionKey -> SessionEntry`
   - Невелике, змінюване, безпечне для редагування (або видалення записів)
   - Відстежує метадані сеансу (поточний id сеансу, остання активність, перемикачі, лічильники токенів тощо)

2. **Транскрипт (`<sessionId>.jsonl`)**
   - Транскрипт лише з додаванням, зі структурою дерева (записи мають `id` + `parentId`)
   - Зберігає фактичну розмову + виклики інструментів + підсумки Compaction
   - Використовується для відновлення контексту моделі для майбутніх ходів
   - Великі налагоджувальні контрольні точки перед Compaction пропускаються, щойно активний
     транскрипт перевищує ліміт розміру контрольної точки, щоб уникнути другої гігантської
     копії `.checkpoint.*.jsonl`.

Зчитувачі історії Gateway мають уникати матеріалізації всього транскрипту, якщо
поверхні явно не потрібен довільний доступ до історії. Історія першої сторінки,
вбудована історія чату, відновлення після перезапуску та перевірки токенів/використання використовують обмежене читання хвоста.
Повні сканування транскрипту проходять через асинхронний індекс транскриптів, який
кешується за шляхом до файлу плюс `mtimeMs`/`size` і спільно використовується одночасними зчитувачами.

---

## Розташування на диску

Для кожного агента на хості Gateway:

- Сховище: `~/.openclaw/agents/<agentId>/sessions/sessions.json`
- Транскрипти: `~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl`
  - Сеанси тем Telegram: `.../<sessionId>-topic-<threadId>.jsonl`

OpenClaw визначає ці шляхи через `src/config/sessions.ts`.

---

## Обслуговування сховища та керування диском

Збереження сеансів має автоматичні засоби обслуговування (`session.maintenance`) для `sessions.json`, артефактів транскриптів і допоміжних файлів траєкторій:

- `mode`: `warn` (типово) або `enforce`
- `pruneAfter`: граничний вік застарілих записів (типово `30d`)
- `maxEntries`: ліміт записів у `sessions.json` (типово `500`)
- `resetArchiveRetention`: строк зберігання архівів транскриптів `*.reset.<timestamp>` (типово: такий самий, як `pruneAfter`; `false` вимикає очищення)
- `maxDiskBytes`: необов’язковий бюджет каталогу сеансів
- `highWaterBytes`: необов’язкова ціль після очищення (типово `80%` від `maxDiskBytes`)

Звичайні записи Gateway проходять через окремий для сховища записувач сеансів, який серіалізує внутрішньопроцесні мутації без використання файлового блокування під час виконання. Допоміжні засоби швидкого шляху для латок позичають перевірений змінюваний кеш, поки утримують слот цього записувача, тому великі файли `sessions.json` не клонуються й не перечитуються для кожного оновлення метаданих. Код виконання має віддавати перевагу `updateSessionStore(...)` або `updateSessionStoreEntry(...)`; прямі збереження всього сховища є інструментами сумісності та офлайн-обслуговування. Коли Gateway доступний, не пробні `openclaw sessions cleanup` і `openclaw agents delete` делегують мутації сховища Gateway, щоб очищення приєднувалося до тієї самої черги записувача; `--store <path>` є явним офлайн-шляхом ремонту для прямого обслуговування файлів. Очищення `maxEntries` усе ще виконується пакетами для production-лімітів, тому сховище може короткочасно перевищувати налаштований ліміт, перш ніж наступне очищення до верхнього порогу перепише його до меншого розміру. Читання сховища сеансів не обрізає і не обмежує записи під час запуску Gateway; для очищення використовуйте записи або `openclaw sessions cleanup --enforce`. `openclaw sessions cleanup --enforce` усе ще застосовує налаштований ліміт негайно.

Обслуговування зберігає довговічні зовнішні вказівники розмов, як-от групові сеанси
та сеанси чату в межах потоків, але синтетичні runtime-записи для Cron, хуків,
Heartbeat, ACP і субагентів усе ще можуть бути видалені, коли вони перевищують
налаштований вік, кількість або бюджет диска.

OpenClaw більше не створює автоматичні ротаційні резервні копії `sessions.json.bak.*` під час записів Gateway. Застарілий ключ `session.maintenance.rotateBytes` ігнорується, а `openclaw doctor --fix` видаляє його зі старіших конфігурацій.

Мутації транскриптів використовують блокування запису сеансу на файлі транскрипту. Очікування отримання блокування триває до
`session.writeLock.acquireTimeoutMs`, перш ніж буде показано помилку зайнятого сеансу; типове значення — `60000`
мс. Підвищуйте його лише тоді, коли легітимна підготовка, очищення, Compaction або робота дзеркала транскриптів
довше конкурують на повільних машинах. Виявлення застарілих блокувань і попередження про максимальний час утримання залишаються окремими політиками.

Порядок застосування очищення бюджету диска (`mode: "enforce"`):

1. Спочатку видаляти найстаріші архівовані, осиротілі транскриптні або осиротілі траєкторні артефакти.
2. Якщо все ще вище за ціль, витісняти найстаріші записи сеансів та їхні файли транскриптів/траєкторій.
3. Продовжувати, доки використання не стане на рівні `highWaterBytes` або нижче.

У `mode: "warn"` OpenClaw повідомляє про потенційні витіснення, але не змінює сховище/файли.

Запуск обслуговування на вимогу:

```bash
openclaw sessions cleanup --dry-run
openclaw sessions cleanup --enforce
```

---

## Сеанси Cron і журнали запусків

Ізольовані запуски Cron також створюють записи сеансів/транскрипти, і для них є окремі засоби керування зберіганням:

- `cron.sessionRetention` (типово `24h`) обрізає старі ізольовані сеанси запусків Cron зі сховища сеансів (`false` вимикає).
- `cron.runLog.maxBytes` + `cron.runLog.keepLines` обрізають файли `~/.openclaw/cron/runs/<jobId>.jsonl` (типово: `2_000_000` байтів і `2000` рядків).

Коли Cron примусово створює новий ізольований сеанс запуску, він очищає попередній
запис сеансу `cron:<jobId>` перед записом нового рядка. Він переносить безпечні
налаштування, як-от параметри thinking/fast/verbose, мітки та явно
вибрані користувачем перевизначення моделі/auth. Він відкидає навколишній контекст розмови, як-от
маршрутизацію channel/group, політику надсилання або черги, підвищення прав, походження та
runtime-прив’язку ACP, щоб свіжий ізольований запуск не міг успадкувати застарілу доставку або
runtime-повноваження зі старішого запуску.

---

## Ключі сеансів (`sessionKey`)

`sessionKey` визначає, у _якому кошику розмови_ ви перебуваєте (маршрутизація + ізоляція).

Поширені шаблони:

- Основний/прямий чат (для кожного агента): `agent:<agentId>:<mainKey>` (типово `main`)
- Група: `agent:<agentId>:<channel>:group:<id>`
- Кімната/канал (Discord/Slack): `agent:<agentId>:<channel>:channel:<id>` або `...:room:<id>`
- Cron: `cron:<job.id>`
- Webhook: `hook:<uuid>` (якщо не перевизначено)

Канонічні правила задокументовано на [/concepts/session](/uk/concepts/session).

---

## Ідентифікатори сеансів (`sessionId`)

Кожен `sessionKey` вказує на поточний `sessionId` (файл транскрипту, який продовжує розмову).

Практичні правила:

- **Скидання** (`/new`, `/reset`) створює новий `sessionId` для цього `sessionKey`.
- **Щоденне скидання** (типово 4:00 AM за локальним часом на хості gateway) створює новий `sessionId` у наступному повідомленні після межі скидання.
- **Завершення через бездіяльність** (`session.reset.idleMinutes` або застарілий `session.idleMinutes`) створює новий `sessionId`, коли повідомлення надходить після вікна бездіяльності. Коли налаштовано і щоденне, і idle-скидання, спрацьовує те, яке завершиться першим.
- **Системні події** (Heartbeat, пробудження Cron, сповіщення exec, службові операції gateway) можуть змінювати рядок сеансу, але не подовжують свіжість щоденного/idle-скидання. Перехід скидання відкидає поставлені в чергу повідомлення системних подій для попереднього сеансу перед побудовою свіжого prompt.
- **Політика батьківського fork** використовує активну гілку Pi під час створення потоку або fork субагента. Якщо ця гілка завелика, OpenClaw запускає дочірній елемент з ізольованим контекстом замість того, щоб завершитись помилкою або успадкувати непридатну історію. Політика розміру автоматична; застарілу конфігурацію `session.parentForkMaxTokens` видаляє `openclaw doctor --fix`.

Деталь реалізації: рішення ухвалюється в `initSessionState()` у `src/auto-reply/reply/session.ts`.

---

## Схема сховища сеансів (`sessions.json`)

Тип значення сховища — `SessionEntry` у `src/config/sessions.ts`.

Ключові поля (не вичерпно):

- `sessionId`: поточний id транскрипту (ім’я файлу виводиться з нього, якщо не задано `sessionFile`)
- `sessionStartedAt`: часова мітка початку поточного `sessionId`; це використовується для
  свіжості щоденного скидання. Застарілі рядки можуть виводити її із заголовка сеансу JSONL.
- `lastInteractionAt`: часова мітка останньої реальної взаємодії користувача/каналу; це використовується для
  свіжості idle-скидання, щоб Heartbeat, Cron і події exec не підтримували сеанси
  активними. Застарілі рядки без цього поля повертаються до відновленого часу початку сеансу
  для свіжості idle.
- `updatedAt`: часова мітка останньої мутації рядка сховища, використовується для списків, обрізання та
  службового обліку. Вона не є авторитетним джерелом для свіжості щоденного/idle-скидання.
- `sessionFile`: необов’язкове явне перевизначення шляху до транскрипту
- `chatType`: `direct | group | room` (допомагає UI та політиці надсилання)
- `provider`, `subject`, `room`, `space`, `displayName`: метадані для позначення груп/каналів
- Перемикачі:
  - `thinkingLevel`, `verboseLevel`, `reasoningLevel`, `elevatedLevel`
  - `sendPolicy` (перевизначення для окремого сеансу)
- Вибір моделі:
  - `providerOverride`, `modelOverride`, `authProfileOverride`
- Лічильники токенів (найкращі зусилля / залежить від провайдера):
  - `inputTokens`, `outputTokens`, `totalTokens`, `contextTokens`
- `compactionCount`: як часто автоматична Compaction завершувалася для цього ключа сеансу
- `memoryFlushAt`: часова мітка останнього скидання пам’яті перед Compaction
- `memoryFlushCompactionCount`: кількість Compaction, коли востаннє виконувався flush

Сховище безпечно редагувати, але Gateway є авторитетним джерелом: він може переписувати або регідратувати записи під час виконання сеансів.

---

## Структура транскрипту (`*.jsonl`)

Транскриптами керує `SessionManager` із `@mariozechner/pi-coding-agent`.

Файл має формат JSONL:

- Перший рядок: заголовок сеансу (`type: "session"`, містить `id`, `cwd`, `timestamp`, необов’язковий `parentSession`)
- Далі: записи сеансу з `id` + `parentId` (дерево)

Важливі типи записів:

- `message`: повідомлення user/assistant/toolResult
- `custom_message`: повідомлення, ін’єктовані розширенням, які _входять_ у контекст моделі (можуть бути приховані з UI)
- `custom`: стан розширення, який _не входить_ у контекст моделі
- `compaction`: збережений підсумок Compaction з `firstKeptEntryId` і `tokensBefore`
- `branch_summary`: збережений підсумок під час навігації гілкою дерева

OpenClaw навмисно **не** «виправляє» транскрипти; Gateway використовує `SessionManager` для їх читання/запису.

---

## Контекстні вікна проти відстежуваних токенів

Важливі дві різні концепції:

1. **Контекстне вікно моделі**: жорсткий ліміт для кожної моделі (токени, видимі моделі)
2. **Лічильники сховища сеансів**: ковзні статистики, записані в `sessions.json` (використовуються для /status і панелей)

Якщо ви налаштовуєте ліміти:

- Контекстне вікно надходить із каталогу моделей (і може бути перевизначене через конфігурацію).
- `contextTokens` у сховищі — це runtime-оцінка/звітне значення; не сприймайте його як сувору гарантію.

Докладніше див. [/token-use](/uk/reference/token-use).

---

## Compaction: що це таке

Compaction підсумовує старішу розмову в збережений запис `compaction` у транскрипті й залишає останні повідомлення без змін.

Після Compaction майбутні ходи бачать:

- Підсумок Compaction
- Повідомлення після `firstKeptEntryId`

Compaction є **постійною** (на відміну від обрізання сеансів). Див. [/concepts/session-pruning](/uk/concepts/session-pruning).

## Межі фрагментів Compaction і поєднання інструментів

Коли OpenClaw розбиває довгий transcript на фрагменти Compaction, він зберігає
виклики інструментів assistant у парі з відповідними записами `toolResult`.

- Якщо поділ за часткою токенів потрапляє між викликом інструмента та його результатом, OpenClaw
  зміщує межу до повідомлення assistant з викликом інструмента, замість того щоб розділяти
  пару.
- Якщо кінцевий блок результату інструмента інакше перевищив би цільовий розмір фрагмента,
  OpenClaw зберігає цей очікуваний блок інструмента й залишає неузагальнений хвіст
  недоторканим.
- Перервані блоки викликів інструментів або блоки з помилками не утримують очікуваний поділ відкритим.

---

## Коли відбувається автоматична Compaction (середовище виконання Pi)

У вбудованому агенті Pi автоматична Compaction запускається у двох випадках:

1. **Відновлення після переповнення**: модель повертає помилку переповнення контексту
   (`request_too_large`, `context length exceeded`, `input exceeds the maximum
number of tokens`, `input token count exceeds the maximum number of input
tokens`, `input is too long for the model`, `ollama error: context length
exceeded` та подібні варіанти, сформовані провайдерами) → compact → повторна спроба.
2. **Підтримання порога**: після успішного ходу, коли:

`contextTokens > contextWindow - reserveTokens`

Де:

- `contextWindow` — контекстне вікно моделі
- `reserveTokens` — запас, зарезервований для промптів + наступного виводу моделі

Це семантика середовища виконання Pi (OpenClaw споживає події, але Pi вирішує, коли виконувати compact).

OpenClaw також може запускати попередню локальну Compaction перед відкриттям наступного
запуску, коли задано `agents.defaults.compaction.maxActiveTranscriptBytes` і
активний файл transcript досягає цього розміру. Це запобіжник за розміром файлу для локальної
вартості повторного відкриття, а не необроблене архівування: OpenClaw усе одно виконує звичайну семантичну Compaction,
і для цього потрібен `truncateAfterCompaction`, щоб стиснутий підсумок міг стати
новим наступним transcript.

Для вбудованих запусків Pi `agents.defaults.compaction.midTurnPrecheck.enabled: true`
додає опціональний запобіжник циклу інструментів. Після додавання результату інструмента й перед
наступним викликом моделі OpenClaw оцінює тиск на промпт, використовуючи ту саму логіку бюджету
попередньої перевірки, що й на початку ходу. Якщо контекст більше не вміщується, запобіжник
не виконує compact усередині хука Pi `transformContext`. Він піднімає структурований
сигнал попередньої перевірки посеред ходу, зупиняє поточне подання промпта й дає
зовнішньому циклу запуску використати наявний шлях відновлення: обрізати завеликі результати інструментів,
коли цього достатньо, або запустити налаштований режим Compaction і повторити спробу. Опцію
вимкнено за замовчуванням, і вона працює як з режимом Compaction `default`, так і з `safeguard`,
зокрема з Compaction `safeguard`, підтриманою провайдером.
Це не залежить від `maxActiveTranscriptBytes`: запобіжник за розміром у байтах працює
перед відкриттям ходу, тоді як попередня перевірка посеред ходу працює пізніше у вбудованому циклі інструментів Pi
після додавання нових результатів інструментів.

---

## Налаштування Compaction (`reserveTokens`, `keepRecentTokens`)

Налаштування Compaction Pi зберігаються в налаштуваннях Pi:

```json5
{
  compaction: {
    enabled: true,
    reserveTokens: 16384,
    keepRecentTokens: 20000,
  },
}
```

OpenClaw також застосовує мінімальний рівень безпеки для вбудованих запусків:

- Якщо `compaction.reserveTokens < reserveTokensFloor`, OpenClaw підвищує його.
- Стандартний мінімум — `20000` токенів.
- Установіть `agents.defaults.compaction.reserveTokensFloor: 0`, щоб вимкнути мінімум.
- Якщо значення вже вище, OpenClaw залишає його без змін.
- Ручний `/compact` враховує явний `agents.defaults.compaction.keepRecentTokens`
  і зберігає точку відсікання нещодавнього хвоста Pi. Без явного бюджету збереження
  ручна Compaction лишається жорсткою контрольною точкою, а перебудований контекст починається з
  нового підсумку.
- Установіть `agents.defaults.compaction.midTurnPrecheck.enabled: true`, щоб запускати
  опціональну попередню перевірку циклу інструментів після нових результатів інструментів і перед наступним викликом
  моделі. Це лише тригер; генерація підсумку все одно використовує налаштований
  шлях Compaction. Це не залежить від `maxActiveTranscriptBytes`, який є
  запобіжником за розміром активного transcript у байтах на початку ходу.
- Установіть `agents.defaults.compaction.maxActiveTranscriptBytes` у значення байтів або
  рядок на кшталт `"20mb"`, щоб запускати локальну Compaction перед ходом, коли активний
  transcript стає великим. Цей запобіжник активний лише тоді, коли
  також увімкнено `truncateAfterCompaction`. Залиште його невстановленим або задайте `0`, щоб
  вимкнути.
- Коли ввімкнено `agents.defaults.compaction.truncateAfterCompaction`,
  OpenClaw переносить активний transcript у стиснутий наступний JSONL після
  Compaction. Старий повний transcript лишається заархівованим і пов’язаним із
  контрольною точкою Compaction, замість того щоб перезаписуватися на місці.

Чому: залишити достатньо запасу для багатокрокового «обслуговування» (наприклад, записів пам’яті), перш ніж Compaction стане неминучою.

Реалізація: `ensurePiCompactionReserveTokens()` у `src/agents/pi-settings.ts`
(викликається з `src/agents/pi-embedded-runner.ts`).

---

## Підключувані провайдери Compaction

Plugin-и можуть реєструвати провайдера Compaction через `registerCompactionProvider()` в API Plugin. Коли `agents.defaults.compaction.provider` задано як id зареєстрованого провайдера, розширення safeguard делегує узагальнення цьому провайдеру замість вбудованого конвеєра `summarizeInStages`.

- `provider`: id зареєстрованого Plugin провайдера Compaction. Залиште незаданим для стандартного LLM-узагальнення.
- Установлення `provider` примусово вмикає `mode: "safeguard"`.
- Провайдери отримують ті самі інструкції Compaction і політику збереження ідентифікаторів, що й вбудований шлях.
- Safeguard усе одно зберігає контекст суфікса нещодавнього ходу та розділеного ходу після виводу провайдера.
- Вбудоване узагальнення safeguard повторно дистилює попередні підсумки з новими повідомленнями
  замість того, щоб дослівно зберігати весь попередній підсумок.
- Режим Safeguard вмикає аудити якості підсумків за замовчуванням; задайте
  `qualityGuard.enabled: false`, щоб пропустити поведінку повторної спроби в разі некоректно сформованого виводу.
- Якщо провайдер дає збій або повертає порожній результат, OpenClaw автоматично повертається до вбудованого LLM-узагальнення.
- Сигнали переривання/тайм-ауту перекидаються повторно (не поглинаються), щоб поважати скасування викликачем.

Джерело: `src/plugins/compaction-provider.ts`, `src/agents/pi-hooks/compaction-safeguard.ts`.

---

## Поверхні, видимі користувачу

Ви можете спостерігати стан Compaction і сеансу через:

- `/status` (у будь-якому чат-сеансі)
- `openclaw status` (CLI)
- `openclaw sessions` / `sessions --json`
- Докладний режим: `🧹 Auto-compaction complete` + кількість Compaction

---

## Тихе обслуговування (`NO_REPLY`)

OpenClaw підтримує «тихі» ходи для фонових завдань, де користувач не має бачити проміжний вивід.

Угода:

- Assistant починає свій вивід із точного тихого токена `NO_REPLY` /
  `no_reply`, щоб позначити «не доставляти відповідь користувачу».
- OpenClaw видаляє/пригнічує це на рівні доставки.
- Пригнічення точного тихого токена не чутливе до регістру, тож `NO_REPLY` і
  `no_reply` обидва враховуються, коли весь payload — це лише тихий токен.
- Це лише для справді фонових ходів без доставки; це не скорочення для
  звичайних дієвих запитів користувача.

Починаючи з `2026.1.10`, OpenClaw також пригнічує **потокове передавання чернетки/набору тексту**, коли
частковий фрагмент починається з `NO_REPLY`, тож тихі операції не розкривають частковий
вивід посеред ходу.

---

## Перед-Compaction «скидання пам’яті» (реалізовано)

Мета: перед автоматичною Compaction запустити тихий агентний хід, який записує довговічний
стан на диск (наприклад, `memory/YYYY-MM-DD.md` у робочому просторі агента), щоб Compaction не могла
стерти критичний контекст.

OpenClaw використовує підхід **скидання перед порогом**:

1. Відстежувати використання контексту сеансу.
2. Коли воно перетинає «м’який поріг» (нижче порога Compaction Pi), запустити тиху
   директиву «запиши пам’ять зараз» для агента.
3. Використати точний тихий токен `NO_REPLY` / `no_reply`, щоб користувач не бачив
   нічого.

Конфігурація (`agents.defaults.compaction.memoryFlush`):

- `enabled` (за замовчуванням: `true`)
- `model` (опціональне точне перевизначення провайдера/моделі для ходу скидання, наприклад `ollama/qwen3:8b`)
- `softThresholdTokens` (за замовчуванням: `4000`)
- `prompt` (повідомлення користувача для ходу скидання)
- `systemPrompt` (додатковий системний промпт, доданий для ходу скидання)

Примітки:

- Стандартні prompt/system prompt містять підказку `NO_REPLY`, щоб пригнітити
  доставку.
- Коли `model` задано, хід скидання використовує цю модель без успадкування
  ланцюжка fallback активного сеансу, тож локальне обслуговування не переходить непомітно
  на платну розмовну модель.
- Скидання виконується один раз на цикл Compaction (відстежується в `sessions.json`).
- Скидання виконується лише для вбудованих сеансів Pi (CLI-бекенди його пропускають).
- Скидання пропускається, коли робочий простір сеансу доступний лише для читання (`workspaceAccess: "ro"` або `"none"`).
- Див. [Пам’ять](/uk/concepts/memory) щодо структури файлів робочого простору та шаблонів запису.

Pi також надає хук `session_before_compact` в API розширень, але логіка скидання OpenClaw
сьогодні живе на боці Gateway.

---

## Контрольний список усунення несправностей

- Неправильний ключ сеансу? Почніть з [/concepts/session](/uk/concepts/session) і підтвердьте `sessionKey` у `/status`.
- Невідповідність сховища й transcript? Підтвердьте хост Gateway і шлях до сховища з `openclaw status`.
- Надмірні Compaction? Перевірте:
  - контекстне вікно моделі (занадто мале)
  - налаштування Compaction (`reserveTokens` занадто високий для вікна моделі може спричиняти ранішу Compaction)
  - роздування результатів інструментів: увімкніть/налаштуйте обрізання сеансу
- Тихі ходи протікають? Підтвердьте, що відповідь починається з `NO_REPLY` (точний токен, нечутливий до регістру), і що ви на збірці, яка містить виправлення пригнічення streaming.

## Пов’язане

- [Керування сеансами](/uk/concepts/session)
- [Обрізання сеансу](/uk/concepts/session-pruning)
- [Рушій контексту](/uk/concepts/context-engine)
