zettelkasten
Skill2 starsChanged 9 months agoMITView on GitHub
Personal knowledge base using the Zettelkasten method. Use when the user wants to save a note, look up knowledge, connect ideas, "what do I know about X", "save this", "note this down", or asks about their notes/knowledge base.
- Reads credentials
5 other projects use a version of this.
Adopted by
Most recently taken up by
- weininghui/skillstheir own version, first seen Oct 30, 2026
- Dmytro-Kopylov-personal/zettelkasten-skilltheir own version, first seen Oct 25, 2026
- HybridAIOne/hybridclawtheir own version, first seen Oct 13, 2026
- symonhe/homebrew-clubtheir own version, first seen Aug 7, 2026
- brainsforai/brains-skillstheir own version, first seen Jun 5, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- HybridAIOne/hybridclaw★ 159same name
- brainsforai/brains-skills★ 1same name
- symonhe/homebrew-club★ 1same name
- weininghui/skills★ 1same name
- Dmytro-Kopylov-personal/zettelkasten-skill★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 10
All scripts live in workspace/skills/zettelkasten/scripts/ and use uv run.
- Very specific: line 37
Tags: use lowercase, hyphenated tags (e.g.
- Distinctive: line 103
Run this after creating new notes to keep semantic search current.
- Very specific: line 107
Search by meaning using sqlite-vec for native vector similarity (cosine distance).
- Very specific: line 132
Run weekly.py to get the raw material
- Distinctive: line 142
When the user shares knowledge (from conversation, articles, videos, etc.):
- Distinctive: line 151
When the user asks "what do I know about X":
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Zettelkasten Skill
A personal knowledge base stored in SQLite. Atomic notes, linked together, searchable by keyword and tag.
All scripts live in workspace/skills/zettelkasten/scripts/ and use uv run.
Database lives at workspace/skills/zettelkasten/db/zettel.sqlite.
First Run
Initialize the database (only needed once):
uv run workspace/skills/zettelkasten/scripts/init_db.pyCreate a Note
Pipe JSON to stdin. Tags and links are optional.
echo '{"title": "Prompt injection has no solution", "body": "LLMs cannot distinguish operator instructions from instructions embedded in content.", "source": "Blog post", "tags": ["ai-safety", "llm"], "links": ["20260213170000"]}' | uv run workspace/skills/zettelkasten/scripts/create.pyReturns: {"id": "20260213180000", "title": "...", "tags": [...], "links": [...]}
Writing good Zettel notes
- Atomic: one idea per note
- Own words: restate the idea, don't just quote
- Context: explain why it matters
- Links: connect to existing notes where relevant
- Tags: use lowercase, hyphenated tags (e.g.
ai-safety,event-sourcing)
Search Notes
uv run workspace/skills/zettelkasten/scripts/search.py "prompt injection" fts # full-text search
uv run workspace/skills/zettelkasten/scripts/search.py "ai-safety" tag # by tag
uv run workspace/skills/zettelkasten/scripts/search.py "20260213180000" id # by ID (full detail + links)
uv run workspace/skills/zettelkasten/scripts/search.py "10" all # recent N notesUpdate a Note
echo '{"id": "20260213180000", "title": "New title", "body": "Updated body", "tags": ["new-tag"]}' | uv run workspace/skills/zettelkasten/scripts/update.pyDelete a Note
uv run workspace/skills/zettelkasten/scripts/delete.py 20260213180000Links
List links for a note
uv run workspace/skills/zettelkasten/scripts/link.py list 20260213180000Add a link
echo '{"from": "20260213180000", "to": "20260213190000", "context": "Both discuss LLM safety"}' | uv run workspace/skills/zettelkasten/scripts/link.py addRemove a link
echo '{"from": "20260213180000", "to": "20260213190000"}' | uv run workspace/skills/zettelkasten/scripts/link.py removeFull graph
uv run workspace/skills/zettelkasten/scripts/link.py graphTags
uv run workspace/skills/zettelkasten/scripts/tags.py list # all tags with counts
uv run workspace/skills/zettelkasten/scripts/tags.py add 20260213180000 new-tag # add tag
uv run workspace/skills/zettelkasten/scripts/tags.py remove 20260213180000 old-tag # remove tagEmbeddings
Generate embeddings for all notes (or re-embed a specific note). Uses OpenAI text-embedding-3-small (1536 dimensions). Requires OPENAI_API_KEY env var.
uv run workspace/skills/zettelkasten/scripts/embed.py # all unembedded notes
uv run workspace/skills/zettelkasten/scripts/embed.py 20260213180000 # specific noteRun this after creating new notes to keep semantic search current.
Semantic Search
Search by meaning using sqlite-vec for native vector similarity (cosine distance). No numpy, no Python maths — all computed in C inside SQLite. Requires embeddings to exist.
uv run workspace/skills/zettelkasten/scripts/semantic_search.py "security risks of AI tool access"Returns notes ranked by cosine similarity to the query.
Stats
uv run workspace/skills/zettelkasten/scripts/stats.pyWeeknotes Compilation
Compile notes from the past week, clustered by theme with connections:
uv run workspace/skills/zettelkasten/scripts/weekly.py # last 7 days
uv run workspace/skills/zettelkasten/scripts/weekly.py 14 # last 14 daysReturns all notes, tag clusters (sorted by size, filtered for relevance), and connections between notes. Use this to draft weeknotes:
- Run
weekly.pyto get the raw material - Identify 3-5 themes from the tag clusters and connections
- For each theme, synthesise the linked notes into a narrative section
- Include source attributions and links
- Present as a draft with headings the user can edit
Trigger phrases: "compile my weeknotes", "weeknotes time", "what have I noted this week"
Workflow
When the user shares knowledge (from conversation, articles, videos, etc.):
- Extract atomic ideas — one note per concept
- Search existing notes for related ideas (semantic + keyword)
- Create notes with appropriate tags
- Link new notes to related existing notes
- Embed new notes for semantic search
- Report what was saved and how it connects
When the user asks "what do I know about X":
- Search by keyword (FTS) and tag
- Follow links from matching notes to find related knowledge
- Synthesise an answer drawing from the connected notes
- Cite note IDs so the user can drill deeper
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

