Imported from kgnvsk/claude-tg-starter (
claude/home/.claude/skills/backup-recovery/SKILL.md). Install upstream withnpx skills add kgnvsk/claude-tg-starter --skill backup-recovery. Copyright stays with the author.
Бекап агента без секретів
Використовуй ~/bin/agent-full-backup, а не власний tar/curl script. Старі
agent-backup, agent-github-backup і vault-sync зберігають лише частину
даних без секретів. Їхній успіх не доводить наявність нового архіву.
Обов’язкова політика — no-secrets-v1: паролі, токени, OAuth credentials,
cookies, сесії авторизації та приватні ключі не включаються навіть у
зашифрованому вигляді. Шифрування не дозволяє обходити цю вимогу.
Зберігай знання, vault, підтримувані текстові переписки, навички, власний код,
документи та медіафайли; інтеграції після відновлення підключаються заново.
Нові ключі зберігай тільки у захищеному .env або штатному сховищі доступів.
У пам’яті залишай назву сервісу, призначення доступу та спосіб підключення.
Helper виключає credential stores, браузерні профілі, .ssh, .git, власні
backup-токен і recovery key, старі архіви та непідтримувані бінарні файли.
Підтримувані UTF-8 тексти й значення SQLite очищаються; бінарні BLOB та
непідтримувані вкладення пропускаються з причиною у звіті. Звичайні документи
та медіафайли зберігаються без зміни байтів, якщо перевірка не знайшла
відомого ключа або вкладеного сховища доступів. OCR не виконується: не
зберігай паролі на зображеннях або у сканах. Виявлення довільного
секрету в природному тексті не є безпомилковим: не називай перевірку доказом
відсутності всіх можливих секретів. Не додавай обхід фільтрації чи сирий tar.
Підключення звичайним діалогом
Власник пише «хочу підключити бекап» (також підтримуються російські та
англійські формулювання). Кнопки, slash-команди й термінал не потрібні.
Ці повідомлення обробляє telegram-backup-chat.ts перед історією, чергою
завдань та моделлю, з exact-owner/private-chat перевіркою.
Основний шлях: agent-backup-github-login запускає офіційний gh auth login --web в окремому захищеному GH_CONFIG_DIR цього агента, надсилає власникові
посилання github.com/login/device та одноразовий код. Власник підтверджує
вхід на GitHub, а helper сам створює приватний репозиторій з README.
Код і секрети не передаються моделі. Чужий глобальний gh login не використовується.
GitHub CLI — обов’язковий компонент сервера для обох рушіїв.
Запасний шлях «підключити бекап вручну»: обробник просить адресу приватного репозиторію з README і fine-grained PAT лише для нього, Contents read/write. Транспорт підтверджує видалення повідомлення до передавання токена через stdin helper-у. Якщо видалення не підтверджено, токен не використовується. Токен і файли авторизації gh зберігаються з правами 0600 поза бекапом.
Далі транспорт надсилає файл ключа відновлення прямо власникові. Після
текстового підтвердження «ключ збережено» запускається agent-full-backup enable поза моделлю. Повідомлення про готовність надсилається лише після
перевіреного завантаження. Ключ треба зберегти окремо від сервера та GitHub.
Якщо ти бачиш сам токен у контексті моделі, захищений intake не спрацював: не повторюй його й не запускай команди з ним, попроси відкликати токен та оновити транспорт. Не приймай секрети документами, фото чи через групи. Не вигадуй кнопок або окремих команд для власника.
Для діагностики використовуй ~/bin/agent-full-backup status --json:
configured, enabled, fresh, lastSuccessAt, lastCopyMatchesPolicy. Помилка
або setup-required означає незавершену настройку. Для інсталяції під
спільним Unix-користувачем завжди використовуй точний home агента.
Наступні копії робить скрипт за розкладом, не частіше ніж раз на 12 годин, без запитів до моделі. Ціль зберігання — 14 останніх перевірених копій цього агента; якщо GitHub забороняє видалення immutable Releases, старі копії можуть залишатися довше. Публікуються лише зашифровані архіви в Releases приватного репозиторію.
recovery-key.txt, github-token і доступ GitHub CLI у ~/.config/gh/
належать до секретів, а не до даних для відновлення. Не копіюй їх в інші
каталоги для включення до архіву. Тимчасові копії ключа й токена після
передачі/приймання прибери. Не роби репозиторій public і не послаблюй SSH
або права користувачів заради бекапу.
Збій або відновлення
Перевір status --json: lastError, lastAttemptAt, lastSuccessAt. Після
виправлення доступу/строку токена/місця запусти run і звір квитанцію.
Не видаляй попередні копії для приховування помилки. connect дозволяє
оновити токен того самого репозиторію; заміна репозиторію потребує окремої
погодженої міграції, щоб не втратити попередню історію.
Відновлення: завантаж усі частини однієї успішної Release, квитанцію і
agent-full-restore; керуйся його --help та guide-uk.md.
Розшифровуй у новий порожній каталог, перевір усі SHA-256 і SQLite. До
запуску переглянь очищені unit/cron та reconnect-inventory.json: він
містить категорії інтеграцій і розташування конфігурації, без секретів.
Якщо вказаний systemInventory, переглянь і system/reconnect-inventory.json.
Порожній scopes не означає відсутності потрібних дозволів.
- Встанови потрібний runtime і залежності під точним користувачем; перенеси перевірені дані та код. Це не образ усього сервера.
- Власник заново авторизує Claude/Codex офіційним login/device flow; Telegram bot token додає захищеним інсталятором. ID власника та username звір окремо, до запуску бота.
- За inventory і guide-uk.md підключи Google OAuth, GitHub, Vercel та потрібні API через їхні наявні навички/захищені helpers. Створи нові токени з мінімальним доступом; не проси паролі в чаті.
- Віднови лише потрібні розклади після перевірки відповідної інтеграції, перевір її read-only дією, потім одну відповідь бота в особистому чаті. Не запускай другого poller, якщо попередній ще працює.
- Знову налаштуй backup-доступ і збереження ключа для наступних копій.
Повторна авторизація обов’язкова: успішне розшифрування не означає, що інтеграції вже працюють. Інші користувачі, сервіси та агенти поза scope.