← ClaudeAtlas

obsidian-synclisted

Level-1 Heptabase → Obsidian sync for the Study vault: one-way incremental body sync (Heptabase is source of truth) plus bidirectional property sync (Status/Tasks/Topics/Note/...) for the study/paper (Source Type=alphaXiv) and study/overview collections. Card links between synced cards become [[wikilinks]]; links to non-synced cards keep Heptabase URLs. Use when the user asks to sync Heptabase cards to Obsidian, 同步卡片到 obsidian, push paper/overview cards to the vault, or after batch edits in either app.
SungFeng-Huang/research-cards · ★ 3 · Data & Documents · score 77
Install: claude install-skill SungFeng-Huang/research-cards
# Heptabase → Obsidian Sync (Level 1) ## Agent(claude / codex) 兩個 agent 皆可駕駛(Codex 端:`research-cards@private-plugins` plugin 的 obsidian-sync skill)。唯一的 Claude 限定步驟:`unresolved_highlights` 需要 mcp get_object 讀 highlightElement——Codex 駕駛時把該清單回報給使用者,請對方在 Claude Code session 補 highlights.json。 ## Run ```bash python3 "$(dirname "$0")"/sync.py # real run python3 .../sync.py --dry-run # preview, no writes python3 .../verify.py # vault integrity check, run after sync ``` `verify.py` checks: attachment extensions Obsidian can render, missing embeds, broken wikilinks/block refs, leftover placeholders, duplicate heptabase_ids, and state.json consistency. Expect `CLEAN`. NOTE: the vault path comes from config `obsidian.vault`. If it lives in iCloud Drive, run OUTSIDE the sandbox (the terminal needs Full Disk Access). ## What it does - **Collections** are config-driven: every `heptabase.collections.<key>` entry with a filled `tag_id` becomes one collection, mirrored into `obsidian.folders.<key>` (default: capitalized key). Optional `filter` narrows by property (e.g. papers → Source Type=alphaXiv). Typical set: papers → `Papers/`, overviews → `Overviews/`, projects → `Projects/`. Entries without a `tag_id` (or with a `<placeholder>`) are skipped — they may exist as metadata for other skills. - **Body**: one-way Heptabase → Obsidian. Skips cards whose `lastEditedTime` and `contentMd5` are unchanged (fast incremental). Pro