// the find
probelabs/probe
AI-friendly semantic code search engine for large codebases. Combines ripgrep speed with tree-sitter AST parsing. Powers AI coding assistants with precise, context-aware code understanding.
Probe is a Rust CLI/library for AST-aware code search aimed at AI coding agents — it combines ripgrep-speed scanning with tree-sitter parsing so results come back as complete functions or classes instead of arbitrary text chunks, with no indexing or embedding step required. It's for anyone wiring code search into an LLM agent (via MCP, Node SDK, or Vercel AI SDK) rather than someone looking for a human-facing grep replacement.
Zero-setup structural search: returns whole semantic blocks instead of chunking mid-function the way embedding-chunk tools do, and there's no vector DB or embedding service to stand up first. Results are deterministic — same query, same output, every time — which actually matters for agent loops where cosine-similarity drift makes repeated searches flaky. Real query language (Elasticsearch-style AND/OR/NOT, phrase match, ext:/lang:/dir: filters) instead of plain regex, with BM25/TF-IDF/hybrid ranking and SIMD-accelerated matching. Ships through several integration paths at once — raw MCP tools, a full MCP agent, CLI, Node.js SDK, Vercel AI SDK bindings — so you're not locked into one consumption model.
The README's comparison table against embedding-based tools is written by the project itself and undersells a real failure mode: literal/boolean term search genuinely misses renamed or refactored code that a vector search would still catch, it's not just an LLM vocabulary problem. The built-in agent has grown well past 'search tool' — multi-provider support, task delegation, bash execution, and a whole sandboxed LLM Script DSL for pipelines is a lot of bolted-on surface area, and --allow-edit/--enable-bash widen the attack surface considerably if you're pointing this at untrusted repos. Result quality is only benchmarked against the project's own comparison table — no third-party numbers on actual agent task completion. Quality is gated by tree-sitter grammar coverage per language, so anything exotic, a non-standard dialect, or very new syntax quietly degrades toward plain-grep quality with no stated fallback.