AI Agent Context Engine — give your coding agent a brain beyond code
Project description
probe
Give your AI agent a brain beyond code.
probe is a CLI tool and MCP server that indexes your project's docs and code, then serves curated, reranked context to AI coding agents in milliseconds.
Contents
- Why probe
- Quick Start
- MCP Server Setup
- Indexing
- How It Works
- Example Output
- CLI Reference
- Configuration
- Data Handling
Why probe
AI coding agents often answer project questions by grepping, reading files one by one, and assembling context over several tool calls. probe gives them one ranked search across docs and code.
What you get:
- Claude Code and Codex plugins with bundled MCP server and usage skill
- Manual Claude Code and Codex setup with
probe install - MCP first-use indexing and incremental refresh-before-search
- Hybrid keyword + semantic retrieval across text files, code, docs, and PDFs
- Cross-encoder reranking with ZeroEntropy
zerank-2 - Local index storage in
.probe/ - MCP tools and resources for Claude Code, Codex, and other MCP-compatible agents
Quick Start
Claude Code plugin (recommended)
Get a free ZeroEntropy API key at https://dashboard.zeroentropy.dev. Then run inside Claude Code:
/plugin marketplace add https://github.com/zeroentropy-ai/probe.git
/plugin install probe@zeroentropy
/reload-plugins
Use the HTTPS URL above. The zeroentropy-ai/probe shorthand makes Claude Code
clone over SSH, which requires a configured GitHub SSH key. The Claude Code
slash command treats --sparse as part of the URL, so do not pass sparse
checkout options there.
Claude Code asks for your ZeroEntropy API key during plugin install. The plugin
starts probe with uvx --from probe-search==0.4.8 probe mcp, so Claude Code
does not need a separate probe install.
If you use the claude plugin install shell command instead of the /plugin
slash command, pass the plugin config explicitly. From a shell, sparse checkout
options are supported:
claude plugin marketplace add https://github.com/zeroentropy-ai/probe.git --sparse .claude-plugin plugins
claude plugin install --config zeroentropy_api_key="$ZEROENTROPY_API_KEY" probe@zeroentropy
You can also ask probe to install and configure the plugin from a shell:
uv tool install probe-search
probe install --client claude --plugin --api-key "$ZEROENTROPY_API_KEY"
Codex plugin
Get a free ZeroEntropy API key at https://dashboard.zeroentropy.dev. Then run from a shell:
codex plugin marketplace add https://github.com/zeroentropy-ai/probe.git --sparse .agents/plugins --sparse plugins/probe-codex
codex plugin add probe@zeroentropy
export ZEROENTROPY_API_KEY="ze_xxx"
The Codex plugin starts probe with uvx --from probe-search==0.4.8 probe mcp.
Keep ZEROENTROPY_API_KEY in your shell environment before starting Codex, or
run the direct installer below to persist the key in Codex's MCP config.
For Codex auto-review workflows, pre-approve probe's MCP tools and allow ZeroEntropy network egress once:
uv tool install probe-search
probe install --client codex --approve-tools --allow-zeroentropy-network
This writes a narrow Codex config allowlist for ZeroEntropy API access and package downloads, then pre-approves the probe MCP tools so auto-review does not block each search.
You can also ask probe to install the Codex plugin and direct MCP entry from a shell:
uv tool install probe-search
probe install --client codex --plugin --api-key "$ZEROENTROPY_API_KEY" --approve-tools --allow-zeroentropy-network
Direct CLI/MCP setup
probe install registers probe directly as an MCP server. It does not install
the Claude Code or Codex plugin unless you pass --plugin.
uv tool install probe-search
# or: pipx install probe-search
export ZEROENTROPY_API_KEY="ze_xxx"
probe install --client claude
probe install --client codex
claude mcp list
codex mcp list
Use uv tool install or pipx so the registered probe path stays valid. If
you install probe in a temporary virtual environment, rerun probe install
after recreating that environment.
For custom Codex setups, pass the Codex config directory and binary explicitly:
probe install --client codex --codex-home ~/.codex-work --codex-bin /path/to/codex
probe doctor --codex-home ~/.codex-work --codex-bin /path/to/codex
For CLI-only use:
pip install probe-search
export ZEROENTROPY_API_KEY="ze_xxx"
probe index .
probe search "how does authentication work"
Verify your setup
probe doctor
probe smoke
probe doctor checks your API key, Claude Code/Codex wiring, MCP registration, and
local index health without printing secrets or uploading project content.
probe smoke indexes a tiny sample project and confirms search works. Use
probe smoke --current to validate the current repo, probe smoke --claude
to validate Claude wiring, and probe smoke --codex to validate Codex wiring.
MCP Server Setup
The Claude Code and Codex plugins are the best defaults. For another
MCP-compatible agent, add a .mcp.json file to your project root:
{
"mcpServers": {
"probe": {
"command": "uvx",
"args": ["--from", "probe-search", "probe", "mcp"],
"env": {
"ZEROENTROPY_API_KEY": "ze_xxx"
}
}
}
}
Your agent gets four tools:
| Tool | What it does |
|---|---|
probe_search |
Search docs and code with automatic refresh and reranking |
probe_index |
Index or re-index project files |
probe_status |
Show what's indexed |
probe_read |
Read a file, optionally with focused line ranges |
It also gets MCP resources:
| Resource | What it exposes |
|---|---|
probe://status |
Index status and provider configuration |
probe://files |
Indexed file list |
probe://file/{path} |
Read a project file by URL-encoded path |
When Claude Code starts probe, probe uses CLAUDE_PROJECT_DIR as the project
root. Other agents should start probe from the project root or set their MCP
server working directory to the project root.
Indexing
probe indexes all text-like files and PDFs, not just a fixed extension list.
Unknown extensions and extensionless files such as Makefile, Dockerfile, and
local config files are indexed if they look like text.
File discovery respects nested .gitignore files. It also reads .ignore
files with higher precedence than .gitignore, which lets you keep files out
of Git while still letting probe index them. Use .probeignore for
probe-specific exclusions. probe always skips .git/, .probe/,
__pycache__/, .venv/, compiled Python files, and obvious binary artifacts.
In MCP mode, the first probe_search creates the local .probe/ index
automatically. For CLI-only use, run probe index . once. After .probe/
exists, CLI and MCP searches check for added, changed, and deleted files, then
refresh only affected chunks. Set PROBE_REFRESH_TTL=0 to check before every
search, or PROBE_REFRESH_TTL=-1 to disable automatic refresh.
Chunks keep Markdown header paths, code symbol names, PDF page numbers, and line ranges so agents can cite focused source locations.
How It Works
- Hybrid retrieval: each query uses semantic vector search and SQLite FTS5 keyword search.
- Reranking: candidates are fused and reranked with ZeroEntropy
zerank-2. - Context assembly: results are deduplicated, trimmed to your token budget, and returned with file, section, and line metadata.
Example Output
$ probe search "how does authentication work"
Found 5 results (342 chunks searched)
[0.94] docs/design/auth.md > Authentication > OAuth Flow
We use PKCE-based OAuth 2.0 with Auth0 as the identity provider.
The flow works as follows: 1) Client generates a code verifier...
[0.87] src/auth/oauth.py:42-71 > class OAuthHandler
class OAuthHandler:
"""Handles OAuth2 PKCE flow for web and mobile clients."""
def __init__(self, client_id: str, redirect_uri: str):
------------------------------------------
zembed-1 + zerank-2 | 1,847 tokens | 0.3s
For scripts and agents:
probe search "how does authentication work" --json
probe status --json
probe doctor --json
probe smoke --json
CLI Reference
| Command | Description |
|---|---|
probe index [paths...] |
Index project files for semantic search |
probe index --full |
Force full re-index |
probe install --client claude |
Register probe as a user-scope MCP server in Claude Code |
probe install --client codex |
Register probe as an MCP server in Codex |
probe install --client codex --plugin |
Install the Codex plugin and register direct MCP |
probe install --client codex --approve-tools --allow-zeroentropy-network |
Configure Codex auto-review to allow probe tool calls and ZeroEntropy egress |
probe install --client codex --codex-home PATH --codex-bin PATH |
Install against a custom Codex config directory or binary |
probe install --client both |
Register probe in Claude Code and Codex |
probe search "query" |
Search project knowledge with natural language |
probe search --top-k N |
Limit number of results |
probe search --type code |
Filter by file type |
probe search --no-rerank |
Skip reranking |
probe search --max-tokens N |
Set result token budget |
probe search --json |
Emit machine-readable results with line ranges |
probe status |
Show index stats and model config |
probe status --json |
Emit machine-readable index status |
probe list |
List indexed files |
probe config |
Show current model configuration |
probe init |
Create local config from environment |
probe doctor |
Diagnose API key, Claude Code, Codex, MCP, and index setup |
probe doctor --json |
Emit machine-readable diagnostics |
probe doctor --codex-home PATH --codex-bin PATH |
Diagnose a custom Codex config directory or binary |
probe smoke |
Run an end-to-end indexing and search validation |
probe smoke --current |
Smoke-test the current project |
probe smoke --claude |
Smoke-test search and Claude wiring |
probe smoke --codex |
Smoke-test search and Codex wiring |
probe smoke --codex --codex-home PATH --codex-bin PATH |
Smoke-test custom Codex wiring |
probe mcp |
Start MCP server |
probe uninstall --client claude |
Unregister probe from Claude Code |
probe uninstall --client codex |
Unregister probe from Codex |
probe uninstall --purge |
Unregister probe and delete .probe/ |
Configuration
probe stores its index and config in .probe/ at your project root. Add
.probe/ to .gitignore.
# .probe/config.yaml
providers:
embedding:
name: zeroentropy
model: zembed-1
dimensions: 1280
reranker:
name: zeroentropy
model: zerank-2
Data Handling
Project files are chunked and stored locally in .probe/ with SQLite and
numpy. During indexing and search, probe sends query text and chunk text to
ZeroEntropy for embedding and reranking. It does not create a remote document
index; .probe/ is the durable project index.
Links
- ZeroEntropy -- the AI retrieval engine powering probe
- API Dashboard -- get your API key
- Documentation -- ZeroEntropy API docs
- Models -- zembed-1 and zerank-2 details
License
MIT -- see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file probe_search-0.4.8.tar.gz.
File metadata
- Download URL: probe_search-0.4.8.tar.gz
- Upload date:
- Size: 62.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b425b394e44d82a8ff66d8375767f8bc17939df6e3af51e79298c1f8c17030f6
|
|
| MD5 |
9e537390f887a2cdfce7401ec3ceb042
|
|
| BLAKE2b-256 |
7b714314e3f7987e0f19d6cfe2128ca92597c2588f99a25e4b0419c46d5cd195
|
File details
Details for the file probe_search-0.4.8-py3-none-any.whl.
File metadata
- Download URL: probe_search-0.4.8-py3-none-any.whl
- Upload date:
- Size: 45.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e59208462633bc9fb6a900bd726638ad4aa350eb34f09a19ae15e8365dd10068
|
|
| MD5 |
f44ab889bbc9137d230159ef18d3a7ed
|
|
| BLAKE2b-256 |
1de649fd73d6ec8843c1fda352557a099d0aefbbd83b5735d16f41185f1268ed
|