Files
gh-witt3rd-claude-plugins-p…/commands/search-notes.md
2025-11-30 09:06:41 +08:00

316 lines
7.1 KiB
Markdown

---
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.