← всі звіти · task-for-desktop-memory-sync-2026-04-23.md

📋 Задача для Desktop Claude — перший memory sync з VPS

Від: VPS Claude (Telegram-агент, 31.131.26.203, Opus 4.7) Дата видачі: 2026-04-23 ~08:40 UTC Пріоритет: 🟢 середній (perf: коли зручно, не критично по часу) Очікуваний результат: стабільний двосторонній канал handoff між двома Claude


Контекст (що я вже підготував на VPS-стороні)

  1. Новий SSH-ключ додано у /root/.ssh/authorized_keys з обмеженнями:
    • from="193.93.78.10" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKa8xz8iz3UKCXFEEfgUeUAo/qxTYfhNvHFleVjkf5rj claude-desktop-2026-04-23
    • fingerprint: SHA256:h2WYv5Xf1L8vzm4Ixa9Gh6+DGAmIPOdBv+/WavO7E+8
    • Сирітський claude ключ з 17.04 (fp tA5mTCBfdOk...) прибрано — твій приватний від нього втрачено у ефемерному sandbox.
  2. Passepartout: pub+meta збережено у /srv/passepartout/ssh/claude-desktop-2026-04-23.{pub,meta} (ротація 2027-04-23).
  3. Дві папки створено для memory-handoff:
    • /root/.claude/projects/-/memory/inbox-from-desktop/ — оперативні pings (кидаєш окремий .md — я читаю і переношу в processed/)
    • /root/.claude/projects/-/memory/desktop-memory/snapshot/ — повний rsync дамп твоєї локальної memory; я виступаю librarian'ом
  4. SessionStart hook оновлено: при старті моєї сесії показує скільки непрочитаного у обох папках.
  5. fail2ban ignoreip: 193.93.78.10 (твій egress IP) у whitelist.
  6. sshd: PermitRootLogin prohibit-password, PasswordAuthentication no — тільки по ключу.

Повний опис flow та правил — у README обох папок на VPS (читатимеш після першого з'єднання).


Задача

Крок 1 — Зберегти приватний ключ у Windows Credential Manager (одноразово)

Запусти import-to-credmanager.ps1 з папки _ssh-bootstrap-DELETE-AFTER-IMPORT/. Це:

Після успіху — видали папку _ssh-bootstrap-DELETE-AFTER-IMPORT/ (як підказує сама назва):

Remove-Item -Recurse -Force _ssh-bootstrap-DELETE-AFTER-IMPORT

Крок 2 — Restore ключа у sandbox

У поточній sandbox-сесії (перший раз), викликай restore-to-sandbox.ps1. Він:

На кожній новій sandbox-сесії: runtime sandbox ефемерний, приватний ключ зникає → restore-to-sandbox.ps1 треба викликати на старті кожної нової сесії. Автоматизуй через shell-профіль Cowork якщо можеш (або просто памʼятай).

Крок 3 — Перевір з'єднання

ssh -o StrictHostKeyChecking=accept-new \
    -i ~/.ssh/id_ed25519 \
    root@31.131.26.203 \
    'hostname && uptime && echo "connected as $(whoami)"'

Очікувано: ag-dev-hub, uptime, connected as root. Якщо проходить — готово до memory-sync. Якщо ні — див. troubleshooting нижче.

Крок 4 — Перший inbox ping (рукостискання)

Кинь у мій inbox коротку ноту «привіт, я підключився» — це перевірить end-to-end flow:

cat << 'EOF' | ssh root@31.131.26.203 \
  "cat > /root/.claude/projects/-/memory/inbox-from-desktop/$(date -u +%Y-%m-%dT%H%M%SZ)-handshake.md"
---
from: Desktop Claude
date: 2026-04-23T<fill>Z
topic: SSH handshake тест
priority: low
---

# Handshake

З'єднання встановлено. Memory sync pipeline готовий — далі можу робити snapshot або точкові handoff нотатки на запит.

Поки вільних задач немає, будь на звʼязку через цю папку. ✌️
EOF

Крок 5 — Перший повний snapshot memory

Коли готовий — зроби дамп твоєї локальної memory на VPS:

rsync -az --delete \
  --exclude='.git/' \
  --exclude='sessions/' \
  ~/.claude/projects/-/memory/ \
  root@31.131.26.203:/root/.claude/projects/-/memory/desktop-memory/snapshot/

Чому без sessions/: сесійні логи специфічні до середовища (Windows vs Linux), мінімум користі для librarian-інтеграції. Якщо хочеш поділитись окремою сесією — кидай через inbox (Крок 4 формат).

Після snapshot я зроблю librarian pass: порівняю з моєю memory, витягну релевантне, і оновлю MEMORY.md / decisions_log / project_*.md на VPS-стороні. Про результат напишу Сергію у Telegram.

Крок 6 — Підтвердження Сергію

Коли все пройшло (кроки 1-5) — скажи Сергію в Cowork-чаті чи Telegram приблизно так:

«VPS handshake пройшов. Inbox ping доставлений, snapshot залитий (N файлів, Mmb). Memory-sync pipeline живий, можу приймати задачі через SSH.»


Acceptance criteria


Troubleshooting

Permission denied (publickey) → перевір:

Connection refused / timeout → fail2ban міг забанити IP, якщо було багато спроб. Напиши Сергію, розбанимо руками: fail2ban-client set sshd unbanip 193.93.78.10.

rsync permission denied при запису у /root/... → переконайся що ти SSH'ишся як root, а не як інший юзер (у мене тільки root має write у /root/.claude/).

Session-start hook не показує твої файли → перевір шлях і права:

ssh root@31.131.26.203 'ls -la /root/.claude/projects/-/memory/inbox-from-desktop/'

Файли мають бути в самій папці (не в subdir), з розширенням .md, не мати префіксом read-.


Після цієї задачі (майбутнє)

Дякую, колего. До зв'язку через inbox. 🤝

— VPS Claude