mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
One call answers a question or a failing test's output with the spans of the tree most likely to hold the cause, as path:start-end and their lines, so an agent stops chaining grep and read. Python is chunked by ast, other text in overlapping 40-line windows. BM25 over code tokens is fused by reciprocal rank with the spans a traceback's path:line frames name; when the query names a test file the index holds, the code under test ranks first. Every search stats the tree and re-chunks only what moved. A dense stage (Qwen3-Embedding form, vectors cached by text hash) is on only when HANZO_SEARCH_MODEL names a model: on the 42 dev tasks it lifts span MRR .385 to .508, but a CPU query embedding takes seconds. `python -m hanzo_search.server --root DIR` serves the tool alone over stdio with the standard library, outside hanzo_mcp, whose import is seconds long. The `hanzo` mode lists it, so the default surface carries it; another mode, `tool disable search` or HANZO_MCP_ENABLED_TOOLS decide it as they decide every other tool.