From zettelkasten
[DEPRECATED - Use ai-zettelkasten instead] Ingest Notion documents into Zettelkasten as atomic notes. Writes to BOTH ChromaDB (vector search) AND Obsidian (markdown files with wikilinks). Analyzes structure, proposes atomization, creates interlinked notes with proper Luhmann-style IDs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zettelkasten:notion-ingestThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **DEPRECATED:** This plugin has been superseded by **ai-zettelkasten**.
DEPRECATED: This plugin has been superseded by ai-zettelkasten. Please migrate to
ai-zettelkastenfor continued updates. This plugin is no longer maintained.
When user provides a Notion URL or page ID, or says "ingest from notion", follow this process to atomize the document into Zettelkasten notes.
/notion-ingest <url or page_id>Notes are stored in two places:
| Storage | Purpose | Tool |
|---|---|---|
| ChromaDB | Vector search, semantic queries, metadata filtering | mcp__chroma__chroma_add_documents |
| Obsidian | Human-readable markdown, wikilinks, graph view | mcp__obsidian__write_note |
Both must be updated together to keep the systems in sync.
Extract page ID from URL if needed. Notion URLs have format:
https://www.notion.so/Page-Title-{page_id}
The page_id is the 32-character hex string at the end (may have hyphens).
# Get page metadata
mcp__MCP_DOCKER__API-retrieve-a-page(page_id)
# Get page content blocks
mcp__MCP_DOCKER__API-get-block-children(block_id=page_id, page_size=100)
Parse the block children to extract:
Count and categorize:
Block Types:
- Headings: {count} (section boundaries)
- Paragraphs: {count}
- Lists: {count}
- TODOs: {count} (potential tasks)
- Quotes: {count}
- Links: {count} (potential sources)
Identify:
Present to user before creating:
Proposed Structure for: "{document_title}"
Source: {notion_url}
INDEX NOTE:
ID: {topic}-1
Title: {document_title}
Type: index-note
ATOMIC NOTES ({count}):
{topic}-1a: {section_1_title} (literature-note)
{topic}-1b: {section_2_title} (literature-note)
{topic}-1c: {section_3_title} (permanent-note)
...
RESEARCH TASKS ({count}):
task-{topic}-1: {todo_1}
task-{topic}-2: {todo_2}
...
LINKS:
{topic}-1 (parent)
├── {topic}-1a (child) ←→ task-{topic}-1 (related)
├── {topic}-1b (child)
└── {topic}-1c (child) ←→ {topic}-1a (related)
Proceed? [y/n] or suggest changes:
Follow Luhmann-style branching:
llm, design, learn){prefix}-{next_number} for index{prefix}-{number}a, {prefix}-{number}b, etc.task-{topic}-{number}After user approval, create all documents in ChromaDB for vector search:
# For each note, create with chroma_add_documents:
{
"id": "{generated_id}",
"document": "{title}\n\n{body}\n\nTags: {tags}\nSource: {source}",
"metadata": {
"title": "{title}",
"category": "{category}", # index-note, literature-note, permanent-note, fleeting-note, kanban-task
"topic": "{topic}",
"tags": "{comma,separated,tags}",
"source": "{source_citation}",
"sourceUrl": "{url}",
"dateAdded": "{ISO_date}",
"parentIds": "{comma,separated,ids}",
"childIds": "{comma,separated,ids}",
"relatedIds": "{comma,separated,ids}"
}
}
IMPORTANT: Also create each note in Obsidian for browsable markdown with wikilinks.
Obsidian Vault: /Users/rc/Documents/Obsidian Vault
Folder: Zettelkasten/
Use mcp__obsidian__write_note for each note:
mcp__obsidian__write_note(
path="Zettelkasten/{id} {title}.md",
content="""# {title}
{body_as_markdown}
## Connections
- Parent: [[{parent_id} {parent_title}]]
- Related: [[{related_id} {related_title}]], ...
""",
frontmatter={
"id": "{id}",
"title": "{title}",
"category": "{category}",
"topic": "{topic}",
"tags": ["{tag1}", "{tag2}"], # Array format for Obsidian
"source": "{source}",
"sourceUrl": "{url}",
"dateAdded": "{ISO_date}",
"parentIds": ["{parent_id}"],
"status": "todo" # For tasks only
}
)
Obsidian-specific formatting:
[[note-name]] wikilinks for connections (Obsidian resolves these){id} {title}.md for readabilitystatus field for kanban tasksEnsure bidirectional links:
childIds contains all atomic note IDsparentIds contains index note IDrelatedIds link to relevant concept notesrelatedIdsAfter creating notes, run semantic search to find connections to existing notes:
chroma_query_documents(
collection_name="zettelkasten",
query_texts=["{new_note_content}"],
n_results=5
)
For each new note, suggest connections:
Potential connections for {id}:
[1] {existing_id}: "{title}" (similarity: 0.XX)
[2] {existing_id}: "{title}" (similarity: 0.XX)
Create links? [1,2] or [n]one:
| Content Type | Category |
|---|---|
| Overview/TOC of a topic | index-note |
| Summary of external source | literature-note |
| Your own developed ideas | permanent-note |
| Quick thoughts, unprocessed | fleeting-note |
| Action items from TODOs | kanban-task |
| Large initiatives | epic |
Auto-extract tags from:
Default tags by category:
source:{author}, year:{year}todo (status tag)unprocessedUser: /notion-ingest https://notion.so/My-Notes-abc123def456
npx claudepluginhub cajias/claude-skills --plugin zettelkastenSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.