6.2 KiB
6.2 KiB
description, argument-hint, allowed-tools, disable-model-invocation
| description | argument-hint | allowed-tools | disable-model-invocation |
|---|---|---|---|
| Search indexed codebase using natural language semantic search | <query> | Bash, Read | true |
search - Semantic search in current directory
Search the current directory's semantic index using natural language queries.
Usage
/semq:search <query>
Arguments:
query- Natural language description of what to find (required)
What It Does
- Finds
.odinodirectory by traversing up from current directory - Runs
odino queryfrom the index location - Parses and formats results with scores and file paths
- Optionally reads top results for context
- Suggests using code-pointer to open relevant files
Examples
Find error handling (conceptual):
User: /semq:search error handling
Claude infers: "error handling exception management try catch validation"
Results:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ File ┃ Score ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ knowledge/Error Handling.md │ 0.876 │
│ → "Error handling is the process of..."
│ → Shows: Key Concepts, Best Practices
│
│ middleware/errorHandler.js │ 0.745 │
│ → Shows: Global error handler implementation
└─────────────────────────────────┴──────────┘
Claude reads top result and summarizes key concepts.
Find database code:
User: /semq:search DB connection code
Claude infers query with Python example:
"database connection pooling setup
import mysql.connector
pool = mysql.connector.pooling.MySQLConnectionPool(
pool_name='mypool',
pool_size=5,
host='localhost'
)
connection = pool.get_connection()"
Results:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ File ┃ Score ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ src/db/connection.js │ 0.924 │
│ → const pool = mysql.createPool({...})
│ → Shows: Connection pooling config with env vars
│ → Includes: Error handling and testing
└─────────────────────────────────┴──────────┘
Claude shows code snippet and explains pooling strategy.
Find algorithms:
User: /semq:search BFS algorithm Python
Claude infers query with code:
"breadth first search BFS graph traversal
def bfs(graph, start):
visited = set()
queue = [start]
while queue:
node = queue.pop(0)
if node not in visited:
visited.add(node)
queue.extend(graph[node])"
Results:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ File ┃ Score ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ knowledge/Search Algorithms.md │ 0.891 │
│ → Types: Uninformed (BFS, DFS) vs Informed (A*, Greedy)
│ → When to use each algorithm
│ → Includes mermaid diagram
└─────────────────────────────────┴──────────┘
Claude reads note and explains algorithm categories.
Implementation
Use the directory traversal helper to find the index, then run the search:
# Helper function to find .odino directory
find_odino_root() {
local dir="$PWD"
while [[ "$dir" != "/" ]]; do
if [[ -d "$dir/.odino" ]]; then
echo "$dir"
return 0
fi
dir="$(dirname "$dir")"
done
return 1
}
# Get query from arguments
QUERY="$*"
if [[ -z "$QUERY" ]]; then
echo "Error: Query required"
echo "Usage: /semq:search <query>"
exit 1
fi
# Find index and search
if ODINO_ROOT=$(find_odino_root); then
echo "Searching in: $ODINO_ROOT"
echo ""
# Run search
RESULTS=$(cd "$ODINO_ROOT" && odino query -q "$QUERY" 2>&1)
if [[ $? -eq 0 ]]; then
echo "$RESULTS"
echo ""
echo "💡 Tip: Use code-pointer to open files at specific lines"
else
echo "Search failed:"
echo "$RESULTS"
fi
else
echo "No semantic search index found in current path."
echo ""
echo "To create an index, run:"
echo " /semq:index"
echo ""
echo "This will index the current directory for semantic search."
fi
Output Format
Results are shown with similarity scores and file paths:
Searching in: /home/user/project
Score: 0.89 | Path: src/auth/middleware.js
Score: 0.82 | Path: src/auth/jwt.js
Score: 0.75 | Path: src/middleware/passport.js
💡 Tip: Use code-pointer to open files at specific lines
Score Interpretation
- 0.85-1.0: Highly relevant, definitely check this
- 0.70-0.84: Likely relevant, worth reviewing
- 0.60-0.69: Possibly relevant, may contain related concepts
- <0.60: Weakly related, probably not useful
When to Use
Use /semq:search when:
- You know the directory is indexed
- You want to find code by describing what it does
- You're exploring an unfamiliar codebase
- Grep/glob aren't working (too literal)
Use /semq:here instead when:
- You're in a subdirectory and want automatic traversal
- You want to see where the index was found
Related Commands
/semq:here <query>- Search with directory info/semq:status- Check if directory is indexed/semq:index- Create a new index
Tips
- Be conceptual - Describe what the code does, not exact names
- Use natural language - "authentication logic" not "auth"
- Check top 3-5 results - Sometimes #3 is the best match
- Combine with grep - Use semantic search to find area, grep for specifics
- Read files - Use Read tool on top results for context