eugeniughelbur/obsidian-second-brainPublic

Persistent memory for Claude Code and 6 other CLI agents, stored as plain markdown in your Obsidian vault. Stop re-explaining your projects, decisions and people every session. 45 commands: hybrid semantic search, self-rewriting notes, key-less web research, and scheduled agents that maintain the vault while you sleep.

AI summary: A persistent memory system for CLI agents that stores data as markdown in an Obsidian vault.

Stars
3.9K
+33 today
Forks
488
Watchers
27
Open issues
4
Open PRs
2
Contributors
~29
Commits
369
Branches
2

PythonMITCreated Mar 24, 2026Last push 3d agoLatest release v0.14.0+147 stars this week+186 this month

Star history

since Apr 5, 2026
01K2K3KApr 2026May 2026Jun 2026Aug 2026
3.9K stars as of Aug 7, 2026, tracked back to Apr 5, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 7 commits2026-03-25: 3 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 3 commits2026-04-06: 11 commits2026-04-07: 3 commits2026-04-08: 0 commits2026-04-09: 8 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 2 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 2 commits2026-04-23: 1 commit2026-04-24: 0 commits2026-04-25: 2 commits2026-04-26: 13 commits2026-04-27: 17 commits2026-04-28: 0 commits2026-04-29: 2 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 1 commit2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 2 commits2026-05-07: 2 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 2 commits2026-05-11: 4 commits2026-05-12: 0 commits2026-05-13: 6 commits2026-05-14: 1 commit2026-05-15: 3 commits2026-05-16: 2 commits2026-05-17: 0 commits2026-05-18: 1 commit2026-05-19: 0 commits2026-05-20: 3 commits2026-05-21: 1 commit2026-05-22: 1 commit2026-05-23: 0 commits2026-05-24: 4 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 11 commits2026-05-28: 3 commits2026-05-29: 0 commits2026-05-30: 4 commits2026-05-31: 9 commits2026-06-01: 2 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 3 commits2026-06-05: 2 commits2026-06-06: 1 commit2026-06-07: 0 commits2026-06-08: 1 commit2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 1 commit2026-06-12: 1 commit2026-06-13: 0 commits2026-06-14: 3 commits2026-06-15: 3 commits2026-06-16: 0 commits2026-06-17: 8 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 2 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 28 commits2026-06-28: 5 commits2026-06-29: 3 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 7 commits2026-07-04: 1 commit2026-07-05: 1 commit2026-07-06: 2 commits2026-07-07: 2 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 2 commits2026-07-11: 32 commits2026-07-12: 14 commits2026-07-13: 3 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 4 commits2026-07-17: 2 commits2026-07-18: 25 commits2026-07-19: 0 commits2026-07-20: 1 commit2026-07-21: 1 commit2026-07-22: 2 commits2026-07-23: 2 commits2026-07-24: 0 commits2026-07-25: 9 commits2026-07-26: 38 commits2026-07-27: 5 commits2026-07-28: 1 commit2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 6 commits2026-08-01: 3 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 5 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
365 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What obsidian-second-brain does

This project provides persistent, queryable memory for AI CLI agents like Claude Code, fundamentally solving the context-loss problem between chat sessions. It writes and retrieves all memory states as plain markdown files directly within a user's Obsidian vault. It features an array of 45 robust commands, including hybrid semantic search and self-rewriting note capabilities, allowing the AI to autonomously organize data. It even supports key-less web research and scheduled agent tasks that groom the vault in the background. By centralizing context in Obsidian, it gives AI agents a true long-term 'second brain'.

Aimed at power users, knowledge workers, and developers who heavily rely on both Obsidian and CLI AI agents for daily tasks.

  • Plain markdown storage: Saves all AI memory states directly into an Obsidian vault for human readability.
  • Hybrid semantic search: Enables agents to deeply query past context and decisions stored in the notes.
  • Self-rewriting capabilities: Allows the agent to autonomously update and groom markdown files.
  • Scheduled background tasks: Runs maintenance and summarization agents automatically while you sleep.
  • Extensive command suite: Includes 45 distinct commands covering web research to vault management.

Where teams use it

Long-term project continuity

Prevents having to re-explain the same architectural decisions or context to an AI in every new session.

Automated knowledge management

Uses background agents to keep personal Obsidian notes clean, summarized, and organized.

AI-assisted research

Executes key-less web searches and instantly documents the findings directly into the vault.

Cross-session memory

Provides a unified context state that can be shared across multiple different CLI agents.

Getting started: Follow the repository's integration guide to link your agent to your local Obsidian path.

README

main branch

obsidian-second-brain: one brain, seven platforms, 46 commands. A cross-platform skill for Obsidian that runs on Claude Code, Codex, Gemini, OpenCode, Antigravity, Hermes, and Pi.

Claude Code Codex CLI Gemini CLI OpenCode

One codebase. Seven CLIs. Same brain.
Your vault outlives whichever CLI you switch to.

Obsidian Vault Release License: MIT Stars Sponsor

obsidian-second-brain: an AI second brain for Obsidian that Claude can actually search

An evolution of Karpathy's LLM Wiki pattern: a vault that rewrites itself.

Every source updates existing pages instead of just appending new ones. Contradictions reconcile automatically. Your vault compounds while you sleep.

Powered by OKM - Open Knowledge Metabolism: every stored fact is timeless, dated, or a pointer - so your knowledge base never fills with facts that used to be true.

Built for developers · founders and operators · writers · researchers - pick a preset at setup

Start with three: /obsidian-init to set up, /obsidian-save to capture, /obsidian-find to recall. The other 42 are there when you need them.

auto-synthesis · thinking tools that argue with you

live research from X, the web, and YouTube · 4 scheduled agents · 4 role presets

write-time AI-first validator · /create-command interview flow · multilingual trigger schema

Install → · Demos · See it in action · All commands · Presets · OKM · Discussions

One /obsidian-save command turns a conversation into five cross-linked AI-first notes: a person, a project with the decision, a task, a board card, and the daily note.
One /obsidian-save - five cross-linked notes. Real footage, synthetic vault. More demos →

If this looks useful, star the repo. It is how other people find it.

v0.14 - The Harvest (July 2026): we scanned all 408 forks of this repo and shipped the best ideas back upstream, crediting every author.
Multi-turn /obsidian-brainstorm, bounded vault recall, full-page source reading, Brave + Tavily sources, a guarded updater, supersession-aware search, secret detection, pt-BR triggers - and one Agent Skills build serving Codex, OpenCode, Antigravity, and Copilot CLI (v0.13). 198-test CI wall. See the changelog →


The Problem

You use Claude every day. Every session starts from scratch. You re-explain everything. The conversation ends. Everything disappears. Claude Code has no persistent memory across sessions, and neither does Codex, Gemini, or any of the others.

You take notes in Obsidian. Hundreds of files. They just sit there. You make the same decision twice because you forgot you made it six months ago. Ideas rot in daily notes. Nobody connects the dots.

Two powerful tools. Completely disconnected. You already have the long-term memory. The thing doing the thinking cannot reach it.


How this extends Karpathy's LLM Wiki

Karpathy's pattern is brilliant. Drop sources, LLM creates wiki pages, ask questions. This skill takes it further:

Karpathy's LLM Wiki obsidian-second-brain
New sources Append new pages, cross-reference Rewrite existing pages. People get updated, claims revised, stale facts replaced.
Contradictions Flagged, you resolve manually /obsidian-reconcile resolves them automatically
Patterns Surface when you ask /obsidian-synthesize finds unnamed patterns and writes synthesis pages on its own
When it runs On demand, when you prompt 4 scheduled agents: morning brief, nightly consolidation, weekly review, vault-health check
Note format Human-readable wiki pages AI-first: ## For future Claude preamble + frontmatter for LLM retrieval, not human review

If Karpathy's wiki is a knowledge base you maintain with an LLM, this is a knowledge base that maintains itself.


What Happens When You Install This

After a meeting: /obsidian-save Claude pulls out every decision, person, task, and idea and saves each one to the right note. You do nothing.

You recorded a voice memo: /obsidian-ingest meeting.m4a Claude transcribes it with a local Whisper install, attributes speakers where the transcript makes them identifiable, extracts every promise and action item, and distributes across entity pages, task boards, and the daily note.

You screenshot a whiteboard: /obsidian-ingest photo.png Claude reads the image, extracts text and structure, creates concept notes, links to related projects. A photo becomes knowledge.

You find a great video: /obsidian-ingest https://youtube.com/... Claude doesn't summarize into one note. It REWRITES your existing pages. People get updated. Contradictions get resolved. Patterns trigger new synthesis pages. One URL in. The vault is smarter.

Before a big decision: /obsidian-challenge Claude searches your vault for past failures and reversed decisions on the same topic. Pushes back with your own words. Your vault holds you accountable.

You want to see the big picture: /obsidian-visualize Claude generates a visual canvas of your entire vault. Hub nodes centered, color-coded by type, orphans highlighted. Open it in Obsidian and see the shape of your knowledge.

You go to sleep: The nightly agent runs 5 phases: closes the day, reconciles contradictions, synthesizes cross-source patterns, heals orphan notes, and rebuilds the index. You wake up to a smarter vault.

You start a new day: /obsidian-daily Claude pulls your calendar events, overdue tasks, and overnight changes into today's note. Your morning starts informed.

Someone shares an X post: /x-read https://x.com/... Grok with live X access fetches the post, the thread, and the replies. Returns verbatim text + TL;DR + key claims + reply sentiment + voices to watch. No more screenshots.

You're planning today's content: /x-pulse "AI automation" Grok scans X for what's trending in your topic right now. Returns 3-5 emerging themes (with rep posts + key voices), gaps nobody is filling, hook formats that are working, and 3 specific post ideas you could write today.

You need real research: /research "AI memory tools" Perplexity Sonar Pro pulls a deep dossier with citations: summary, key facts (every claim with a recency marker and source domain), timeline, key players, contrarian views, recommended further reading, open questions. Saved to your vault, auto-opens in Obsidian.

You want vault-first deep research: /research-deep "AI memory tools" Scans your vault for what you already know. Identifies gaps. Spawns 3-5 targeted searches via Perplexity (web) and Grok (X discourse). Synthesizes a delta report: what's new, what's confirmed, contradictions to resolve, recommended vault updates. Vault baseline doesn't get re-researched. Only gaps get filled.

You hit a great YouTube video: /youtube https://youtu.be/... Free transcript via youtube-transcript-api. Optional metadata + top comments via YouTube Data API v3. Gemini (free tier, Grok fallback) summarizes into TL;DR, Key Points, Notable Quotes (verbatim), Themes, Comment Sentiment, and Worth Following Up On. Saved as an AI-first note in your vault. Add --visual to also watch it: scene-change frame extraction (ffmpeg) that Claude reads with its own vision to capture on-screen text, code, diagrams, and demos the transcript misses.

You never open Obsidian. Everything happens through Claude.


Before & After

Without this skill With this skill
Saving decisions Copy-paste or lose them Auto-saved to the right project note
Daily notes Write it yourself, forget half the time Created automatically
Finding patterns Re-read dozens of notes /emerge finds them for you
Challenging yourself Nobody pushes back /challenge uses your own history against you
Session continuity Re-explain every time /world loads full context in 10 seconds
Ingesting content Read it, forget it /ingest rewrites 5-15 vault pages from 1 source (URLs, PDFs, audio, screenshots)
Contradictions You don't know they exist /reconcile resolves them automatically
Synthesis You connect dots manually /synthesize finds patterns across sources on its own
Sharing vault data Only Claude can read it /export gives any AI tool a clean snapshot
Facts change over time Old info gets overwritten Bi-temporal facts track when it was true AND when the vault learned it
Starting a new session Re-explain who you are CRITICAL_FACTS.md loads your identity in ~120 tokens
Reading an X thread Open X, scroll, screenshot, paste /x-read [url] returns post + thread + sentiment + voices
Knowing what to post Guess what's trending /x-pulse scans X and returns hot themes + gaps + hooks + post ideas
Web research Open 12 tabs, copy quotes manually /research [topic] returns a sourced dossier with recency markers
Researching what you already know Re-research from scratch /research-deep scans vault first, fills only the gaps, flags contradictions
YouTube videos Watch passively, forget /youtube [url] transcript + summary + quotes saved to vault
Vault notes for future-Claude Notes for human reading AI-first rule: every note has "For future Claude" preamble + recency markers + citations

More from the author

The product is above. This is where it came from and where it goes next.

From the blog · The AI Operator →

Featured: "HUGE update on obsidian-second-brain: The Architect"
/obsidian-architect · document your codebase into your vault · the full before-and-after

Deep dive: "I rebuilt Karpathy's LLM Wiki. Here's what's missing from the original."
Why append-only breaks at scale · the AI-First Vault Principle · three bugs in v1

Origin story: "I built this for myself. Then 1,374 strangers cloned it."
Two disconnected tools · the institutional-amnesia problem · 1,000+ stars in 7 weeks

One post per Tuesday on Obsidian + AI workflows and bringing AI into real work.

Research toolkit · dual-track
/x-read · /x-pulse · /research · /research-deep · /notebooklm · /youtube · /podcast

Open-web track · /research-deep via Perplexity + Grok. Pulls fresh signal from outside.
Source-grounded track · /notebooklm via Gemini File Search. Reads your own vault.
Run both for high-stakes topics. Contradictions across the two are where the insight is.

Built by Eugeniu Ghelbur · AI Automation Engineer @ Single Grain
building in public · sharing what works

Follow along

Weekly posts on AI second-brain systems, vault patterns, and what actually works.

Follow on X Connect on LinkedIn Subscribe on Substack Follow on GitHub



How It Works

  +------------------------------------------+
  |                                          |
  |   LAYER 1: Operations (28 commands)      |
  |   Claude remembers everything            |
  |                                          |
  +------------------------------------------+
  |                                          |
  |   LAYER 2: Thinking Tools (9 commands)   |
  |   Claude thinks with you                 |
  |                                          |
  +------------------------------------------+
  |                                          |
  |   LAYER 3: Context Engine (1 command)    |
  |   Claude knows who you are               |
  |                                          |
  +------------------------------------------+
  |                                          |
  |   LAYER 4: Research Toolkit (7 commands) |
  |   Claude pulls knowledge in              |
  |                                          |
  +------------------------------------------+
  |                                          |
  |   ALWAYS ON                              |
  |   Background agent + 4 scheduled agents  |
  |   Auto-synthesis + save reminders        |
  |                                          |
  +------------------------------------------+

46 commands total. The calendar command (/obsidian-calendar) is Claude Code only (needs the Google Calendar MCP), so the Codex / Gemini / OpenCode / Hermes / Pi / Agent Skills builds ship 45.

Layer 1 saves, organizes, ingests, reconciles, exports, schedules your calendar, and maintains your vault. Layer 2 challenges your ideas, surfaces hidden patterns, bridges unrelated domains, and graduates ideas into projects. Layer 3 loads your identity and current state so every session picks up where the last one ended. Layer 4 pulls live external knowledge into the vault: X posts, X trends, web research with citations (key-less by default), YouTube and podcast transcripts. Vault-first synthesis knows what you already know. Always On keeps the vault alive without you lifting a finger.


46 Commands

Operations -- Claude remembers

Command What it does
/obsidian-save Saves everything from the conversation -- decisions, tasks, people, ideas
/obsidian-ingest Drop a URL, PDF, audio file, or screenshot. The vault REWRITES itself. 5-15 pages touched per source.
/obsidian-synthesize Auto-finds patterns across sources and writes synthesis pages
/obsidian-reconcile Finds contradictions and resolves them. The vault maintains its own truth.
/obsidian-export Clean JSON/markdown snapshot any AI tool can read
/obsidian-daily Creates or updates today's daily note
/obsidian-calendar <mode> One calendar command, four modes: agenda (read a snapshot), reconcile (flag commitments not yet scheduled), meeting (event to note), schedule (create/move an event from a task or standalone)
/obsidian-recurring Tracks a recurring obligation with a cadence and a computed next-due date
/obsidian-log Logs a work session, links it everywhere
/obsidian-task Adds task to the right board with priority and due date
/obsidian-person Creates or updates a person note
/obsidian-capture Zero-friction idea capture
/obsidian-catchup Process captures dumped from the Telegram bot (voice/text/image/PDF/link) into the vault
/obsidian-find Smart search with context
/obsidian-recap Summary of a day, week, or month
/obsidian-review Structured weekly or monthly review
/obsidian-board Kanban board view and updates
/obsidian-board-hygiene Bulk-triage a board -- surface stale/overdue items, then archive / reschedule / mark-Done in one pass
/obsidian-project Project note with board and daily links
/obsidian-projects Live project status from git + local docs -- infers all context from vault notes, no config required
/obsidian-health Vault audit -- contradictions, gaps, stale claims, orphans, freshness violations (the freshness policy: every fact timeless, dated, or a pointer), and typed-edge lint (unknown types, dangling targets, contradiction cycles in the relations: graph)
/obsidian-reindex Refreshes the incremental semantic index and reports coverage before and after, with clear embedding-backend failures
/obsidian-retrieval-eval Measures vault search quality -- recall@k + MRR on natural-language questions, with the concrete failures and ranked fixes
/obsidian-decide [--formal] Logs decisions to the right project notes; --formal writes a full ADR record (the vault knows why it's structured this way)
/obsidian-visualize Generates a visual canvas map of your second brain
/obsidian-learn Reviews vault learnings, prunes stale ones, surfaces patterns to promote into rules
/obsidian-init Generates _CLAUDE.md, index.md, log.md
/obsidian-architect Scans a codebase and writes maintained architecture notes (overview, modules, decisions) into the vault; re-run to refresh
/create-command Interview flow that scaffolds a new command into commands/<name>.md, no markdown editing

Thinking -- Claude thinks with you

Command What it does
/obsidian-brainstorm [topic] Multi-turn Socratic interview - one question per turn until the idea converges, then a design note with named alternatives
/obsidian-challenge Your vault argues against your idea using your own history
/obsidian-panel Convenes a panel of distinct perspectives on a decision, one verdict each + synthesis
/obsidian-emerge Surfaces patterns from 30 days of notes you never named
/obsidian-connect [A] [B] Bridges two unrelated domains to spark new ideas
/vault-deep-synthesis [topic] Cross-references every note on a topic: agreements, contradictions, stale claims, gaps
/obsidian-distill [note or source] Condenses a long note/source into key claims, each tagged with provenance back to the exact source block
/idea-discovery Ranks 3-5 next-direction candidates from ideas, open questions, and orphan research
/obsidian-graduate Turns an idea fragment into a full project with tasks

Context -- Claude knows you

Command What it does
/obsidian-world Loads identity + state with progressive token budgets (L0-L3)

Research -- Claude pulls knowledge in

Powered by xAI Grok (live X access) + Perplexity Sonar (web research) + YouTube. Findings save to Research/ as AI-first notes (preamble, frontmatter, recency markers, sources verbatim).

Command What it does
/x-read [url] Deep-read an X post: verbatim post + thread + TL;DR + claims + reply sentiment + voices
/x-pulse [topic] Scan X for what's trending: themes, voices, hooks, post ideas
/research [topic] Web research with citations: full dossier with recency markers and open questions. Uses Perplexity when keyed, free key-less sources (Wikipedia, HackerNews, arXiv, Reddit, and more) otherwise
/research-deep [topic] Vault-first synthesis (open web): scans your vault, finds gaps, fills them via Perplexity + Grok (or free key-less sources when unkeyed), propagates updates across people/projects/ideas
/notebooklm [topic] Vault-grounded synthesis via Gemini File Search. Uploads top 12 vault notes, returns a grounded answer with citations. No browser, one HTTP call. Pairs with /research-deep for dual-track research.
/youtube [url] [--visual] Extract transcript + metadata + top comments → AI-first summary. --visual adds scene-change frame extraction Claude reads with its own vision
/podcast [url] Apple Podcasts or RSS → transcript (RSS tag / Whisper / show-notes) + AI-first summary

Setup: copy .env.example to ~/.config/obsidian-second-brain/.env, add your keys (xAI, Perplexity, YouTube optional, OpenAI optional for podcast Whisper). Run install.sh and answer "y" to the research prompt to do this automatically.

No keys? /research and /research-deep still work. With no PERPLEXITY_API_KEY set they automatically fall back to free, key-less sources (Wikipedia, HackerNews, arXiv, Reddit, Lobsters, dev.to, OpenAlex, Semantic Scholar, CrossRef, DuckDuckGo - plus Tavily/Brave when keyed) and Claude synthesizes the dossier. Pass --free to force it even when keyed, or --academic to restrict to scholarly sources. The other research commands (/x-read, /x-pulse, /notebooklm, /youtube) still need their respective keys.

See the thinking tools in action

/obsidian-challenge

You: "I want to rewrite the API in Rust."

Claude finds your 2025 post-mortem where the Rust rewrite failed. Finds your decision log committing to TypeScript for 2 years. Says: "Your own notes say this failed. Still want to proceed?"


/obsidian-emerge

Claude scans 30 daily notes. You mentioned "onboarding friction" in 4 unrelated projects.

"Onboarding is your bottleneck across projects. You never named it."


/obsidian-connect "distributed systems" "cooking"

Traces both clusters in your link graph. Finds shared concepts: preparation and load distribution. Generates 3 actionable ideas at the intersection.


/obsidian-graduate

An idea from 3 weeks ago. Claude reads it, finds related projects and people, generates a full spec with goals, phases, tasks, and board entries. The idea gets tagged graduated.

See /obsidian-ingest in action
/obsidian-ingest https://youtube.com/watch?v=example
  1. Saves original to raw/videos/ (immutable)
  2. REWRITES entity pages with new context
  3. REWRITES concept pages if the source adds depth or contradicts them
  4. Creates synthesis pages when patterns emerge
  5. Resolves contradictions and documents why
  6. Updates index.md, log.md, daily note

One URL in. The vault rewrites itself.

See the research toolkit in action

/x-read https://x.com/garrytan/status/2048121438914154664

Grok with live X access fetches the post and replies. You get verbatim text, TL;DR, key claims, reply sentiment (~70% positive, 20% skeptical, 10% off-topic), notable counter-arguments with the @ handles of who said them, and "voices to watch" (the replies that added real signal). ~$0.05/call.


/x-pulse "AI automation"

WHAT'S HOT (last 24-72h)
  1. Agentic AI vs Basic Automation — voices: @NVIDIAAP, @woisau1
  2. Self-Improving Sovereign Agents — voices: @tom_doerr, @AIDailyGems
  3. Control Layers & Execution Gaps — voices: @ZIQING_JP

WHAT'S UNDEREXPLORED
  - ROI numbers for non-developer small business users
  - Integration of digital agents with physical robotics

HOOKS THAT ARE WORKING
  - "Automation executes. Autonomy reasons." — @NVIDIAAP

POST IDEAS FOR YOU TODAY
  1. Thread: "I gave an open-source agent its own GitHub repo and watched it self-improve"
  2. Single: "Automation executes. Autonomy reasons. Here's the control layer..."

What you'd spend 2 hours scrolling X to find. Returned in 30 seconds for ~$0.13.


/research "AI memory tools"

Returns a structured dossier: Summary, Key Facts (each with (as of YYYY-MM, source.com)), Timeline, Key Players, Contrarian Views, Recommended Further Reading, Open Questions, full citations. Saved to Research/Web/ as an AI-first note. ~$0.05/call.


/research-deep "AI memory tools"

Phase 1: Vault scan
  Found 8 relevant notes (e.g. Knowledge/2026-02-15 - Mem0 vs Letta.md)

Phase 2: Gap analysis (Perplexity sonar-pro)
  Identified 5 targeted queries to fill what vault is silent or stale on

Phase 3: Targeted research
  [web] Anthropic Claude memory tool 2026 features
  [web] Mem0 Series A reactions and concerns
  [x]   developer reactions to Letta vs Mem0
  ...

Phase 4: Synthesis (sonar-reasoning-pro)
  → What's New Since Vault Baseline
  → What's Confirmed
  → Contradictions / Updates Needed (with [[wikilinks]] to specific vault files)
  → Synthesis bullets
  → Recommended Vault Updates (instructions for /obsidian-save)
  → Open Questions

Vault-first means it doesn't waste tokens re-researching what you already knew. ~$0.40/call.


/notebooklm "AI-first vault rule" - vault-grounded, no browser

Scans the vault, uploads the top 12 most relevant notes to a Gemini File Search store, asks Gemini 2.5 Flash to synthesize against THOSE sources only with citations, writes the synthesis to Research/NotebookLM/ as an AI-first note, deletes the store.

Vault baseline: 12 notes
Model: gemini-2.5-flash
Uploading 12 notes... done
Asking Gemini, grounded against the uploaded sources...

=== SAVED ===
Research/NotebookLM/2026-05-15 - ai-first-vault-rule.md

Pair with /research-deep on the same topic. Open-web view + vault-grounded view rarely contradict. Where they do, that's where you have a take worth posting. ~$0.004/call on free-tier Flash, ~$0.06 on paid Pro.


/youtube https://youtu.be/... (add --visual to watch, not just read)

Free transcript via youtube-transcript-api + optional metadata + comments via YouTube Data API v3 (free tier). Gemini (gemini-2.5-flash, free tier) summarizes into TL;DR, Key Points, Notable Quotes (verbatim), Themes, Comment Sentiment, and Worth Following Up On - Grok is the automatic fallback (~$0.04) when no Gemini key is set. Frontmatter includes view count, channel, published date, like count for Dataview queries.

--visual downloads the video (yt-dlp, <=720p) and extracts one frame per scene change (ffmpeg scene detection, not a fixed timer), so on-screen text, code, diagrams, slides, UI, and b-roll are captured. Claude reads the frames with its own vision (no extra API call) and writes a timestamp-keyed ## Visual notes section; hero frames are embedded in the note. Requires yt-dlp + ffmpeg on PATH; skips gracefully if missing. --max-frames N caps frames read (default 24). Pipeline ported from claude-watch / claude-video (MIT).


/podcast https://podcasts.apple.com/... (or paste an RSS feed URL)

Resolves Apple Podcasts URLs to RSS via the free iTunes Lookup API. Picks the best transcript source available: <podcast:transcript> tag in the RSS feed (free, high fidelity) → Whisper API if OPENAI_API_KEY is set (~$0.006/min) → show-notes fallback. Grok summarizes into TL;DR, Key Points, Notable Quotes, Themes, Guests & People Mentioned, and Worth Following Up On. ~$0.04 for the Grok call (plus Whisper if used). Spotify URLs aren't supported (DRM).


Auto-open after every save. Obsidian pops open at the new note. Disable with RESEARCH_AUTOOPEN=0 if you're running batch saves.


The Vault is Alive

Traditional vaults are filing cabinets. You put things in. They sit there.

This vault rewrites itself with every input:

  • Ingest a source -- existing pages get rewritten, contradictions resolved, patterns synthesized
  • Save a conversation -- entities, concepts, and decisions distribute across the vault
  • Ask a question -- the Two-Output Rule means every answer also updates pages
  • A fact changes -- bi-temporal facts track when it was true AND when the vault learned it. "You believed X on Tuesday. After ingesting Y on Wednesday, you shifted to Z." Full audit trail.
  • Do nothing -- background agent and scheduled agents maintain it while you sleep
  • Wait a week -- auto-synthesis finds cross-source patterns and writes connection pages

The vault after a week is fundamentally different from the vault you started with.

The maintenance layer has a name: OKM (Open Knowledge Metabolism). Storage is the easy half; keeping stored knowledge true is the hard half, and it is where this project spends its effort. OKM is the open spec behind that: every stored fact must be timeless, dated, or a pointer. Slow-changing knowledge (how things work, decisions, ownership) is stored; fast-changing facts (counts, statuses, balances) are linked to where they live with an as of stamp, never copied in to rot. The rule is a one-page spec (references/freshness-policy.md), enforced by a linter (scripts/freshness_lint.py) that /obsidian-health runs. Where OKF (Google's Open Knowledge Format) standardizes how agent knowledge is written, OKM is a companion spec for keeping it true - the metabolism to OKF's format. One spec, one reference linter, no second implementation yet. It is storage-agnostic: any folder of markdown an AI maintains, not just Obsidian vaults.


Choose Your Preset

Pick your role at bootstrap. Each preset creates tailored folder structures, templates, and kanban boards.

Preset Who it's for Kanban style
executive Founders, operators, managers OKRs / Quarterly / Weekly
builder Developers, engineers, architects Backlog / Sprint / Done
creator Writers, YouTubers, marketers Ideas / Drafts / Published
researcher Academics, analysts, deep-divers Reading / Processing / Synthesized
uv run python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --preset builder

No preset? You get a general-purpose vault that works for everyone.


Background Agent & Scheduled Agents

Background: fires after every context compaction. You keep working. The vault updates itself.

PostCompact -> obsidian-bg-agent.sh -> claude -p (headless) -> vault updated

What arming it costs. The headless run uses --dangerously-skip-permissions, because nobody is there to approve each write. That is why the agent ships inert and stays opt-in. Its tool surface is pinned to Read,Write,Edit,Glob,Grep, so it cannot run shell commands or reach the network, and it only adds and updates - it never deletes or merges. If that trade is not one you want, leave it off; every other command works without it.

Scheduled:

Agent When What
morning 8 AM Daily note + overdue tasks
nightly 10 PM Sleeptime consolidation: close day + reconcile + synthesize + heal orphans
weekly Fridays 6 PM Weekly review
health Sundays 9 PM Vault health audit

Save reminders: Claude nudges you to /obsidian-save after 10+ exchanges or when you say "done" or "thanks". No lost conversations.

Bounded recall (opt-in): on every prompt, a UserPromptSubmit hook injects a small brief of the most relevant vault notes - max 4 notes, ~900 chars - or nothing at all when confidence is low (abstention beats noise). Read-only, fail-closed, and every inject/abstain decision is logged to <vault>/.claude-runs/ for audit. Ships inert; arm it with OBSIDIAN_RECALL_ENABLED=1 per hooks/recall.hook.example.json.


Vault Architecture

Wiki-style (default) -- LLM-first

Claude is the reader and writer. The vault is a database.

vault/
+-- _CLAUDE.md          # Operating manual
+-- index.md            # Page catalog (Claude reads FIRST)
+-- log.md              # Activity timeline
+-- SOUL.md             # Your identity
+-- CRITICAL_FACTS.md   # ~120 tokens, always loaded (timezone, manager, location)
+-- raw/                # IMMUTABLE source material
+-- wiki/               # Claude's workspace
|   +-- entities/       # People, companies, tools
|   +-- concepts/       # Ideas, frameworks, synthesis
|   +-- projects/       # Project notes
|   +-- daily/          # Daily notes
|   +-- logs/           # Work session logs
|   +-- reviews/        # Weekly/monthly reviews
|   +-- tasks/          # Task notes
|   +-- decisions/      # ADRs
+-- boards/             # Kanban boards
+-- templates/          # Note templates

Install

One codebase, seven builds. Pick yours below. The vault behavior is identical across all of them; only the install path and the dispatcher file (CLAUDE.md / AGENTS.md / GEMINI.md / .agents/skills/ / .pi/) differ.

Rather than ask you to take that on faith, here is what each build currently passes:

Build Emits a real tree Script paths resolved Docs reachable Toolkit runnable
Agent Skills pass pass pass pass
Claude Code pass pass pass pass
Codex CLI pass pass pass pass
Gemini CLI pass pass pass pass
Hermes pass pass pass pass
OpenCode pass pass pass pass
Pi pass pass pass pass

Generated by scripts/conformance_report.py, verified in CI on every push. Each build is compiled from the same source tree, then checked for a non-empty output, a resolved script root, reference paths that actually exist in that build, and a Python project shipped beside the scripts. A red cell here is a real red cell, not a missing test.

Prerequisites: Claude Code (or one of the other six platforms below), git, and uv for the Python helpers (health check, research toolkit, bootstrap). jq is required for the classic script install - scripts/setup.sh uses it to edit ~/.claude/settings.json safely and exits if it is missing. Not needed on the plugin path. Optional: Ollama for local semantic search, openai-whisper (installed on first audio ingest, pulls in PyTorch). No API keys needed for the core vault commands.

Claude Code (default)

Native plugin install (recommended). Inside any Claude Code session:

/plugin marketplace add eugeniughelbur/obsidian-second-brain
/plugin install obsidian-second-brain@obsidian-second-brain

Installing obsidian-second-brain through the Claude Code plugin marketplace: marketplace add, plugin install, status enabled.

That ships all 46 commands, the skill manual, the session-context hook, the opt-in background agent (inert until you arm it - see hooks/postcompact.hook.example.json), and the vault MCP server. Then tell Claude where your vault lives by adding to the env section of ~/.claude/settings.json:

"env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/vault" }

Restart Claude Code, then run /obsidian-second-brain:obsidian-init inside your vault. Plugin commands are namespaced, so every command is /obsidian-second-brain:<name> (type /obsidian-second-brain: to see all 45). Update later with /plugin update obsidian-second-brain.

Classic install (script). Use this if you want the commands as bare names (/obsidian-init, /research, ...) or you are developing the skill and want live edits. One line (clones the skill, installs the slash commands, registers the session-context hook, and offers the research env):

curl -fsSL https://raw.githubusercontent.com/eugeniughelbur/obsidian-second-brain/main/scripts/quick-install.sh | bash

Or step by step:

git clone https://github.com/eugeniughelbur/obsidian-second-brain ~/.claude/skills/obsidian-second-brain
bash ~/.claude/skills/obsidian-second-brain/install.sh
bash ~/.claude/skills/obsidian-second-brain/scripts/setup.sh "/path/to/your/vault"

Cloning it? A star costs you nothing and is how the next person finds this.

No vault yet? Create a ready-to-use one first (folders, templates, boards, dashboards - passes its own health check out of the box):

cd ~/.claude/skills/obsidian-second-brain
uv run python scripts/bootstrap_vault.py --path ~/Documents/MyVault --name "Your Name"
bash scripts/setup.sh ~/Documents/MyVault

Then open Claude Code and run /obsidian-init inside your vault.

Codex CLI / Gemini CLI / OpenCode

Codex and OpenCode users: prefer the Agent Skills build below. The standalone codex-cli and opencode builds are deprecated and superseded by it; both print that notice in their own INSTALL.md. They still work, and will until they are removed. Gemini CLI has no replacement build, so this is the right path there.

git clone https://github.com/eugeniughelbur/obsidian-second-brain
cd obsidian-second-brain
bash scripts/build.sh --platform codex-cli   # or gemini-cli, or opencode
cp -R dist/codex-cli/. /path/to/your/vault/   # or dist/gemini-cli/. or dist/opencode/.

Then start your CLI from the vault root.

The Codex build emits native Codex Agent Skills: one skill per command under .agents/skills/<name>/SKILL.md. Codex discovers them automatically with progressive disclosure (only each skill's name + description load until it's selected), and they run in your current session - invoke one with $<name>, pick it from /skills, or just describe the task and let Codex match it implicitly. AGENTS.md stays as a thin always-on manual (vault conventions + the AI-first rule); there is no routing table to maintain because the skill list is the router. The Gemini / OpenCode builds still emit a GEMINI.md / AGENTS.md dispatcher with an auto-generated routing table to command files under .gemini/ / .opencode/.

Run bash scripts/build.sh with no arguments to build every platform at once. See dist/<platform>/INSTALL.md after building for platform-specific notes.

Google Antigravity (and any .agents/skills/ harness)

Antigravity, Codex CLI, OpenCode, and GitHub Copilot CLI have all converged on the open Agent Skills standard: workspace skills at .agents/skills/<name>/SKILL.md. The agent-skills build emits one spec-compliant tree they all read - and any future harness on the same standard works with zero repo changes.

git clone https://github.com/eugeniughelbur/obsidian-second-brain
cd obsidian-second-brain
bash scripts/build.sh --platform agent-skills

# install with skills.sh (writes one shared .agents/skills/ tree), from your vault root:
npx skills add /path/to/obsidian-second-brain/dist/agent-skills -a antigravity -a codex -a opencode
# or copy manually, no skills.sh required:
cp -R dist/agent-skills/skills/. /path/to/your/vault/.agents/skills/

Each command becomes a skill under .agents/skills/; a shared obsidian-core skill carries the Python toolkit and the AI-first write spec the others call into. The skills are self-sufficient (they resolve the vault root from $OBSIDIAN_VAULT_PATH or the working directory and embed the write spec), so they need no session-start hook. This is the recommended path for Google Antigravity, whose skill discovery differs from classic Gemini CLI: Antigravity still reads the gemini-cli build's GEMINI.md as passive context, but only detects active skills under .agents/skills/, so install this build (not gemini-cli) if you want Antigravity to surface the commands as skills. See dist/agent-skills/INSTALL.md for the full story (skills.sh, manual copy, per-harness notes, and the optional always-on vault-routing rule).

Pi Coding Agent

git clone https://github.com/eugeniughelbur/obsidian-second-brain
cd obsidian-second-brain
bash scripts/build.sh --platform pi
pi install ./dist/pi          # or: cp -R dist/pi/.pi/ /path/to/your/vault/

The Pi build emits a native Pi package: prompt templates under .pi/prompts/ (invoke as /obsidian-save, /obsidian-daily, etc.) plus a discovery skill under .pi/skills/obsidian-second-brain/ (load with /skill:obsidian-second-brain). Pi reads the same ~/.config/obsidian-second-brain/.env keys as the other platforms. It has no background-agent equivalent - run /obsidian-nightly manually or via cron. (Contributed by @Gepetdo.)

Run on Hermes / open models

The skill is model-agnostic. The OpenCode build (and the Codex / Gemini builds) are plain instruction files, so they run on whatever model the host CLI is pointed at - including open models like Nous Research Hermes. No separate build, no code changes. You set the model on OpenCode's side.

There is also a dedicated Hermes Agent build that emits the commands as native Hermes skills (skills/<category>/<name>/SKILL.md, agentskills.io-compatible), so Hermes discovers and runs them through its own Skills System rather than via a host CLI:

bash scripts/build.sh --platform hermes
# then follow dist/hermes/INSTALL.md (copy into ~/.hermes/skills/ or add as a tap)

This is the skill/playbook half of the Hermes work; the bounded vault-data half is the MCP connector. Native cron and lifecycle-hook integration are tracked in Issue #79.

Point OpenCode at Hermes via OpenRouter. Authenticate once (/connect, search OpenRouter, paste your key - or export OPENROUTER_API_KEY=...), then in opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "openrouter/nousresearch/hermes-4-70b",
  "provider": {
    "openrouter": {
      "models": {
        "nousresearch/hermes-4-70b": {}
      }
    }
  }
}

Hermes models on OpenRouter (as of 2026-06, openrouter.ai):

Model id Best for Cost (in / out per 1M tokens)
nousresearch/hermes-4-70b Default. Cheap, capable, 131k context. $0.13 / $0.40
nousresearch/hermes-4-405b Strongest instruction-following for the synthesis-heavy commands. $1.00 / $3.00
nousresearch/hermes-3-llama-3.1-405b:free Zero-cost trial (needs any OpenRouter key to authenticate). free

For the privacy story, run a smaller Hermes locally through Ollama or LM Studio and point OpenCode at the local endpoint - no data leaves your machine.

What to expect (open models follow instructions less reliably than Claude, so this is honest, not a promise of parity): the core commands - /obsidian-save, /obsidian-daily, /obsidian-capture, /obsidian-find, /obsidian-task, and /research in free mode - hold up well. The sub-agent-heavy commands and the deep synthesis ones (/obsidian-architect, /obsidian-reconcile, /research-deep) lean hard on instruction-following, so prefer hermes-4-405b (or Claude) for those. The AI-first vault rule still applies on every write regardless of model.

Research toolkit (optional)

The 7 research commands use API keys (2 of them fall back to free sources without any).

Installed the plugin? You have no repo checkout, so install.sh, .env.example, and uv sync are not on your disk. Create the env file by hand instead - the research scripts read this path regardless of how you installed, and the plugin's MCP server already runs under uv run --with 'mcp<2', so there is nothing to uv sync:

mkdir -p ~/.config/obsidian-second-brain
touch ~/.config/obsidian-second-brain/.env
chmod 600 ~/.config/obsidian-second-brain/.env
# then paste the keys from the table below into that file

Installed from a clone? Run install.sh and answer "y" to the research prompt, which does the same thing for you. Or do it manually:

mkdir -p ~/.config/obsidian-second-brain
cp .env.example ~/.config/obsidian-second-brain/.env
chmod 600 ~/.config/obsidian-second-brain/.env
# then paste keys into the file
uv sync   # installs Python deps

Keys you need:

Key Where Required for Cost
XAI_API_KEY console.x.ai /x-read, /x-pulse, /research-deep X pulse, /youtube summary Pay-per-use, ~$0.05/call
PERPLEXITY_API_KEY perplexity.ai/settings/api /research, /research-deep Pay-per-use, ~$0.02-$0.50/call
GEMINI_API_KEY aistudio.google.com/apikey /notebooklm, /youtube summary (Grok fallback) (vault-grounded synthesis via Gemini File Search) Free tier covers it. Paid: ~$0.004/call (Flash), ~$0.06/call (Pro).
YOUTUBE_API_KEY console.cloud.google.com /youtube metadata + comments (optional, transcripts free without) Free tier 10k units/day
OPENAI_API_KEY platform.openai.com /podcast Whisper transcription (optional, falls back to show-notes if unset) ~$0.006/min

Without keys, the 38 non-research commands work fully, and /research + /research-deep fall back to free, key-less sources. The rest of the research toolkit degrades gracefully.

Semantic search (optional, off by default)

Search (/obsidian-find and the MCP connector) works out of the box as fast keyword search - no setup, no model, nothing to install. You can optionally add a meaning-based layer that finds notes even when your query shares no words with them. It is opt-in by setup and, when present, leads the ranking with keyword search as tiebreak and freshness signals on top (measured on a ~2,350-note vault: keyword recall@10 1.0, paraphrased-question recall@10 77%, and non-English queries went from 13% to 63% recall@5, a 5x gain, with the multilingual default model - full reference in scripts/eval/BASELINE.md). If the model is ever unreachable, search silently falls back to keyword - it never breaks or hangs.

Two ways to provide the embedding model:

  • Local + private (recommended), via Ollama: install Ollama, ollama pull bge-m3, then build the index: uv run python scripts/eval/semantic_search.py --path "<vault>" --build. Your notes never leave the machine. Re-run it as you write - see below.
  • No Ollama? Any OpenAI-compatible endpoint. Set OBSIDIAN_EMBED_BACKEND=openai, OBSIDIAN_EMBED_URL=<base url>, OBSIDIAN_EMBED_MODEL=<model>, and OBSIDIAN_EMBED_KEY=<key if needed>. This covers other local runtimes (LM Studio, llama.cpp's server) for free/private use, or a cloud API (OpenAI, a gateway) for top quality - note a cloud endpoint means note text leaves your machine, so use OBSIDIAN_EMBED_EXCLUDE=<folder prefixes> to keep private folders local-only.

Keep it current. The index does not update itself, and a note that is not in it can only be found by literal word match - which on a query in another language means it cannot be found at all. Re-run --build regularly; it is incremental, so only new and changed notes re-embed. /obsidian-health reports coverage, and search warns on stderr once the index falls more than 5% behind (tune with OBSIDIAN_INDEX_STALE_WARN_PCT).

Knobs: OBSIDIAN_SEARCH_SEMANTIC=0 disables the layer entirely. The index file is large and regenerable - gitignore it.


FAQ

What is a Claude Code skill?

A Claude Code skill is a reusable behavior package for Anthropic's Claude Code CLI. It bundles slash commands, scripts, references, and operating instructions that Claude loads automatically. Skills give Claude domain expertise without prompt-engineering each session.

Is this an Obsidian plugin or a Claude Code skill?

This is a Claude Code skill, not an Obsidian plugin. An Obsidian plugin lives inside Obsidian and adds UI features there. A Claude Code skill lives inside Claude Code (Anthropic's terminal AI coding agent) and gives Claude the ability to read, write, and reason over your Obsidian vault from outside Obsidian. You install this skill into Claude Code, not into Obsidian. Your vault is unchanged, just better-leveraged.

What's the difference between an Obsidian Claude Code skill and a regular Obsidian plugin?

An Obsidian plugin runs inside Obsidian and is written in TypeScript against Obsidian's plugin API. A Claude Code skill for Obsidian runs inside Claude Code and is written as a set of markdown command files plus optional Python scripts. Plugins are constrained to what Obsidian's API exposes. Skills are constrained only by what Claude can do in your shell, which is why this skill can do things plugins can't: pull live web research into vault notes, run scheduled agents that update your vault while you sleep, and synthesize knowledge across years of notes using Anthropic's Claude.

How do I add this Obsidian Claude skill to Claude Code?

Run the one-line installer from the Install section above. It clones the repo to ~/.claude/skills/obsidian-second-brain and symlinks the slash commands into ~/.claude/commands/ so Claude Code picks them up automatically. Restart Claude Code after install. The skill loads on every session that touches an Obsidian vault.

Does this work with Codex CLI, Gemini CLI, or OpenCode?

Yes. The repo ships a build script that compiles the platform-neutral source into seven platform-specific outputs: Claude Code (slash commands + CLAUDE.md), Codex CLI (native Agent Skills), Gemini CLI (GEMINI.md + .gemini/commands/), OpenCode (AGENTS.md + .opencode/commands/), Hermes (native skills), Pi (package.json + .pi/), and a unified Agent Skills build (one .agents/skills/ tree for Antigravity / Codex / OpenCode / GitHub Copilot CLI and any other Agent Skills harness). Run bash scripts/build.sh --platform codex-cli (or another platform name), then copy the resulting dist/<platform>/ tree into your vault. The non-Claude builds either emit native skills or auto-generate a routing table that maps natural-language triggers to command files, so the same 44 cross-platform commands work no matter which CLI you use (the calendar command is Claude Code only, since it depends on the Google Calendar MCP). The vault rules (AI-first notes, frontmatter, wikilinks, recency markers) are identical across every platform.

Does this run on Hermes or other open models?

Yes. The skill is model-agnostic - the OpenCode, Codex, and Gemini builds are plain instruction files, so they run on whatever model the host CLI uses, including open models like Nous Research Hermes. The most common path is OpenCode pointed at Hermes via OpenRouter (or a local Hermes through Ollama / LM Studio for full privacy). See "Run on Hermes / open models" in the Install section for the exact config. Honest expectation: the core save / daily / capture / find / task commands and free-mode /research hold up well; the sub-agent-heavy and deep-synthesis commands (/obsidian-architect, /obsidian-reconcile, /research-deep) want a stronger instruction-follower, so prefer hermes-4-405b or Claude for those.

Does this work with Obsidian Sync?

Yes. The skill writes to your vault as standard markdown files. Obsidian Sync, iCloud, Syncthing, and Git-based sync all work without modification.

Do I need API keys to use this?

Mostly no. The vault commands (/obsidian-save, /obsidian-daily, etc.) need no API keys. /research and /research-deep are also key-free now - with no Perplexity key they automatically fall back to free, key-less sources (Wikipedia, HackerNews, arXiv, Reddit, and more) and Claude synthesizes the dossier. The remaining research commands (/x-read, /x-pulse, /notebooklm, /youtube, /podcast) need their respective keys (xAI Grok, Perplexity, Google Gemini, optionally YouTube Data API v3 / OpenAI Whisper) and exit with a clear setup message when one is missing. The calendar command (/obsidian-calendar, all four modes) needs the Google Calendar MCP connector ra

(README truncated)

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

10 total
  1. v0.14.0 - The Harvestv0.14.0Jul 18, 2026

    ## We scanned all 408 forks of this repo and shipped the gold back upstream Round 2 of the fork sweep (round 1 was at 166 forks, 2026-05-30). Every diverging fork was compared and deep-read; the best ideas landed upstream the same day, **each credited to the fork that built it** in [FORK_INSIGHTS.md](https://github.com/eugeniughelbur/obsidian-second-brain/blob/main/FORK_INSIGHTS.md) - and where a stalled PR existed, its author is a co-author on the merge. ### New thinking tool: `/obsidian-brainstorm` (#153) The skill's 45th command and its first **stateful, multi-turn** tool: a Socratic interview - one question per turn, six question categories, convergence-gated - that ends in a design note with named alternatives and exactly one (Recommended). Grounds its questions in your vault's own decisions and contradictions. ### Bounded vault recall (#155, opt-in) A `UserPromptSubmit` hook that injects a small brief of relevant vault notes into every prompt: max 4 notes / ~900 chars, **abstains** when confidence is low, fail-closed, and logs every decision for audit. Inert until you arm it (`OBSIDIAN_RECALL_ENABLED=1`). ### Research toolkit upgrades (#147, #148) - **Brave Search** an

  2. v0.13.0 - The Open Standardv0.13.0Jul 18, 2026

    ## One tree, every harness Codex CLI, OpenCode, Google Antigravity, and GitHub Copilot CLI all converged on the same open Agent Skills standard: workspace skills at `.agents/skills/<name>/SKILL.md`. This release meets them there with **one build that serves them all** - and any future harness on the standard works with zero repo changes. ### The unified `agent-skills` build (#139, #141) `bash scripts/build.sh --platform agent-skills` emits one spec-compliant tree: 43 command skills plus a shared `obsidian-core` engine skill (the Python toolkit, the AI-first write spec, and its uv project). Each skill is self-sufficient - vault-root resolution via `$OBSIDIAN_VAULT_PATH` (or the working directory) and the embedded write spec, so no session-start hook is needed. Install with `npx skills add ./dist/agent-skills -a codex -a opencode -a antigravity` or a plain `cp -R`. Live-verified: skills.sh discovers exactly 44 skills; OpenCode's strict validator loads all 44 with zero warnings; the engine runs from the installed tree with dependencies resolving from the shipped pyproject. A new `trigger-mode: proactive` source key encodes the selection policy per skill (capture commands trigger p

  3. v0.12.0 - The Stress Testv0.12.0Jul 11, 2026

    ## We stress-tested our own tool with 32 AI agents. Then fixed what they found. A 4-lane adversarial audit (every command file, hostile synthetic vaults against every script, live retrieval quality on a 2,300-note vault, and a competitor teardown) produced **175 findings**. This release closes ~160 of them across 24 PRs (#100-#123), in four phases. ### Phase A - Data safety: tools that cannot eat your notes - `heal_links`/`triage_links` could permanently corrupt non-UTF-8 notes and silently rewrite line endings: **strict UTF-8 in, byte-exact out**, with non-UTF-8 files skipped loudly (#100) - One dangling symlink no longer kills the health check, the healers, or the exporter (#101) - The link healer only auto-fixes **certain** matches now: no more foreign-alphabet links "matching" unrelated notes, no `[[C++]]` -> `C.md`, no edits inside code fences (#102) - A leading BOM can't hide frontmatter; exports translate faithfully or say they failed; stats stopped double-counting after exports; link_graph actually mirrors vault_health (pinned by a drift-alarm test) (#103-#107) - **A fresh bootstrap passes its own health check with zero findings** - now a CI invariant (#108) ### Phase B

  4. v0.11.1 - Pi Coding Agentv0.11.1Jun 28, 2026

    Adds **Pi Coding Agent** as a 6th build target (PR #83, by @Gepetdo). `bash scripts/build.sh --platform pi` emits `dist/pi/` - a native [Pi](https://pi.dev) package: a `package.json` declaring `pi.prompts`/`pi.skills`, one prompt template per command under `.pi/prompts/` (invoke `/obsidian-save`, `/obsidian-daily`, ...), and a discovery skill at `.pi/skills/obsidian-second-brain/SKILL.md` (`/skill:obsidian-second-brain`), with the AI-first rules and Python helpers alongside. Install: `pi install ./dist/pi` (or copy `dist/pi/.pi/` into your vault root). Purely additive - the adapter is auto-discovered by `build.sh`, so the existing five platforms (Claude Code, Codex, Gemini, OpenCode, Hermes) are untouched. All 6 platforms build, 27 smoke tests pass. Thanks @Gepetdo for the contribution.

  5. v0.11.0 - The Retrieverv0.11.0Jun 28, 2026

    **Search went from broken to hybrid.** This release seals a large skill-audit + retrieval sprint: every command was real-tested, keyword search was fixed ~7x, and an optional local-and-private semantic layer now fuses in for meaning-based recall. It also ships the previously-unreleased Hermes, MCP-connector, Telegram-journal, and OKF-export work. ## Breaking changes (migration) Two command consolidations from the audit. Natural-language triggers still route correctly; only the explicit slash forms changed: - **Calendar:** `/obsidian-agenda`, `/obsidian-meeting`, `/obsidian-schedule`, and the old calendar-reconcile are now **one** command with modes. - `/obsidian-agenda week` -> `/obsidian-calendar agenda week` - `/obsidian-meeting last` -> `/obsidian-calendar meeting last` - `/obsidian-schedule task:... ` -> `/obsidian-calendar schedule task:...` - calendar gap-check -> `/obsidian-calendar reconcile` - **Decisions:** `/obsidian-adr` -> **`/obsidian-decide --formal`** (default `/obsidian-decide` still logs lightweight decisions). ## Highlights ### Retrieval (the headline) - **Keyword search fixed ~7x** in `vault_ops.search` (the `/obsidian-find` + MCP engine): stopword

Commits per week

last 52 weeks
530Week of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 10 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 25 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 7 commitsWeek of 2026-04-26: 33 commitsWeek of 2026-05-03: 4 commitsWeek of 2026-05-10: 18 commitsWeek of 2026-05-17: 6 commitsWeek of 2026-05-24: 22 commitsWeek of 2026-05-31: 17 commitsWeek of 2026-06-07: 3 commitsWeek of 2026-06-14: 14 commitsWeek of 2026-06-21: 30 commitsWeek of 2026-06-28: 16 commitsWeek of 2026-07-05: 39 commitsWeek of 2026-07-12: 48 commitsWeek of 2026-07-19: 15 commitsWeek of 2026-07-26: 53 commitsWeek of 2026-08-02: 5 commitsAug 10, 2025Aug 2, 2026
365 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 9 commitsSun 1:00 — 7 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 3 commitsSun 12:00 — 7 commitsSun 13:00 — 12 commitsSun 14:00 — 13 commitsSun 15:00 — 5 commitsSun 16:00 — 3 commitsSun 17:00 — 6 commitsSun 18:00 — 6 commitsSun 19:00 — 6 commitsSun 20:00 — 4 commitsSun 21:00 — 1 commitsSun 22:00 — 1 commitsSun 23:00 — 11 commitsMon 0:00 — 12 commitsMon 1:00 — 15 commitsMon 2:00 — 4 commitsMon 3:00 — 2 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 1 commitsMon 13:00 — 6 commitsMon 14:00 — 3 commitsMon 15:00 — 4 commitsMon 16:00 — 4 commitsMon 17:00 — 1 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 0 commitsMon 21:00 — 1 commitsMon 22:00 — 0 commitsMon 23:00 — 2 commitsTue 0:00 — 4 commitsTue 1:00 — 1 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 0 commitsTue 11:00 — 0 commitsTue 12:00 — 0 commitsTue 13:00 — 5 commitsTue 14:00 — 1 commitsTue 15:00 — 3 commitsTue 16:00 — 1 commitsTue 17:00 — 1 commitsTue 18:00 — 0 commitsTue 19:00 — 0 commitsTue 20:00 — 1 commitsTue 21:00 — 0 commitsTue 22:00 — 1 commitsTue 23:00 — 1 commitsWed 0:00 — 0 commitsWed 1:00 — 3 commitsWed 2:00 — 4 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 1 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 6 commitsWed 14:00 — 4 commitsWed 15:00 — 11 commitsWed 16:00 — 1 commitsWed 17:00 — 0 commitsWed 18:00 — 2 commitsWed 19:00 — 1 commitsWed 20:00 — 0 commitsWed 21:00 — 2 commitsWed 22:00 — 1 commitsWed 23:00 — 3 commitsThu 0:00 — 3 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 1 commitsThu 13:00 — 0 commitsThu 14:00 — 9 commitsThu 15:00 — 1 commitsThu 16:00 — 3 commitsThu 17:00 — 1 commitsThu 18:00 — 2 commitsThu 19:00 — 1 commitsThu 20:00 — 0 commitsThu 21:00 — 3 commitsThu 22:00 — 1 commitsThu 23:00 — 1 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 0 commitsFri 13:00 — 1 commitsFri 14:00 — 3 commitsFri 15:00 — 2 commitsFri 16:00 — 1 commitsFri 17:00 — 0 commitsFri 18:00 — 1 commitsFri 19:00 — 2 commitsFri 20:00 — 2 commitsFri 21:00 — 1 commitsFri 22:00 — 7 commitsFri 23:00 — 4 commitsSat 0:00 — 6 commitsSat 1:00 — 5 commitsSat 2:00 — 3 commitsSat 3:00 — 0 commitsSat 4:00 — 2 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 7 commitsSat 13:00 — 17 commitsSat 14:00 — 5 commitsSat 15:00 — 2 commitsSat 16:00 — 13 commitsSat 17:00 — 4 commitsSat 18:00 — 0 commitsSat 19:00 — 4 commitsSat 20:00 — 7 commitsSat 21:00 — 5 commitsSat 22:00 — 14 commitsSat 23:00 — 15 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits319 (86%)
Community commits50 (14%)

369 commits in total over the last year.

DateListRankStars gained
Jul 11, 2026daily#19+2
  • public-apis/public-apis

    A collective list of free APIs

    454.9K stars · Python

  • donnemartin/system-design-primer

    Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

    362.2K stars · Python

  • practical-tutorials/project-based-learning

    Curated list of project-based tutorials

    277.2K stars · Python

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    238.5K stars · JavaScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    234.7K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    227K stars · Python