zettel-brainstormer
by @hxy9243
Build structured brainstorming notes from a seed zettel by retrieving linked notes, preprocessing each note with subagents for relevance extraction, drafting...
clawhub install zettel-brainstormerπ About This Skill
name: zettel-brainstormer description: Build structured brainstorming notes from a seed zettel by retrieving linked notes, preprocessing each note with subagents for relevance extraction, drafting with cited evidence, and publishing a natural blog-style post with a final References section. Use when asked to expand, research, synthesize, or publish from local Obsidian/Zettelkasten notes.
Zettel Brainstormer
Run this workflow in order. Keep each stage separate so relevance decisions happen before drafting.
Configure Once
1. Run setup:
python zettel-brainstormer/scripts/setup.py
2. Confirm zettel-brainstormer/config/models.json contains:
zettel_diroutput_dirmodels and agent_modelsretrieval.link_depth and retrieval.max_linksStage 1: Retrieval
Goal: retrieve candidate notes from the seed note.
Required order for this stage:
1. Read retrieval limits from config and target candidate count using retrieval.max_links.
2. Check if the external zettel-link skill is available. If it exists, run semantic retrieval via its scripts/search.py command using the seed note's topic or title. If it doesn't exist, warn the user and skip this step.
3. Run local retrieval with scripts/find_links.py to gather exact wikilinks and tag-overlap notes.
4. Merge and deduplicate candidates from both sources. Prioritize semantic candidates first, and trim to the configured count.
5. Exclude the seed note itself.
Local retrieval command:
python zettel-brainstormer/scripts/find_links.py \
--input "/absolute/path/to/Seed Note.md" \
--output /tmp/zettel_candidates.json
Treat /tmp/zettel_candidates.json as the candidate pool for preprocessing.
Stage 2: Preprocess (Subagent Per Note)
Goal: preprocess each candidate note and decide relevance to the seed note.
1. Read agents/preprocess.md as the per-note instruction.
2. Spawn one subagent per candidate note.
3. For each note, require:
Quality rules:
Stage 3: Draft (Synthesis Subagent)
Goal: gather only relevant preprocess outputs and generate a referenced draft.
1. Run the aggregation helper:
python zettel-brainstormer/scripts/compile_preprocess.py \
--seed "/absolute/path/to/Seed Note.md" \
--preprocess-dir /tmp/zettel_preprocess \
--output /tmp/zettel_draft_packet.json
2. Read agents/draft.md.
3. Use one drafting subagent with:
/tmp/zettel_draft_packet.jsonStage 4: Publish (Publisher Subagent)
Goal: rewrite the draft into natural long-form writing while preserving evidence quality.
1. Read agents/publisher.md.
2. Use one publisher subagent to rewrite the draft with these constraints:
tags.## References section listing every cited note.Stage 5: Delivery
Goal: Present the final output to the user.
1. Deliver or summarize the published draft for the user. 2. Crucial: When responding to the user, ALWAYS include the final list of references/notes that were actually used and cited in the brainstorm.
Bundled Resources
agents/retriever.md: retrieval-stage instructionsagents/preprocess.md: per-note preprocessing instructionagents/draft.md: synthesis drafting instructionagents/publisher.md: publication rewrite instructionscripts/find_links.py: retrieval script for wikilinks + tag overlapscripts/compile_preprocess.py: filter and merge preprocess outputs into a draft packetscripts/obsidian_utils.py: wikilink and tag helpersscripts/config_manager.py: shared config loaderscripts/setup.py: interactive config setupMaintenance Rules
agents/ and scripts in scripts/.