A Claude Code plugin for full-lifecycle Obsidian knowledge management — from article ingestion to spaced repetition review.
Ingest → Standardize → Query → Lint → Review → Sync
| Skill | Command | What it does |
|---|---|---|
| vault-lint | /vault-lint |
Health check: broken links, orphan pages, index consistency, frontmatter validation |
| vault-query | /vault-query |
Karpathy-style "compile, don't retrieve": index lookup → full-text synthesis → optional write-back |
| review-scheduler | /review-scheduler start |
(macOS only) Ebbinghaus spaced repetition via launchd + screen-unlock detection |
| chat-to-obsidian | /chat-to-obsidian |
Convert the current conversation into a structured deep technical article |
| article-to-markdown | /article-to-markdown |
Scrape an external URL, restructure as Markdown, save to vault |
| github-sync | /github-sync |
Auto-update README.md and push vault changes to GitHub |
claude plugin install Howie126313/obsidian-vault-kitOr clone manually:
git clone https://github.com/Howie126313/obsidian-vault-kit.git
cp -r obsidian-vault-kit /path/to/your/vault/.claude/plugins/obsidian-vault-kitBased on the Ebbinghaus forgetting curve with intervals at [1, 2, 4, 7, 15, 30, 60, 90] days.
- Dual trigger: macOS
launchdscheduled task + screen-unlock Swift watcher - Idempotent: generates at most one review note per day, no matter how many triggers fire
- 3-level date extraction: YAML frontmatter → blockquote date → file birthtime
- 3-level summary extraction: frontmatter
summary→ intro section → H2 headings list
/review-scheduler start # deploy & start (asks for preferred time)
/review-scheduler stop # unload launchd tasks (keeps existing notes)
/review-scheduler status # check running state
Six checks in one pass:
- Broken links —
[[wikilinks]]pointing to nonexistent files - Orphan pages — files with zero inbound links
- Index consistency — ghost entries, missing entries, count drift in
index.md - Cross-reference suggestions — articles sharing keywords but not linked
- Summary quality — empty or stale summaries in
index.md - Frontmatter validation — required fields, enum values (
type,confidence)
Auto-fixes low-risk issues (index gaps, counts). Reports everything else.
Inspired by the "compile, don't retrieve" philosophy from Karpathy's LLM Wiki pattern:
- Read
index.mdto locate candidate articles - Grep for supplementary matches
- Read full text of relevant articles
- Synthesize a comprehensive answer with
[[wikilink]]citations - Optionally write the synthesis back as a new note (if it crosses 3+ source articles)
All articles follow a standardized schema:
title: string
date: YYYY-MM-DD
tags: [string]
type: concept | deep-dive | comparison | practice | guide | overview
confidence: high | medium | low
related: ["[[note-name]]"]
summary: string
source: stringType and confidence are inferred automatically using deterministic rules (see skills/_shared/common-steps.md).
On first skill run, the plugin auto-detects your vault's directory structure and saves the config to $VAULT_ROOT/.vault-kit.json. You can edit this file to customize categories at any time.
{
"version": 1,
"directories": [
{
"dir": "frontend",
"section": "Frontend",
"match_rules": ["React, Vue, frontend frameworks, CSS, browser"]
},
{
"dir": "ai-agents",
"section": "AI Agents",
"match_rules": ["Agent, LLM, AI models, Prompt"]
}
],
"default_directory": "",
"uncategorized_section": "Uncategorized"
}dir— subdirectory name relative to vault rootsection— display name used as theindex.mdsection headermatch_rules— topic descriptions for automatic article categorizationdefault_directory— fallback directory when no rule matches (empty = vault root)
To reset and re-detect, delete .vault-kit.json and run any skill.
Edit REVIEW_INTERVALS in skills/review-scheduler/references/review_reminder.py:
REVIEW_INTERVALS = [1, 2, 4, 7, 15, 30, 60, 90] # days
TOLERANCE = 1 # ±1 day window- Claude Code CLI
- Obsidian
- Python 3 + PyYAML (for review-scheduler, macOS only)
- Xcode Command Line Tools (for review-scheduler, macOS only)
- Firecrawl MCP server (optional, for article-to-markdown URL scraping)
obsidian-vault-kit/
├── .claude-plugin/
│ └── plugin.json
├── skills/
│ ├── _shared/common-steps.md # shared workflow steps
│ ├── vault-lint/SKILL.md
│ ├── vault-query/SKILL.md
│ ├── review-scheduler/
│ │ ├── SKILL.md
│ │ ├── README.md
│ │ └── references/ # Python, Swift, launchd templates
│ ├── github-sync/SKILL.md
│ ├── chat-to-obsidian/
│ │ ├── SKILL.md
│ │ └── references/article-template.md
│ └── article-to-markdown/
│ ├── SKILL.md
│ └── references/article-template.md
├── README.md
└── LICENSE
Apache-2.0