Knowledge graph for token-efficient code reviews -- semantic search and call-graph resolution across your codebase.
Drift inferred · capture-to-capture
tool count over time
tools
-
build
Full or incremental graph build. Set full_rebuild=true to re-parse all files; pass roots to federate extra repo directories into one graph.
-
cache_clear
Remove all computed embeddings.
-
diff
Nodes added/removed/modified between two commit SHAs (from_sha, to_sha).
-
embed
Compute vector embeddings for semantic search. Dual-mode: local ONNX or cloud chain.
-
export
Export the graph as graphml / json-ld / dot / cypher. Inline or to output_path.
-
impact
Blast radius of changed files. Auto-detects from git diff. Paginated with max_results.
-
large_functions
Find functions/classes exceeding a line-count threshold.
-
query
Predefined patterns: callers_of, callees_of, imports_of, importers_of, children_of, tests_for, inheritors_of, file_summary.
-
renamed_in_diff
Symbols whose callsite line shifted versus a base ref.
-
report
Re-emit cached findings as JSON (format='json') or SARIF v2.1.0 (format='sarif').
-
rule_list
List available rules for an engine.
-
scan
Run a security scan (engine='heuristic' default = 5 regex rules, or 'semgrep'). Findings persist on nodes.security_tags.
-
search
Search code entities by name/keyword or semantic similarity.
-
set
Update a runtime setting (key=log_level).
-
setup_complete
Re-resolve credentials from environment variables.
-
setup_reset
Clear credentials and reset state.
-
setup_skip
Set local mode (skip relay permanently, use ONNX only).
-
setup_start
Start relay setup to configure API keys via browser (HTTP mode).
-
setup_status
Show current credential state, providers configured, and setup URL.
-
spot_check
Random callsite snippets from the last callers_of/callees_of/inheritors_of/importers_of result.
-
stats
Graph size, languages, node/edge breakdown, embedding count.
-
status
Server info: version, graph path, node/edge counts, embedding backend, embeddings count.
-
summarize
LLM-generated one-paragraph docstrings for Function nodes (via the SUMMARY_MODELS chain; no-op when no provider key is set). Cost-capped via max_nodes.
-
suppress
Suppress a finding by rule_id (or remove=true to un-suppress).
-
update
Alias for build with full_rebuild=false (incremental).
analyzed commit ccd60c9 · analyzer v33 · 5d ago
skills & prompt files 11
- skill n24q02m-better-code-review-graph-ccd60c9/.agents/skills/build-graph/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/.agents/skills/review-delta/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/.agents/skills/review-pr/SKILL.md
- agent-rules n24q02m-better-code-review-graph-ccd60c9/AGENTS.md
- agent-rules n24q02m-better-code-review-graph-ccd60c9/CLAUDE.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/impact-audit/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/onboard-repo/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/refactor-check/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/review-delta/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/review-pr/SKILL.md
- skill n24q02m-better-code-review-graph-ccd60c9/skills/security-sweep/SKILL.md
danger signals1
- dynamic code execution __import__() n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental_extra.py :589
__import__(
code files: 190
filesystem 82
- fs n24q02m-better-code-review-graph-ccd60c9/hooks/_graph_state.py :13
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/hooks/branch-sync-check.py :28
import shutil - fs n24q02m-better-code-review-graph-ccd60c9/hooks/stale-graph-check.py :25
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/migrations/versions/005_temporal_columns.py :67
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/preserve-diacritics.py :22
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/test_preserve_diacritics.py :15
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/credential_state.py :27
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :33
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/exporter.py :22
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/federation.py :22
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/graph.py :10
import shutil - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/incremental.py :12
import shutil - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/parser.py :13
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/__init__.py :18
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/_types.py :14
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/fallback.py :32
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/go.py :29
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/java.py :31
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/python.py :28
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/rust.py :31
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/resolver/typescript.py :27
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/heuristic.py :18
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/semgrep_engine.py :17
import shutil - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/server.py :16
from pathlib import Path - fs n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/tools.py :19
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest.py :6
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest_e2e.py :84
with open(self._path, encoding="utf-8", errors="replace") as f: - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/fixtures/sample_python.py :4
from pathlib import Path # noqa: F401 - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_alembic_baseline.py :27
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_as_of_diff.py :27
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_cli_contracts.py :15
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :29
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :12
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_credential_state.py :369
# Parent dir is created eagerly so the SQLite open() succeeds. - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_crg_protocol_harness.py :17
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_export_graph_dispatch_path_traversal.py :1
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation.py :20
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_migration.py :24
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_smoke.py :48
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_full_live.py :16
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_get_review_context_no_diff.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph.py :4
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph_get_edges_by_targets_coverage.py :2
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_graph_stats_error_coverage.py :1
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_heuristic.py :6
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_home_isolation.py :13
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental.py :125
with patch("pathlib.Path.read_bytes", side_effect=PermissionError): - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_list_graph_stats_coverage.py :2
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_live_mcp.py :14
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_lookup_node_directly.py :1
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_multilang.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_no_stale_package_name.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_oci_publication_sunset.py :8
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_oserror_coverage.py :1
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_extra.py :5
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_grammar_failure.py :18
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_path_resolution_fallback.py :24
with patch("pathlib.Path.resolve", side_effect=OSError("Mocked OSError")): - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_per_plugin_storage_migration.py :5
monkeypatch.setattr("pathlib.Path.home", lambda: tmp_path) - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :29
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :17
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_pre_2_0_backup.py :9
revision (None / 001 / 002 / 003 / 004), a ``shutil.copy2`` of the - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_repo_filter.py :16
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_repo_id_persistence.py :13
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_dispatcher.py :15
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_fallback.py :15
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_go.py :19
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_java.py :21
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_python.py :16
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_rust.py :18
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_resolver_typescript.py :23
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_response_payload_honesty.py :26
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_review_delta_line_shifts.py :32
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_search_edges_by_target_names.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tags_migration.py :32
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tool.py :15
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_semgrep_engine.py :13
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :32
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_tested_by_edges.py :10
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_tools.py :4
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_typescript_coverage_gaps.py :3
from pathlib import Path - fs (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_v17_coverage_gaps.py :21
from pathlib import Path
shell / exec 28
- shell n24q02m-better-code-review-graph-ccd60c9/hooks/branch-sync-check.py :29
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/scripts/preserve-diacritics.py :19
import subprocess - shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/federation.py :19
import subprocess - shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/incremental.py :13
import subprocess - shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/security/semgrep_engine.py :18
import subprocess - shell n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/tools.py :1890
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/conftest_e2e.py :17
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :27
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :11
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_crg_protocol_harness.py :15
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_e2e.py :5
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_smoke.py :46
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_full_live.py :15
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_heuristic.py :278
src = "subprocess.run(cmd, shell=True)" - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental.py :3
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_incremental_extra.py :5
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_live_mcp.py :13
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_parser_grammar_failure.py :17
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :26
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :14
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_renamed_in_diff.py :11
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_renamed_in_diff_exception.py :1
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_reviewer_summary.py :10
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_semgrep_engine.py :11
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_server.py :7
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_stdio_direct.py :16
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :30
import subprocess - shell (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_v17_coverage_gaps.py :20
import subprocess
network 3
- net n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/relay_setup.py :124
import httpx - net (weak) n24q02m-better-code-review-graph-ccd60c9/tests/e2e_mcp_protocol_test.py :24
import httpx - net (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_relay_setup.py :90
patch("httpx.AsyncClient") as mock_http_cls,
secrets 6
- secrets n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :134
if os.getenv("JINA_AI_API_KEY"): - secrets n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/server.py :1041
if not os.environ.get("MCP_DCR_SERVER_SECRET"): - secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/fixtures/sample_python.py :32
secret = os.environ.get("SECRET", "default") - secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_cohere_dimensions.py :177
not (os.getenv("COHERE_API_KEY") or os.getenv("CO_API_KEY")), - secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_multi_user_dispatch.py :152
assert os.environ.get("GEMINI_API_KEY") is None - secrets (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_relay_setup.py :50
assert os.environ.get("GEMINI_API_KEY") == "from-store"
database 20
- db n24q02m-better-code-review-graph-ccd60c9/hooks/_graph_state.py :12
import sqlite3 - db n24q02m-better-code-review-graph-ccd60c9/migrations/env.py :17
from sqlalchemy import engine_from_config, pool - db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/001_baseline.py :33
import sqlalchemy as sa - db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/003_federation.py :44
import sqlalchemy as sa - db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/004_security_tags.py :46
import sqlalchemy as sa - db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/005_temporal_columns.py :69
import sqlalchemy as sa - db n24q02m-better-code-review-graph-ccd60c9/migrations/versions/006_commits_table.py :42
import sqlalchemy as sa - db n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/embeddings.py :30
import sqlite3 - db n24q02m-better-code-review-graph-ccd60c9/src/better_code_review_graph/graph.py :11
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_alembic_baseline.py :25
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_commits_migration.py :26
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_coverage_gaps.py :10
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_embedding_migration.py :3
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_federation_migration.py :22
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_phase_3_smoke.py :25
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_plugin_assets.py :13
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_pre_2_0_backup.py :31
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_security_tags_migration.py :30
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_summary_schema.py :11
import sqlite3 - db (weak) n24q02m-better-code-review-graph-ccd60c9/tests/test_temporal_migration.py :29
import sqlite3
declared dependencies 10
- mcp@>=1.28.1,<2
- fastmcp@>=3.4.4,<4
- tree-sitter@>=0.26.0,<1
- tree-sitter-language-pack@>=1.15.8,<2
- networkx@>=3.6.1,<4
- watchdog@>=6.0.0,<7
- fastretrieval@>=1.1.0,<2
- httpx@*
- pydantic-settings@*
- semgrep@>=1.0,<1.162