Fast, structured code search and analysis for Python, backed by a native Rust (Tree-sitter) extension
Project description
brokk-bifrost-searchtools
Fast, structured code search and analysis for Python, backed by a native Rust extension. This is the Python distribution of bifrost, the Tree-sitter-backed analyzer suite that powers Brokk.
It gives you one in-process client that talks straight to the Rust analyzer (no subprocess, no MCP server) and returns typed results plus ready-to-render text. It understands Java, JavaScript, TypeScript, Rust, Go, Python, C++, C#, PHP, and Scala.
- Install:
pip install brokk-bifrost-searchtools - Import as:
bifrost_searchtools
What it does
Index a project once, then ask fast structural questions:
- Symbol search: find classes, functions, and fields by name pattern.
- Locations and sources: jump to a symbol's definition or pull its source.
- Summaries: get a signature-level outline of a file or directory.
- Usages and call graph: scan references to a symbol, or build the whole-workspace caller/callee graph (feed it to PageRank for a code map).
- Most-relevant files: rank the files most related to one or more seed files.
- Semantic search: find code by meaning, using ONNX embeddings and a cross-encoder reranker (opt-in).
Quick start
from bifrost_searchtools import SearchToolsClient
with SearchToolsClient("/path/to/project") as client:
# Signature-level outline of a file
print(client.get_summaries(["src/main.py"]).render_text())
# Find symbols by name pattern
for file in client.search_symbols(["parse_*"], limit=10).files:
print(file.path)
# Rank the files most related to a seed file
print(client.most_relevant_files(["src/main.py"]).render_text())
The client indexes on first use, keeps the index warm for the session, and
watches the filesystem so later queries see your edits. Every result has typed
fields plus a render_text() helper.
For a runnable end-to-end demo, examples/searchtools_demo.py
declares its dependency inline (PEP 723), so uv fetches the package and runs it
with no manual install:
uv run examples/searchtools_demo.py --root /path/to/repo Calculator compute
API overview
SearchToolsClient(root, library_path=None, render_line_numbers=True, manual=False)
exposes:
| Method | Purpose |
|---|---|
search_symbols(patterns, *, include_tests=False, limit=20) |
Find symbols by name pattern. |
get_symbol_locations(symbols, *, kind_filter=...) |
Resolve symbols to definition sites. |
get_symbol_ancestors(symbols, *, kind_filter=...) |
Walk the enclosing type/scope chain. |
get_symbol_sources(symbols, *, kind_filter=...) |
Pull full source for symbols. |
get_definition_by_location(path, *, line=..., column=...) |
Resolve a reference at a known file location. |
get_definition_by_reference(symbol, *, context=..., target=...) |
Resolve a copied reference inside a symbol source block. |
get_summaries(targets) |
Signature-level outline of files / classes / directories. |
list_symbols(file_patterns) |
Skim the symbols declared in matching files. |
scan_usages(symbols, *, include_tests=False, paths=None) |
Find references to a symbol. |
usage_graph(*, include_tests=False, paths=None) |
Whole-workspace caller/callee graph; each edge carries its {path, line} call sites. |
most_relevant_files(seed_files, *, limit=20, ...) |
Rank files related to seed files. |
semantic_search(query, *, k=10) |
Meaning-based code search (opt-in). |
semantic_search_status() |
Report whether the semantic index is ready. |
refresh() |
Force a full re-index (recovery escape hatch). |
update_paths(paths) |
Incrementally re-analyze specific paths (with manual=True). |
activate_workspace(path) / get_active_workspace() |
Switch / read the active workspace root. |
get_file_contents(file_paths) |
Read whole files by path. |
find_filenames(patterns, *, limit=None) |
Find files by path glob. |
search_file_contents(patterns, *, file_path=None, context_lines=None, case_insensitive=False) |
Grep contents with context. |
find_files_containing(patterns, *, limit=None, case_insensitive=False) |
Find files whose contents match. |
list_files(directory_path="", *, max_entries=None) |
List files under a directory. |
get_git_log(*, file_path=None, limit=None) |
Recent commits (optionally for one path). |
get_commit_diff(revision, *, max_files=None, lines_per_file=None) |
Unified diff for a commit. |
search_git_commit_messages(pattern, *, limit=None) |
Regex search over commit messages. |
jq(file_path, filter_expr, *, max_files=None, matches_per_file=None) |
Run a jq filter over JSON files. |
xml_skim(file_path, *, max_files=None) |
Summarize XML element structure. |
xml_select(file_path, xpath, *, output=XmlSelectOutput.TEXT, attr_name=None, max_files=None) |
Evaluate an XPath over XML files. |
compute_cyclomatic_complexity(file_paths, *, threshold=None) |
Per-function cyclomatic complexity. |
compute_cognitive_complexity(file_paths, *, threshold=None) |
Per-function cognitive complexity. |
report_comment_density_for_code_unit(fq_name, *, max_lines=None) |
Comment density for one symbol. |
report_comment_density_for_files(file_paths, *, max_top_level_rows=None, max_files=None) |
Comment density per file. |
report_exception_handling_smells(file_paths, *, min_score=None, max_findings=None, options=None) |
Suspicious exception handlers. |
report_test_assertion_smells(file_paths, *, min_score=None, max_findings=None, options=None) |
Low-value test assertions. |
report_structural_clone_smells(file_paths, *, min_score=None, max_findings=None, options=None) |
Structural code clones. |
report_long_method_and_god_object_smells(file_paths, *, max_findings=None, max_files=None, options=None) |
Oversized functions / god objects. |
report_dead_code_and_unused_abstraction_smells(*, file_paths=None, fq_names=None, min_score=None, max_findings=None, options=None) |
Likely dead code (Rust). |
report_secret_like_code(*, max_findings=None, max_commits=None, include_history_only=False, include_low_confidence=False) |
Secret-looking strings in files / history. |
analyze_git_hotspots(*, since_days=None, since_iso=None, until_iso=None, max_commits=None, max_files=None) |
Churn × complexity hotspots. |
Pass render_line_numbers=False to drop line numbers from rendered text while
keeping the structured line metadata on the result objects.
The git tools return a GitTextResult (.text), the slopcop tools return a
CodeQualityReport (.report), and the rest return structured dataclasses from
bifrost_searchtools.models. The per-rule tuning knobs on the smell reports are
passed through options (keys map 1:1 to the Rust tool arguments).
Semantic search
semantic_search(...) finds files by meaning rather than name: function-level
chunks are embedded, fused with BM25 and git co-edit signals, then reranked by a
cross-encoder. It searches code, not prose.
It is opt-in. Set BIFROST_SEMANTIC_INDEX=auto to enable background indexing;
the models load via ONNX and download from the HuggingFace hub on first use. The
main bifrost README lists
every environment override.
License
LGPL-3.0-or-later. See LICENSE.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 brokk_bifrost_searchtools-0.6.6.tar.gz.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73ab1ecb968692c1c41077cd186d607798c14117d892de8cea4cf3b4b09b984f
|
|
| MD5 |
85c59af06b027fbfb446a8df183a45ab
|
|
| BLAKE2b-256 |
ff341265e989e56a78c80000093f81718eb38a26838a95e9ba307f95973cf0f6
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6.tar.gz:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6.tar.gz -
Subject digest:
73ab1ecb968692c1c41077cd186d607798c14117d892de8cea4cf3b4b09b984f - Sigstore transparency entry: 1924401815
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file brokk_bifrost_searchtools-0.6.6-cp312-abi3-win_amd64.whl.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6-cp312-abi3-win_amd64.whl
- Upload date:
- Size: 11.2 MB
- Tags: CPython 3.12+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bf127ba1f9cdd1f07954dc6047d1ce30f6ad523c60392c241f2614937d75ad0
|
|
| MD5 |
92e103843591b817b8d640142822cdc0
|
|
| BLAKE2b-256 |
674aa03ac23f4844b98ed32f23c8911530127b4dc4892540f9f8be664e097f2a
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6-cp312-abi3-win_amd64.whl:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6-cp312-abi3-win_amd64.whl -
Subject digest:
9bf127ba1f9cdd1f07954dc6047d1ce30f6ad523c60392c241f2614937d75ad0 - Sigstore transparency entry: 1924402042
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.8 MB
- Tags: CPython 3.12+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40322f9644405b893277ebd554beece474a8b52d31f9875917809f3b7f691437
|
|
| MD5 |
6404402e7cf1ad3c6fc78ce7b069488b
|
|
| BLAKE2b-256 |
77aec33b393101e2a8343fbc78ad31de17665bba815016323a568a1a54d604e3
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
40322f9644405b893277ebd554beece474a8b52d31f9875917809f3b7f691437 - Sigstore transparency entry: 1924401893
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 11.7 MB
- Tags: CPython 3.12+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8d334add04558eff42ad393023f88ad6b63f35ceb3846e663463bef53694e40
|
|
| MD5 |
f3b6bdbf1abbd89aa2f39cb03a290bd3
|
|
| BLAKE2b-256 |
2783df58bb018b344e60585b2c679296bc087effa63510988ca38eb25b95df08
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
e8d334add04558eff42ad393023f88ad6b63f35ceb3846e663463bef53694e40 - Sigstore transparency entry: 1924402169
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 11.2 MB
- Tags: CPython 3.12+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
625d2b248b5928c546559239bc81f76b2a2d541e79dcab247a15c50f40978721
|
|
| MD5 |
edfb48bcc1a35175fd0f806f91e2c65e
|
|
| BLAKE2b-256 |
122f9ffbddd0c905a5ae2ddcda9a74f33060d95937fea0f554b181831aa72509
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_11_0_arm64.whl:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_11_0_arm64.whl -
Subject digest:
625d2b248b5928c546559239bc81f76b2a2d541e79dcab247a15c50f40978721 - Sigstore transparency entry: 1924402101
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.12+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e775abe5e83398f8dda0db890177c949afbe3c51895eae12df3be77677f2d173
|
|
| MD5 |
f84fdf8f0af3a3c2d8a4f95bb8daeaf5
|
|
| BLAKE2b-256 |
77a9eff4dd2902cfd3b1f4d8d2af331789afecabcc1cc375a0330da625b276b1
|
Provenance
The following attestation bundles were made for brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_10_12_x86_64.whl:
Publisher:
publish-wheels.yml on BrokkAi/bifrost
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brokk_bifrost_searchtools-0.6.6-cp312-abi3-macosx_10_12_x86_64.whl -
Subject digest:
e775abe5e83398f8dda0db890177c949afbe3c51895eae12df3be77677f2d173 - Sigstore transparency entry: 1924401976
- Sigstore integration time:
-
Permalink:
BrokkAi/bifrost@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Branch / Tag:
refs/tags/v0.6.6 - Owner: https://github.com/BrokkAi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-wheels.yml@431d7bf6d1ff4bbb495b9609fb930a05d5897f6f -
Trigger Event:
push
-
Statement type: