Четыре слота тревоги, три режи... Заметка
DEV Community на русском

Четыре слота тревоги, три режима сбоя: создание ночного слива, который переживет сон, гонки и тайм-ауты

Разговоры Claude Code, по своей сути, не имеют постоянной памяти, что вынуждает пользователей постоянно повторять контекст. Отсутствие долговременной памяти снижает продуктивность, особенно при управлении несколькими проектами. Для решения этой проблемы автор разработал ночной скрипт, который экспортирует логи Claude Code в хранилище Obsidian. Этот автоматизированный процесс устраняет необходимость ручного суммирования, гарантируя сохранение знаний независимо от силы воли пользователя. Obsidian был выбран из-за локальных файлов Markdown, контроля версий Git и возможностей связывания, что создает эффективный внешний мозг.Разработка скрипта столкнулась с тремя критическими сбоями, которые потребовали надежной трехслойной конструкции. Проблема зависания при переходе в спящий режим возникала, когда Mac засыпал в середине выполнения скрипта, оставляя обработку незавершенной. Гонка двойного выполнения происходила, когда запланированный запуск скрипта пересекался с ручным, вызывая конфликты Git. Наконец, сбой по времени возникал, когда обработка обширных логов превышала временной лимит скрипта.Эти сбои привели к внедрению системы многократного повторного запуска, caffeinate для предотвращения сна и идемпотентных повторных попыток с использованием маркеров шагов. Эта конструкция гарантирует, что обработка возобновляется с того места, где она была прервана, даже если она была прервана. Система теперь имеет четырехслойную архитектуру, начиная с логов сеансов Claude и переходя через необработанные файлы разговоров, хранилище Obsidian и, наконец, частный репозиторий Git.Несколько запланированных слотов для скрипта обеспечивают избыточность, позволяя последующим запускам подхватывать любые незавершенные задачи. Caffeinate используется для предотвращения сна системы, а каталог блокировки предотвращает одновременное выполнение скриптов. Идемпотентные повторные попытки достигаются путем маркировки завершенных шагов, позволяя скрипту пропускать уже обработанные сегменты. Это гарантирует, что ежедневный процесс приема данных, даже при сбоях, в конечном итоге завершится.Конфигурация launchd plist и корректировки PATH, включая обнаружение nvm node, обеспечивают надежную работу скрипта в его минимальной среде выполнения. Доступ к полному диску для /bin/bash проверяется на раннем этапе, чтобы предотвратить тихие сбои из-за защитных мер конфиденциальности macOS. Скрипт использует функцию run_to с утилитой GNU coreutils timeout для гарантированного завершения процесса, даже если первоначальные сигналы игнорируются. Эта комплексная настройка создает устойчивую внешнюю память для разговоров Claude Code.