Content Search Skill
Search file contents using regular expressions with ripgrep (rg) or grep fallback. Optimized for searching code and text files.
When to Use
✅ USE this skill when:
-
Finding where a function is defined
-
Searching for specific patterns in code
-
Locating files containing specific text
-
Analyzing codebase structure
❌ DON'T use this skill when:
-
Binary file search (use file command)
-
Simple filename matching (use find or glob)
-
Regex in filenames only (use find -regex)
Features
-
Ripgrep (rg) with grep fallback
-
Multiple output modes: content, files, count
-
Glob-based file filtering
-
Context lines before/after matches
-
Case-sensitive/insensitive search
-
Multiline pattern support (rg only)
-
Respects .gitignore
Usage
Basic Search
node /job/.pi/skills/content-search/search.js --pattern "console.log"
Search with File Filter
node /job/.pi/skills/content-search/search.js
--pattern "function.init"
--include ".js"
--include "*.ts"
Files with Matches Only
node /job/.pi/skills/content-search/search.js
--pattern "TODO"
--output-mode files_with_matches
Match Count Per File
node /job/.pi/skills/content-search/search.js
--pattern "error"
--output-mode count
With Context
node /job/.pi/skills/content-search/search.js
--pattern "async function"
--context-before 2
--context-after 2
Case Insensitive
node /job/.pi/skills/content-search/search.js
--pattern "todo"
--case-insensitive
CLI Options
--pattern <regex> Pattern to search for (required) --path <directory> Directory to search (default: .) --include <glob> File glob filter (e.g., "*.rs") --exclude <glob> Exclude glob pattern --output-mode <mode> content|files_with_matches|count --case-insensitive Case-insensitive search --context-before <n> Lines before match --context-after <n> Lines after match --multiline Enable multiline (rg only) --max-results <n> Maximum results (default: 1000)
Output Format
Content mode:
{ "matches": [ { "file": "src/index.js", "line": 42, "content": " console.log('Hello');", "before": [], "after": [] } ], "totalMatches": 1 }
Files mode:
{ "files": ["src/index.js", "src/utils.js"], "totalFiles": 2 }
Count mode:
{ "counts": [ {"file": "src/index.js", "count": 5}, {"file": "src/utils.js", "count": 3} ], "totalMatches": 8 }
Example Patterns
Find all function definitions:
node /job/.pi/skills/content-search/search.js
--pattern "fn\s+\w+\s*("
--include "*.rs"
Find TODOs:
node /job/.pi/skills/content-search/search.js
--pattern "TODO|FIXME|XXX"
--case-insensitive
Find imports:
node /job/.pi/skills/content-search/search.js
--pattern "^import.from.$"
--include ".js" --include ".ts"
Find error handling:
node /job/.pi/skills/content-search/search.js
--pattern "try\s*{|catch\s*(|.catch("
--include "*.js"
Performance Tips
-
Use specific --include patterns to reduce search scope
-
Prefer ripgrep (rg) over grep - it's 10-100x faster
-
Limit results with --max-results
-
Use --output-mode files_with_matches for quick existence checks
-
Exclude node_modules: --exclude "node_modules/*"