From zettelkasten
This skill should be used when the user asks to "process inbox", "ingest notes", "organize inbox", "zet ingest", "digest notes", "process new notes", "clean up inbox", "handle new materials", "run zettelkasten", or has new files in 0_inbox/ to process. Orchestrates Zettelkasten ingestion: scans inbox, dispatches zet-worker agents in sequential batches, updates MOCs, and commits. The most frequently used daily command. Accepts optional target argument: file path or glob pattern (e.g. 0_inbox/*.md). Omit to process all .md files in 0_inbox/.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zettelkasten:zet-ingestThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pure orchestrator. All file processing is delegated to zet-worker agents. This skill handles scanning, batching, dispatching, MOC updates, and commits.
Pure orchestrator. All file processing is delegated to zet-worker agents. This skill handles scanning, batching, dispatching, MOC updates, and commits.
Parse the target argument to find files. If no target specified, default to all .md files in 0_inbox/ recursively (including all subdirectories). Use Glob pattern 0_inbox/**/*.md to find all nested files.
If the user provides a target (file path or glob), expand it with Glob. Count the files found.
If 0_inbox/ is empty or no files match, inform the user and stop.
Split all files into batches of 10 (last batch may be smaller). Process batches one at a time, in order.
For each batch:
rm -- "<path>"), use -- to prevent - filenames from being parsed as flags. If rm fails for a file, log the failure and continue with remaining files — do not abort the batch.Why sequential: Each batch commits before the next begins. Batch N+1 can link to notes from all prior batches, improving link quality progressively. User may interrupt between batches — all prior work is preserved.
Follow ${CLAUDE_PLUGIN_ROOT}/references/moc-rules.md for all MOC operations.
3a. Collect tags from the entire vault (not just current batch)
Use Grep to search all 1_zettel/ files for tags: lines in one pass — do NOT read each file's frontmatter individually. Normalize all tags to lowercase kebab-case per frontmatter-spec.md, then count how many notes use each normalized tag.
3b. Create or update MOCs
For each normalized tag with ≥3 notes, follow moc-rules.md to create or update the MOC. Key rules:
2_maps/*.md, lowercase filename comparison)- [[ lines (never increment)2_maps/ai.md)3c. Update Related Maps cross-links
After all MOCs are updated, scan for MOCs that share notes and add missing cross-links per moc-rules.md.
git add 1_zettel/ 2_maps/ 4_assets/
git add -u 0_inbox/
git commit -m "zet: ingest N files, created M notes (batch X/Y)"
The git add -u 0_inbox/ stages deletions of processed inbox files so git tracks the cleanup.
For single-batch runs, omit batch numbering:
git commit -m "zet: ingest N files, created M notes"
After all batches complete, display summary:
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub henrywen98/zettelkasten --plugin zettelkasten