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