An installer for provisioning Obsidian vaults as personal knowledge management systems, powered by Claude Code automation.
This repo is not the vault itself — it's the installer. Running install.sh creates a fully configured Second Brain vault at a location of your choosing, with:
- Type-dispatched notes — every note has a
typefrontmatter field (person, project, task, meeting, etc.) with enforced schemas - Live database views — Obsidian Bases files that query notes by frontmatter properties
- AI-powered daily workflows — Claude Code slash commands for morning briefings (
/today), end-of-day processing (/eod), meeting capture (/meeting), and more - Configurable integrations — GitHub, GitLab, Slack, Notion, Google Workspace, and Granola meeting sync
| Tool | Required | Install |
|---|---|---|
| Homebrew | Yes | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
| Obsidian | Yes | brew install --cask obsidian |
| Obsidian CLI | Yes (v1.12+) | See Obsidian docs |
| Claude Code | Yes | npm install -g @anthropic-ai/claude-code |
| jq | Yes | brew install jq |
| Python 3 | Yes | Ships with macOS |
| gum | Auto-installed | brew install gum |
The installer will check for these and offer to install missing tools via Homebrew.
| Tool | For | Install |
|---|---|---|
GitHub CLI (gh) |
GitHub sync | brew install gh |
GitLab CLI (glab) |
GitLab sync | brew install glab |
git clone https://github.com/norrietaylor/second-brain.git
cd second-brain
./install.shThe interactive installer will prompt for:
- Vault name — used in Obsidian and CLI commands (default:
second-brain) - Vault location — where to create the vault (default:
~/Documents/obsidian/<name>) - Integrations — which features to enable:
- GitHub sync (issue/PR tracking, notifications)
- GitLab sync (MR/issue tracking, todos)
- Slack activity tracking (time estimates for Harvest)
- Notion task tracking (tasks, mentions, follow-ups — via Notion MCP)
- Google Workspace (Gmail triage, Calendar agenda, Gemini meeting minutes — via Google MCP)
- Granola meeting sync (transcription)
- Git-backed vault (version control with update support)
- Your profile — name, role, email (used in meeting notes and config)
If you installed with "Git-backed vault" enabled:
cd /path/to/this/installer-repo
git pull
./install.sh --updateThe updater:
- Finds your vault (or prompts for the path)
- Updates the
sb/upstreamtracking branch with new template files - Merges into your
mainbranch - You resolve any conflicts in files you've customized
For non-git vaults, --update overwrites installer-managed files directly.
.claude/commands/— slash commands (/today,/eod,/meeting, etc.).claude/skills/— Claude Code skills (classify, obsidian-cli, gh-onmyplate, etc.).claude/agents/— automation agents.claude/settings.json— permissions and hooks05 Meta/claude/— type schemas (*.claude.md).claude/scripts/— shell scripts (gh-fetch, sb-ingest, granola-ingest, etc.)05 Meta/templates/— Templater templates05 Meta/bases/— system base views02 Areas/*.base— browsing views01 Projects/*.base— project trackingCLAUDE.md— vault documentation for Claude Code
05 Meta/config.yaml— classification, Slack, Notion, and Granola settings05 Meta/context/— work profile, priorities05 Meta/logs/— classification audit trail04 Data/— all your notes.claude/settings.local.json— your local Claude Code settings
See the installed vault's CLAUDE.md for full documentation on:
- Type dispatch system and note schemas
- File naming conventions
- Obsidian CLI usage
- Classification pipeline
- GitHub/GitLab sync architecture
- Granola meeting sync
- Slack activity tracking
- Notion task tracking
This repo uses the following structure:
├── install.sh ← main installer + updater
├── lib/ ← installer helper scripts
├── template/ ← vault source files (copied to target)
├── scaffold/ ← user-owned files (created once)
└── docs/ ← development specs and proofs
To work on the installer:
cd /path/to/second-brain # this repo
claude # uses root CLAUDE.md for context