From zkfy
Transform markdown files into fully integrated Zettelkasten literature notes with frontmatter, backlinks, and MOC updates. Use when you need to (1) Create atomic notes from existing markdown, (2) Add proper navigation and categorization, (3) Link notes into your knowledge graph, (4) Apply Feynman-style synthesis (--digest, default) or preserve original content verbatim (--preserve).
npx claudepluginhub jasonsie/zkfy --plugin zkfyThis skill uses the workspace's default tool permissions.
Transform markdown into a fully integrated Zettelkasten literature note.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Transform markdown into a fully integrated Zettelkasten literature note.
$ARGUMENTS — [domain] [--preserve | --digest]
Optional domain: cs/web/ai/principle/devops/math
Optional flags:
This skill orchestrates two agents in sequence:
Source File
│
▼
┌─────────────────────────┐
│ zettelkasten-agent │ Opus — deep reasoning
│ (analyze & synthesize) │
│ │
│ → atomic concept │
│ → domain classification │
│ → Feynman explanations │ (digest mode)
│ → verbatim pass-through │ (preserve mode)
│ → relationship rationale│
└──────────┬──────────────┘
│ analysis results
▼
┌─────────────────────────┐
│ obsidian-formatter-agent│ Sonnet — mechanical
│ (format & integrate) │
│ │
│ → Train-Case filename │
│ → frontmatter + nav │
│ → assemble note file │
│ → update neighbors │
│ → update MOCs │
└──────────┬──────────────┘
│
▼
Cleanup & Report
Read the markdown file from the provided path. Extract the source URL if present in the file.
Parse flags from $ARGUMENTS:
--preserve is present → format_mode = preserve--digest is present → format_mode = digestformat_mode = digest (default)Use the Task tool to delegate to general-purpose subagent:
Prompt: "You are delegated to act as the zettelkasten-agent agent.
Read the agent instructions at: ~/.claude/agents/zettelkasten-agent.md
Then analyze this source content for Zettelkasten integration:
Source file: <path>
Vault root: <vault_root>
Format mode: <digest|preserve>
[Domain: <domain> — if provided by user]
Return a structured analysis:
- domain
- concept (atomic concept name)
- key_insights (bullet points)
- source_url
- abstract (formatted abstract section)
- content_sections (digest: fully written sub-sections with Feynman explanations and code examples; preserve: original content sections verbatim with ### headings applied)
- related_notes (list of [[Note]] — rationale pairs)"
If the zettelkasten-agent asks about domain, relay the question to the user.
Use the Task tool to delegate to general-purpose subagent:
Prompt: "You are delegated to act as the obsidian-formatter-agent agent.
Read the agent instructions at: ~/.claude/agents/obsidian-formatter-agent.md
Read the formatting rules at: ~/.claude/prompts/obsidian-note.prompt.md
Then format and integrate this literature note:
Domain: <domain from step 2>
Concept: <concept from step 2>
Abstract: <abstract from step 2>
Content sections: <content_sections from step 2>
Related notes: <related_notes from step 2>
Source URL: <source_url from step 2>
Source file: <source_file>
Today's date: <today's date>
Vault root: <vault_root>
Format mode: <digest|preserve>
Return:
- Note path and filename
- Neighbors updated
- MOCs updated"
If called from /source-to-zk or /query-to-note, delegate to cross-pollinator-agent to update existing related notes with backlinks to the new note:
Prompt: "You are delegated to act as the cross-pollinator-agent agent.
Read the agent instructions at: ~/.claude/agents/cross-pollinator-agent.md
Then cross-pollinate this newly created note:
New note path: <note path from step 3>
Vault root: <vault_root>
Candidates: <related_notes from step 2>
Dry run: false
Return the list of files updated and changes made."
If cross-pollination fails, warn but do not abort — the note is already created.
Delete the source file from row/.
Report completion:
✅ Zettelkasten note created
📄 Location: <domain>/<filename>.md
🔗 Links: <backlinks added>
📑 MOC updates: <MOCs modified>
🔄 Navigation: Before→<note>→Next
🔄 Cross-updates: <N> existing notes enriched (if cross-pollination ran)
<domain>/<Domain-Concept-In-Train-Case>.mdSource file not found:
Domain unclear (from zettelkasten-agent):
Analysis fails:
Formatting fails:
No related notes found:
MOC missing: