Коротко
Автор связал файловую память Claude Code между двумя компьютерами с помощью приватного GitHub-репозитория и хуков Bash. Помимо синхронизации, статья объясняет, как организовать заметки так, чтобы агент читал только нужные сведения, и какие ошибки учесть при настройке.
Контекст
Автор работает с Claude Code и около двух месяцев ведёт отдельное хранилище личных и проектных заметок в Markdown, используя Obsidian только как средство просмотра. К моменту описания в нём было 114 заметок и 367 связей. Встроенная память Claude Code не решала задачу целиком: она привязана к машине и проекту, а её индекс загружается в каждую сессию и рассчитан на краткие указатели, а не на большую базу.
Главное
- Отдельное хранилище дополняет встроенную память Claude Code: последняя находится в
~/.claude/projects/<проект>/memory/, привязана к машине и проекту, аMEMORY.mdподгружается в каждую сессию. - Внешняя база содержит обычные Markdown-файлы; Obsidian нужен автору для просмотра, но не агенту. В ней было 114 заметок и 367 связей.
- Главный файл не перечисляет всё содержимое, а направляет по запросу к конкретным заметкам — например, к профилю, карте проектов, инфраструктуре или журналу по датам.
- Для связей между заметками использовались Obsidian-вики-ссылки
[[...]]: обычные пути в обратных кавычках не отображались в графе; однажды без связей оказались 25 из 104 заметок. - Скрипт запускается на
SessionStartиStop: старт выполняет clone или pull, остановка — commit, pull с rebase и push при наличии локальных коммитов. - В конфигурации предусмотрены
--autostash, отключение интерактивной авторизации, тайм-ауты и чтение stdin; сообщения о свежести базы передаются агенту при старте, а ошибки отправки показываются пользователю черезsystemMessage. - Первый коммит содержал 105 файлов и занимал 0,86 МБ; коммиты помечаются именем устройства и временем.
- Obsidian Git и хуки одновременно вызвали конфликт из-за разных стратегий интеграции — merge против rebase; автору пришлось исправлять его вручную и отправлять merge-коммит.
- В
.gitignoreдобавлены.obsidian/workspace*.json,.trash/, системные файлы и.obsidian/plugins/*/data.json, поскольку данные плагинов могут содержать ключи сторонних API. - Для заметок с абсолютными путями автор добавил пояснение, на каком компьютере они действуют, и отдельную заметку для ноутбука.
Как сделано
Автор оставил встроенную память Claude Code для коротких ссылок на внешнее хранилище, а само хранилище разместил в приватном репозитории GitHub. Главный файл служит таблицей маршрутизации: по типу запроса агент выбирает одну или две заметки, а не загружает весь архив. Глобальный ~/.claude/CLAUDE.md задаёт правила чтения и записи: обращаться к заметкам точечно, использовать уже записанные факты и обновлять подходящую заметку после работы с абсолютными датами.
Синхронизацию выполняет Bash-скрипт, подключённый в ~/.claude/settings.json к хукам SessionStart и Stop. При старте он клонирует репозиторий или выполняет git pull --rebase --autostash; после ответа агента коммитит изменения с именем компьютера и временем, затем подтягивает удалённые изменения и отправляет свои. Скрипт отключает интерактивные запросы Git (GIT_TERMINAL_PROMPT=0, GCM_INTERACTIVE=never), ограничивает время Git-команд через timeout, вычитывает входной JSON из stdin и сообщает о состоянии синхронизации. В .gitignore исключены, среди прочего, файлы данных плагинов Obsidian, где могут храниться API-ключи.
Результаты
Схема автоматически синхронизировала заметки между настольным ПК и ноутбуком: на новом компьютере хранилище скачивалось при первой сессии. Первый коммит включал 105 файлов размером 0,86 МБ. Автор сообщает, что агент перестал повторно спрашивать о его рабочем стеке и мог использовать историю проектов; накопленные факты также помогли собирать и обновлять резюме. За длинный вечер может появляться около десяти автоматических коммитов.
Ограничения
Это личный опыт одного пользователя, без сравнительных измерений качества ответов, надёжности или экономии времени. Синхронизация зависит от сети и GitHub; при конфликте или отсутствии сети агент может работать с локальной копией, а разбор некоторых конфликтов требует ручного вмешательства. Одновременное использование двух механизмов синхронизации — Obsidian Git и хуков — привело к конфликту, поэтому автор рекомендует оставить один канал. Пути к дискам могут различаться между компьютерами, а сами заметки требуют контроля актуальности и противоречий. Приватный репозиторий не является защищённым хранилищем секретов: даже указания на расположение токенов могут быть чувствительными.
Что взять себе
- Разделяйте краткую встроенную память и крупное внешнее хранилище: индексируйте заметки и направляйте агента к релевантным файлам вместо загрузки всего архива.
- Автоматизация синхронизации не заменяет правила ведения базы: задайте точечное чтение, обновление заметок и абсолютные даты.
- Не запускайте одновременно несколько синхронизаторов одного Git-репозитория; заранее исключите из коммитов файлы, где могут находиться секреты.
- Проверяйте, что агент действительно записал новые факты, и периодически ищите устаревшие или противоречивые сведения.
Читать оригинал, если…
Откройте оригинал, если хотите скопировать Bash-скрипт и точную конфигурацию хуков Claude Code или изучить таблицу маршрутизации и детали устранения конфликтов.