Local-first agentic memory lab. A controlled note-capture pipeline built with Claude Code, n8n, and an Obsidian vault.
The repo is the control plane. The vault is the data plane — never committed.
Captures notes (text and PDF) from any source and lands them in an Obsidian inbox with validated frontmatter. n8n handles the webhook intake; Claude Code enforces the capture contract; the vault stores the results locally.
Input (text / PDF)
│
▼
n8n webhook / PowerShell script
│
▼
vault/inbox/ ← structured note with YAML frontmatter
│
▼
Obsidian (local, not committed)
| Tool | Purpose |
|---|---|
| Claude Code | Orchestration and capture contract enforcement |
| n8n | Webhook intake and workflow automation |
| Docker | Runs n8n locally |
| Obsidian | Open vault/ as your local vault |
| PowerShell | Send notes via send_note.ps1 |
# 1. Create the n8n environment file (never committed)
cp n8n/.env.example n8n/.env
# Fill in n8n webhook URL and any other required values
# 2. Start n8n
cd n8n
docker compose up -d
# 3. Test a capture
.\n8n\scripts\send\send_note.ps1 -Title "Test" -Body "Hello" -Tags "test"
# 4. Verify in Obsidian
# Note should appear in vault/inbox/ with valid YAML frontmatteragentic-lab/
├── CLAUDE.md # Capture contract and safety rules
├── docs/
│ ├── 00_vision.md # Goals and phase plan
│ └── 02_runbook.md # Tests, failure cases, security checklist
├── n8n/
│ ├── docker-compose.yml # n8n container setup
│ ├── .env.example # Required env vars (copy to .env locally)
│ └── scripts/send/
│ └── send_note.ps1 # Approved capture script
├── vault/ # Obsidian vault skeleton (content gitignored)
│ ├── inbox/ # All new notes land here
│ ├── notes/
│ ├── projects/
│ └── sources/
└── examples/ # Sample notes and test payloads
Every captured note gets YAML frontmatter:
---
id: <stable-id>
title: ""
source_kind: text|pdf
source_path: ""
ingest_channel: claude_skill|script|webhook
created_at: <ISO-8601>
status: inbox
review_state: pending
tags: []
project: ""
summary: ""
---vault/**is gitignored — no vault content is ever committedn8n/.envis gitignored — no secrets in tracked files- New notes always land in
vault/inbox/first - Bulk moves and deletes require explicit confirmation
- docs/00_vision.md — Goals and phase plan
- docs/02_runbook.md — Runbook, tests, failure cases