{"slug": "obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide", "title": "Obsidian + VS Code Copilot: Build an AI Second Brain Per Project (Full Setup Guide)", "summary": "A developer created a per-project Obsidian vault system committed alongside code in Git, enabling GitHub Copilot to maintain full project context across sessions. The setup includes a `.obsidian-vault` directory with structured folders for decisions, specs, bugs, and daily notes, plus a `CLAUDE.md` briefing file that tells the AI what the project is, what decisions have been made, and what it should never touch. The approach solves the common problem of AI agents losing context when developers return to projects after breaks, eliminating wasted time re-explaining project state to both themselves and their coding assistants.", "body_md": "Stop losing context every time you come back to a project. This guide shows you how to set up a per-project Obsidian vault — committed alongside your code in Git — so GitHub Copilot always knows exactly what your project is, what decisions have been made, and what it should never touch.\n\n▶️ Prefer video? [Watch the full tutorial on YouTube →](https://youtu.be/fmYn6ODiISA)\n\nI built this after wasting too much time watching AI agents lose context at the worst possible moments. This is my approach — a work in progress, and every developer will adapt it to their own style, but it should give you a solid starting point.\n\nMost developers work like this: Notion open in one tab, the repo in another, and the AI has no clue what either of them contains.\n\nYou come back to a project after two weeks, and the first 20 minutes are wasted re-explaining the context — to yourself, and to Copilot. You type \"look at my codebase and tell me what this does\" and get a generic response because the AI has no history, no decisions, no current state.\n\nOne giant vault for everything makes it worse. You're searching through 500 notes to find the one that belongs to this client or this project. The context is diluted.\n\nThere's a better way: **one vault, per project, committed to the same Git repo as the code.**\n\nHere's the structure you're going to build:\n\n```\nmy-project/\n├── src/                    ← your code\n├── .obsidian-vault/        ← your project brain\n│   ├── .obsidian/          ← Obsidian settings (auto-created)\n│   ├── decisions/          ← Architecture Decision Records\n│   ├── specs/              ← Feature specs and API contracts\n│   ├── bugs/               ← Issue investigations\n│   ├── daily/              ← Quick standup notes\n│   ├── retro/              ← Milestone reflections\n│   ├── templates/          ← ADR, spec, bug templates\n│   ├── 00-inbox.md         ← Capture zone\n│   ├── Dashboard.md        ← Your project home screen\n│   └── CLAUDE.md           ← AI briefing file ← the most important file\n├── .gitignore\n└── project.code-workspace\n```\n\nEverything lives in one directory. Obsidian reads the vault. VS Code reads the code. Copilot reads both. Git versions all of it together.\n\nOpen your terminal and run:\n\n```\nmkdir my-project && cd my-project\nmkdir .obsidian-vault && cd .obsidian-vault\nmkdir -p decisions specs bugs daily retro templates\ntouch 00-inbox.md CLAUDE.md Dashboard.md\ncd ..\n```\n\nThe dot prefix on `.obsidian-vault`\n\nkeeps it visually separate from your source folders. It's still committed to Git — we just want it to sit apart from `/src`\n\n.\n\nThis is the most important file in the entire system.\n\n`CLAUDE.md`\n\nis a plain-text briefing document. Every time Copilot (or Claude, or any AI agent) opens this project, it reads this file first. Write it like you're briefing a new developer joining the team.\n\nHere's the structure:\n\n```\n# Project Name\n\n## What this is\n[One or two plain sentences. No jargon.]\n\n## Tech stack\n- Language: TypeScript\n- Framework: Next.js 16\n- Deployment: Vercel\n- Database: Supabase (Postgres)\n\n## Current state\n[What's working. What's broken. What you're focused on right now.]\n[Update this every time you return after a break. Takes 30 seconds. Saves 5 minutes.]\n\n## Key decisions made\nThese are settled — not open for discussion:\n- [Decision 1: e.g. \"Server components for all data fetching — no client-side useEffect fetches\"]\n- [Decision 2: e.g. \"Zod for all form validation, no exceptions\"]\n\n## File map\n- `src/app/` — Next.js App Router pages\n- `src/components/ui/` — shadcn/ui components, do not modify these manually\n- `src/lib/db/` — all database queries live here\n\n## DO NOT\n- Do not suggest React Query — we use server components and Next.js cache\n- Do not modify `src/components/ui/` without reading `decisions/001-design-system.md` first\n- Do not add new environment variables without updating `.env.example`\n```\n\nThe **DO NOT** section is what separates a good briefing from a great one. It prevents Copilot from helpfully \"fixing\" something you deliberately designed a certain way for a reason that isn't obvious from the code alone.\n\n`.obsidian-vault`\n\nfolder (not the project root — the vault folder specifically)Obsidian initialises the vault and creates `.obsidian/`\n\ninside it for settings and plugins.\n\nGo to **Settings → Community Plugins → Browse**, then install and enable:\n\n| Plugin | Why |\n|---|---|\nTemplater |\nDynamic templates with date variables — you'll use this for ADRs, specs, and bugs |\nDataview |\nDatabase-style queries across notes — powers your project dashboard |\nObsidian Git |\nAuto-commits notes with your code on a timer |\nLinter |\nKeeps frontmatter consistent across all notes |\n\nAt your **project root** (not the vault folder):\n\n```\ngit init\n```\n\nCreate your `.gitignore`\n\n:\n\n```\n# Obsidian workspace state (device-specific, don't commit)\n.obsidian-vault/.obsidian/workspace.json\n.obsidian-vault/.obsidian/workspace-mobile.json\n```\n\nEverything else in the vault — plugin settings, themes, all your notes — gets committed. This is intentional.\n\nInitial commit:\n\n```\ngit add .\ngit commit -m \"init: project with obsidian vault\"\ngit remote add origin git@github.com:your-username/your-project.git\ngit push -u origin main\n```\n\nNow configure the Obsidian Git plugin:\n\nYour notes now commit with your code. Every `git log`\n\nshows both. When you look at a commit from six months ago, you'll also see the decision record that motivated it.\n\nIn Obsidian, go to **Settings → Templater** and set the templates folder to `templates`\n\n.\n\n`templates/_template-adr.md`\n\n)\n\n```\n---\ntitle: <% tp.file.title %>\ndate: <% tp.date.now(\"YYYY-MM-DD\") %>\nstatus: Proposed\n---\n\n## Context\n[Why was this decision needed?]\n\n## Decision\n[What was chosen?]\n\n## Consequences\n[What changes as a result?]\n```\n\n`templates/_template-spec.md`\n\n)\n\n```\n---\ntitle: <% tp.file.title %>\ndate: <% tp.date.now(\"YYYY-MM-DD\") %>\nstatus: Draft\n---\n\n## Goal\n[What are we trying to achieve?]\n\n## Acceptance Criteria\n- [ ] Criterion 1\n- [ ] Criterion 2\n\n## Out of Scope\n[What this spec deliberately does not cover]\n```\n\n`templates/_template-bug.md`\n\n)\n\n```\n---\ntitle: <% tp.file.title %>\ndate: <% tp.date.now(\"YYYY-MM-DD\") %>\nstatus: Open\n---\n\n## Steps to Reproduce\n1. \n\n## Expected Behaviour\n\n## Actual Behaviour\n\n## Root Cause\n[Fill this in when found]\n```\n\nCreate a workspace file at the project root (`project.code-workspace`\n\n):\n\n```\n{\n  \"folders\": [\n    { \"path\": \".\" }\n  ],\n  \"settings\": {\n    \"files.exclude\": {\n      \"**/.obsidian\": true\n    }\n  }\n}\n```\n\nOpen this file with **File → Open Workspace from File** instead of opening the folder directly. This gives you a clean explorer view and ensures Copilot sees the entire workspace including the vault.\n\n**Enable Copilot Agent Mode:**\n\n`Ctrl+Shift+I`\n\n(or `Cmd+Shift+I`\n\non Mac)Now test it. Type into Copilot:\n\n```\nRead .obsidian-vault/CLAUDE.md and give me a summary of the current project state.\n```\n\nCopilot reads your briefing file and responds with a summary. From this point on, every agent session starts with that context — no copy-paste, no re-explaining.\n\nYou can also tell Copilot to write back into the vault:\n\n```\nSummarise the change we just made and write an ADR to \n.obsidian-vault/decisions/001-auth-strategy.md using the template \nat .obsidian-vault/templates/_template-adr.md\n```\n\nCopilot reads the template, generates the ADR, writes the file. Next commit: decision record and code go together.\n\nCreate `Dashboard.md`\n\nat the vault root with Dataview queries:\n\n```\n# Project Dashboard\n\n## 🐛 Open Bugs\n``` dataview\nTABLE status, file.mtime as \"Last updated\"\nFROM \"bugs\"\nWHERE status = \"Open\"\nSORT file.mtime DESC\n```\n\n## 📋 Open Specs\n``` dataview\nTABLE status\nFROM \"specs\"\nWHERE status != \"Done\"\n```\n\n## 🗺️ Recent Decisions\n``` dataview\nTABLE file.mday as \"Date\"\nFROM \"decisions\"\nSORT file.mday DESC\nLIMIT 5\nSet Dashboard.md as your **default file** in Obsidian settings. Every time you open the vault, in 30 seconds you know exactly where you left off.\n\nYou haven't touched this project in two weeks.\n\n`Dashboard.md`\n\n`00-inbox.md`\n\n— you left a note: `\"Read CLAUDE.md and bugs/partial-fill-issue.md and help me investigate the root cause\"`\n\n`00-inbox.md`\n\n`CLAUDE.md`\n\n. Two sentences. What you fixed. What's next.Tomorrow, in two weeks, in six months — you're back in context within 60 seconds.\n\nThis is where the per-project vault model really shines.\n\nIn **Obsidian**: click the vault icon → select a different project vault. Each vault has its own plugins, its own dashboard, its own graph view. Zero bleed-through between projects.\n\nIn **VS Code**: close the current workspace, open the other project folder. Copilot's context resets automatically.\n\nYou're never reading notes from one project while working on another. Each project is an island — isolated, focused, self-contained.\n\nThe second part will cover GitHub Copilot instructions, agents, skills, prompts, and MCP files — so don't worry if this feels incomplete for now.\n\nOnce this is running, the natural progression is **Claude Code** — a terminal-based agent that reads the same `CLAUDE.md`\n\nfile and can run commands across the project. It's built for exactly this kind of project-scoped context.\n\n📺 **Full video walkthrough (16 min):** [Obsidian + VS Code Copilot: AI Second Brain Per Project Setup →](https://youtu.be/fmYn6ODiISA)\n\n🗂️ **Template files** (CLAUDE.md starter + ADR/Spec/Bug templates): drop a comment below or on the video and I'll link them\n\n💬 **Questions?** Leave them in the comments below or on the YouTube video — what part of your dev workflow are you trying to fix? Best questions become future videos.", "url": "https://wpnews.pro/news/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide", "canonical_source": "https://dev.to/hermeszum/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide-4m64", "published_at": "2026-06-03 20:02:11+00:00", "updated_at": "2026-06-03 20:42:03.836161+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "ai-products", "ai-infrastructure", "generative-ai"], "entities": ["Obsidian", "VS Code", "GitHub Copilot", "Git", "YouTube"], "alternates": {"html": "https://wpnews.pro/news/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide", "markdown": "https://wpnews.pro/news/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide.md", "text": "https://wpnews.pro/news/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide.txt", "jsonld": "https://wpnews.pro/news/obsidian-vs-code-copilot-build-an-ai-second-brain-per-project-full-setup-guide.jsonld"}}