325 lines
9.9 KiB
Markdown
325 lines
9.9 KiB
Markdown
---
|
|
description: Create a new atomic note in the Zettelkasten knowledge graph
|
|
---
|
|
|
|
# Create Note
|
|
|
|
You are tasked with creating a new atomic note in the Zettelkasten knowledge graph. Follow these steps systematically:
|
|
|
|
## 0. Locate AZKG Repository
|
|
|
|
**Check for AZKG_REPO_PATH environment variable:**
|
|
|
|
- Use bash conditional: `if [ -z "$AZKG_REPO_PATH" ]; then REPO_PATH=$(pwd); else REPO_PATH="$AZKG_REPO_PATH"; fi`
|
|
- **If AZKG_REPO_PATH is set:** Use that path as the repository root
|
|
- **If AZKG_REPO_PATH is not set:** Use current working directory (pwd)
|
|
- Store result as REPO_PATH for all subsequent file operations
|
|
|
|
**All file operations must use REPO_PATH:**
|
|
|
|
- Read: `Read(REPO_PATH/filename.md)` or `Read("$REPO_PATH/filename.md")`
|
|
- Write: `Write(REPO_PATH/filename.md)` or `Write("$REPO_PATH/filename.md")`
|
|
- Edit: `Edit(REPO_PATH/filename.md)` or `Edit("$REPO_PATH/filename.md")`
|
|
- Grep: `Grep(pattern, path=REPO_PATH)` or with explicit path
|
|
- Glob: `Glob(pattern, path=REPO_PATH)` or with explicit path
|
|
|
|
**Example usage:**
|
|
|
|
```
|
|
# Check environment variable
|
|
if [ -z "$AZKG_REPO_PATH" ]; then
|
|
REPO_PATH=$(pwd)
|
|
else
|
|
REPO_PATH="$AZKG_REPO_PATH"
|
|
fi
|
|
|
|
# Then use REPO_PATH for all operations
|
|
Read("$REPO_PATH/agents.md")
|
|
```
|
|
|
|
**Concrete examples:**
|
|
|
|
- If AZKG_REPO_PATH="/c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg"
|
|
→ Read("/c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg/agents.md")
|
|
- If AZKG_REPO_PATH is not set and pwd is /c/Users/dothompson/OneDrive/src/witt3rd/donald-azkg
|
|
→ Read("agents.md") or use full path from pwd
|
|
|
|
## 1. Parse Input and Check for Duplicates
|
|
|
|
**Input format:** User provides either:
|
|
|
|
- A topic name: `/create-note semantic_routing`
|
|
- A descriptive phrase: `/create-note "Rust async runtime comparison"`
|
|
|
|
**Duplicate detection:**
|
|
|
|
- Search existing notes using Glob for similar filenames
|
|
- Search content using Grep for similar concepts
|
|
- If potential duplicate found, ask user:
|
|
- "Found existing note `similar_note.md`. Would you like to:
|
|
- Expand/refresh that note instead?
|
|
- Create a new distinct note (explain the difference)?
|
|
- Cancel?"
|
|
|
|
## 2. Generate Filename
|
|
|
|
**Naming convention:**
|
|
|
|
- `topic_specific_concept.md` - lowercase with underscores
|
|
- Descriptive, not generic: `python_mcp_sdk.md` NOT `sdk.md`
|
|
- No folder prefixes in filename
|
|
- All notes go in repository root
|
|
|
|
**Examples:**
|
|
|
|
- Input: "semantic routing" → `semantic_routing.md`
|
|
- Input: "Rust async runtime comparison" → `rust_async_runtime_comparison.md`
|
|
- Input: "First principles thinking" → `first_principles_thinking.md`
|
|
|
|
## 3. Research the Topic
|
|
|
|
**Use Perplexity for comprehensive research:**
|
|
|
|
- Formulate focused query: "Provide comprehensive, technical information about [TOPIC] including: definition, key concepts, how it works, common use cases, best practices, related technologies, and current state as of 2025. Focus on technical accuracy and concrete details."
|
|
- Use `mcp__perplexity-ask__perplexity_ask` tool
|
|
- Gather sufficient material for complete, self-contained note
|
|
- Capture citation sources for references section
|
|
|
|
**Research depth:**
|
|
|
|
- Note should be atomic (one concept) but complete
|
|
- Include enough context to be standalone
|
|
- Technical and specific, not superficial
|
|
|
|
## 4. Discover Relationships
|
|
|
|
**Analyze against existing knowledge graph using Grep and Read:**
|
|
|
|
**Prerequisites:** What must be understood first?
|
|
|
|
- Grep for foundational concepts this topic mentions
|
|
- Check existing notes for topics that should come before this
|
|
- Example: `mcp_security.md` requires `mcp_overview.md` first
|
|
|
|
**Related concepts:** What connects at the same level?
|
|
|
|
- Find complementary or adjacent topics via tag search
|
|
- Technologies that integrate or compare
|
|
- Example: `semantic_routing.md` relates to `agents.md`
|
|
|
|
**Extends:** What does this build upon?
|
|
|
|
- Specific notes this concept directly extends
|
|
- Base concepts or patterns this implements
|
|
- Example: `python_mcp_sdk.md` extends `mcp_overview.md`
|
|
|
|
**Examples:** What concrete implementations exist?
|
|
|
|
- Look for specific tool/framework notes
|
|
- Implementation patterns
|
|
- Example: `agents.md` has examples like `alita.md`
|
|
|
|
**Alternatives:** Different approaches to same problem?
|
|
|
|
- Competing technologies or patterns
|
|
- Different paradigms for same goal
|
|
|
|
## 5. Generate Tag Recommendations
|
|
|
|
**Read `tag_system.md` for complete tag catalog**
|
|
|
|
**Select 3-6 tags across multiple dimensions:**
|
|
|
|
1. **Technology/Language:** `#python`, `#rust`, `#typescript`, etc.
|
|
2. **Framework/Tool:** `#react`, `#mcp`, `#fastmcp`, etc.
|
|
3. **Domain/Discipline:** `#agents`, `#llm`, `#security`, etc.
|
|
4. **Content Type:** `#api`, `#guide`, `#pattern`, `#reference`, etc.
|
|
5. **Cross-cutting Themes:** `#async`, `#optimization`, `#testing`, etc.
|
|
6. **Method/Thinking:** `#first-principles`, `#systems-thinking`, etc.
|
|
|
|
**Tag format:** lowercase with hyphens in YAML array
|
|
|
|
```yaml
|
|
tags: [python, mcp, agents, sdk, api]
|
|
```
|
|
|
|
## 6. Write the Note
|
|
|
|
**IMPORTANT**: Follow the question-oriented content synthesis approach defined in `_shared_content_synthesis.md`.
|
|
|
|
**Note Structure Requirements:**
|
|
|
|
The note MUST follow this question-answering paradigm:
|
|
|
|
```markdown
|
|
---
|
|
tags: [tag1, tag2, tag3, tag4, tag5]
|
|
---
|
|
|
|
# Note Title (Based on Central Question)
|
|
|
|
## Central Question
|
|
|
|
**Question**: [The single overarching question this note addresses]
|
|
|
|
**Executive Summary**: 2-3 paragraphs previewing key insights and how the content resolves the central question.
|
|
|
|
## Part I: [Domain Question 1]
|
|
|
|
### [Specific Question 1.1]
|
|
|
|
**Question**: [Clear, specific question from this section]
|
|
|
|
**Answer**: [Comprehensive response including:
|
|
- Direct answer to the question
|
|
- Supporting evidence (specific quotes, examples, data from research)
|
|
- Technical details and concrete information
|
|
- Implications and connections to broader themes]
|
|
|
|
### [Specific Question 1.2]
|
|
|
|
**Question**: [Next specific question]
|
|
|
|
**Answer**: [Evidence-based response...]
|
|
|
|
## Part II: [Domain Question 2]
|
|
|
|
### [Specific Question 2.1]
|
|
|
|
**Question**: [Clear question]
|
|
|
|
**Answer**: [Comprehensive response with evidence...]
|
|
|
|
[Continue with additional parts and sections as needed]
|
|
|
|
## Resolution: [Answer to Central Question]
|
|
|
|
Synthesize domain insights to definitively resolve the central question posed at the beginning.
|
|
|
|
## Related Concepts
|
|
|
|
### Prerequisites
|
|
- [[prerequisite_note]] - Why it's needed first
|
|
|
|
### Related Topics
|
|
- [[related_note]] - Connection explanation
|
|
|
|
### Extends
|
|
- [[base_note]] - What this builds upon
|
|
|
|
## References
|
|
|
|
[1] Source URL from Perplexity research
|
|
[2] Source URL from Perplexity research
|
|
```
|
|
|
|
**Content Synthesis Guidelines** (from `_shared_content_synthesis.md`):
|
|
|
|
**DO**:
|
|
- Create complete educational document that systematically answers questions
|
|
- Include specific details, quotes, examples, data points from research
|
|
- Build understanding progressively from atomic to central question
|
|
- Provide standalone educational value for readers learning the topic
|
|
- Write for LLM context consumption and human reading
|
|
- Use wikilinks `[[note]]` to reference existing notes
|
|
- Include code examples where appropriate
|
|
- Be technical and specific with concrete, actionable information
|
|
|
|
**DO NOT**:
|
|
- Simply analyze the question structure or list questions without substantial answers
|
|
- Use vague generalities or hyperbolic language
|
|
- Include marketing claims or unsupported assertions
|
|
|
|
## 7. Add Bidirectional Relationships
|
|
|
|
**Update connected notes using Edit tool:**
|
|
|
|
For each relationship discovered:
|
|
|
|
1. **Read the target note** to find its "Related Concepts" section
|
|
2. **Add inverse relationship:**
|
|
- If new note extends X → Add new note to X's "Extended By" section
|
|
- If new note has prerequisite X → Add new note to X's "Extended By" or "Related Topics"
|
|
- If new note relates to X → Add new note to X's "Related Topics"
|
|
|
|
**Example:**
|
|
|
|
```markdown
|
|
# In agents.md - add to "Related Topics" section:
|
|
- [[semantic_routing]] - Enables intelligent model selection for agent tasks
|
|
```
|
|
|
|
## 8. Update MOC Files
|
|
|
|
**Identify relevant MOC files using Glob:**
|
|
|
|
- Check tags to determine which MOCs apply
|
|
- Common MOCs: `agents_moc.md`, `mcp_moc.md`, `rust_moc.md`, `typescript_moc.md`, `python_moc.md`, `writing_moc.md`
|
|
|
|
**For each relevant MOC:**
|
|
|
|
- Read the MOC file
|
|
- Find appropriate section to add link
|
|
- Add wikilink with brief context: `- [[new_note]] - Brief description`
|
|
- Maintain MOC organization and structure
|
|
- Use Edit tool for surgical updates
|
|
|
|
## 9. Provide Summary
|
|
|
|
**Report to user:**
|
|
|
|
```
|
|
Created new note: `new_note.md`
|
|
|
|
**Tags:** tag1, tag2, tag3, tag4, tag5
|
|
|
|
**Relationships established:**
|
|
- Prerequisites: 2 notes
|
|
- Related concepts: 3 notes
|
|
- Extends: 1 note
|
|
- Examples: 2 notes
|
|
|
|
**Bidirectional links updated:**
|
|
- Updated 5 notes with inverse relationships
|
|
|
|
**MOCs updated:**
|
|
- moc_name_moc.md (added to "Section Name")
|
|
- other_moc.md (added to "Other Section")
|
|
|
|
**Next steps:**
|
|
- Review the note at `new_note.md`
|
|
- Use `/graph-note new_note.md` to verify relationships
|
|
- Use `/expand-graph new_note.md` to discover additional connections
|
|
```
|
|
|
|
## Important Constraints
|
|
|
|
**Critical rules:**
|
|
|
|
- ALWAYS use wikilink format `[[note]]` not `[[note.md]]`
|
|
- MAINTAIN bidirectionality - update both notes in every relationship
|
|
- ENSURE atomicity - one complete, usable concept per note
|
|
- NO hyperbolic language or marketing claims
|
|
- ALL notes go in repository root (no subdirectories)
|
|
- Use Write for new files, Edit for updating existing files
|
|
- Use Grep/Glob for discovery, Read for content analysis
|
|
|
|
**Tools to use:**
|
|
|
|
- **Write** - Create new markdown file
|
|
- **Edit** - Update existing notes (add relationships, update MOCs)
|
|
- **Read** - Read tag_system.md, MOC files, existing notes
|
|
- **Grep** - Search for similar concepts, find notes by tag
|
|
- **Glob** - Find MOC files, check for duplicates
|
|
- **mcp__perplexity-ask** - Research the topic
|
|
|
|
**Quality checks before writing:**
|
|
|
|
- Is this truly atomic (one concept)?
|
|
- Is it complete enough to stand alone?
|
|
- Are relationships meaningful and justified?
|
|
- Do tags span multiple dimensions?
|
|
- Is content technical and specific?
|
|
|
|
Execute these steps for the topic provided by the user.
|