{"_id":"@edmondfrank/probe-linux-arm64","_rev":"8-efa7914ea071fa83fc8af51458cf1698","name":"@edmondfrank/probe-linux-arm64","dist-tags":{"latest":"1.0.1-rc2"},"versions":{"1.0.0":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.0","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"c628e1ee04bfab6a080dc6da044ef35bbc27ecf5","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.0.tgz","fileCount":4,"integrity":"sha512-OCYS3PKEaUvc04XhrEfFlwn9wqalaME8zoG8pnoE3P0mC7hnViPHhn1Qc0o3t93wWSRNGZu0oCVOBvl5StG6tQ==","signatures":[{"sig":"MEYCIQDpPq3/OPMy/HUSAvxnyYNI6Frp3EzXXRXWl2xU6Kv+6gIhAN4Eod0nb5KmJ3iV3GRSODo6WW/X22euChvJZqOlRKl1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40550428},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.0_1748518006719_0.8473010630529114","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc2":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.0-rc2","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"43f364f614fed27318b1146728dcae3156048be7","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.0-rc2.tgz","fileCount":4,"integrity":"sha512-Qfq6/34PO7sInnzV0sdqLA48+7/R/dC4bG5jYyQYKabh8lMP8b+gQFAt39AYuacSZWfIdaP7lljSN5XQo6ix3A==","signatures":[{"sig":"MEYCIQDxePQLZ8O452EOO92URFeqK1Xep7OPUWFLs99x8U7BxQIhAPaCbaHKY8UAeDC8LqLEqjHWw3yohuH8CAllDwT1o4US","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40550432},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.0-rc2_1748518701449_0.5884996950056174","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc3":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.0-rc3","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"4008bf413a3289c933813ceb0cd78d91c839ee45","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.0-rc3.tgz","fileCount":4,"integrity":"sha512-l8eUGaDe781T2OCQsrbw9lcb1KXPR6oM/L2x++NuYEyZdVEuw+FENlQzCsrU95+RIsJs81/Zxd0JLSMx28/JbQ==","signatures":[{"sig":"MEUCIQDe/y6pc7WQnZd0R2XP6vJMBTHerlOUqfLgjVVoDOaKSAIgfoicEBXgSqsSZYDsgtADJ1aP0a+zifuj0F2js0dai8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40550432},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.0-rc3_1748525965600_0.7781268252578335","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc4":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.0-rc4","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"0cb12643b9eb3f2cd582765007abf3b22bf8072c","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.0-rc4.tgz","fileCount":4,"integrity":"sha512-gevbCgn7W1qvfwYDRh5SqUo8JBe6XDGD3usnMQfmHy/EyapQ5wgXBJTPYmE9usI2A8ofZ0Zl50UQme+ycx2gLA==","signatures":[{"sig":"MEUCIQD2ihx+PvURtsX+LT+ePNOqQIFZgFdMRcyeo7pJW1eCtAIgQ+K3w/cYOqz3FIzZiSlqiaHKBbNO88+2ZGlmDW9ykdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40550432},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.0-rc4_1748526858452_0.5009490093561026","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc7":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.0-rc7","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"f3619038b9ae37328b8a1f03d7312a6e78a2990f","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.0-rc7.tgz","fileCount":4,"integrity":"sha512-Scgo5Sit4y4b8kf9ij9QPhNFdp4rTitRZGBfnxJhElDlC5OQ5YWGhiqZQ3pL7LsQslCIcMTnuLI2HuBrQmd1Kw==","signatures":[{"sig":"MEQCIFQLdtlozsYZmnoISHct5h5vuNPkPhHBBc4PaQ0RQsznAiB+owuR5opEIA8OX1KUOy98FW49TdIH1I6Gr5ENOJIHzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40550432},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.0-rc7_1748583068667_0.12689276706760055","host":"s3://npm-registry-packages-npm-production"}},"0.7.0-rc1":{"name":"@edmondfrank/probe-linux-arm64","version":"0.7.0-rc1","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"a92a669a422f5ee5d8976d02f74f7e84e2d688a8","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-0.7.0-rc1.tgz","fileCount":4,"integrity":"sha512-aXWGclLyZy14R7p7D6Fw7mz3n6dnXPtIOnfLeG88axpI296nQSJYBwIQn8au6NWKdYGLO+qHnPafCQubKHaFlg==","signatures":[{"sig":"MEYCIQDsRuIRzTirF+9V8CmpOKRl1vbDwsG+SpuBhZ2BvdpFHgIhAIGP9IO33aa0W5UGmn0H0hHZAEjnt+Wf+gf7xzMWLjYu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44008096},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_0.7.0-rc1_1755080430235_0.8847257977099725","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-rc1":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.1-rc1","keywords":["probe","code-search","search","ast","code-analysis","ai","llm","tools"],"author":{"name":"buger"},"license":"ISC","_id":"@edmondfrank/probe-linux-arm64@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":["linux"],"bin":{"probe":"probe"},"cpu":["arm64"],"dist":{"shasum":"8fc20ec41bf53b53ff62fb530828d226d0e9f070","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.1-rc1.tgz","fileCount":4,"integrity":"sha512-YRre4tBvePjxruKZV/ly9w4yJZLwY6/WCvuFM+PA9G1MTCHvLLOXwcELkVvgj0jBlfuUJn+Cc6cF7zbFcy1Gmw==","signatures":[{"sig":"MEYCIQD9Trs3YlYNbNh6qzhy20bIJTbG+n79sMQpn7Xmc74WhAIhALIynPHXmWvtJAztkE6pcPBZCYt5Cn25G2NgsbZBRBMi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44016288},"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 linux-arm64","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/probe-linux-arm64_1.0.1-rc1_1755155428301_0.6902229363865295","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-rc2":{"name":"@edmondfrank/probe-linux-arm64","version":"1.0.1-rc2","description":"Probe CLI binary for linux-arm64","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":["linux"],"cpu":["arm64"],"bin":{"probe":"probe"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"gitHead":"702b7cb01a619841478548d69aef4c73bec5f88d","_id":"@edmondfrank/probe-linux-arm64@1.0.1-rc2","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-bqiaqyMP1NdxYvVIvhpswKqA7mc22b+An4ROnBw5GXzTNVc01/Kgd8bgEHjrBk0SjtJmfJCtKnkFDnkZxyepLA==","shasum":"3889897dfc8d032c0acbfe697c4efbeb8ccda5bd","tarball":"https://registry.npmjs.org/@edmondfrank/probe-linux-arm64/-/probe-linux-arm64-1.0.1-rc2.tgz","fileCount":4,"unpackedSize":58068900,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDUUKtJ/u0vM8VykgjTBqmnU6GIm0aGvI445HEHnAGopAiAfMXYADyE0aBXrRfdhpf6HLZorNYbf5DRCEIpvoJz4fg=="}]},"_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-linux-arm64_1.0.1-rc2_1780384654672_0.7814760462215296"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-29T11:26:46.645Z","modified":"2026-06-02T07:17:35.104Z","1.0.0":"2025-05-29T11:26:46.985Z","1.0.0-rc2":"2025-05-29T11:38:21.713Z","1.0.0-rc3":"2025-05-29T13:39:25.888Z","1.0.0-rc4":"2025-05-29T13:54:18.695Z","1.0.0-rc7":"2025-05-30T05:31:08.949Z","0.7.0-rc1":"2025-08-13T10:20:30.543Z","1.0.1-rc1":"2025-08-14T07:10:28.603Z","1.0.1-rc2":"2026-06-02T07:17:34.991Z"},"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 linux-arm64","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"}