{"_id":"@edmondfrank/probe-win32-x64","_rev":"8-6dc363b5e0149d80b285cb563ed859c8","name":"@edmondfrank/probe-win32-x64","dist-tags":{"latest":"1.0.1-rc2"},"versions":{"1.0.0":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.0","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.0","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"04c9e08674f784d4f91631bad751f71dd1e3ebb0","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.0.tgz","fileCount":3,"integrity":"sha512-JIStRdous1yrZyglPRfwmSbneRh4pxnLkmRIWbWthp+rsHV97XvjgWDdidwDdd+8T0LzgYEly0pfUbRxUGteWg==","signatures":[{"sig":"MEUCIB3e4Fr/ldsFPWYgZXeuqQQAJ19zVz2b5CWDWmablW5mAiEA5pDHKDsSTwx2W5BYfIf0p1l30DbEzZxnBGxamWcM65Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36135},"gitHead":"11e9e8993e5173cc5d32636a7fdd7f40e65c2ebc","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.0_1748517906457_0.49555731293376404","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc2":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.0-rc2","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.0-rc2","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"ffb236caf99342de8c338db43e3b1fbdf62357dc","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.0-rc2.tgz","fileCount":3,"integrity":"sha512-pr0wR8QAo9pU1McF+chYGcONTno8hEhi7iBGP2nj5N7JA5ltX3sxvSNBDI9kgPRuigGs4BRFMIrR/pE8s8UL5Q==","signatures":[{"sig":"MEYCIQCpwbXnd42CGdJYs/fgJooVHXlnqqLOfAwRELWICBlkagIhAIwgs67Tn9UuGZVqyHX2mneWd/kb9L4wfBKlA9cDyxJN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"cf491ca40b863e7ad150a286a624bab36966ca7b","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.0-rc2_1748518836860_0.6968665182892226","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc3":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.0-rc3","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.0-rc3","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"7c94eb7599ded138f1c4344a002c6f966b174f89","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.0-rc3.tgz","fileCount":3,"integrity":"sha512-1GIdeJhhbiLKly2y+xBeazR5iDLCozF4QVDLckbD5ETnGAMBgHnYQMOMbngr90Kx4X4QY/UK0s81AAeBvOKuJA==","signatures":[{"sig":"MEUCICuaDolNtZ26jcaHEzlwK9jDPuiTqwUvrZajX7488mRsAiEA/URF/DDwxKe/6lMWKt7VPT/IESClii9/i5SyjZOrcJo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"420510f32aa7fc3e2cfe1a710b398b0c3e007bea","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.0-rc3_1748524946858_0.3435201204637677","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc4":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.0-rc4","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.0-rc4","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"454e9ba694caba4ff144d69e49d963d2d4face74","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.0-rc4.tgz","fileCount":3,"integrity":"sha512-U7Qr3Y/P3jAPzKybASa/MFX0SQXo4RaMq+OpJ3Jh4J4OhSaXS6MYTitOLv2DLBealf8IzK+ns/DxKc11iLQYEQ==","signatures":[{"sig":"MEUCIBax5drXydltW7+PrYHTQxNI1mqa0J9V3cI7JFgfhw8xAiEA3QbCLPDiCsZ5pAsrJAB+Dfi+57vNdpU4eSdNzjCCPS0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"9cfcd32b76e52736841e5795800f72c973e16664","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.0-rc4_1748526899376_0.9685225038590379","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc7":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.0-rc7","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.0-rc7","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"bee671f9ec68b86fc917781c4c26b33b366a5aac","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.0-rc7.tgz","fileCount":3,"integrity":"sha512-/lRzDqvxfc+n4FmjG5lkYK3IsOv9N5DDmwF8apeBwk0AP8YCMiUFJAiOGUGekST0U1c87DY9AygHOcOZO5nz2A==","signatures":[{"sig":"MEUCIQDwb6Tx+utKCqHe6YKOMMl+vph0GOakVDnBUgwPsRY2IwIgUgCpAulAqjEFY/dWqzaoz5l9Zw9sXxWWh4VWTERA+i8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"1dc917bf16e685fb7c7a6eb4d57a1f4406686235","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.0-rc7_1748583094138_0.09662904394720973","host":"s3://npm-registry-packages-npm-production"}},"0.7.0-rc1":{"name":"@edmondfrank/probe-win32-x64","version":"0.7.0-rc1","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@0.7.0-rc1","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"9b41b6ad88bbb83b195ccb8a211d1401438b5dda","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-0.7.0-rc1.tgz","fileCount":3,"integrity":"sha512-ObM93zKIFj/5t0fgyKqVvL6dbocViKIxuQvGzRHqVxNKPCnuNzMhV66zbsotSJqpC0n3/lv0sAK/XrKaRxDqWA==","signatures":[{"sig":"MEUCIEf0oOc/QHi9ViyBpUqMFGNXUFKzTPu9fHXnIiHJqDAYAiEAmWrC5OjYMgv6cALhAi0fdyX/s4oLgp+2fHKADfwQJN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"208e7d5501ba402869dd374d886e50025535addb","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_0.7.0-rc1_1755080598722_0.13833544100808548","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-rc1":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.1-rc1","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-win32-x64@1.0.1-rc1","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"homepage":"https://github.com/buger/probe#readme","bugs":{"url":"https://github.com/buger/probe/issues"},"os":["win32"],"bin":{"probe":"probe"},"cpu":["x64"],"dist":{"shasum":"beafffccd833e23131d9073b3ed0a05e9e8d30cb","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.1-rc1.tgz","fileCount":3,"integrity":"sha512-BL/ym82ynOdjwshyk/zoh7XOPK+yr02pAdsh6bozYF9VLSkoA/wIp4lBdjYJRn2J7FQpGWSqQIg7JxyOd7Sj6Q==","signatures":[{"sig":"MEQCIA/sZNyGK5YqZ2Rs1LXAFgAgyflze96dg0kv2YCuQe6pAiB3xaR+auyAvu6lKGFT+HJZlo4bLYvk+gydssUQee8+yQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36139},"gitHead":"208e7d5501ba402869dd374d886e50025535addb","_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"repository":{"url":"git+https://github.com/buger/probe.git","type":"git"},"_npmVersion":"10.8.2","description":"Probe CLI binary for win32-x64","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-win32-x64_1.0.1-rc1_1755155566165_0.5023285495708911","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-rc2":{"name":"@edmondfrank/probe-win32-x64","version":"1.0.1-rc2","description":"Probe CLI binary for win32-x64","repository":{"type":"git","url":"git+https://github.com/buger/probe.git"},"keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","bugs":{"url":"https://github.com/buger/probe/issues"},"homepage":"https://github.com/buger/probe#readme","os":["win32"],"cpu":["x64"],"bin":{"probe":"probe"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"gitHead":"702b7cb01a619841478548d69aef4c73bec5f88d","_id":"@edmondfrank/probe-win32-x64@1.0.1-rc2","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-Kdkc1fTCglW3FXYw22e71jrHHfpU+gj8SZt8Odr3X/Hz8jg4YDTFIymUKQmA6CVdsBuyr+RB/NAYJpclIHzb6g==","shasum":"36ff3c75f5d72a043470352d03e9c29c738d387f","tarball":"https://registry.npmjs.org/@edmondfrank/probe-win32-x64/-/probe-win32-x64-1.0.1-rc2.tgz","fileCount":3,"unpackedSize":28094,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDiifIzkPYZLUd0omxUhrsFU2rnVKWWXpbnL1KsKCJiHAIhAN8X7mvG1HwiSYtlh3hbPKCzvsZHqnuv7PuHi61usfwY"}]},"_npmUser":{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"},"directories":{},"maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/probe-win32-x64_1.0.1-rc2_1780384646328_0.5245239794451504"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-29T11:25:06.351Z","modified":"2026-06-02T07:17:26.571Z","1.0.0":"2025-05-29T11:25:06.649Z","1.0.0-rc2":"2025-05-29T11:40:37.180Z","1.0.0-rc3":"2025-05-29T13:22:27.043Z","1.0.0-rc4":"2025-05-29T13:54:59.568Z","1.0.0-rc7":"2025-05-30T05:31:34.308Z","0.7.0-rc1":"2025-08-13T10:23:18.890Z","1.0.1-rc1":"2025-08-14T07:12:46.329Z","1.0.1-rc2":"2026-06-02T07:17:26.456Z"},"bugs":{"url":"https://github.com/buger/probe/issues"},"author":{"name":"buger"},"license":"ISC","homepage":"https://github.com/buger/probe#readme","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"repository":{"type":"git","url":"git+https://github.com/buger/probe.git"},"description":"Probe CLI binary for win32-x64","maintainers":[{"name":"edmondfrank","email":"edmomdfrank@yahoo.com"}],"readme":"<p align=\"center\">\n  <img src=\"logo.png?2\" alt=\"Probe Logo\" width=\"400\">\n</p>\n\n# Probe\n\n**We read code 10x more than we write it.** Probe is a code and markdown context engine, with a built-in agent, made to work on enterprise-scale codebases.\n\nToday's AI coding tools use a caveman approach: grep some files, read random lines, hope for the best. It works on toy projects. It falls apart on real codebases.\n\n**Probe is a context engine built for reading and reasoning.** It treats your code as code—not text. AST parsing understands structure. Semantic search finds what matters. You get complete, meaningful context in a single call.\n\n**The Probe Agent** is purpose-built for code understanding. It knows how to wield the Probe engine expertly—searching, extracting, and reasoning across your entire codebase. Perfect for spec-driven development, code reviews, onboarding, and any task where understanding comes before writing.\n\n**One Probe call captures what takes other tools 10+ agentic loops**—deeper, cleaner, and far less noise.\n\n---\n\n## Table of Contents\n\n- [Why Probe?](#why-probe)\n- [Quick Start](#quick-start)\n- [Features](#features)\n- [Usage Modes](#usage-modes)\n  - [Probe Agent (MCP)](#probe-agent-mcp)\n  - [Raw MCP Tools](#raw-mcp-tools)\n  - [CLI Agent](#cli-agent)\n  - [Direct CLI Commands](#direct-cli-commands)\n  - [Node.js SDK](#nodejs-sdk)\n- [LLM Script](#llm-script)\n- [Installation](#installation)\n- [Supported Languages](#supported-languages)\n- [Documentation](#documentation)\n- [Environment Variables](#environment-variables)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Why Probe?\n\nMost code search tools fall into two camps: **text-based** (grep, ripgrep) or **embedding-based** (vector search requiring indexing and an embedding model). Probe takes a third path: **AST-aware structural search with zero setup**.\n\n| | grep/ripgrep | Embedding tools (grepai, Octocode) | Probe |\n|---|---|---|---|\n| **Setup time** | None | Minutes (indexing + embedding service) | None |\n| **Code understanding** | Text only | Text chunks (can split mid-function) | AST-aware (returns complete functions/classes) |\n| **Search method** | Regex | Vector similarity | Elasticsearch-style boolean queries + BM25 |\n| **Result quality** | Line fragments | ~512-char chunks | Complete semantic code blocks |\n| **Ranking** | None (line order) | Cosine similarity | BM25/TF-IDF/Hybrid with SIMD acceleration |\n| **External dependencies** | None | Embedding API (Ollama/OpenAI) | None |\n| **Token awareness** | No | Partial | Yes (`--max-tokens`, session dedup) |\n| **Works offline** | Yes | Only with local model | Always |\n| **AI agent integration** | None | MCP server | Full agent loop + MCP + Vercel AI SDK |\n\n### The key insight: AI agents don't need embedding search\n\nEmbedding-based tools solve vocabulary mismatch -- finding \"authentication\" when the code says `verify_credentials`. But when an AI agent is the consumer, **the LLM already handles this**:\n\n```\nUser: \"find the authentication logic\"\n  -> LLM generates: probe search \"verify_credentials OR authenticate OR login OR auth_handler\"\n  -> Probe returns complete AST blocks in milliseconds\n```\n\nThe LLM translates intent into precise boolean queries. Probe gives it a powerful query language (`AND`, `OR`, `+required`, `-excluded`, `\"exact phrases\"`, `ext:rs`, `lang:python`) purpose-built for this. Combined with session dedup, the agent can run 3-4 rapid searches and cover more ground than a single embedding query -- faster, deterministic, and with zero setup cost.\n\n---\n\n## Quick Start\n\n### Option 1: Probe Agent via MCP (Recommended)\n\nOur built-in agent natively integrates with Claude Code, using its authentication—no extra API keys needed.\n\nAdd to `~/.claude/claude_desktop_config.json`:\n```json\n{\n  \"mcpServers\": {\n    \"probe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@probelabs/probe@latest\", \"agent\", \"--mcp\"]\n    }\n  }\n}\n```\n\nThe Probe Agent is purpose-built to read and reason about code. It piggybacks on Claude Code's auth (or Codex auth), or works with any model via your own API key (e.g., `GOOGLE_API_KEY`).\n\n### Option 2: Raw Probe Tools via MCP\n\nIf you prefer direct access to search/query/extract tools without the agent layer:\n\n```json\n{\n  \"mcpServers\": {\n    \"probe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@probelabs/probe@latest\", \"mcp\"]\n    }\n  }\n}\n```\n\n### Option 3: Direct CLI (No MCP)\n\nUse Probe directly from your terminal—no AI editor required:\n\n```bash\n# Semantic search with Elasticsearch syntax\nnpx -y @probelabs/probe search \"authentication AND login\" ./src\n\n# Extract code block at line 42\nnpx -y @probelabs/probe extract src/main.rs:42\n\n# AST pattern matching\nnpx -y @probelabs/probe query \"fn $NAME($$$) -> Result<$RET>\" --language rust\n```\n\n### Option 4: CLI Agent\n\nAsk questions about any codebase directly from your terminal:\n\n```bash\n# One-shot question (works with any LLM provider)\nnpx -y @probelabs/probe@latest agent \"How is authentication implemented?\"\n\n# With code editing capabilities\nnpx -y @probelabs/probe@latest agent \"Refactor the login function\" --allow-edit\n```\n\n---\n\n## Features\n\n- **Code-Aware**: Tree-sitter AST parsing understands your code's actual structure\n- **Semantic Search**: Elasticsearch-style queries (`AND`, `OR`, `NOT`, phrases, filters)\n- **Complete Context**: Returns entire functions, classes, or structs -- not text chunks that break mid-function\n- **Zero Indexing**: Instant results on any codebase. No embedding models, no vector databases, no setup\n- **Deterministic**: Same query always returns the same results. No model variance, no stale indexes\n- **Fully Local**: Your code never leaves your machine. No API calls for search\n- **Blazing Fast**: SIMD-accelerated pattern matching + ripgrep scanning + rayon parallelism\n- **Smart Ranking**: BM25, TF-IDF, and hybrid algorithms with optional BERT reranking\n- **Token-Aware**: `--max-tokens` budget, session-based dedup to avoid repeating context\n- **Built-in Agent**: Multi-provider (Anthropic, OpenAI, Google, Bedrock) with retry, fallback, and context compaction\n- **Multi-Language**: Rust, Python, JavaScript, TypeScript, Go, C/C++, Java, Ruby, PHP, Swift, Solidity, Crystal, C#, and more\n\n---\n\n## Usage Modes\n\n### Probe Agent (MCP)\n\nThe recommended way to use Probe with AI editors. The Probe Agent is a specialized coding assistant that reasons about your code—not just pattern matches.\n\n```json\n{\n  \"mcpServers\": {\n    \"probe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@probelabs/probe@latest\", \"agent\", \"--mcp\"]\n    }\n  }\n}\n```\n\n**Why use the agent?**\n- Purpose-built to understand and reason about code\n- Piggybacks on Claude Code / Codex authentication (or use your own API key)\n- Smarter multi-step reasoning for complex questions\n- Built-in code editing, task delegation, and more\n\n**Agent options:**\n\n| Option | Description |\n|--------|-------------|\n| `--path <dir>` | Search directory (default: current) |\n| `--provider <name>` | AI provider: `anthropic`, `openai`, `google` |\n| `--model <name>` | Override model name |\n| `--prompt <type>` | Persona: `code-explorer`, `engineer`, `code-review`, `architect` |\n| `--allow-edit` | Enable code modification |\n| `--enable-delegate` | Enable task delegation to subagents |\n| `--enable-bash` | Enable bash command execution |\n| `--max-iterations <n>` | Max tool iterations (default: 30) |\n\n---\n\n### Raw MCP Tools\n\nDirect access to Probe's search, query, and extract tools—without the agent layer. Use this when you want your AI editor to call Probe tools directly.\n\n```json\n{\n  \"mcpServers\": {\n    \"probe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@probelabs/probe@latest\", \"mcp\"]\n    }\n  }\n}\n```\n\n**Available tools:**\n- `search` - Semantic code search with Elasticsearch-style queries\n- `query` - AST-based structural pattern matching\n- `extract` - Extract code blocks by line number or symbol name\n- `symbols` - List all symbols in a file (functions, classes, constants) with line numbers\n\n---\n\n### CLI Agent\n\nRun the Probe Agent directly from your terminal:\n\n```bash\n# One-shot question\nnpx -y @probelabs/probe@latest agent \"How does the ranking algorithm work?\"\n\n# Specify search path\nnpx -y @probelabs/probe@latest agent \"Find API endpoints\" --path ./src\n\n# Enable code editing\nnpx -y @probelabs/probe@latest agent \"Add error handling to login()\" --allow-edit\n\n# Use custom persona\nnpx -y @probelabs/probe@latest agent \"Review this code\" --prompt code-review\n```\n\n---\n\n### Direct CLI Commands\n\nFor scripting and direct code analysis.\n\n#### Search Command\n\n```bash\nprobe search <PATTERN> [PATH] [OPTIONS]\n```\n\n**Examples:**\n```bash\n# Basic search\nprobe search \"authentication\" ./src\n\n# Boolean operators (Elasticsearch syntax)\nprobe search \"error AND handling\" ./\nprobe search \"login OR auth\" ./src\nprobe search \"database NOT sqlite\" ./\n\n# Search hints (file filters)\nprobe search \"function AND ext:rs\" ./           # Only .rs files\nprobe search \"class AND file:src/**/*.py\" ./    # Python files in src/\nprobe search \"error AND dir:tests\" ./           # Files in tests/\n\n# Limit results for AI context windows\nprobe search \"API\" ./ --max-tokens 10000\n```\n\n**Key options:**\n\n| Option | Description |\n|--------|-------------|\n| `--max-tokens <n>` | Limit total tokens returned |\n| `--max-results <n>` | Limit number of results |\n| `--reranker <algo>` | Ranking: `bm25`, `tfidf`, `hybrid`, `hybrid2` |\n| `--allow-tests` | Include test files |\n| `--format <fmt>` | Output: `markdown`, `json`, `xml` |\n\n#### Extract Command\n\n```bash\nprobe extract <FILES> [OPTIONS]\n```\n\n**Examples:**\n```bash\n# Extract function at line 42\nprobe extract src/main.rs:42\n\n# Extract by symbol name\nprobe extract src/main.rs#authenticate\n\n# Extract line range\nprobe extract src/main.rs:10-50\n\n# From compiler output\ngo test | probe extract\n```\n\n#### Symbols Command\n\n```bash\nprobe symbols <FILES> [OPTIONS]\n```\n\n**Examples:**\n```bash\n# List symbols in a file\nprobe symbols src/main.rs\n\n# JSON output for programmatic use\nprobe symbols src/main.rs --format json\n\n# Multiple files\nprobe symbols src/main.rs src/lib.rs\n```\n\n#### Query Command (AST Patterns)\n\n```bash\nprobe query <PATTERN> [PATH] [OPTIONS]\n```\n\n**Examples:**\n```bash\n# Find all async functions in Rust\nprobe query \"async fn $NAME($$$)\" --language rust\n\n# Find React components\nprobe query \"function $NAME($$$) { return <$$$> }\" --language javascript\n\n# Find Python classes with specific method\nprobe query \"class $CLASS: def __init__($$$)\" --language python\n```\n\n---\n\n### Node.js SDK\n\nUse Probe programmatically in your applications.\n\n```javascript\nimport { ProbeAgent } from '@probelabs/probe/agent';\n\n// Create agent\nconst agent = new ProbeAgent({\n  path: './src',\n  provider: 'anthropic'\n});\n\nawait agent.initialize();\n\n// Ask questions\nconst response = await agent.answer('How does authentication work?');\nconsole.log(response);\n\n// Get token usage\nconsole.log(agent.getTokenUsage());\n```\n\n**Direct functions:**\n\n```javascript\nimport { search, extract, query, symbols } from '@probelabs/probe';\n\n// Semantic search\nconst results = await search({\n  query: 'authentication',\n  path: './src',\n  maxTokens: 10000\n});\n\n// Extract code\nconst code = await extract({\n  files: ['src/auth.ts:42'],\n  format: 'markdown'\n});\n\n// List symbols in a file\nconst fileSymbols = await symbols({\n  files: ['src/auth.ts']\n});\n\n// AST pattern query\nconst matches = await query({\n  pattern: 'async function $NAME($$$)',\n  path: './src',\n  language: 'typescript'\n});\n```\n\n**Vercel AI SDK integration:**\n\n```javascript\nimport { tools } from '@probelabs/probe';\n\nconst { searchTool, queryTool, extractTool } = tools;\n\n// Use with Vercel AI SDK\nconst result = await generateText({\n  model: anthropic('claude-sonnet-4-6'),\n  tools: {\n    search: searchTool({ defaultPath: './src' }),\n    query: queryTool({ defaultPath: './src' }),\n    extract: extractTool({ defaultPath: './src' })\n  },\n  prompt: 'Find authentication code'\n});\n```\n\n---\n\n## LLM Script\n\nProbe Agent can use the `execute_plan` tool to run deterministic, multi-step code analysis tasks. LLM Script is a sandboxed JavaScript DSL where the AI generates executable plans combining search, extraction, and LLM reasoning in a single pipeline.\n\n```javascript\n// AI-generated LLM Script example (await is auto-injected, don't write it)\nconst files = search(\"authentication login\")\nconst chunks = chunk(files)\nconst analysis = map(chunks, c => LLM(\"Summarize auth patterns\", c))\nreturn analysis.join(\"\\n\")\n```\n\n**Key features:**\n- **Agent integration** - Probe Agent calls `execute_plan` tool to run scripts\n- **Auto-await** - Async calls are automatically awaited (don't write `await`)\n- **All tools available** - `search()`, `query()`, `extract()`, `LLM()`, `map()`, `chunk()`, plus any MCP tools\n- **Sandboxed execution** - Safe, isolated JavaScript environment with timeout protection\n\nSee the full [LLM Script Documentation](./docs/llm-script.md) for syntax and examples.\n\n---\n\n## Installation\n\n### NPM (Recommended)\n\n```bash\nnpm install -g @probelabs/probe\n```\n\n### curl (macOS/Linux)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/probelabs/probe/main/install.sh | bash\n```\n\n### PowerShell (Windows)\n\n```powershell\niwr -useb https://raw.githubusercontent.com/probelabs/probe/main/install.ps1 | iex\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/probelabs/probe.git\ncd probe\ncargo build --release\ncargo install --path .\n```\n\n---\n\n## Supported Languages\n\n| Language | Extensions |\n|----------|------------|\n| Rust | `.rs` |\n| JavaScript/JSX | `.js`, `.jsx` |\n| TypeScript/TSX | `.ts`, `.tsx` |\n| Python | `.py` |\n| Go | `.go` |\n| C/C++ | `.c`, `.h`, `.cpp`, `.cc`, `.hpp` |\n| Java | `.java` |\n| Ruby | `.rb` |\n| PHP | `.php` |\n| Swift | `.swift` |\n| Solidity | `.sol` |\n| Crystal | `.cr` |\n| C# | `.cs` |\n| Markdown | `.md` |\n\n---\n\n## Documentation\n\nFull documentation available at [probelabs.com/probe](https://probelabs.com/probe) or browse locally in [`docs/`](./docs/).\n\n### Getting Started\n- [Quick Start](./docs/quick-start.md) - Get up and running in 5 minutes\n- [Installation](./docs/installation.md) - NPM, curl, Docker, and building from source\n- [Features Overview](./docs/features.md) - Core capabilities\n\n### Probe CLI\n- [Search Command](./docs/probe-cli/search.md) - Elasticsearch-style semantic search\n- [Extract Command](./docs/probe-cli/extract.md) - Extract code blocks with full AST context\n- [Symbols Command](./docs/probe-cli/symbols.md) - List all symbols in files with line numbers\n- [Query Command](./docs/probe-cli/query.md) - AST-based structural pattern matching\n- [CLI Reference](./docs/probe-cli/cli-reference.md) - Complete command-line reference\n\n### LSP & Indexing\n- [LSP Features](./docs/lsp-features.md) - What `--lsp` adds for semantic code intelligence\n- [LSP Quick Reference](./docs/lsp-quick-reference.md) - Day-to-day LSP command cheatsheet\n- [Indexing Overview](./docs/indexing-overview.md) - Project indexing concepts and workflow\n- [Indexing CLI Reference](./docs/indexing-cli-reference.md) - `probe lsp index*` command reference\n\nLSP capabilities include call hierarchy enrichment (`extract --lsp`), direct symbol operations (`probe lsp call definition|references|hover|...`), daemon diagnostics (`probe lsp logs --analyze`), and workspace indexing (`probe lsp index`, `probe lsp index-status`).\n\n### Probe Agent\n- [Agent Overview](./docs/probe-agent/overview.md) - What is Probe Agent and when to use it\n- [API Reference](./docs/probe-agent/sdk/api-reference.md) - ProbeAgent class documentation\n- [Node.js SDK](./docs/probe-agent/sdk/nodejs-sdk.md) - Full Node.js SDK reference\n- [MCP Integration](./docs/probe-agent/protocols/mcp-integration.md) - Editor integration guide\n- [LLM Script](./docs/llm-script.md) - Programmable orchestration DSL\n\n### Guides & Reference\n- [Query Patterns](./docs/guides/query-patterns.md) - Effective search strategies\n- [How Probe Compares](./docs/reference/comparison.md) - vs embedding search, knowledge graphs, LSP tools\n- [Architecture](./docs/reference/architecture.md) - System design and internals\n- [Environment Variables](./docs/reference/environment-variables.md) - All configuration options\n- [FAQ](./docs/reference/faq.md) - Frequently asked questions\n\n---\n\n## Environment Variables\n\n```bash\n# AI Provider Keys\nANTHROPIC_API_KEY=sk-ant-...\nOPENAI_API_KEY=sk-...\nGOOGLE_API_KEY=...\n\n# Provider Selection\nFORCE_PROVIDER=anthropic\nMODEL_NAME=claude-sonnet-4-6\n\n# Custom Endpoints\nANTHROPIC_API_URL=https://your-proxy.com\nOPENAI_API_URL=https://your-proxy.com\n\n# Debug\nDEBUG=1\n```\n\n---\n\n## Contributing\n\nWe welcome contributions! See our [Contributing Guide](https://github.com/probelabs/probe/blob/main/CONTRIBUTING.md).\n\nFor questions or support:\n- [GitHub Issues](https://github.com/probelabs/probe/issues)\n- [Discord Community](https://discord.gg/hBN4UsTZ)\n\n---\n\n## License\n\n---\n\nFor questions or contributions, please open an issue on [GitHub](https://github.com/probelabs/probe/issues) or join our [Discord community](https://discord.gg/hBN4UsTZ) for discussions and support. Happy coding—and searching!\n","readmeFilename":"README.md"}