Initial commit
This commit is contained in:
315
commands/search-notes.md
Normal file
315
commands/search-notes.md
Normal file
@@ -0,0 +1,315 @@
|
||||
---
|
||||
description: Search across all notes for a phrase or pattern with context
|
||||
---
|
||||
|
||||
# Search Notes
|
||||
|
||||
You are tasked with searching across all notes in the Zettelkasten for a specific phrase or pattern, showing context for each match.
|
||||
|
||||
## 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 Search Input
|
||||
|
||||
**Input format:** User provides either:
|
||||
|
||||
- A simple phrase: `/search-notes "semantic routing"`
|
||||
- A regex pattern: `/search-notes "async.*await"`
|
||||
- Multiple terms: `/search-notes "MCP security authentication"`
|
||||
|
||||
**Extract:**
|
||||
|
||||
- Search pattern (the phrase or regex)
|
||||
- Optional flags (case-sensitive, whole word, etc.)
|
||||
|
||||
## 2. Execute Search with Context
|
||||
|
||||
**Use Grep tool to search all markdown files:**
|
||||
|
||||
```
|
||||
pattern: <user's search term>
|
||||
glob: "*.md"
|
||||
output_mode: "content"
|
||||
-n: true (show line numbers)
|
||||
-C: 2 (show 2 lines of context before and after)
|
||||
-i: true (case insensitive by default)
|
||||
```
|
||||
|
||||
**Search strategy:**
|
||||
|
||||
- Search all `.md` files in repository root
|
||||
- Include line numbers for reference
|
||||
- Show 2 lines context before and after each match
|
||||
- Case-insensitive by default (unless user specifies otherwise)
|
||||
|
||||
## 3. Format Results
|
||||
|
||||
**Group results by file and present clearly:**
|
||||
|
||||
```
|
||||
Found <N> matches across <M> notes:
|
||||
|
||||
## note_name.md (X matches)
|
||||
|
||||
Match 1 (line 45):
|
||||
43: context before
|
||||
44: more context
|
||||
45: **matching line with PATTERN highlighted**
|
||||
46: context after
|
||||
47: more context
|
||||
|
||||
Match 2 (line 120):
|
||||
118: context before
|
||||
119: more context
|
||||
120: **matching line with PATTERN highlighted**
|
||||
121: context after
|
||||
122: more context
|
||||
|
||||
---
|
||||
|
||||
## another_note.md (Y matches)
|
||||
|
||||
Match 1 (line 78):
|
||||
...
|
||||
```
|
||||
|
||||
**Formatting guidelines:**
|
||||
|
||||
- Use `##` headers for each file
|
||||
- Show match count per file
|
||||
- Include line numbers for easy navigation
|
||||
- Bold or highlight the matching text
|
||||
- Separate files with `---`
|
||||
- Show total stats at top
|
||||
|
||||
## 4. Analyze Results
|
||||
|
||||
**Provide insights:**
|
||||
|
||||
**Thematic clustering:**
|
||||
|
||||
- Which tags/domains show up most?
|
||||
- Are matches concentrated in certain batches?
|
||||
- Example: "Most matches in MCP Protocol notes (5 files)"
|
||||
|
||||
**Related concepts:**
|
||||
|
||||
- Which notes frequently appear together in results?
|
||||
- Suggest wikilinks between related notes if not already linked
|
||||
|
||||
**Coverage assessment:**
|
||||
|
||||
- Is this concept well-covered or sparse?
|
||||
- Suggest potential new notes or expansions
|
||||
|
||||
## 5. Suggest Next Actions
|
||||
|
||||
**Based on search results, suggest:**
|
||||
|
||||
**If many matches (>10):**
|
||||
|
||||
- "This concept is well-covered. Consider creating a MOC for [topic]"
|
||||
- "Consider using `/generate-moc` for this theme"
|
||||
|
||||
**If few matches (1-3):**
|
||||
|
||||
- "Limited coverage found. Consider `/create-note` for deeper treatment"
|
||||
- "Consider `/expand-graph` on existing notes to add related content"
|
||||
|
||||
**If related concepts found:**
|
||||
|
||||
- "Found related notes that aren't linked. Consider `/link-notes`"
|
||||
- List specific note pairs that should be connected
|
||||
|
||||
**If search term in multiple contexts:**
|
||||
|
||||
- "This term appears in different contexts: [list domains]"
|
||||
- "Consider creating separate atomic notes for each context"
|
||||
|
||||
## 6. Advanced Search Options
|
||||
|
||||
**Support optional flags:**
|
||||
|
||||
**Case-sensitive search:**
|
||||
|
||||
- User specifies: `/search-notes --case-sensitive "Python"`
|
||||
- Set `-i: false` in Grep
|
||||
|
||||
**Whole word only:**
|
||||
|
||||
- User specifies: `/search-notes --whole-word "test"`
|
||||
- Adjust pattern to: `\btest\b`
|
||||
|
||||
**Regex mode:**
|
||||
|
||||
- User specifies: `/search-notes --regex "mcp.*server"`
|
||||
- Pass pattern directly to Grep
|
||||
|
||||
**More context:**
|
||||
|
||||
- User specifies: `/search-notes --context 5 "pattern"`
|
||||
- Set `-C: 5` for 5 lines of context
|
||||
|
||||
**Files only (no content):**
|
||||
|
||||
- User specifies: `/search-notes --files-only "pattern"`
|
||||
- Set `output_mode: "files_with_matches"`
|
||||
|
||||
## 7. Output Summary
|
||||
|
||||
**Provide concise summary:**
|
||||
|
||||
```
|
||||
Search Summary for "<search-pattern>"
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📊 Statistics:
|
||||
- Total matches: <N>
|
||||
- Files with matches: <M>
|
||||
- Most matches: <filename> (<X> matches)
|
||||
|
||||
📁 Distribution by batch:
|
||||
- MCP Protocol: 5 notes
|
||||
- Python Stack: 3 notes
|
||||
- Core AI/Agents: 2 notes
|
||||
|
||||
🏷️ Common tags in results:
|
||||
#mcp, #python, #security, #api
|
||||
|
||||
💡 Suggestions:
|
||||
- [Specific actionable next step based on results]
|
||||
- [Another suggestion]
|
||||
|
||||
🔗 Potentially missing links:
|
||||
- [[note_a]] ↔ [[note_b]] - both discuss same concept
|
||||
```
|
||||
|
||||
## 8. Special Search Patterns
|
||||
|
||||
**Recognize common search needs:**
|
||||
|
||||
**Tag search:**
|
||||
|
||||
- Input: `/search-notes "#mcp"`
|
||||
- Search in YAML frontmatter tags specifically
|
||||
- List all notes with that tag
|
||||
|
||||
**Broken wikilinks:**
|
||||
|
||||
- Input: `/search-notes --broken-links`
|
||||
- Find `[[wikilinks]]` that don't point to existing files
|
||||
- Report with locations
|
||||
|
||||
**TODOs and incomplete sections:**
|
||||
|
||||
- Input: `/search-notes --todos`
|
||||
- Find `TODO`, `FIXME`, `[placeholder]`, etc.
|
||||
- Report what needs completion
|
||||
|
||||
**Missing related concepts:**
|
||||
|
||||
- Input: `/search-notes --no-relationships`
|
||||
- Find notes with empty "Related Concepts" sections
|
||||
- Suggest running `/expand-graph` on them
|
||||
|
||||
## Usage Examples
|
||||
|
||||
**Simple search:**
|
||||
|
||||
```
|
||||
/search-notes "semantic routing"
|
||||
```
|
||||
|
||||
**Regex search:**
|
||||
|
||||
```
|
||||
/search-notes --regex "async.*(await|runtime)"
|
||||
```
|
||||
|
||||
**Case-sensitive search:**
|
||||
|
||||
```
|
||||
/search-notes --case-sensitive "Python"
|
||||
```
|
||||
|
||||
**Find all notes about a technology:**
|
||||
|
||||
```
|
||||
/search-notes --context 3 "FastMCP"
|
||||
```
|
||||
|
||||
**Tag search:**
|
||||
|
||||
```
|
||||
/search-notes "#agents"
|
||||
```
|
||||
|
||||
**Find broken links:**
|
||||
|
||||
```
|
||||
/search-notes --broken-links
|
||||
```
|
||||
|
||||
**Find incomplete notes:**
|
||||
|
||||
```
|
||||
/search-notes --todos
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
**Performance:**
|
||||
|
||||
- Grep is fast even across 93+ notes
|
||||
- Results should return quickly
|
||||
- If >100 matches, consider limiting output or grouping
|
||||
|
||||
**Formatting:**
|
||||
|
||||
- Keep results scannable
|
||||
- Use consistent formatting
|
||||
- Include enough context to understand match
|
||||
- Link to line numbers for easy navigation: `note.md:45`
|
||||
|
||||
**Accuracy:**
|
||||
|
||||
- Match user's search term exactly as specified
|
||||
- Don't modify regex patterns unless clarifying with user
|
||||
- Report if pattern yields no results
|
||||
|
||||
Execute the search for the pattern provided by the user.
|
||||
Reference in New Issue
Block a user