Zero-LLM structural code retrieval for AI coding agents — tree-sitter index, BM25+dense+structural fusion, served over MCP.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http
verified
reported
listed in the official MCP registry counts 3 tools · 0 res
· 0 prompts
permission surface via README inference
tools
-
sg_decision
A design/implementation choice is made (picked or rejected, and why)
-
sg_log
Reviewing recent session turns
-
sg_overview
Session start — once per session
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d81aea0 · analyzer v33 · 2d ago
danger signals1
- dynamic code execution __import__() yashdoke7-skeletongraph-d81aea0/src/skeletongraph/cli/main.py :85
__import__(mod)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 174
filesystem 112
- fs yashdoke7-skeletongraph-d81aea0/eval/agent/aggregate.py :22
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/check_builds.py :4
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/config.py :12
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/isolation.py :14
import shutil - fs yashdoke7-skeletongraph-d81aea0/eval/agent/plots.py :22
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/prefetch.py :21
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/prefetch_embeddings.py :5
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/prewarm_fusion_dense.py :19
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/profiles.py :22
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/retrieval_latency.py :36
import shutil - fs yashdoke7-skeletongraph-d81aea0/eval/agent/run_agent.py :20
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/run_claude_code.py :46
import shutil
show 28 more
- fs yashdoke7-skeletongraph-d81aea0/eval/agent/run_singleshot.py :24
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/run_stage.py :78
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/sg_tools.py :21
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/test_verify.py :16
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/tools.py :15
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/verify.py :23
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/verify_pro.py :52
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/agent/vllm_bench.py :22
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/aider_repomap.py :33
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/bm25_flat.py :17
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/cbmem.py :38
import shutil - fs yashdoke7-skeletongraph-d81aea0/eval/backends/dense.py :25
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/graphify.py :31
import shutil - fs yashdoke7-skeletongraph-d81aea0/eval/backends/grep_sim.py :12
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/hybrid.py :34
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/localizer.py :61
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/backends/summary_search.py :37
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/curator/curator.py :13
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/curator/train.py :28
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/datasets/setup_multilingual.py :4
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/kv_cache.py :35
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/make_dataset.py :33
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/retrieval_eval.py :34
from pathlib import Path - fs yashdoke7-skeletongraph-d81aea0/eval/run_stage0.py :24
from pathlib import Path - fs (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/_dev/clean_hybrid_predictions.py :30
from pathlib import Path - fs (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/_dev/expand_graphify_100.py :32
from pathlib import Path - fs (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/_dev/high_turns.py :5
r = json.loads(open(f).read()) - fs (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/_dev/inspect_pro.py :8
with open(path, "r", encoding="utf-8") as f:
72 more not shown — this panel samples each group; the count above is the real total.
shell / exec 16
- shell yashdoke7-skeletongraph-d81aea0/eval/agent/isolation.py :16
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/agent/prefetch_embeddings.py :3
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/agent/retrieval_latency.py :38
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/agent/run_all.py :28
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/agent/run_claude_code.py :47
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/agent/verify.py :21
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/backends/cbmem.py :39
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/backends/graphify.py :32
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/datasets/setup_multilingual.py :3
import subprocess - shell yashdoke7-skeletongraph-d81aea0/eval/make_dataset.py :30
import subprocess - shell (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/make_rebench.py :50
import subprocess - shell (weak) yashdoke7-skeletongraph-d81aea0/eval/scripts/verify_rebench.py :72
import subprocess
show 4 more
- shell yashdoke7-skeletongraph-d81aea0/src/skeletongraph/cli/prepare.py :23
import subprocess - shell yashdoke7-skeletongraph-d81aea0/src/skeletongraph/eval/token_counter.py :13
import subprocess - shell yashdoke7-skeletongraph-d81aea0/src/skeletongraph/retrieval/detect_changes.py :11
import subprocess - shell yashdoke7-skeletongraph-d81aea0/src/skeletongraph/server/mcp.py :1724
import subprocess
network 3
- net yashdoke7-skeletongraph-d81aea0/eval/agent/run_all.py :31
import urllib.request - net yashdoke7-skeletongraph-d81aea0/src/skeletongraph/graph/embeddings.py :49
# Remove current directory from sys.path to prevent 'requests' repo from poisoning Huggingface's import requests - net yashdoke7-skeletongraph-d81aea0/src/skeletongraph/summary/ollama.py :17
import urllib.error
secrets 4
- secrets yashdoke7-skeletongraph-d81aea0/eval/agent/config.py :60
API_KEY = os.environ.get("SG_EVAL_API_KEY", "EMPTY") # vLLM ignores it - secrets yashdoke7-skeletongraph-d81aea0/eval/backends/localizer.py :382
key = os.environ.get("SG_EVAL_API_KEY", "") - secrets yashdoke7-skeletongraph-d81aea0/eval/backends/summary_search.py :53
_OPENAI_KEY = os.environ.get("SG_SUMMARY_API_KEY", - secrets yashdoke7-skeletongraph-d81aea0/src/skeletongraph/llm/provider.py :47
self.api_key = os.environ.get("GEMINI_API_KEY") or os.environ.get("GOOGLE_API_KEY")
declared dependencies 32
- tree-sitter@>=0.23
- tree-sitter-python@>=0.23
- tree-sitter-javascript@>=0.23
- tree-sitter-typescript@>=0.23
- tree-sitter-java@>=0.23
- tree-sitter-go@>=0.23
- tree-sitter-rust@>=0.23
- tree-sitter-cpp@>=0.23
- tree-sitter-c-sharp@>=0.23
- tree-sitter-ruby@>=0.23
- tree-sitter-php@>=0.23
- click@>=8.0
show 20 more
- mmh3@>=4.0
- rich@>=13.0
- tiktoken@>=0.7.0
- sentence-transformers@>=3.0,<4
- numpy@>=1.24
- huggingface_hub@>=0.20,<0.30
- skeletongraph@*
- litellm@>=1.0
- pandas@*
- matplotlib@*
- seaborn@*
- swebench@*
- openai@*
- datasets@<3
- aider-chat@>=0.82
- rank-bm25@>=0.2
- watchdog@>=3.0
- pytest@*
- pytest-cov@*
- ruff@*
clipboard 1
- clipboard shell call yashdoke7-skeletongraph-d81aea0/src/skeletongraph/cli/prepare.py :188
("pbcopy", []),