Obsidian Research Vault Template

August 12, 2026 · View on GitHub

A GitHub template for AI-assisted research that produces an Obsidian vault, not a folder of markdown.

Use this template → clone → open in Obsidian and Claude Code. The vault opens configured, and the agent already knows the conventions.

Why this exists

Point an agent at a research task and it will write good markdown into sensible folders. Open that folder in Obsidian and you get: an empty graph, no backlinks, a blank properties panel, and search filters that match nothing.

Every Obsidian affordance is downstream of exactly two things — YAML frontmatter and [[wikilinks]]. A vault is not a folder layout; it is a link graph with typed nodes. Agents do not produce one by accident.

So this template is optimised for two readers at once:

  • An agent that greps the filesystem. CLAUDE.md makes the frontmatter schema and the link discipline non-optional at write time, which is the only time they can be enforced.
  • A person navigating by link, tag, graph and canvas. .obsidian/ is committed, so a fresh clone opens with graph colour groups per folder, note templates wired up, an attachment folder, and the properties schema already understood.

It is a research scaffold that happens to be a vault, and a vault that happens to be agent-writable. Neither half is decoration.

Getting started

  1. Use this template on GitHub (or gh repo create <name> --template danielrosehill/Obsidian-Research-Vault-Template --private --clone).

  2. Bootstrap it — fills <WORKSPACE_NAME>, <RESEARCH_QUESTION> and <DATE> throughout, and seeds the #research/<topic> tag:

    ./scripts/bootstrap.sh "Agent Memory Landscape" \
      "Which agent-memory approaches survive contact with a real codebase?" \
      agent-memory
    
  3. Open it in ObsidianOpen folder as vault, pointed at the repo root. Start at Home.md or Research Map.canvas.

  4. Open it in Claude Codeclaude from the repo root. CLAUDE.md is picked up automatically.

Layout

Home.md               entry point — maps of content
Research Map.canvas   the research loop, visually

Context/              scope, glossary, background — long-lived framing
Questions/            one note per open question (the spine)
Sources/              one note per source, with reliability + provenance
Findings/             atomic claims, each citing sources
Entities/             people, organisations, products, places, contacts
Outputs/              deliverables headed for PDF or audio
Notes/                scratch

Assets/               attachments (Obsidian pastes land here)
Templates/            note shapes — Obsidian's Templates plugin and the agent
Meta/                 conventions, tag taxonomy, optional Dataview queries

The loop: frame in Context/ask in Questions/capture in Sources/extract one claim per note into Findings/assemble into Outputs/.

Findings are the reusable unit. One claim per note, each citing its sources, is what lets a claim be reused across three deliverables instead of being re-derived for each.

Conventions

Full schema in Meta/Conventions.md. The short version:

---
type: finding            # source | question | finding | entity | output | context | note
title: Tariff exemption expires 2027
created: 2026-08-12
updated: 2026-08-12
confidence: high         # per-type fields — see Conventions
sources: ["[[240812-acme-filing]]"]
tags:
  - research/tariffs
---

One trap worth stating up front: a wikilink in frontmatter only renders as a link when quoted. ["[[Note]]"] works; [[[Note]]] is invalid YAML; [[Note]] parses as a nested list and silently produces no link.

Plugins

None required. Each folder carries a hand-maintained map of content, so the vault works on a fresh Obsidian install with nothing added.

If you have Dataview, Meta/Dataview Queries.md has the same views as live queries — open questions, findings that need checking, findings with no source, sources by reliability, stale sources, orphan notes. Without it, those blocks render as inert code and nothing breaks.

No .base file ships. Obsidian's built-in Bases would cover similar ground and the frontmatter is already shaped for it, but the file format is worth building against your own Obsidian version rather than inheriting a guess.

Git

.obsidian/ is committed on purpose — that is what makes a clone open configured. .obsidian/workspace.json is not: it is per-machine UI layout and conflicts on essentially every pull between two machines. Same for workspace-mobile.json, plugin data.json, and .trash/.

Rendered PDFs and audio under Outputs/ are gitignored by default, on the assumption they are regenerated. Delete those two lines in .gitignore if you would rather version them.

With the research-space plugin

This template is also shipped as the obsidian-vault variant of the research-space Claude Code plugin, which adds the research primitives (source-log, summarize-sources, deep-dive, export-report) and can provision a vault in one command:

/research-space:new-workspace <Name> --variant=obsidian-vault

The plugin's template/obsidian-vault/ is the source of truth; this repo mirrors it so the scaffold is usable without installing anything.

Licence

MIT.