Память и навыки Claude Code получили git-историю в memsaga

Утилита memsaga, которую 10 ноября показали на Hacker News, в конце каждого ответа Claude Code копирует изменённые файлы автопамяти, CLAUDE.md и навыков в ваш собственный git-репозиторий. При первом запуске она восстанавливает и прошлую историю из транскриптов сессий, но лишь на тот срок, что Claude Code их хранит: по умолчанию 30 дней. На одном аккаунте и одном компьютере почти ту же историю, по словам автора, даёт связка из git в ~/.claude и хука Stop, а утилита закрывает то, что эта связка не тянет: второй аккаунт, вторую машину и правки памяти, сделанные на GitHub.
Зачем это нужно, автор объясняет в README проекта на GitHub. Файлы автопамяти лежат только на той машине, где их записали, и своей истории не имеют. Следующая сессия может переписать воспоминание, две правки одного файла за день не оставляют следа от первой, а чистку, которая слила десять воспоминаний в три, не отменить. CLAUDE.md внутри репозитория версионируется вместе с ним, но глобальный ~/.claude/CLAUDE.md и файлы памяти нет. Статус у проекта ранний: автор каждый день пользуется им на macOS, Linux проверен в CI и в контейнере, а источник данных пока один, Claude Code. Следующим в планах стоит Codex с его памятью в ~/.codex/memories/, AGENTS.md и навыками.
Свой хук или memsaga
Самодельный вариант в README расписан честно: git init в ~/.claude, .gitignore, который пропускает только память, CLAUDE.md и навыки, и хук Stop с коммитом в конце каждого ответа. История при этом живёт в той же папке, которую читает Claude, поэтому git checkout, git clean или конфликт слияния меняют рабочие файлы агента. А правка с другой машины приходит через git pull, и при конфликте маркеры git оседают прямо в файле, который Claude прочитает в следующей сессии.
memsaga держит копию отдельно, по умолчанию в папке memories рядом с вашим кодом, например ~/git/memories. Claude Code по-прежнему пишет в свои файлы на месте, а утилита трогает живые файлы только при откате или когда приходит правка извне. Каждый коммит подписан разговором: в теме стоит название сессии, в теле строки Session:, Cwd: и Account:, и claude --resume открывает этот разговор заново, пока Claude Code его хранит. Несколько аккаунтов уживаются в одном репозитории, каждый в своём поддереве вроде claude/ и claude-work/.
Правку, сделанную в веб-редакторе GitHub, с телефона или на другой машине, memsaga сливает в живой файл и сохраняет изменения обеих сторон. Если обе стороны тронули одни и те же строки, файл остаётся как был, и утилита сообщает о конфликте. Claude получает короткое уведомление с изменёнными строками, чтобы не отвечать по копии, загруженной раньше.
Что решить до memsaga init
Команда memsaga init --dry-run ничего не пишет: она показывает, где появится репозиторий, что будет импортировано и сколько истории удастся восстановить. Проекты, которые не должны попасть в историю, например клиентские, исключаются ключом exclude_projects в ~/.config/memsaga/config.toml до первого init. Исключение задним числом остановит новые коммиты, но уже записанное останется в истории.
Репозиторий стоит держать приватным: в памяти оседает всё, что Claude узнал за работой, а memsaga не ищет секреты в том, что копирует. По умолчанию в него не попадают ~/.claude.json с логином, учётные данные и транскрипты, settings.json включается только по вашему желанию. Флаг --skills у memsaga install записывает SKILL.md в папки memsaga-history, companion-docs и companions и заменяет SKILL.md в одноимённых папках, так что свой навык с таким именем нужно сначала переименовать. Тем, кто запускает Claude Code с CLAUDE_CONFIG_DIR, init нужно выполнять там, где переменная задана, иначе эта папка в список не попадёт.
Восстановленная история упирается в срок жизни транскриптов, и его меняет параметр cleanupPeriodDays в settings.json. Коммиты остаются в любом случае. Ставится утилита готовым бинарником для Mac на Apple silicon и Intel и для Linux на x86_64 и arm64: скриптом в ~/.cargo/bin, через brew install grimmerk/tap/memsaga или через cargo с Rust 1.88 и новее. Можно поручить установку самому Claude Code готовым промптом: в тестовом прогоне автора запросов разрешений не было ни одного в авторежиме и 11 в ручном. Лицензия MIT.
Откат и цена синхронизации
memsaga restore сначала показывает diff и спрашивает, а уже потом пишет файл. Вариант --all --at <коммит> возвращает все отслеживаемые файлы к состоянию на тот момент: перезаписывает отличающиеся и ничего не удаляет, а лишние файлы с --prune переезжают в .git/memsaga/stale/. С такой страховкой большую чистку памяти уже можно доверить самому Claude: автор предлагает время от времени запускать сессию с просьбой слить дубликаты, выкинуть устаревшее и привести MEMORY.md в соответствие с файлами, а потом смотреть её правки через git log -p --grep 'Session: <id>'.
Ход, в котором ничего не поменялось, стоит только проверки времени изменения файлов, ход с правками обходится копией и коммитом в фоне, меньше чем за секунду. Пуш идёт в конце хода не чаще раза в десять минут, а при завершении сессии сразу. Проверка, не сдвинулся ли репозиторий на GitHub, занимает около полусекунды, и на старте сессии Claude Code её ждёт. Перед записью в отслеживаемый файл проверка повторяется, если прошлой больше десяти секунд, и Write, который затёр бы только что пришедший текст, отклоняется с просьбой перечитать файл. Если хук сломается, ход он не остановит: ошибки уходят в лог и в memsaga status.
На второй машине последовательность другая: склонировать репозиторий по тому же пути, скопировать конфиг и выполнить memsaga restore --all --at HEAD. Запускать там memsaga init автор прямо запрещает: команда закоммитит пустое состояние поверх вашей истории.
Дальше
MCP Apps в Claude: панель, встроенные сайты и инструменты
Встроенный сайт в MCP App может отлично работать на тестах и так и не дойти до пользователей. В каталоге Claude встроенные сайты достаются только коннекторам с листингом Verified, а установившие из Community их не видят. Вы бы ждали статуса Verified или выпустили приложение в Community без этих функций?
Читайте также
- Claude Soul: система обучения для Claude Code
- intent-lens объясняет команды Claude Code до их запуска
- Codedict срезал токены Claude Code на 63%, а счёт на 26%
- Дерево файлов покажет, что читает и правит Claude Code
- lcc сжимает сессии Claude Code, не пересказывая их
- С плагином catnap Claude Code сжимает контекст после задачи
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите, чтобы оставить комментарий. Он появится после модерации.

