Your AI-powered Second Brain and Chief of Staff
A git-tracked Obsidian vault designed for Claude Code. Natural language in, organized knowledge out. Every action creates a timestamped commit, giving you a complete audit trail of your productivity system.
Second Brain transforms Claude Code into an executive assistant that:
- Captures naturally — Say "meeting with Sarah Friday about Q2 planning" and watch it create linked person notes, tasks, and project files
- Plans your day — Aggregates due tasks, overdue items, and active projects into a daily plan
- Reviews progress — Compares planned vs actual at end of day, updates statuses, identifies patterns
- Delegates work — Forks new terminal sessions to work on tasks autonomously across repos
- Tracks everything — Every Write/Edit auto-commits with
cos:prefix for easy filtering
| Requirement | Details | Link |
|---|---|---|
| Claude Pro/Max | Subscription for Claude Code access | claude.ai |
| Claude Code | Anthropic's agentic CLI | See installation below |
| Obsidian | Free markdown editor (recommended) | obsidian.md/download |
| Git | Version control (pre-installed on macOS) | - |
| Python 3.8+ | For scripts (pre-installed on macOS) | - |
If you don't have Claude Code installed:
# Install via npm (recommended)
npm install -g @anthropic-ai/claude-code
# Or via Homebrew
brew install claude-codeVerify installation:
claude --versionOn first run, Claude Code prompts you to authenticate with your Anthropic account.
Prefer a GUI? Anthropic offers a VS Code extension with the same agentic capabilities—same power, nicer interface.
Download from obsidian.md/download. Obsidian is free for personal use.
git clone https://github.com/bradautomates/second-brain.git
cd second-brainOr download the ZIP from GitHub and extract it.
- Open Obsidian
- Click "Open folder as vault"
- Select the
second-brainfolder - Trust the folder when prompted
The .gitignore excludes Obsidian workspace files so your local settings won't conflict with git.
Create files in context/ to personalize Claude's behavior:
context/writing-style.md:
---
type: context
---
## Writing Style
- Concise, direct communication
- Bullet points over paragraphs
- Technical but accessiblecontext/business-profile.md:
---
type: context
---
## Business Profile
- Role: [Your role]
- Company: [Your company]
- Focus areas: [Current projects]Claude reads these to understand how you work and communicate.
cd second-brain
claudeThe CLAUDE.md file provides all context automatically. You're ready to go.
# Capture something
/new remember to review quarterly report by Friday
# Generate today's plan
/today
# Check recent activity
/historyThe real power comes from delegating work to specialized AI employees.
AI employees are separate Claude Code repositories with specialized skills:
- Head of Content — Researches winning content across social platforms
Each lives in its own repo. The Chief of Staff orchestrates all of them via tasks created in the second brain.
Edit .claude/reference/employees.json:
{
"head-of-content": "~/Documents/GitHub/head-of-content"
}/delegate head-of-content: research YouTube content for AI productivity nicheA separate Claude instance spawns in a new terminal, working in the employee's repo. When done:
- Task file updates with output locations
- Notification sound plays
- Full traceability of what was delegated
| Command | Purpose | Example |
|---|---|---|
/new <text> |
Quick capture — classify and file | /new call John about project by Friday |
/today |
Generate daily plan from due tasks | /today |
/daily-review |
End of day — planned vs actual | /daily-review |
/history |
Recent git activity | /history |
/delegate <task> |
Fork terminal for autonomous work | /delegate write the quarterly report |
When you use /new, the system:
- Decomposes input into entities (may be multiple)
- Classifies each as task, project, person, or idea
- Extracts due dates, tags, names
- Links entities via
[[wiki-style]]links - Writes files to appropriate folders
- Auto-commits via PostToolUse hook
| Type | Trigger | Example |
|---|---|---|
| Person | Named individual with context | "Meeting with Sarah" |
| Project | Ongoing work, multiple steps | "Website redesign" |
| Task | Specific actionable item | "Call John by Friday" |
| Idea | Speculative, "what if" | "What if we added AI features" |
| Score | Action |
|---|---|
| 0.9+ | Proceed without confirmation |
| 0.7-0.9 | Proceed, probably correct |
| 0.5-0.7 | Proceed, note uncertainty in commit |
| <0.5 | Ask for clarification |
All files use YAML frontmatter:
---
type: task
due: 2026-01-25
status: pending # pending | in-progress | complete | cancelled
tags: [work, q1]
---
Description of what needs to be done.---
type: project
status: active # active | paused | complete | archived
tags: [client-work]
---
## Next Action
- First thing to do
## Notes
- Key context---
type: person
last-contact: 2026-01-20
tags: [client, design]
---
## Context
Who they are, relationship.
## Follow-ups
- [ ] Pending items with this person---
type: idea
tags: [product, ai]
---
Description of the idea and potential applications.The system uses two hooks configured in .claude/settings.json:
Triggers after every Write or Edit operation on vault content:
.claude/hooks/auto-commit.sh- Only commits files in:
tasks/,projects/,people/,ideas/,daily/,weekly/ - Generates commit messages:
cos: new task - task-nameorcos: update project - project-name - Filter all activity:
git log --grep="cos:"
Plays notification sound when delegated task completes:
.claude/hooks/stop-sound.shOnly triggers when CLAUDE_DELEGATED=1 environment variable is set.
Credit: The delegate skill is based on IndieDev Dan's fork-repository-skill. Check out his YouTube channel for more Claude Code content.
The /delegate command forks a new terminal window for autonomous work:
/delegate write the quarterly report based on project notes- Reads
employees.jsonfor cross-repo delegation targets - Builds prompt with full context (absolute paths, source repo reference)
- Executes via
fork_terminal.py:python3 .claude/skills/delegate/scripts/fork_terminal.py 'claude --model opus "<prompt>"' - New terminal opens with
CLAUDE_DELEGATED=1set - When complete,
stop-sound.shplays notification
| Variable | Model | Use Case |
|---|---|---|
DEFAULT_MODEL |
opus | Standard delegation |
HEAVY_MODEL |
opus | Complex multi-step work |
BASE_MODEL |
sonnet | Moderate complexity |
FAST_MODEL |
haiku | Quick operations |
Configure delegation targets in .claude/reference/employees.json:
{
"head-of-content": "~/Documents/GitHub/head-of-content"
}Then delegate: /delegate head-of-content: research competitors
Parses natural language, classifies entities, creates linked files.
Input: "New project with John Smith for marketing outbound, need landing page"
Creates:
people/john-smith.md(if doesn't exist)projects/marketing-outbound.md(linked to John Smith)tasks/create-landing-page.md(linked to project)
Generates daily/YYYY-MM-DD.md with:
- Due Today — Tasks with today's due date
- Overdue — Past-due tasks with days overdue
- Active Projects — Projects with
status: activeand their next actions - Recent Activity — Today's
cos:commits
Uses grep-first approach (never globs all tasks):
grep -l "due: 2026-01-25" tasks/*.mdCompares planned vs actual:
- Reads daily plan
- Gets activity from
git log --since="8am" --grep="cos:" - Updates task statuses
- Appends review section with completed/incomplete items
- Commits:
cos: daily review for YYYY-MM-DD
Shows last 7 days of Chief of Staff activity:
git log --since="7 days ago" --grep="cos:" --format="%ad %s" --date=shortForks terminal for autonomous work. See Delegation section.
Comprehensive guide for building skills with proper structure:
skill-name/
├── SKILL.md # Required: frontmatter + instructions
├── scripts/ # Executable Python/Bash
├── references/ # Documentation for context
└── assets/ # Templates, images for output
Initialize a new skill:
python3 .claude/skills/skill-creator/scripts/init_skill.py my-skill --path .claude/skillsCreates folder structure and initializes git:
python3 .claude/skills/start-second-brain/scripts/init_vault.py [path]Every action generates a timestamped commit with consistent format:
cos: <action> - <description>
| Pattern | Meaning |
|---|---|
cos: new task - name |
Created task |
cos: update project - name |
Modified project |
cos: complete task - name |
Marked complete |
cos: daily plan for YYYY-MM-DD |
Created daily note |
cos: daily review for YYYY-MM-DD |
End of day review |
# Today's activity
git log --since="8am" --grep="cos:" --oneline
# Last week
git log --since="7 days ago" --grep="cos:" --format="%ad %s" --date=short
# What changed last
git diff HEAD~1
# File history
git log -p tasks/my-task.md
# All Chief of Staff commits
git log --grep="cos:"second-brain/
├── CLAUDE.md # Main project instructions
├── README.md # This file
├── .gitignore # Excludes Obsidian workspace files
├── tasks/ # Items with due dates
├── projects/ # Ongoing work
├── people/ # Relationship notes
├── ideas/ # Captured thoughts
├── context/ # LLM context files
├── daily/ # Daily plans (YYYY-MM-DD.md)
├── weekly/ # Weekly summaries (YYYY-WNN.md)
├── outputs/ # Deliverables
└── .claude/
├── settings.json # Permissions and hooks config
├── reference/
│ ├── file-formats.md # Templates for all file types
│ └── employees.json # Delegation targets
├── hooks/
│ ├── auto-commit.sh # Auto-commit after Write/Edit
│ └── stop-sound.sh # Notification on delegation complete
└── skills/
├── new/SKILL.md # Quick capture
├── today/SKILL.md # Daily planning
├── daily-review/SKILL.md # End of day review
├── history/SKILL.md # Recent activity
├── delegate/ # Task delegation
│ ├── SKILL.md
│ ├── scripts/fork_terminal.py
│ └── references/fork_summary_user_prompt.md
├── skill-creator/ # Skill creation guide
│ ├── SKILL.md
│ ├── scripts/
│ │ ├── init_skill.py
│ │ ├── package_skill.py
│ │ └── quick_validate.py
│ └── references/
│ ├── output-patterns.md
│ ├── workflows.md
│ └── research-skill-pattern.md
└── start-second-brain/ # Vault initialization
├── SKILL.md
└── scripts/init_vault.py
-
Check permissions in
.claude/settings.json:"allow": ["Bash(git add:*)", "Bash(git commit:*)"]
-
Verify hook is executable:
chmod +x .claude/hooks/auto-commit.sh
-
Confirm file is in a tracked directory (
tasks/,projects/, etc.)
- Ensure task has
due: YYYY-MM-DDin frontmatter - Check date format matches exactly (no spaces, ISO format)
- Verify task is in
tasks/folder
Confidence threshold is 0.5. If you want less confirmation:
- Be more specific in input: "task: call John by Friday"
- Add explicit type hints
- Git is the database — No separate storage, just markdown and commits
- Natural language first — Say what you mean, let classification handle the rest
- Grep before glob — Never load all files, search efficiently
- Progressive disclosure — Skills load context in layers to manage tokens
- Auto-commit everything — Hooks ensure nothing is lost
- Cross-repo awareness — Delegation maintains context across projects
MIT License — Feel free to modify and distribute.
Practical AI implementation for real business results.
Learn how to implement AI tools and workflows that actually move the needle for your business on my YouTube channel.
Follow @corpcowboy_ on X