0xNyk

Obsidian Curator — Development skill for Claude Code

Development community

The 4th layer of the Claude+Obsidian memory stack — deterministic knowledge-graph maintenance (rename/link/prune), dry-run by default, zero dependencies.

How to install Obsidian Curator

This entry records only its repository, not the path inside it, so there is no exact command to give. Open 0xNyk/obsidian-curator and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Obsidian Curator does

The 4th layer of the Claude+Obsidian memory stack — deterministic knowledge-graph maintenance (rename/link/prune), dry-run by default, zero dependencies.

Alternatives in Development

  • Om Tidy — Self-maintenance pass — acts on every hygiene flag: archives completed work, groups loose clusters, splits ove 4.6k ★
  • MCP Language Server — mcp-language-server gives MCP enabled clients access semantic tools like get definition, references, rename, a 1.5k ★
  • Agentlas One — Turn the persistent Agentlas One personal agent on or off, or rename it 1.1k ★

README

curator-agent

**The 4th layer of the Claude + Obsidian memory stack.**

A knowledge graph that grows without curation stops being a brain and becomes a landfill. `curator-agent` is the nightly maintenance pass that keeps retrieval accurate as your vault scales. Three jobs, all dry-run by default:

  • rename — detect timestamp/category-shaped note titles, propose claim-shaped rewrites (the prose-as-title rule). Fixes wikilinks vault-wide on apply.
  • link — detect notes making related claims that aren't yet linked, propose wikilinks between them.
  • prune — surface notes untouched 30+ days with zero inlinks. Hub-aware: never flags your Maps of Content.

Stdlib-only Python. Zero dependencies. Runs in well under a second on a 200-note vault.

Why this exists

The original 3-layer memory stack ([article](https://x.com/nykdotdev/status/2030904887186514336)) was: session memory (CLAUDE.md + auto-memory), knowledge graph (Obsidian + MCP), ingestion pipeline (brain-ingest).

After 60 days in production, Layer 2 drifted. The ingestion pipeline fed the graph faster than it could be curated, and retrieval precision decayed. The fix wasn't a smarter model — it was a 4th layer that maintains the graph automatically.

Install

git clone https://github.com/0xNyk/obsidian-curator
cd obsidian-curator
# no pip install needed — stdlib only
python3 curator/curator_agent.py --self-test

Usage

# Dry-run report (default — never mutates anything)
python3 curator/curator_agent.py --vault ~/obsidian/your-vault

# Full report with link proposals + prune candidates, written to your vault
python3 curator/curator_agent.py --vault ~/obsidian/your-vault \
  --propose-links --report-prune \
  --report ~/obsidian/your-vault/00-home/curator-log.md

# Apply rename proposals (fixes wikilinks vault-wide)
python3 curator/curator_agent.py --vault ~/obsidian/your-vault --apply-renames

The nightly cron

# Read the report with your morning coffee
0 4