claudeai-sync · diff
git:20260814.5023d8c to git:20260814.06fa906
13 added, 0 removed. Audit A to A.
---
name: claudeai-sync
description: >
One-command incremental sync of a claude.ai WEB account into the Obsidian vault — pull only
new/changed chats, fold them in as notes (idempotent, never overwrites curated ones), extract
artifacts as first-class notes, concept-link the new artifacts, refresh the RAG index +
dashboard. Trigger on "/claudeai-sync", "pull claude.ai", "grab new claude.ai chats".
license: MIT
---
# claudeai-sync — подтянуть новое из claude.ai в волт
Аккаунт **owner.work@example.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 = `owner.work@example.com`, в UI = «Artem & Anton»). Ещё надёжнее — полный API-список `chat_conversations?limit=1000` (шаг PULL) вместо чтения /recents глазами. Канон: память [[web-ui-search-not-recents]] (инцидент Woom 2026-07-23).
## Шаги
### 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]].
- (Дельта не обязательна — конвертер идемпотентен по 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 226258979): «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-линкер — отложено (Антон выбрал безопасный полуавто).
+ ---
+
+ <!-- CONTACT-FOOTER -->
+ ## About & contact
+
+ Built and battle-tested at **Palo Alto AI Research Lab** — a fleet of Claude Code machines
+ running 24/7 as a second brain and synthetic cofounder. Every skill here survived real
+ production use before publication.
+
+ - 📦 All 101 skills: https://github.com/tonydzi/second-brain-starter-kit
+ - 👤 Author: **Anton Dziatkovskii** — Telegram [@tonydzi](https://t.me/tonydzi) · WhatsApp [+1 341 222 9178](https://wa.me/13412229178) · X [@Tony_Stef_](https://x.com/Tony_Stef_)
+ - 🧪 **Engineers: want to test-drive this setup?** Message me — I hand out free starter seeds to engineers who test and report back. Custom skill requests welcome.
+