claudeai-sync · v1.0.0 · 2026-09-24 · sha256 6c285b1be62aca72

claudeai-sync v1.0.0A

Immutable. This exact content never changes and is served at /api/v1/blob/6c285b1be62aca72.

---
name: claudeai-sync
description: "claude.ai WEB-чаты: One-command incremental sync of Anton's claude.ai WEB account into the Obsidian vault — pull only the new/changed chats, fold them in as notes (idempotent, never overwrites curated ones), extract artifacts as first-class notes,… Trigger on “/claudeai-sync“, “обнови claude.ai“, “забери новые чаты из клода“, “подтяни клод“, “sync claude.ai“, “что нового в claude.ai в волт“"
version: 1.0.0
---

# claudeai-sync — подтянуть новое из claude.ai в волт

Аккаунт **dzyatkovskiy.a2@gmail.com** (Claude Max). Чаты claude.ai НЕ лежат на диске — тянутся живьём через залогиненную сессию (Claude-in-Chrome). Полуавтомат: **PULL** (шаг 1) делаю я при открытой сессии; всё остальное — детерминированно и идемпотентно.

Скрипты: `$IMPORTS_ROOT/claude-ai/` · оригиналы → `$OBSIDIAN_ROOT/_originals/claude-ai-export/` · живой слой → `01-Conversations/Claude-AI/`.

## ⚠️ Главный landmine
Артефакты видны API **ТОЛЬКО** при `rendering_mode=messages`. `raw`/`default` молча отдают 0 артефактов. Всегда messages + verify счётчик артефактов.

## ⚠️ Anti-recents (ручной поиск конкретного чата)
Ищешь ОДИН конкретный чат руками (не полный PULL) — НИКОГДА не заключай «чата нет» из беглого списка recents: (1) встроенный ПОИСК «Search chats…» по ключам; (2) Projects/архив/pinned; (3) подтверди активный АККАУНТ по email в меню профиля (a2 = `dzyatkovskiy.a2@gmail.com`, в UI = «[коллега] & Anton»). Ещё надёжнее — полный API-список `chat_conversations?limit=1000` (шаг PULL) вместо чтения /recents глазами. Канон: память [[web-ui-search-not-recents]] (инцидент Woom 2026-07-23).

## Шаги

### 0. ГВАРД АККАУНТА (⭐ ПЕРЕПИСАН 30.08 по регламенту `reglament-hab-brauzernye-lichnosti-bb-i-roboty`)
⛔⛔ **В ЖИВОМ Chrome Антона (профиль Default) НИКАКИХ logout / смены аккаунта.** Приказ Антона 30.08 голосом: его Chrome = `[рабочий аккаунт]` ВСЕГДА; прежнее «самолечение» (logout → [человек]-link a2 в его браузере) и было корнем войны — робот ночами вылогинивал Антона (случаи 14.08, 20.08, 27.08, разбор в Breakage-Journal 30.08 13:2x).
a2 живёт ТОЛЬКО в выделенном профиле:
1. Пулл a2 = rail C: `python $IMPORTS_ROOT/claude-ai/pull_rail_c.py --run --profile=a2` (профиль `_chrome_profile_a2`; куки Firefox туда НЕ инжектятся — гвард в скрипте).
2. Гвард: `/api/organizations` из ЭТОГО профиля обязан отдать chat-org `a673590f-762e-401d-a6a3-60272fa7e738`. 403 `account_session_invalid` → сессия профиля протухла (TTL бывает <70 мин, строка журнала 30.08 02:5x).
3. Перелогин ТОЛЬКО выделенного профиля: `python $IMPORTS_ROOT/claude-ai/railc_login_a2.py` ([человек]-link просится сам, ссылку приносит Gmail-коннектор a2, «Continue with Google» ⛔ — попап невидим). Руки/пароль/экран не нужны.
4. Увидел в человеческом Chrome bb — это ПРАВИЛЬНО, не трогай. Перепроверить и пулл — только из выделенного профиля.
Не вышло → пинг в 03 с шагом, на котором встал, и стоп.
⚠️ ИСТОРИЯ шага: до 27.08 скилл говорил «Пинг. Стоп.» (класс «детектор без исполнителя»), 27-29.08 лечился logout'ом в живом Chrome (класс «война за браузер» — вылогинивал Антона), с 30.08 — только выделенный профиль.

### 1. PULL (в сессии, ~30 сек)
- Claude-in-Chrome → `navigate https://claude.ai/recents`.
- `javascript_tool` (same-origin authed fetch), org = `a673590f-762e-401d-a6a3-60272fa7e738` (роли chat+claude_max; вторая орг «DeFi Analytics LLC» = API-only, 403, игнор):
  - список: `/api/organizations/{ORG}/chat_conversations?limit=1000&offset=0`
  - каждый чат: `/api/organizations/{ORG}/chat_conversations/{uuid}?tree=True&rendering_mode=messages` → cache в `window.__convs`
  - проекты: `/api/organizations/{ORG}/projects` + `/{uuid}` (descr + prompt_template) + `/{uuid}/docs` (контент инлайн)
  - Blob-download ОДНИМ файлом `claude-ai-export-YYYY-MM-DD.json` (schema `claude-ai-export/v1`: {conversations, projects, filesManifest}).
    - ⚠️ `conversations` ДОЛЖЕН быть ОБЪЕКТОМ `{uuid: conv}`, НЕ списком — конвертер `claudeai_export_to_vault.py:120` делает `convs.items()` (список → `AttributeError: 'list' object has no attribute 'items'`). `filesManifest` — список `{conv, msg, kind, meta}`. Артефакты в `rendering_mode=messages` приходят как `<antArtifact …>` ВНУТРИ text-айтемов (НЕ `tool_use`-блоки) — это норма, конвертер их парсит.
- Перенести из Downloads в `raw\` + архив `_originals\claude-ai-export\` (sha256). Полный JS — в журнале сессии 2026-06-12 / памяти [[claude-ai-export-to-vault]].
  - ⭐ ТОЛЬКО ДЛЯ ЭТОЙ, БРАУЗЕРНОЙ ветки (blob-download). На рельсе C (`pull_rail_c.py`) архив делает САМ СКРИПТ с 2026-09-21: сразу после `BUNDLE WRITTEN` он зовёт `railc_archive.archive_bundle()` — verbatim-копия в `_originals\claude-ai-export\` + sidecar `.sha256`, идемпотентно, одноимённый оригинал с ДРУГИМИ байтами не перетирает (зовёт человека). Руками на рельсе C больше НЕ копируем; признак здоровья прогона — строка `ARCHIVED` (новый файл) либо `ARCHIVE OK` (повтор за сутки) в выводе `--run`, её отсутствие = поломка. Причина правки: семь смен подряд (RUNLOG 09-11…09-21) делали копию руками, одна забыла sidecar. Тест `_test_railc_archive.py` (красный до починки).
- (Дельта не обязательна — конвертер идемпотентен по uuid; full-pull добавит только новое.)

### 2. SYNC (детерминированно)
```
python $IMPORTS_ROOT/claude-ai/claudeai_sync.py
```
Конвертит во временный staging → копирует в живой слой **только НОВЫЕ** заметки (существующие, в т.ч. связанные, НЕ трогает) → рефрешит MOC + дашборд → пишет пути новых артефактов в `_new_artifacts.txt`. Печатает `new_conversations / new_artifacts / new_projects`.

### 3. CONCEPT-LINK новых артефактов (ОБЯЗАТЕЛЬНО — `concept-creation-rules.md` §1)
Если `_new_artifacts.txt` не пуст:
- Workflow `claudeai-artifact-curation` (sonnet, по одному агенту на артефакт; ⚠️ если >40 — серверный rate-limit, добивай `resume`-ом) → предложения концептов.
- `python apply_curation.py --result <workflow .output>` — валидирует слаги против реального `06-Concepts`/`09-Bridges`, пишет ссылки идемпотентно (`<!-- curation -->` блок + `related_concepts`/`summary`/`value_score`/tags).
- **Повторяющиеся темы без концепта → создай новые концепты** (порог §1 ≥3), покажи Антону, затем перезапусти apply (новые подхватятся). Единичные — не плодить.

### 4. RAG + commit
```
python $IMPORTS_ROOT/brain_embed_update.py        # или дождись ночной @04:00
python $IMPORTS_ROOT/vault_backup.py
```
(`claudeai_sync.py --reindex --commit` делает 4 одним вызовом; reindex rc=3 = занят замок, ночная задача догонит.)

### 5. PING
Короткий итог Антону (можно в Telegram Saved [id]): «claude.ai: +N чатов, +M артефактов, связано».

## Заметки
- **Идемпотентно**: повторный прогон без новых данных = «nothing new», связки не теряются.
- **Провенанс**: артефакты `origin: claude-ai, authored_by: claude` (НЕ #anton-original); инструкции проектов `origin: anton`.
- **Бинарники** (картинки/доки, 524 в манифесте) Антон просил НЕ тянуть (2026-06-12).
- **Авто-режим**: ночная Windows-задача `Claude-AI Sync Daily` гоняет back-half на любом свежем экспорте; PULL остаётся в сессии. Полный headless («выкачка сама») = переход на отдельный Chrome-профиль + Playwright + детерминированный RAG-линкер — отложено (Антон выбрал безопасный полуавто).