Продолжение серии. Предыдущие части: [антирегрессионный сетап](https://habr.com/ru/articles/1013330/) (топ-5 за сутки), [иерархический контекст](https://habr.com/ru/articles/1024878/)

Если вы плотно сидите на Claude Code хотя бы месяц-два — у вас в ~/.claude/ уже свалка. Вы об этом скорее всего не знаете, потому что Claude Code не показывает что там накопилось. Я тоже не знал, пока не заглянул.

У меня нашлось: 847 старых сессий на 3.2 ГБ. Правила permissions в пяти разных файлах settings.json — 40% дублировались, 30% не использовались с марта. CLAUDE.md на 312 строк, половина из которых противоречила memory-файлам. Три хука, один из которых молча не работал две недели. И поверх всего этого — Auto Dream, новая фича Anthropic, где Claude между сессиями сам переписывает вашу проектную память. Агрессивно. Без отката. Без показа что именно удалил.

Рекомендация самого Anthropic: «сделайте бэкап ~/.claude/ перед включением». Инструмента для этого бэкапа в экосистеме не было. Теперь есть.

```

uv tool install cc-janitor

```

cc-janitor — детерминированный TUI/CLI для аудита и очистки всего что накапливается в ~/.claude/. Python 3.11+, MIT, 202 теста, билингвальный интерфейс. Дальше расскажу что конкретно он делает и как это работает.

## Сколько стоит ваш контекст

Это то, с чего стоит начать — и то, что удивляет больше всего. Ваши CLAUDE.md, memory-файлы и подключённые скиллы загружаются в контекст при каждом запросе к Claude Code. cc-janitor считает суммарный размер в байтах, токенах и долларах по ставке Opus:

```

cc-janitor context cost

```

Типичный результат для активного пользователя: 15–40K токенов «бесплатного» контекста, которые вы оплачиваете при каждом обращении. С миллионным окном Opus 4.7 это терпимо. С 200K Sonnet — уже ощутимая часть бюджета. Многие не подозревают что их CLAUDE.md на 300 строк стоит дороже чем сам промпт.

Здесь же можно посмотреть иерархию CLAUDE.md (глобальный → проектный → вложенный) и найти дубликаты между CLAUDE.md и memory-файлами:

```

cc-janitor context show

cc-janitor context find-duplicates

```

## Протухшие permissions

В Claude Code правила разбросаны по пяти слоям: глобальный settings.json, глобальный settings.local.json, проектный settings.json, проектный settings.local.json и ~/.claude.json с approvedTools. Со временем там накапливается мусор — дубликаты (одно правило поглощено другим), конфликты, и правила которые вы добавили три месяца назад для проекта, который давно закрыт.

```

cc-janitor perms audit

```

Одна команда показывает всё: протухшие правила (нет совпадений в транскриптах за 90 дней), точные дубликаты, поглощённые правила, конфликты. Чистка — с бэкапом перед каждой записью:

```

CC_JANITOR_USER_CONFIRMED=1 cc-janitor perms dedupe

CC_JANITOR_USER_CONFIRMED=1 cc-janitor perms prune --older-than 90d

```

Если что-то пошло не так — cc-janitor undo --apply откатит последнее действие. Бэкапы лежат в ~/.cc-janitor/backups/ и никогда не удаляются автоматически.

## Сессии на гигабайты

~/.claude/projects/ растёт незаметно. Через пару месяцев — несколько гигабайт. cc-janitor видит все сессии, показывает превью, ищет по содержимому:

```

cc-janitor session list --older-than 90d

cc-janitor session search "payment"

```

Удаление — soft-delete в корзину на 30 дней. Всегда с --dry-run для превью:

```

CC_JANITOR_USER_CONFIRMED=1 cc-janitor session prune --older-than 90d --dry-run

CC_JANITOR_USER_CONFIRMED=1 cc-janitor session prune --older-than 90d

```

Восстановить из корзины: cc-janitor trash restore <id>.

## Память: дубликаты и противоречия

Claude Code создаёт memory-файлы автоматически. Со временем они начинают дублироваться и противоречить друг другу — особенно если включён Auto Dream, который их перезаписывает.

cc-janitor парсит frontmatter, классифицирует файлы (user / feedback / project / reference), находит кросс-файловые дубликаты строк и противоречащие записи:

```

cc-janitor memory list

cc-janitor memory find-duplicates

cc-janitor memory show <name>

```

## Хуки, которые молча сломались

Хуки Claude Code не пишут логов. Если хук перестал работать — вы узнаете об этом когда заметите что коммиты проходят без тестов или что Stop-hook не перезагружает память. Может пройти неделя.

cc-janitor находит хуки по всем 4 слоям настроек, валидирует их схему и умеет симулировать 9 типов событий с реалистичными payload — без запуска реального Claude Code:

```

cc-janitor hooks validate

cc-janitor hooks simulate PreToolUse

cc-janitor hooks simulate Stop

```

Для длительной отладки — логирование каждого вызова хука в ~/.cc-janitor/hooks-log/:

```

CC_JANITOR_USER_CONFIRMED=1 cc-janitor hooks enable-logging

```

## Auto Dream: наблюдение и откат

Это то, ради чего многим стоит поставить cc-janitor даже если остальное не актуально.

Auto Dream — новая фича Anthropic, где Claude между сессиями переписывает вашу проектную память через LLM. Проблема не в том что он это делает — консолидация памяти полезна. Проблема в том что нет отката, нет pre-flight check, и нет показа что именно изменилось. Четыре открытых бага в upstream Claude Code подтверждают: Dream молча удаляет полезные записи (#47959), зависший .consolidate-lock молча отключает будущие циклы (#50694), нет лога что Dream сделал (#38493), нет способа узнать переключился ли флаг autoDreamEnabled (#38461).

cc-janitor решает все четыре. Фоновый демон поллит .consolidate-lock и снимает снапшоты:

```

CC_JANITOR_USER_CONFIRMED=1 cc-janitor watch start --dream

```

Дальше — наблюдение и откат:

```

cc-janitor dream history # список всех циклов Dream

cc-janitor dream diff <pair_id> # что именно Dream изменил

CC_JANITOR_USER_CONFIRMED=1 cc-janitor dream rollback <pair_id> --apply

```

dream doctor — 10 проверок здоровья: зависший lock, состояние флага, время последнего цикла, размер MEMORY.md, дубликаты, противоречия, наличие .dream-log.md:

```

cc-janitor dream doctor

```

Метрики гигиены памяти — сколько строк в MEMORY.md, плотность относительных дат (признак что Dream записал временные данные как постоянные), кросс-файловые дубликаты, противоречащие пары:

```

cc-janitor stats sleep-hygiene

```

## Автоматическая уборка по расписанию

Шесть шаблонов для cron (Linux/Mac) и Task Scheduler (Windows). Первый запуск каждого шаблона — всегда dry-run. Scheduled-запуски ограничены hard cap (200 мутаций по умолчанию) — защита от runaway cron:

```

CC_JANITOR_USER_CONFIRMED=1 cc-janitor schedule add perms-prune

CC_JANITOR_USER_CONFIRMED=1 cc-janitor schedule add trash-cleanup

cc-janitor schedule promote perms-prune # перевести в боевой режим

```

## Модель безопасности

Каждая мутирующая команда требует переменную окружения CC_JANITOR_USER_CONFIRMED=1 — без неё инструмент откажется работать. Read-only команды свободны всегда. Удалённое уходит в корзину на 30 дней. Перед каждой правкой settings.json — timestamped бэкап. Каждое действие пишется в append-only JSONL audit log. Последнее действие откатывается через cc-janitor undo --apply. Dream-циклы откатываются через dream rollback.

В версии 0.3.2 был исправлен критический баг: TUI ранее обходил env-var gate через os.environ.setdefault — теперь исправлено через scoped context manager. Упоминаю это намеренно — если safety model сломается так что данные потеряются, это P0. Safety model здесь — это весь продукт.

## Как попробовать без риска

Эти команды только читают. Ничего не меняют:

```

cc-janitor # TUI с 8 вкладками

cc-janitor perms audit # что протухло в permissions

cc-janitor context cost # стоимость контекста за запрос

cc-janitor dream doctor # здоровье Auto Dream

cc-janitor stats sleep-hygiene # гигиена памяти

```

Установка:

```

uv tool install cc-janitor

# или

pipx install cc-janitor

```

202 теста. CI на Linux/macOS/Windows. Python 3.11+. MIT. Билингвальный интерфейс — F2 в TUI для переключения языка, --lang ru в CLI.

## Полезные ссылки

- [Документация Claude Code: Memory](https://code.claude.com/docs/en/memory) — как работает Auto Dream

- [Issue #47959](https://github.com/anthropics/claude-code/issues/47959) — Auto Dream молча удаляет полезные записи памяти

- [Issue #50694](https://github.com/anthropics/claude-code/issues/50694) — зависший .consolidate-lock молча отключает Auto Dream

- [Matt Pocock’s skills repo](https://github.com/mattpocock/skills) — каноническая reference для Claude Code скиллов

- [Simon Willison’s Claude Code TILs](https://til.simonwillison.net/claude-code/) — практическая база знаний по Claude Code

Комментарии (0)