Exbrain Banner

Exbrain β€” Your AI's External Brain

An AI knowledge system that automatically remembers, organizes, and reflects.
Claude Code Γ— Obsidian Γ— SOUL/MEMORY/DREAMS

πŸ‡―πŸ‡΅ ζ—₯本θͺžη‰ˆγ―こけら Β· Inspired by Karpathy's LLM Wiki

## What is Exbrain? Exbrain turns Claude Code's hidden internal state β€” Memory files, CLAUDE.md configs, Skills β€” into a human-readable Obsidian vault. It adds a **Dreaming** layer that automatically reflects on your day, detects patterns, and builds a growth trajectory over time. Your laptop can be closed. Your phone shows everything. You just open Obsidian and read. ## How It Works β€” For Beginners If you're new to Claude Code or Obsidian, here's the big picture: ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ YOU (Human) β”‚ β”‚ β”‚ β”‚ Work with Claude Code Bookmark on X Send URL in Slackβ”‚ β”‚ ↓ ↓ ↓ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Claude Code β”‚ β”‚ Cron Job (Auto) β”‚ β”‚ Always-On Agent β”‚ β”‚ (Local CLI) β”‚ β”‚ Every 4 hours β”‚ β”‚ (e.g. OpenClaw) β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β€’ /clip skill β”‚ β”‚ β€’ X bookmark sync β”‚ β”‚ β€’ Slack listener β”‚ β”‚ β€’ Hooks (auto) β”‚ β”‚ β€’ xurl API β”‚ β”‚ β€’ URL detection β”‚ β”‚ β€’ Session logs β”‚ β”‚ β”‚ β”‚ β€’ firecrawl β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ~/vault/ (Git) β”‚ β”‚ β”‚ β”‚ SOUL.md MEMORY.md β”‚ β”‚ DREAMS.md β”‚ β”‚ daily/ clips/ β”‚ β”‚ clients/ insights/ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό GitHub iCloud Obsidian (backup) (sync) (Mac+iPhone) ``` ### Components Explained | Component | What it is | Role in Exbrain | |-----------|-----------|-----------------| | **Claude Code** | Anthropic's AI coding CLI ([docs](https://docs.anthropic.com/en/docs/claude-code)) | Your main AI assistant. Runs skills like `/clip`, writes to vault, manages hooks | | **Obsidian** | Free markdown note app ([obsidian.md](https://obsidian.md)) | Where you **read** everything. Vault = folder of .md files. Works on Mac, iPhone, Android | | **Always-On Agent** | A background AI (e.g. [OpenClaw](https://openclaw.com)) | Monitors Slack/Discord 24/7. Runs cron jobs even when Claude Code is closed | | **Cloud Scheduled Tasks** | Claude Code's built-in scheduler ([docs](https://docs.anthropic.com/en/docs/claude-code/scheduled-tasks)) | Runs morning/evening Dreaming without your PC. Updates MEMORY.md and DREAMS.md | | **xurl** | X API CLI tool | Fetches tweets and bookmarks from X (Twitter) | | **Firecrawl** | Web scraping CLI | Converts any URL into clean markdown | | **iCloud** | Apple's cloud sync | Syncs vault between Mac and iPhone automatically | | **GitHub** | Code hosting | Backup + version history for your vault | ### Data Flow: What Happens When You Clip ``` You find an interesting article β”‚ β–Ό β”Œβ”€ Pick your method ──────────────────────────────────┐ β”‚ β”‚ β”‚ A) /clip URL B) Slack DM C) Just β”‚ β”‚ in Claude Code send URL bookmark β”‚ β”‚ β”‚ β”‚ on X β”‚ β”‚ β–Ό β–Ό β”‚ β”‚ β”‚ Claude Code Agent detects (wait 4h) β”‚ β”‚ runs instantly URL in real-time β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ AI Processing β”‚ β”‚ β”‚ β”‚ 1. Fetch contentβ”‚ β”‚ 2. Summarize β”‚ β”‚ 3. Tag (auto) β”‚ β”‚ 4. Save .md β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό vault/clips/x/2026-04-08_slug.md β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό _index.md daily note git push updated updated to GitHub β”‚ β–Ό iCloud sync β”‚ β–Ό πŸ“± Read on iPhone ``` ### System Relationship Map ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Claude Code │────────▢│ ~/vault/ │◀──────┐ β”‚ β”‚ β”‚ (CLI agent) β”‚ writes β”‚ (Obsidian) β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ writesβ”‚ β”‚ β”‚ β”‚ Skills: β”‚ β”‚ SOUL.md β”‚ β”‚ β”‚ β”‚ β”‚ /clip β”‚ β”‚ MEMORY.md β”‚ β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β” β”‚ β”‚ β”‚ /auto-mins β”‚ β”‚ DREAMS.md β”‚ β”‚ Cloud β”‚ β”‚ β”‚ β”‚ 30+ more β”‚ β”‚ daily/ β”‚ β”‚Schedule β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ clips/ β”‚ β”‚ Tasks β”‚ β”‚ β”‚ β”‚ clients/ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ meetings/ β”‚ β”‚ Morning β”‚ β”‚ β”‚ β”‚ Always-On │────────▢│ insights/ β”‚ β”‚ Evening β”‚ β”‚ β”‚ β”‚ Agent β”‚ writes β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ (OpenClaw) β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Cron jobs: β”‚ git push/pull β”‚ β”‚ β”‚ X bookmarks β”‚ β”‚ β”‚ β”‚ β”‚ Slack DM β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Reports β”‚ β”‚ GitHub β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ (private) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ ─── All connected via ~/vault/ ─── β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## The SOUL / MEMORY / DREAMS Trinity The core of Exbrain is three files at the root of your vault: ``` ~/vault/ β”œβ”€β”€ SOUL.md ← WHO you are (identity, values, boundaries) β”œβ”€β”€ MEMORY.md ← WHAT you've experienced (decisions, patterns, lessons) └── DREAMS.md ← WHERE you're going (insights, growth, open questions) ``` ### SOUL.md β€” Identity Defines who you are and how the AI should behave. Merged from Claude Code's CLAUDE.md and any external agent personality configs. ```markdown ## Identity - Your name, role, company ## Values - "Ship fast, iterate later" - "API-first, no manual work" ## Boundaries (non-negotiable) - "Never send emails β€” drafts only" - "Never post to Slack without confirmation" ## Tech Ecosystem - APIs, MCP servers, CLI tools ``` ### MEMORY.md β€” Experience A digest of everything the AI has learned. Auto-synced from Claude Code's Memory (`.claude/projects/*/memory/`) + enriched by Cloud Scheduled Tasks. ```markdown ## Recent - [2026-04-07] Built Obsidian vault with SOUL/MEMORY/DREAMS - [2026-04-06] Shipped new feature for Project Alpha ## Decisions - Hybrid design: static mirror + Karpathy pattern + Dreaming ## Patterns - Fridays are meeting-heavy (3 weeks in a row) - Email replies concentrate in the afternoon ## CC Memory Summary (35 files) - feedback/21: "Never send emails", "Always git commit after GAS edits" - reference/7: API locations, tool configs - project/4: Active project statuses - user/1: User profile and preferences ``` ### DREAMS.md β€” Reflection Updated automatically by Dreaming (morning + evening + weekly). Tracks patterns that emerge over time. ```markdown ## Current Insights - Meeting density peaks on Mondays (10+ meetings, 3 consecutive weeks) ## Emerging Patterns | Pattern | Count | Trend | |---------|-------|-------| | Tool β†’ Skill β†’ Automation cycle | 10+ | Consistent | | Email/Slack send caution | 5+ | Critical boundary | ## Growth Trajectory - Q1: Built 26 skills, automated 32 cron jobs ## Open Questions - Should CC Memory duplicates be consolidated? ``` ## Clips β€” Knowledge Clipping Clips automatically captures tweets and articles into your vault. Like Karpathy's compounding knowledge pattern, everything you read accumulates and becomes searchable in Obsidian. ### Three Ways to Clip | Method | Trigger | Best for | |--------|---------|----------| | **`/clip` skill** | `/clip ` in Claude Code | Working at your desk, high-quality summaries | | **Slack DM** | Post URL in Slack DM to your agent | On the go (phone), instant capture | | **X Bookmark Sync** | Automatic every 4 hours | Passive β€” just bookmark on X, it syncs | ### 1. `/clip` β€” Manual Clip in Claude Code ``` /clip https://x.com/karpathy/status/1234567890 /clip https://example.com/great-article /clip https://url1.com https://url2.com # multiple URLs ``` Detects X tweet vs article automatically. Fetches content, generates summary + tags in Japanese, saves to `clips/`, updates daily note, and pushes to git. ### 2. Slack DM β€” Clip from Your Phone Just send a URL to your agent's Slack DM: ``` https://example.com/interesting-article ``` The agent detects the URL, scrapes the content, generates a summary, saves to `clips/`, and replies in a thread: ``` πŸ“Ž Clipped! πŸ“„ How LLMs Will Change Everything 🏷️ #ai #llm #future πŸ“ vault/clips/articles/2026-04-08_llm-change-everything.md ``` **Setup**: Requires an always-on agent (like [OpenClaw](https://openclaw.com)) with Slack Socket Mode. Add the URL detection behavior to your agent's auto-actions. See [Slack Clip Setup](#slack-clip-setup) below. ### 3. X Bookmark Auto-Sync Bookmark tweets on X as you normally would. A cron job syncs them to your vault automatically. **Default schedule**: Every 4 hours (8:00, 12:00, 16:00, 20:00) **Requirements**: [xurl](https://github.com/twitterdev/xurl) CLI with OAuth2 authentication. ```bash # Test manually xurl bookmarks -n 5 --auth oauth2 ``` ### Clip File Format ```markdown --- date: 2026-04-08 type: clip source: x | article url: https://... author: "@username" tags: [ai, claude-code, agent] via: slack | cli | cron # how it was clipped --- ## Summary (3-5 line summary in your language) ## Key Points - Point 1 - Point 2 ## Notes > Important quotes ## Related [[insights/...]] | [[clips/...]] ``` ### Daily Note Integration Each clip is automatically linked in the day's daily note: ```markdown ## Clips - [[clips/x/2026-04-08_sam-altman-social-contract]] β€” Sam Altman's social contract - [[clips/articles/2026-04-08_karpathy-llm-wiki]] β€” Karpathy LLM Wiki pattern ``` ### Dataview Queries Browse clips by tag in Obsidian: ```dataview TABLE rows.date, rows.source, rows.author FROM "clips" WHERE type = "clip" FLATTEN tags as tag GROUP BY tag SORT rows.date DESC ``` ### Slack Clip Setup To enable Slack DM β†’ clip, add this auto-action to your agent: 1. **Create skill files** in your agent's workspace: ``` workspace/skills/slack-clip/ β”œβ”€β”€ SKILL.md ← Skill overview β”œβ”€β”€ BEHAVIOR.md ← Detection rules + processing flow └── processed-clips.json ← Deduplication tracking ``` 2. **Add auto-action** to your agent's config (e.g., `AGENTS.md`): ```markdown ### URL Post β†’ Vault Clip Automatically saves to vault/clips/ when a DM contains a URL. Detection: - Message text contains https:// (forwarded messages excluded) - Slack internal URLs and direct image links excluded Processing: 1. Detect URL type (X tweet vs article) 2. X tweet β†’ xurl read / article β†’ firecrawl scrape 3. Generate summary + tags β†’ save to vault/clips/ 4. git push + thread reply confirmation ``` 3. **Ensure tools are available** to the agent: - `xurl` (X API CLI) with OAuth2 auth - `firecrawl` (web scraping CLI) - Git access to your vault repo ### X Bookmark Cron Setup Add a cron job to your agent scheduler: ```json { "name": "clip-x-bookmarks", "schedule": "0 8-23/4 * * *", "message": "Fetch X bookmarks with `xurl bookmarks -n 20 --auth oauth2`, check for duplicates in vault/clips/x/, summarize new ones, save to vault/clips/x/, update _index.md, git push." } ``` ## Architecture ``` β”Œβ”€ Layer 1: Cloud Scheduled Tasks (no PC needed) ────────────┐ β”‚ β”‚ β”‚ 07:00 vault-daily-morning β”‚ β”‚ β”œβ”€β”€ Read SOUL.md (understand user context) β”‚ β”‚ β”œβ”€β”€ Read MEMORY.md (recent decisions & patterns) β”‚ β”‚ β”œβ”€β”€ Google Calendar β†’ today's schedule β”‚ β”‚ β”œβ”€β”€ Slack β†’ overnight highlights β”‚ β”‚ β”œβ”€β”€ Gmail β†’ important unread emails β”‚ β”‚ β”œβ”€β”€ Morning Dreaming (yesterday's review β†’ today's focus) β”‚ β”‚ β”œβ”€β”€ Update MEMORY.md Recent section β”‚ β”‚ └── git push β”‚ β”‚ β”‚ β”‚ 18:30 vault-daily-evening β”‚ β”‚ β”œβ”€β”€ Read SOUL.md + MEMORY.md + DREAMS.md β”‚ β”‚ β”œβ”€β”€ Evening Dreaming (today + 7-day pattern detection) β”‚ β”‚ β”œβ”€β”€ Update MEMORY.md + DREAMS.md β”‚ β”‚ β”œβ”€β”€ Sunday: weekly Dreaming + Lint + Slack notification β”‚ β”‚ └── git push β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ push β–Ό β”Œβ”€ GitHub (private repo) ──────────────────────────────────────┐ β”‚ All vault files β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ pull (hourly via launchd) β–Ό β”Œβ”€ Layer 2: Local Automation ──────────────────────────────────┐ β”‚ β”‚ β”‚ Claude Code Hooks (async: true) β”‚ β”‚ β”œβ”€β”€ PostToolUse β†’ log file changes β”‚ β”‚ └── Stop β†’ append session end to daily note + MEMORY.md β”‚ β”‚ β”‚ β”‚ External Agent Cron (when PC is on) β”‚ β”‚ β”œβ”€β”€ Additional data: Salesforce, Stripe, HERP, YouTube β”‚ β”‚ └── Skipped when PC is off (Layer 1 is self-sufficient) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ iCloud sync β–Ό Obsidian (Mac + iPhone) ``` ## Vault Structure ``` ~/vault/ β”œβ”€β”€ SOUL.md ← Identity, values, boundaries β”œβ”€β”€ MEMORY.md ← Experience digest (CC Memory mirror) β”œβ”€β”€ DREAMS.md ← Dreaming accumulation (auto-updated) β”œβ”€β”€ CLAUDE.md ← Schema (LLM rules for this vault) β”‚ β”œβ”€β”€ daily/ ← Daily notes (auto-generated morning & evening) β”‚ └── 2026-04-07.md Schedule / Gmail / Slack / AI Analysis / β”‚ Morning Reflection / Evening Reflection / β”‚ Claude Code Session / Thoughts β”‚ β”œβ”€β”€ system/ ← Claude Code system mirror (SYNCED) β”‚ β”œβ”€β”€ claude-md-tree.md All CLAUDE.md files as a tree β”‚ β”œβ”€β”€ global-rules.md Rules & boundaries summary β”‚ β”œβ”€β”€ api-inventory.md API list (no keys) β”‚ β”œβ”€β”€ tech-stack.md Technology stack β”‚ └── cron-jobs.md Running cron jobs β”‚ β”œβ”€β”€ skills/ ← All skills with details (SYNCED) β”œβ”€β”€ memory/ ← CC Memory individual file mirror (SYNCED) β”‚ β”œβ”€β”€ feedback/ Behavioral guidelines β”‚ β”œβ”€β”€ reference/ External system pointers β”‚ β”œβ”€β”€ project/ Project statuses β”‚ └── user/ User profile β”‚ β”œβ”€β”€ clips/ ← Clipped tweets & articles (auto + manual) β”‚ β”œβ”€β”€ x/ X bookmarks (auto-synced every 4 hours) β”‚ β”œβ”€β”€ articles/ Web articles (via /clip or Slack) β”‚ β”œβ”€β”€ _index.md Clip index (auto-updated) β”‚ └── tags.md Tag-based classification (Dataview) β”‚ β”œβ”€β”€ clients/ ← Client knowledge (Karpathy pattern) β”œβ”€β”€ meetings/ ← Meeting summaries (auto from /auto-mins) β”œβ”€β”€ decisions/ ← Decision log β”œβ”€β”€ insights/ ← Learnings + weekly Dreaming β”œβ”€β”€ templates/ ← daily-note, meeting, decision └── scripts/ ← Hook scripts + sync scripts ``` ## Hybrid Design: Three Personalities ``` vault/ β”œβ”€β”€ system/, skills/, memory/ β”‚ β†’ Static mirror (dashboard) β”‚ β†’ Auto-synced from Claude Code, read-only β”‚ β†’ header β”‚ β”œβ”€β”€ daily/ β”‚ β†’ Auto log + handwritten diary β”‚ β†’ Calendar + Slack + Gmail + AI Analysis + Dreaming β”‚ β†’ Runs even with PC closed (Cloud Scheduled Tasks) β”‚ └── meetings/, clients/, insights/ β†’ Karpathy pattern (compounding knowledge) β†’ Each meeting processed β†’ client page auto-enriched β†’ No need to re-read 12 meeting transcripts ``` ## Setup ### Prerequisites - Claude Code (Pro or Max) - Obsidian (free) - GitHub account - (Optional) Slack / Google Calendar / Gmail Connectors ### Step 1: Create Vault ```bash mkdir -p ~/vault/{daily,system,skills,memory/{feedback,reference,project,user},clients,meetings,decisions,insights,templates,scripts} # iCloud sync (for iPhone) mv ~/vault ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/exbrain ln -s ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/exbrain ~/vault ``` ### Step 2: Copy Templates ```bash git clone https://github.com/YOUR_USERNAME/exbrain.git /tmp/exbrain cp -r /tmp/exbrain/vault-template/* ~/vault/ ``` ### Step 3: Configure Hooks Add to `~/.claude/settings.json`: ```json { "hooks": { "PostToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "bash ~/vault/scripts/on-file-change.sh", "async": true }] }], "Stop": [{ "hooks": [{ "type": "command", "command": "bash ~/vault/scripts/on-session-end.sh", "async": true }] }] } } ``` ### Step 4: Initial Sync In Claude Code: ``` Please read all my skills from ~/.claude/skills/, all memory files from ~/.claude/projects/*/memory/, and sync them to ~/vault/. Create SOUL.md with my identity and MEMORY.md with a digest of all memories. ``` ### Step 5: GitHub Backup ```bash cd ~/vault git init && git add -A && git commit -m "Initial vault" gh repo create my-vault --private --source=. --push ``` ### Step 6: Cloud Scheduled Tasks (PC-free automation) At [claude.ai/code/scheduled](https://claude.ai/code/scheduled): - **vault-daily-morning** (07:00): Read SOUL.md β†’ Calendar + Slack + Gmail β†’ daily note + Morning Dreaming - **vault-daily-evening** (18:30): Read SOUL.md + MEMORY.md + DREAMS.md β†’ Evening Dreaming + pattern detection ## Daily Note Example ```markdown --- date: 2026-04-07 weekday: Monday type: daily score: 74 --- ## Schedule | Time | Event | Note | |------|-------|------| | 09:00 | Management meeting | | | 10:00 | Sales standup | | | 14:00 | Company standup | | ## Gmail | From | Subject | Action | |------|---------|--------| | [Contact] | Project meeting request | Reply needed | ## Slack Highlights - **#general**: Organization restructuring discussion - **#sales**: New lead from inbound campaign - **#daily-report**: Project Beta milestone reached ## Morning Reflection - Yesterday's decision: Revised product roadmap - Today's focus: Follow up on pending proposals ## Evening Reflection - Highlight: Project Beta milestone reached - Pattern: Mondays consistently have 10+ meetings (3 weeks) - Unresolved: Partner meeting follow-up ## Thoughts ``` ## Scripts Included | Script | Purpose | |--------|---------| | `on-session-end.sh` | Stop hook: appends session summary to daily note + MEMORY.md | | `on-file-change.sh` | PostToolUse hook: logs CLAUDE.md/memory/skill changes | | `weekly-sync.sh` | Weekly lint: broken links, orphan pages, stale content | | `git-pull-sync.sh` | Hourly git pull with stash handling | | `sync-agent-to-vault.sh` | Enriches daily notes from external agent JSON data | | `sync-x-bookmarks.sh` | Auto-fetches X bookmarks + clips (every 4 hours) | All scripts are macOS-compatible (no GNU extensions), reviewed for security (no shell injection, PID-based locking instead of flock). ## References - [Karpathy's LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) β€” The original pattern - [Claude Code Hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) β€” async hook documentation - [Cloud Scheduled Tasks](https://docs.anthropic.com/en/docs/claude-code/scheduled-tasks) β€” PC-free automation - [QMD](https://github.com/tobi/qmd) β€” Markdown semantic search (for 100+ pages) ## License MIT