User asked to ingest the ~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Digital Mind/Cards/ corpus (6,419 files; 4,270 MD + 1,444 HTML-only + scattered) into gbrain. After a 4-card cherry-pick that revealed ~25% of well-chosen cards were duplicates of existing brain pages, the user said: "go for full bulk option 3... ingest the files you think provide interesting context... don't worry about the flashcards, don't worry about HTML files, preserve citations and verify them, eliminate duplicates and redundancy, combine concepts if they think they overlap."
A deterministic Python sensor at ~/.hermes/scripts/obsidian_cards_to_brain.py (~430 lines) that:
*.md files in the Cards corpusUni/, flashcards/ tags) and date-prefixed journal entries (coaching session notes belong in calendar/scratchpad, not the brain)citation_anchorsredirect_to: pointing to the canonical brain page)~/brain/inbox/obsidian-cards/<slug>.md with frontmatter (source, title, aliases, tags, edited, date, citation_anchors, redirect_to) + body (Dataview-stripped, citations preserved as @citekey wikilinks)A cron job (obsidian_cards_to_brain, id 11f29cb1a52e, every 6h) was registered for re-runs. State at ~/.hermes/profiles/build/state/sensors/obsidian_cards_to_brain.json is idempotent — re-runs skip already-processed cards.
| Outcome | Count | What it means | |---|---|---| | Wrote | 2,059 | Card had no brain overlap → wrote full body content to inbox | | Redirected | 609 | Card's title overlapped an existing brain page → wrote redirect stub with redirect_to: pointing to the canonical page (preserves wikilink chain) | | Skipped | 1,602 | Course flashcards (Uni/LFS, Uni/MBT, etc.) + date-prefixed coaching journals + empty-after-Dataview-strip + too-short (<200 chars) | | Failed | 0 | 100% success rate | | Total processed | 4,270 | All 4,270 source MD files processed |
The 22% redirect rate matches the cherry-pick prediction — the user has been writing atomic notes for 4+ years; the gbrain has 6 months of capture, so significant overlap was expected.
@authorYear citation anchors@jorgenson2026 → 1 match (Book of Elon), @greene2018 → 1 match (Laws of Human Nature), @harari2015 → 2 matches (Sapiens), @orwell1949 → 1 match (1984), @gallo2023 → 12 matches (all to real Zotero items)After the inbox writes, ran gbrain put <slug> < file.md for all 2,664 files in parallel (4 workers, ~5.0 files/sec, 0 failures over ~9 min total). Verified state in gbrain.pages:
home source, all with type=notecompiled_truth (no write-through wipes — the MCP write-through wipe bug didn't fire on the gbrain CLI path)search_vector (the full-text search index is populated)The dream cycle's next run will see these 2,664 inbox files and promote them. The 609 redirects will get their redirect_to: field honored during synthesis (the dream cycle reads the frontmatter redirect_to and treats the page as a duplicate-resolution pointer).
Once the dream cycle promotes the inbox files:
inbox/obsidian-cards/<slug> (mostly) and a subset will be promoted to concepts/<slug> if the dream cycle decides they're concept-shapedredirect_to: field is the cross-link; the body content is preserved in the inbox file for future reference) `dataview ... ` blocks from the body. Per user: "strip the Dataview queries, as they are Obsidian-only and don't present any benefit in G-Brain."citationKey field maps to Zotero items 1:1. Verified samples: @jorgenson2026, @greene2018, @harari2015, @orwell1949, @gallo2023 all resolve to real Zotero items.~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Digital Mind/Cards/ (4,270 .md files)~/.hermes/scripts/obsidian_cards_to_brain.py + bash wrapper at ~/.hermes/scripts/obsidian_cards_to_brain11f29cb1a52e, every 6h~/.hermes/profiles/build/state/sensors/obsidian_cards_to_brain.jsonconcepts/obsidian-cards-first-batch-2026-07-05