Forensic Deepdive

io.github.Dhevenddra由 GitHub 账号 Dhevenddra 发布v0.10.0更新于 Oct 27, 2026

Persistent code knowledge graph + 9 composite MCP tools for AI coding agents.

已验证STDIO仅桌面知识与记忆开发者工具

概览

AI 生成的概览

为代码库构建持久化知识图谱,并通过 9 个 MCP 工具让助手查询结构、影响面、历史与跨栈调用链。

可以做什么
  • 用原始 Cypher 或自然语言检索图谱,并附带来源与置信度
  • 分析影响范围、调用流程,以及从前端调用到端点再到处理器的跨栈追踪
  • 一次调用查看符号的定义、调用方、被调用方、成员、近期提交与主要作者
  • 读取 Git 考古信息:变更频率、主要作者、巴士因子、共同变更簇与缺陷邻近度
  • 记录并召回关于符号的已验证洞察,并生成有界的 Mermaid 邻域图
适用场景
适合助手需要反复在大型或不熟悉的代码库中工作、希望获得持久的结构化上下文而不必每次重新摸索架构的场景。尤其适用于多语言仓库中的影响分析、上手文档编写或跨边界追踪。
运行要求
以 stdio 本地进程运行,来自 PyPI 包 forensic-deepdive(可用 uv tool install 或 uvx),因此需要 Python 工具链。须先用 extract 命令对目标仓库构建图谱,再让服务器指向该仓库启动。提取过程不需要 API 密钥或网络访问。
安装前请注意
提取会写入目标仓库:隐藏目录下的图谱存储、docs/codebase 下的五个 markdown 文件,以及仓库根目录和各工具专属目录中的编辑器规则与技能文件。这些生成文件仅在不存在时写入,手工修改过的副本不会被覆盖。洞察工具会把结论持久化到仓库内的本地文件。旧版本可能与新版 MCP 库不兼容而无法启动,需按文档升级或固定版本。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Forensic Deepdive,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

forensic-deepdive

forensic-deepdive gives an AI coding agent forensic understanding of an unfamiliar codebase — a persistent knowledge graph, an MCP server, and five durable markdown artifacts, so your agent stops re-discovering the same architecture from scratch every session.

bash
uv tool install forensic-deepdive && forensic extract /path/to/repo

[forensic-deepdive: forensic extract, then forensic graph, rendering a confidence-styled Mermaid diagram in the terminal]

Why this is different: every edge and every emitted claim carries a confidence tag — EXTRACTED (deterministic fact) / INFERRED (a heuristic resolved cleanly) / AMBIGUOUS (multiple candidates, shown, not guessed) — so your agent knows what to trust before it acts on it. Nothing else in this category tags confidence at all.

Why not GitNexus / CodeGraphContext / DeepWiki / Sourcegraph

forensic-deepdiveGitNexusCodeGraphContextDeepWikiSourcegraph
LicenseApache-2.0PolyForm NoncommercialMITproprietary (open variant: MIT)partial
Persistent code knowledge graph✅ LadybugDB✅ LadybugDBpartial❌partial
MCP server✅ 9 composite tools✅ 16 toolspartial❌❌
Per-edge confidence taxonomy✅ EXTRACTED / INFERRED / AMBIGUOUS❌❌❌❌
Git archaeology as a first-class layer✅❌❌❌partial
Durable committed markdown artifacts✅ 5 filespartialpartial✅ (wiki)❌
Agent-insight layer (record_insight / recall_insights)✅❌❌❌❌
Multi-platform skill emission✅ 10 shimspartialpartial❌❌
Local-only (no cloud required)✅ co-equal✅✅❌❌

GitNexus is the runaway leader in this category — but its PolyForm Noncommercial license locks every commercial user out. forensic-deepdive is the Apache-2.0 alternative: same persistent-graph-plus-MCP shape, plus honest confidence tags, git archaeology, persistent agent memory, and the 5 markdown artifacts as a fallback for any agent that doesn't speak MCP — with a license your employer's legal team will actually sign off on.


What it produces

forensic-deepdive analyzes any codebase (9 languages, polyglot) and produces:

  1. A persistent embedded graph at <repo>/.deepdive/graph.lbug — File, Symbol, Module, Commit, Author, Endpoint, and DbTable nodes plus DEFINES, MEMBER_OF, IMPORTS, CALLS, EXTENDS, IMPLEMENTS, TOUCHED_BY_COMMIT, AUTHORED_BY, CO_CHANGES_WITH, and the cross-boundary HANDLES / CALLS_ENDPOINT / ROUTES_TO / INJECTS / PERSISTS_TO edges. Every edge carries a confidence tag (EXTRACTED / INFERRED / AMBIGUOUS) — no hidden heuristics. The single Endpoint join node unifies five cross-boundary protocols (HTTP, MCP tools, registry-dispatch, gRPC, messaging/AMQP), so a frontend call resolves to its backend handler across the stack as one ROUTES_TO edge.
  2. An MCP server (forensic serve) exposing 9 composite tools (impact, context, archaeology, flow, query, record_insight, recall_insights, visualize, trace) consumable by Claude Code, Cursor, Codex, Continue, Cline, Windsurf — and any other MCP-aware agent.
  3. Five durable markdown artifacts under <repo>/docs/codebase/, regenerated from the graph on every extract:
    • MAP.md — what's where, ranked by centrality.
    • HOTPATHS.md — the dependency hot spots, with a per-row confidence-mix column so you see exactly how cleanly each symbol resolves.
    • ARCHAEOLOGY.md — why the code looks the way it does (git history, top authors with %, bus factor, co-change clusters, defect proximity).
    • MENTAL_MODEL.md — the doc the original author would write to onboard a new hire.
    • AGENT_BRIEF.md — ≤5 KB of assertive Never/Always rules with per-rule confidence tags. Drop-in CLAUDE.md for any project.
  4. Ten shims into the target repo — 4 editor rule files (CLAUDE.md, AGENTS.md, .cursor/rules/codebase.mdc, .continue/rules/codebase.md), 5 single-intent Claude skills under .claude/skills/codebase-{exploring,debugging,impact-analysis,refactoring,onboarding}/, and a .claude-plugin/plugin.json manifest. All write-if-absent — hand-edited files are never overwritten.
  5. An agent-insight layer — record_insight / recall_insights MCP tools backed by <repo>/.deepdive/insights.jsonl by default (zero dependencies, human-readable, git-friendly). The optional [graphiti] extra upgrades to a temporal knowledge graph backend above a 2-of-5 repo-size threshold.

Extract also regenerates ARCHITECTURE.md — a system-level Mermaid view of the cross-boundary graph (ROUTES_TO / INJECTS / PERSISTS_TO, confidence-styled), a separate human-validation surface (not one of the five contract artifacts, exactly like forensic visualize and serve --ui). Regenerate it on its own with forensic diagram --repo <repo>. Use it to sanity-check the graph — a wrong edge there is a wrong edge everywhere.

Add --emit-vault to also write an Obsidian-friendly vault under <output>/vault/ — every artifact gets summary:/tags: frontmatter, cross-references become [[wikilinks]], and an INDEX.md MOC ties them together (with a .obsidian/ config). A local-first second brain for humans (graph view, backlinks) and agents (triage by summary: without opening files, a traversable index). Opt-in; off by default.

Status

v0.10.0 "The Upgrade Path" — an integrity release. v0.9 shipped correct, and then its findings run caught --refresh-shims being structurally unable to refresh half its targets, with 909 tests green over it. The cause wasn't the fix — it was that every test in the suite wrote into an empty directory, so only the first run had ever been tested. Everyone who isn't a new user lives on the untested path.

So 0.10 adds almost no surface. It makes the guarantees already made real: running Deepdive over a repo that already carries a previous release's output now provably converges (and provably leaves your hand-edited files alone), extract tells you when generated shims are stale instead of waiting for you to know the flag exists, and a stale examples/ fails CI rather than being caught by eye mid-release. New: forensic extract --timings, per-phase wall clock.

It also contains a cancelled feature, which is the more useful story. The planned performance work targeted PageRank. The profile required before touching it measured PageRank at 0.04 % of a large extract, and the already-batched store writes at 79–87 %. The optimization was disproven before it was written — see docs/findings/v0.10/PROFILE.md. Confirming a known technique had been applied had been mistaken for confirming it was fast.

The engine, the graph, the contract layer and the 5-artifact + 9-MCP-tool contract are unchanged from 0.9, and emitted content is byte-identical but for the version footer.

⚠ If you installed 0.8.0 or 0.9.0 and forensic serve stopped working — this is why. Those releases declare mcp>=1.27.1 with no upper bound. mcp 2.0.0 removed mcp.server.fastmcp, which the MCP server imports, so a fresh install of 0.8.0 or 0.9.0 today resolves to mcp 2.0.0 and fails on import. Our development lockfile pinned 1.27.1, so every local check stayed green and only the clean-environment wheel smoke in CI could see it. Fix: upgrade to 0.10.0 (which caps mcp<2), or pin mcp<2 yourself. Nothing else about those releases is affected.

What's proven, and what isn't — the honest-framing section moved to docs/findings/HONEST.md (unchanged content, DEC-119). Short version: proven usable with real agent auto-discovery; not proven to make autonomous issue resolution measurably faster end-to-end (hardware-gated). This is an assisted-analysis tool, and it is not overclaimed as more.

Quick start

bash
# install from PyPI (puts `forensic` on PATH); or run ephemerally with uvxuv tool install forensic-deepdiveforensic info            # banner + capability panelforensic extract /path/to/repo
# …or from source for development:git clone https://github.com/Dhevenddra/forensic-deepdive && cd forensic-deepdiveuv sync --all-extras
# what can it do? (banner + capability panel: artifacts, protocols, MCP tools, confidence legend)uv run forensic info
# guided setup: analyze a repo, then wire it up as an MCP server# (--yes takes every default: scriptable, and the one mode that needs no extra)uv run forensic onboard --repo /path/to/repo
# run on any repouv run forensic extract /path/to/repo
# graph lands at <repo>/.deepdive/graph.lbug# 5 markdown artifacts at <repo>/docs/codebase/# 10 shims at <repo>/.claude/, .cursor/, .continue/, root
# trace a cross-stack feature slice (frontend call -> endpoint -> handler -> tail)uv run forensic trace <symbol> --repo /path/to/repo
# interactive query REPL over one held-open store (needs the [interactive] extra)# bare text = natural-language query (no LLM) · :cypher <q> = raw Cypher · :help · Ctrl-D exitsuv run forensic repl --repo /path/to/repo
# full-screen terminal graph browser — the loopback-free sibling of serve --ui# 1/2/3 = Symbols/Files/Endpoints · type to filter · c/e/l = confidence/edge/language · Enter = context · i/f = impact/flowuv run forensic browse --repo /path/to/repo
# the session shell: all of the above over ONE held-open graph, with history# in-session: extract · query · trace · impact · flow · diagram · browse · onboard · serveuv run deepdive --repo /path/to/repo
# query the graph as an MCP server (point it at the analyzed repo)uv run forensic serve --repo /path/to/repo
# inspect every repo you've analyzeduv run forensic list

Install from PyPI

Published as forensic-deepdive — no clone needed:

bash
uv tool install forensic-deepdive        # puts `forensic` on PATHforensic extract /path/to/repo
# …or run ephemerally, no install:uvx forensic-deepdive extract /path/to/repo

Optional extras: uv tool install "forensic-deepdive[semantic]" (offline ONNX NL query), [interactive] (the forensic repl query console, the forensic browse TUI graph browser, and the deepdive session shell), [openapi] (YAML spec parsing), [graphiti] (temporal insight backend).

Upgrading from 0.8

Re-run extract with --refresh-shims once. The generated shims and skills under .claude/, .cursor/ and .continue/ are written only if absent, so a plain re-extract leaves your 0.8-era copies in place, and two of the skill files still cite internal decision IDs that 0.9 removed:

bash
forensic extract /path/to/repo --force --refresh-shims

Only files Deepdive generated are rewritten. A shim you have hand-edited is never touched. pip install forensic-deepdive works too if you're not on uv.

Use it as an MCP server

forensic serve is a stdio MCP server exposing the 9 composite tools to any MCP-aware agent (Claude Code, Cursor, VS Code/Copilot, Codex, Continue, Cline, Windsurf). First build the graph once (forensic extract <repo>), then wire the server. Three ways, easiest first:

1. Claude Code plugin (self-hosted marketplace — no PyPI step):

shell
/plugin marketplace add Dhevenddra/forensic-deepdive/plugin install forensic-deepdive@dhevenddra

2. From the MCP Registry — indexed as io.github.Dhevenddra/forensic-deepdive, so registry-aware clients and discovery hubs (PulseMCP, MCPJungle, the VS Code @mcp index) can find and install it directly.

3. Manual config — generate a client snippet with forensic mcp-config, or paste:

json
{  "mcpServers": {    "forensic-deepdive": {      "command": "uvx",      "args": ["forensic-deepdive", "serve", "--repo", "."]    }  }}

Per-client copy-paste blocks (Cursor, VS Code, Codex, the uvx-not-found GUI gotcha) are in docs/install.md.

The 9 supported languages

Python, C, Dart, Swift, TypeScript, JavaScript, Java, Go, Rust.

The 9 MCP tools

ToolWhat it does
impact(symbol, depth, direction, min_confidence)Blast-radius BFS over CALLS edges, depth-bucketed, confidence-filterable.
context(symbol)Single-call kitchen sink: definition + callers + callees + parent/siblings/members + extends/implements + recent commits + dominant author + recent insights.
archaeology(file_or_symbol)Churn, top authors with %, bus factor, co-change cluster, defect proximity, recent commits.
flow(entry_point, max_depth)DFS over CALLS with cycle detection.
query(cypher | natural_language)Raw Cypher, or hybrid NL retrieval (FTS5/BM25 + structural graph signal + opt-in offline semantic, RRF-fused and shaped) with per-hit provenance + confidence.
record_insight(symbol, claim, evidence, verified_by)Persist a verified learning.
recall_insights(symbol, since, limit)Newest-first substring match against stored insights.
visualize(target, format, depth, max_nodes, ...)Bounded Mermaid diagram of a symbol/file neighborhood (or central); edge dash style encodes confidence.
trace(symbol, direction, max_depth)Cross-stack feature slice across the Endpoint join node: downstream walks frontend call → CALLS_ENDPOINT → endpoint → HANDLES → handler → CALLS tail; upstream answers "who calls this endpoint".

Tool descriptions are individually ≤200 tokens so the 9-tool envelope stays comfortably inside Anthropic's per-turn skill metadata budget.

The confidence taxonomy

Every edge and every emitted claim carries EXTRACTED / INFERRED / AMBIGUOUS:

  • EXTRACTED — deterministic from AST or git log. Facts.
  • INFERRED — a heuristic resolved cleanly (import-graph walk, receiver-type inference, single same-name candidate cross-file). High-trust but derived.
  • AMBIGUOUS — multiple candidates surfaced; the resolver couldn't disambiguate. You see every candidate, not a silent guess.

HOTPATHS shows a per-row confidence-mix column so at a glance you can tell Logger (4 EXTRACTED + 1458 INFERRED — mostly clean) from ChatToolResponse (449 AMBIGUOUS — same-name cross-file collision).

Honest-mode (pure-static, zero LLM, zero network)

forensic extract works end-to-end with no ANTHROPIC_API_KEY, no OPENAI_API_KEY, no Ollama, no network. Graphiti is opt-in via the [graphiti] PyPI extra plus a 2-of-5 repo-size threshold (≥50 k LOC, ≥25 contributors, ≥18 mo old, ≥200 PRs/12 mo, ≥100 issues with discussion). The JsonlInsightStore is the always-available floor.

(The GitNexus/CodeGraphContext/DeepWiki/Sourcegraph comparison table is up top — it's the headline, not a footnote.)

Local development

bash
git clone https://github.com/Dhevenddra/forensic-deepdivecd forensic-deepdiveuv sync --all-extrasuv run forensic --versionuv run pytest -x          # 1000+ tests at v0.10.0uv run ruff check src/ tests/uv run forensic extract tests/fixtures/tiny_fixture

Read CLAUDE.md, DECISIONS.md (81 active DECs), and PROGRESS.md before making changes. This repo dogfoods its own pattern: every session starts with the protocol in CLAUDE.md, every architectural choice is captured as a DEC-N entry, and the artifact-name contract (MAP, HOTPATHS, ARCHAEOLOGY, MENTAL_MODEL, AGENT_BRIEF) is part of the public API.

Acknowledgments

  • Aider (Paul Gauthier) for the PageRank-on-Tree-sitter repo-map pattern. Algorithm ported with attribution; we do not depend on aider as a package.
  • Graphify (safishamsi) for the EXTRACTED / INFERRED / AMBIGUOUS confidence taxonomy. Productized in DEC-015 across every emitter.
  • GitNexus (abhigyanpatwari) for the multi-repo registry pattern (~/.deepdive/registry.json, DEC-018), the composite-MCP-tool shape, and being the licensing wedge that makes this project's Apache-2.0 differentiation matter.
  • Kuzu (now Apple-archived) for the embedded graph engine; LadybugDB for the live community fork that v0.2 ships against (DEC-013).
  • Zep / getzep for Graphiti — the temporal knowledge graph that powers the above-threshold insight backend (DEC-019).
  • Anthropic for the Skills format, Claude Code, and the MCP protocol that makes this whole product shape possible.
  • Astral for uv and ruff.
  • Repomix (yamadashy) for the original v0.1 flatten-the-repo pattern, now demoted to --legacy-repomix (DEC-017) but still available for legacy use cases.

Contributing

Contributions are welcome — see CONTRIBUTING.md for the dev setup, the verification gate, and the architectural invariants (the 5-artifact contract, the Endpoint keystone, the confidence taxonomy). By contributing you agree your work is licensed under Apache-2.0.

License

Apache-2.0. See LICENSE.

If you redistribute, modify, or build on this project, the Apache-2.0 terms apply: you must retain the copyright notice, the LICENSE text, and the NOTICE file, and state any changes you made (License §4). Attribution is required; the project is Copyright 2026 Dhevenddra (see NOTICE). The boilerplate header in the LICENSE appendix (Copyright [yyyy] [name of copyright owner]) is a template for applying the license to source files — it is not itself a requirement, and the LICENSE file is kept verbatim as the official Apache-2.0 text.

来源:README.md,提交 ddef84f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.10.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分