Quick reference
The tables below summarise key dimensions. Direct alternatives compete in the same category. Complementary tools solve adjacent problems and work alongside jCodeMunch.
A flat grid scores tools that aren't the same machine, like an air fryer against a toaster. For why these alternatives look so different, and how they sort into appliance classes, read the Field Guide taxonomy →
Direct Alternatives: tools in the same category
| jCodeMunch + jDocMunch | Raw File Tools (Read/Grep/Glob/Bash) |
mcp-server-filesystem | RepoMapper | Pharaoh | GitNexus | Serena | Trail-code (formerly Graft) |
GrapeRoot (Dual-Graph) | vexp | code-review-graph | cymbal | Context+ | Axon | SocratiCode | Octocode | Repomix | codebase-memory-mcp | CodeGraph | SigMap | trace-mcp | SDL-MCP | TokenSave | LeanCTX (context interception) |
LemonCrow (absorbed Atelier) |
zvec-grep (zvec-ai) |
repowise | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Token reduction on code exploration | ✓ 96.2% fewer tokens per lookup than grep-and-read (15-lookup benchmark) | ✗ 0 % (baseline) | ✗ 0 % | ~ Token-budgeted map (not retrieval) | ~ Graph queries replace file reads (no benchmark published) | ~ Graph queries; no benchmarks published | ~ Symbol-level tools reduce reads; no token benchmarks published | ~ 23 % fewer tokens, 25 % fewer tool calls (SWE-bench Verified, 50 of 500 instances, single pass); 42 % / 46 % on their own internal controlled sweep (162 runs, Claude Sonnet 5, LLM-judge scored: a different experiment, not a second reading of the same one). Published methodology and the official grader. See the note in the card on what 50 instances can resolve. | ~ $0.49 to $0.27 per prompt in their benchmark (50+ prompts); pre-loads context, not symbol-level retrieval | ~ Their SWE-bench Pro run: 81.7% resolved with Claude Opus 5, $1.52 per task, every session published; measures the agent, not retrieval tokens | ~ ~63× median per-question reduction (35×-358× across 6 repos, whole-corpus baseline vs graph query; re-captured 2026-08-02 at pinned SHAs, replacing the retired 2026-05-25 capture). A separate review-context benchmark still falls below 1× on small single-file commits: two different questions, not one number | ~ 40-100% fewer tokens than grep-driven flows on focused investigations (their harness, 11-repo corpus); different baseline and tasks from ours, so not directly comparable | ~ Describes itself as built for “99% accuracy”; no accuracy or token-reduction benchmark published | ~ Precomputed graph returns "complete context in one tool call"; claims token efficiency via fewer agent hops; no published benchmark or reproducible methodology | ~ 61% less context, 84% fewer tool calls, 37× faster than grep-based exploration (self-reported, one live agent run on the VS Code repo) | ~ Retrieval-quality benchmark, 127 code queries: Hit@10 0.835 / MRR 0.572 at best (v0.17.1, June 2026, marked historical); ground truth and scripts in benchmark/. No token-savings claim. |
~ Single-shot pack of the whole repo; --compress strips bodies via tree-sitter; pack ships in every prompt: no per-query reduction |
~ "120× fewer tokens" claimed (5 structural queries: ~3,400 vs ~412,000 file-by-file); arXiv preprint cites 10× tokens, 83% answer quality on 31 repos | ~ "88% fewer tool calls, 53% faster, 62% fewer tokens" on a 7-codebase Claude-Code Explore-agent benchmark, re-measured 2026-08-05 on Claude Opus 4.8 at the median of 4 runs per arm, with the CLI blocked in both arms | ~ Map is 95.2% smaller than the full repository (21 repos, capture sigmap-v8.85-main); they label it a map-size figure, not a per-call saving |
✓ Their benchmark: 72.7% fewer input tokens to review a pull request (median over 60 merged PRs in six repos they don’t own), with method and reproduction published | ~ Symbol Cards and an escalation ladder bound what each request returns; usage stats track savings; no token benchmark published in the repo | ~ 88% mean retrieval savings (142.8k → 5.5k tokens over 10 queries) against a full-file baseline, with a per-query table; tokensave bench reruns it on your own repo, so the methodology is reproducible. Measured on their own codebase with a generic query set: a single-corpus self-measurement, not a multi-repo one |
~ No headline percentage in the current README; savings come mostly from compressing what is sent (opt-in proxy, shell output), recorded in a local savings ledger | ~ SWE-bench Verified, 50 tasks × 5 reps (self-reported): 29.5% lower cost, 37.7% fewer turns; measures agent spend, not retrieval tokens | ~ Their SWE-QA-Bench README (read 2026-09-07) reports input-token and tool-call change for Claude Code with and without the tool, over 20 tasks on 11 repositories, scored by an LLM judge. The prose carries no figure and the result is published as an image, so no number is transcribed here. Nothing on this row compares zvec-grep to jCodeMunch: it was admitted to the comparison set on 2026-09-07 and has not been run. | ✓ Call graph, symbols and cited answers; their benchmark: 31.6% less agent output on 43 django questions |
| Symbol-level extraction (functions, classes) | ✓ 70+ languages (incl. YAML/Ansible, Razor/Blazor, SQL/dbt, Erlang, Fortran, Pascal, MATLAB, Ada, COBOL, Zig, PowerShell) | ✗ Whole-file only | ✗ Whole-file only | ~ Signatures in the map, plus identifier search (search_identifiers) |
~ Signatures + graph nodes; TypeScript, JavaScript, Vue & Python | ✓ 18 languages; graph nodes + call edges | ✓ 40+ languages via LSP; type-aware cross-file references | ✓ 24 languages via tree-sitter; full cross-file resolution for nine, including TypeScript/JavaScript, Python, Go and Java | ~ Symbols & imports extracted for graph ranking; no on-demand per-symbol retrieval | ~ 34 languages via tree-sitter; skeletons return signatures without bodies; no named on-demand per-symbol retrieval | ~ 19 languages + Jupyter/Databricks notebooks via tree-sitter; graph nodes (functions, classes, imports) + edges (calls, inheritance, test coverage); no named on-demand per-symbol retrieval | ✓ 20 parseable languages via tree-sitter; named on-demand per-symbol retrieval (cymbal show); Go binary, no Python runtime required |
✓ 43 file extensions via tree-sitter; AST extraction with semantic search; spectral clustering groups related files | ~ 3 languages (Python, JavaScript, TypeScript) via tree-sitter; graph nodes for functions, classes, imports; KuzuDB graph storage with Cypher queries | ~ Language-agnostic with ast-grep AST-aware chunking for 18+ languages (line-based fallback elsewhere); Qdrant vector store; polyglot dependency graph with circular-dep detection | ~ 16 languages via tree-sitter (Rust, Python, TS/JS, Go, PHP, C/C++, Ruby, Elixir, Java, Swift, Svelte, Lua, CSS, JSON, Bash, Markdown); view_signatures reads signatures without whole files |
~ Whole-file pack; --compress extracts signatures via tree-sitter (~70-90% body strip); no on-demand per-symbol retrieval |
✓ 162 vendored tree-sitter grammars; functions/classes/routes as graph nodes; LSP-style hybrid type resolution for twelve languages (Python, TS/JS/JSX/TSX, PHP, C#, Go, C, C++, Java, Kotlin, Rust, Perl) | ✓ 34 languages via tree-sitter (20 in a native Rust kernel); symbols + framework-aware route nodes across 17 frameworks (Django, Flask, FastAPI, Express, Laravel, Rails, Spring, Gin, Axum, ASP.NET, Vapor, React Router, SvelteKit and more) | ~ 38 languages; signature map plus line-range reads (get_lines); no named per-symbol body retrieval |
✓ AST-first via tree-sitter across 81 languages; framework request-flow edges layered on by integration plugins (frameworks, 7 ORMs, view layers) | ✓ Tree-sitter grammars for about a dozen languages (optional native indexer); compact Symbol Cards; live overlay of unsaved editor buffers | ✓ 50+ languages via tree-sitter in three feature tiers (lite/medium/full); subprocess-isolated native grammars: a grammar crash skips one file, not the run | ✓ tree-sitter AST across 27 languages | ✓ code_search over exact symbols plus lexical, path/name and import-aware search |
~ Chunks with structure awareness for seven languages (C/C++, Go, Java, JavaScript, TypeScript, Python, Rust), keeping “Symbols, signatures, breadcrumbs, and surrounding source” (docs/04-pipeline.md, read 2026-09-07). Results are paths with line ranges, not symbol rows. |
✓ get_symbol returns one symbol's source with exact line bounds; call graph across 28 languages |
| Doc section search | ✓ via jDocMunch | ✗ Whole-file only | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ trail_find_all greps doc files as text; no section-level structure | ✗ | ~ Markdown headings indexed as sections in the same graph | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ Documentation corpus indexed as a separate searchable surface alongside code | ✗ | ✗ Code graph only | ✗ Code graph only | ✗ Signatures only | ~ Indexes markdown vaults into the same graph; no dedicated section-level doc-retrieval surface | ✗ Code graph only | ✗ Code only: no doc corpus | ~ Not documented as a doc-section retriever; the corpus it models is code and shell output | ✗ Code-only: no dedicated doc-section retrieval surface | ✓ Markdown chunked by heading section; other text as plain chunks (docs/04-pipeline.md, read 2026-09-07) |
~ search_codebase is hybrid search over code and docs, not section-level; doc drift checks your Markdown against the code (README, read 2026-10-28) |
| Requires pre-indexing | ✓ One-time, incremental; with jcodemunch-mcp watch running, the index follows file edits; after a branch switch, re-index; list_repos exposes git_head for agent-side freshness reasoning; index_file for single-file surgical updates; watch-claude auto-discovers Claude Code worktrees |
✓ None needed | ✓ None needed | ~ Per-query map generation | ~ Hosted backend; re-maps on every push | ~ One-time + auto-reindex on git commit via hook | ~ LSP servers spin up on first use; indexing latency per language | ✓ trail init builds the graph; each query brings it up to date first |
~ One-time graph build; real-time watcher keeps index fresh | ~ One-time index (<15s, vendor-stated) kept current by a watcher and git hooks; session memory persists across restarts | ~ One-time build (~10s / 500 files); incremental re-index on file save + git commit (~2.5s for a two-file edit on a ~3,000-file repo via SHA-256 diff | ~ Index builds on first use; mtime+size check refreshes changed files before every query; no watch daemon needed | ~ One-time indexing; embedding cache on disk; no incremental update details published | ~ One-time axon analyze .; watch mode re-runs file-level phases on change and batches global ones (communities, flows, dead code) every 30 seconds |
~ Auto-index on first use; per-branch separate vector collections; resumable batched indexing (checkpoints every 50 files); requires Docker for default mode (Qdrant + Ollama auto-managed): external Qdrant + native Ollama also supported | ~ octocode index builds the LanceDB collection for semantic search; octocode watch keeps it current; structural search and the live graph need no index |
✗ Single-shot pack at invocation; nothing to pre-build, but every run re-packs from scratch | ✓ Persistent SQLite knowledge graph; auto-sync watcher on file changes | ✓ Persistent SQLite + FTS5 graph; native-OS filewatcher with debounced auto-sync | ✓ TF-IDF index per project; regenerated on demand | ~ trace init (global) + trace add per project (the npm package is still trace-mcp); incremental; index in ~/.trace/ |
~ One-time graph build; live editor-buffer indexing keeps unsaved changes fresh | ~ One-time index; on-demand staleness checks (30s cooldown): no background daemon; edit primitives auto-reindex the files they touch | ✓ Builds a property graph up front; incremental git-diff updates after | ~ One-time local index; incremental updates | ~ One-time zg index into <root>/.zvec-grep/; per-directory file watcher; freshness reported as fresh / possibly_stale (docs/03-mcp.md, read 2026-09-07) |
~ Local index built without an LLM or API key; updates incrementally |
| Works with AI agents (MCP) | ✓ Native MCP server (stdio, SSE, streamable-http); Claude Code hook integration (PreToolUse/PostToolUse → index-file); 5 built-in MCP prompt templates (workflow, explore, assess, triage, trace). Adaptive tool surface keeps the agent's tool budget in check: core/standard/full tiers, or tool_surface=counter collapses to a six-tool front door built on three verbs (order/menu/route) that fits any tool-count cap (e.g. a 50-tool limit) with zero capability loss |
~ Via MCP tool calls | ✓ Native MCP server | ✓ Native MCP server | ✓ MCP through the pharaoh-mcp proxy (stdio) |
✓ MCP + Claude Code PreToolUse/PostToolUse hooks | ✓ Native MCP server; also OpenAPI for non-MCP clients | ✓ MCP server with six tools; init wires Claude Code, Cursor, Codex, Gemini |
✓ Native MCP server; supports 6 AI assistants (Claude Code, Codex CLI, Gemini CLI, Cursor, OpenCode, GitHub Copilot) | ✓ Native MCP; auto-generates config files; VS Code extension + npm CLI; 17 AI agents supported | ✓ Native MCP server; auto-configures sixteen host platforms on install (Codex, Claude Code, CodeBuddy, Cursor, Windsurf, Zed, Continue, OpenCode, Antigravity, Gemini CLI, Qwen, Qoder, Kiro, Copilot VS Code + CLI, Hermes); 5 built-in MCP prompt templates | ✗ CLI, not an MCP server; the agent runs it as a shell command; hook installers for Claude Code and OpenCode nudge agents to prefer cymbal over Read/Grep/Glob |
✓ Native MCP server; 17 tools across discovery, analysis, code ops, version control, and memory/RAG; init writes config for Claude Code, Cursor, VS Code, Windsurf and OpenCode |
✓ Native MCP server (axon serve --watch), 7 tools; also exposes REST API + interactive web dashboard at localhost:8420 |
✓ Native MCP server (stdio); plugins for Claude Code, Codex, VS Code and Cursor; direct MCP for Gemini CLI, OpenCode and others; default stack runs Qdrant and Ollama in Docker | ✓ Native MCP server (Claude Code, Codex, Cursor, Windsurf and others); also a standalone CLI | ~ MCP server bundled (repomix --mcp): 8 tools, 6 by default: pack_codebase, pack_remote_repository, attach_packed_output, generate_skill, read_repomix_output (line-range partial reads), grep_repomix_output (regex search in pack), file_system_read_file, file_system_read_directory (sandbox mode only). Pack-first paradigm, but grep+partial-read now offer per-query slicing |
✓ 17 MCP tools; install covers 45 automatic/conditional client surfaces (Claude Code, Codex, Gemini CLI, Zed, OpenCode, Antigravity, Aider, KiloCode, VS Code, OpenClaw, Kiro and more) |
✓ MCP server; codegraph_explore is the only tool listed by default, with codegraph_search / callers / callees / impact / node / files / status unlisted but functional (re-enable via CODEGRAPH_MCP_TOOLS); targets Claude Code primarily |
✓ MCP server with 22 tools (seven-tool core profile); sigmap mcp install for Claude Code, Cursor, Continue, Codex; also writes host rule files |
~ Native MCP server; 182 tools exist. The default minimal preset shows up to 29 and defers the rest, which load_tools pulls in mid-session (full is opt-in). The default fits inside common tool-count caps; full does not |
✓ Native MCP server (stdio or HTTP); 38 flat tools, a 6-tool gateway or a 7-tool Code Mode | ✓ Native MCP server with 80+ tools across discovery/call-graph/health/edit/git/cross-branch; read tools carry readOnlyHint; auto-configures 12+ agents (Claude Code, Cursor, Copilot, Gemini CLI, Qwen, Kiro, Zed, ...) |
✓ Native MCP server (lean-ctx serve), plus an optional proxy in front of the model provider | ~ Runtime Lite tools for Claude Code, Codex and OpenCode that replace the host’s read/edit/bash; opt-in remote MCP endpoint |
✓ Native MCP server; one tool by default (zvec_grep_search), six in the full toolset; one-command installs into Claude Code, Codex, OpenCode, Qwen Code and Qoder (docs/03-mcp.md, read 2026-09-07) |
✓ Native MCP server (10 default + 7 opt-in tools); pip install repowise |
| Import graph / reference tracing | ✓ find_importers (with has_importers flag), find_references, check_references, get_blast_radius (depth-scored risk + has_test_reach per file), get_changed_symbols, get_dependency_graph; get_untested_symbols (import-graph test reachability); TS/SvelteKit path alias resolution; cross-repo via cross_repo=true on find_importers, get_blast_radius, get_dependency_graph + dedicated get_cross_repo_map |
~ Manual grep | ✗ | ~ Dependency graph for ranking only | ✓ Blast radius (graph-native) | ✓ impact, detect_changes, call chain tracing, Cypher queries | ✓ find_referencing_symbols via LSP (type-aware, cross-file) | ✓ trail_trace_calls: callers, callees, blast radius N levels deep |
~ Import relationships in semantic graph; file + symbol level; no cross-repo call tracing | ✓ get_impact_graph: callers, importers and dependents a change breaks; search_logic_flow traces paths between functions |
✓ Blast-radius at 0.69 avg F1 / 0.55 precision over 13 commits; recall 1.0 is a graph-derived upper bound their own README declines to call “100% recall”; call chain tracing; test coverage gap detection; detect_changes maps diffs to affected functions and flows |
✓ cymbal refs, cymbal importers, cymbal impact (transitive callers, depth cap 5); cymbal trace (downward call graph); cymbal changed (git diff to affected symbols); --graph mode emits Mermaid/DOT/JSON for trace/impact/importers/impls |
~ get_blast_radius tool; call-site tracing maps symbol usage; no dedicated import graph or cross-repo tracing |
✓ axon_impact with depth grouping (will break / may break / review) and confidence scores; axon_detect_changes maps a git diff to affected symbols; Cypher queries for ad-hoc traversal; no cross-repo tracing |
✓ Polyglot import graph with circular-dep detection (codebase_graph_*); symbol-level blast radius (codebase_impact) and call-flow tracing (codebase_flow); cross-project search |
✓ Live graph of imports, calls, inheritance and implementations (graphrag); structural AST pattern search; optional LSP references |
✗ Pure file packer: no graph, no edges | ✓ CALLS, IMPORTS, IMPLEMENTS, INHERITS edges; HTTP/gRPC/GraphQL/tRPC cross-service linking; Cypher-like queries | ✓ Symbol relationships, callers/callees, full impact radius via dedicated tools; framework-route ↔ handler edges | ~ get_method_impact (per-symbol blast radius), get_callee_signatures, get_architecture_overview with cycles |
✓ Framework request flow (route→middleware→controller→service→view) with cross-language bridges (Inertia::render linking PHP→Vue) via per-framework integration plugins and 7 ORM adapters. jCodeMunch resolves route→handler and render→view edges with one call-shape resolver, then follows the AST call graph; plus find_importers / get_blast_radius / get_cross_repo_map |
✓ Embedded graph database: true multi-hop queries; dependency-weighted BFS/beam retrieval; delta / blast-radius analysis; SCIP-backed compiler-verified cross-references | ✓ callers/callees/impact/affected (tests a change hits)/rename_preview/hotspots; per-branch and cross-branch reference queries |
✓ Property graph carrying calls, imports, exports and type_ref edges | ~ relations/graph: basic repository relationships and import map |
✗ No references, importers or blast-radius tool in the documented MCP surface (docs/03-mcp.md, read 2026-09-07) |
✓ Call graph; get_context opens callers and callees, get_risk gives dependents, co-change partners and test gaps |
| Architecture-decision context (revert/tradeoff/root-cause history surfaced during analysis) | ✓ get_blast_radius / get_impact_preview surface git-mined decision-bearing commits (revert/perf/refactor/rename/bugfix) + a volatility read (v1.108.59, opt-in include_decisions); get_symbol_provenance adds a per-symbol decision narrative. Read-only: surfaced from the commit record, never persisted |
✗ Manual git log reading |
✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ~ Persists agent session memory across restarts, not architecture-decision rationale | ~ save_observation stores decisions; notes linked to a symbol flag stale when the code changes |
~ Commit-scoped review context (diff→symbol), not a stored decision/rationale memory | ✗ | ~ propose_commit + shadow restore points (undo), not decision rationale |
✗ | ✗ | ✗ | ✗ | ~ Persistent code knowledge graph (structural relationships), not architecture-decision rationale | ✗ | ✗ | ✓ mine_sessions extracts decisions from agent session logs by pattern matching (no LLM calls) and stores them; query_decisions searches them and get_change_impact surfaces them. jCodeMunch reads decision context from git history at query time and stores nothing |
~ Symbol Delta Ledger records symbol-level change deltas over time, not revert/tradeoff/root-cause decision rationale | ✗ Semantic git diff/commit/PR summaries, but no revert/tradeoff/root-cause decision surfacing | ~ Keeps a learned memory across sessions, but that is remembered agent context rather than decision history mined from the commit record | ✗ blame helper; no revert/tradeoff/root-cause decision surfacing documented |
✗ Not in the documented surface (docs/03-mcp.md, read 2026-09-07) |
✓ get_why: decisions from ADRs, comments, commits, PRs and agent sessions, with verbatim evidence; decision extraction uses your own model provider (README, read 2026-10-28) |
| Write / modify files | ✗ Read-only by design | ✓ | ✓ | ✗ | ✗ Read-only by design | ~ rename tool for coordinated refactoring | ✓ replace_symbol_body, insert_after_symbol, rename (codebase-wide) | ✗ Writes its own graph under graft/; never modifies your source |
✗ Read-only by design | ✗ Read-only | ✗ Read-only | ✗ Read-only | ~ propose_commit and shadow restore points; undo support without git; not direct file writes |
✗ Read-only by design | ✗ Read-only by design | ✗ Read-only by design | ✗ Read-only | ✗ Read-only | ✗ Read-only | ✗ Read-only | ✗ Read-only on source | ✓ sdl.file.write, sdl.symbol.edit, sdl.search.edit; also sdl.runtime.execute |
✓ str_replace / multi_str_replace / insert_at / ast_grep_rewrite with auto-reindex |
~ Does not write source files. It does rewrite requests in flight (system prompt, history and tool results) and compresses shell output | ✓ Verified local file edits, bounded command execution and codemod: a write/exec runtime jCodeMunch deliberately omits |
✗ Search and index management only; the index sits under <root>/.zvec-grep/ and source files are not modified (docs/03-mcp.md, read 2026-09-07) |
~ Writes CLAUDE.md, AGENTS.md and wiki pages, and posts a PR comment; refactoring code generation is an opt-in tool (README, read 2026-10-28) |
| Runs fully offline / local | ✓ Local index, no backend (anonymous savings counter on by default) | ✓ | ✓ | ✓ | ✗ Hosted backend; device-code sign-in | ✓ Local LadybugDB; web UI via a local server | ~ Local; requires language server binaries installed per language | ~ Structural pass needs no model and no API key; the --deep pass calls a provider you supply; anonymous usage ping unless DO_NOT_TRACK=1 |
✓ Fully local; code never leaves machine | ✓ Fully local; no code leaves machine; no account required for Starter | ✓ Local SQLite in .code-review-graph/; no external database; no cloud dependency |
✓ Go binary; per-OS cache dir (~/.cache/cymbal/repos/<hash>/index.db on Linux); no external services; no account required |
~ Local index + disk-cached embeddings; requires Ollama (default) or OpenAI-compatible API (OpenAI, Gemini free tier, Groq, vLLM) for embeddings: fully local only when paired with Ollama | ✓ Fully local; KuzuDB + local embeddings (BAAI/bge-small-en-v1.5); no API keys; no data leaves machine | ~ Local processing: code stays on machine; default mode requires Docker (auto-managed Qdrant + Ollama); optional cloud embeddings (OpenAI, Gemini) and Qdrant Cloud when desired | ✓ Local LanceDB index and local FastEmbed models by default, no API key; remote providers (Voyage AI, OpenAI, Jina, Google) optional | ✓ Pure CLI; web UI optional | ✓ Single static binary; bundled Nomic-embed-code embeddings; no API key | ✓ Pure local; SQLite-only; no API | ✓ Pure local; bundled standalone binaries; no API | ✓ Local Node/TypeScript; SQLite index in ~/.trace/; embeddings optional (local Ollama or OpenAI); anonymous once-a-day install ping, opt-out via TRACE_MCP_TELEMETRY=off |
✓ Local embedded graph database; no hosted backend (optional vector embeddings via a provider) | ✓ 100% local; native binary; libSQL/SQLite; no backend, no account | ✓ One local Rust binary, local-first | ✓ Runtime Lite and Local Review run locally with no account; Hosted Review and Hosted Runtime are optional | ✓ Local index; eleven local embedding models, “downloaded on first use and cached under ~/.zvec-grep/models” (docs/07-embedding.md, read 2026-09-07), so the first index needs the network once. Remote providers are optional. --mode direct runs in-process with no daemon. |
✓ Local; indexing needs no API key; model-written docs are opt-in with your own provider |
| Commercial use permitted | ✓ Paid license available | ✓ Built-in tools | ✓ MIT | ✓ MIT | ~ Parser MIT; hosted service free for one repo, paid plans after | ~ PolyForm Noncommercial; commercial license from Akon Labs | ✓ GPL-3.0-or-later since v2.0 (copyleft); solidlsp MIT | ✓ MIT | ~ Launchers: Apache 2.0; Graph engine: Proprietary (PyPI-distributed) | ~ Starter free with caps (2,000 nodes, one repo, 20 counted calls a day); Pro ($19/mo) raises them | ✓ MIT: no node caps, no call limits | ✓ MIT | ✓ MIT | ✓ MIT | ~ AGPL-3.0: copyleft; commercial license available separately | ✓ Apache-2.0 | ✓ | ✓ | ✓ | ✓ | ✓ MIT | ~ Free community license (internal business use); paid commercial license to distribute or embed | ✓ MIT | ✓ Apache-2.0 | ✓ Apache-2.0 | ✓ Apache-2.0 | ~ AGPL-3.0: commercial use permitted; a modified version offered over a network must be released |
| License | Free non-commercial; paid commercial | N/A (built-in tools) | MIT | MIT | Parser: MIT; service: free (one repo), $27/mo Personal, $99/mo Team | PolyForm Noncommercial 1.0.0 | GPL-3.0-or-later (v2.0+); earlier releases MIT | MIT | Launchers: Apache 2.0; Engine: Proprietary | Closed source (npm: UNLICENSED); Starter free (capped); Pro $19/mo; Team $29/user/mo | MIT | MIT | MIT | MIT (declared in pyproject.toml; no LICENSE file in the repo) | AGPL-3.0 (commercial license available) | Apache-2.0 | MIT | MIT | MIT | MIT | MIT | Source-available; free community (internal) / paid commercial (distribute/embed) | MIT | Apache-2.0 public engine; enterprise components licensed separately | Apache-2.0 | Apache-2.0 | AGPL-3.0 |
| Dead code detection | ✓ find_dead_code: free; confidence-scored; cascading dead-code chains; entry-point heuristics |
✗ | ✗ | ✗ | ~ Not among the proxy's listed tools | ✗ | ✗ | ✗ | ✗ | ✗ | ~ Refactoring tools include dead code detection; no dedicated confidence-scored cascading analysis or entry-point heuristics | ✗ | ~ run_static_analysis runs native linters and compilers (TypeScript, Python, Rust, Go) for unused code; no index-based dead code tool |
✓ Multi-pass dead code with override, protocol and decorator awareness (axon_dead_code); 3 languages only |
✗ | ✗ | ✗ | ✓ Functions with zero callers, excluding entry points | ✗ | ✗ | ✗ No dedicated dead-code tool documented | ✗ No dedicated dead-code tool documented | ✓ dead_code (symbols with no incoming edges); also god_class, unused_imports, circular, recursion |
~ Not documented as a dead-code analysis | ✗ No dedicated dead-code tool documented | ✗ No dead-code tool documented | ✓ get_dead_code: unreachable code by confidence tier |
| Semantic / hybrid search | ✓ Opt-in BM25+vector (embed_repo); 4 providers: bundled ONNX, sentence-transformers, Gemini (task-aware), OpenAI; pure BM25 when disabled |
✗ | ✗ | ✗ | ✗ | ✓ BM25 + embeddings + RRF: native | ~ LSP type inference (not embedding-based) | ✗ No embeddings by design: trail ask runs on your machine with no model, $0 per query |
✗ | ~ Full-text + TF-IDF, ranked by graph centrality; no vector search listed | ~ Optional vector embeddings via sentence-transformers, Gemini, or MiniMax; FTS5 keyword+vector hybrid; enabled separately from core graph | ✗ FTS5 keyword search only; no vector or embedding layer | ✓ Embeddings via Ollama or OpenAI-compatible APIs with disk caching; semantic search across file headers and identifiers | ✓ BM25 (KuzuDB FTS) + 384-dim vector (BAAI/bge-small-en-v1.5) + Levenshtein fuzzy; fused via Reciprocal Rank Fusion; results grouped by execution flow | ✓ Dense vector (Qdrant) + BM25 sparse; fused via Reciprocal Rank Fusion; 6 embedding providers (Local Ollama, Docker Ollama, OpenAI, Gemini free tier, LM Studio, LiteLLM); per-branch separate collections | ✓ Hybrid vector + BM25 via LanceDB with optional reranking; structural AST pattern matching (e.g. every .unwrap() call); local models by default, remote providers optional |
✗ Pure text pack: no embeddings | ✓ Bundled Nomic-embed-code (768d int8) compiled into the binary; 11-signal scoring (TF-IDF, RRI, AST profiles, MinHash, graph diffusion, etc.) | ~ FTS5 full-text only; no embeddings claimed | ~ TF-IDF ranking only; no semantic embeddings | ✓ SQLite FTS5 + optional bundled ONNX embeddings (Ollama / OpenAI swappable) | ✓ Optional vector embeddings for hybrid search over the graph | ~ Its “semantic search” is agent-driven keyword expansion over the symbol graph; no embedding or vector layer | ✓ BM25 plus embeddings, fused by RRF with graph proximity | ~ Lexical locally; semantic/hybrid retrieval only on the Hosted and Enterprise paths | ✓ ripgrep, BM25 and vector search over one workspace index: the hybrid is the product | ✓ Full-text plus vector search, with graph expansion in get_answer |
| Token-budgeted retrieval | ✓ get_ranked_context (BM25 + PageRank strategies) + get_context_bundle budget params |
✗ | ✗ | ~ Map-based (not retrieval) | ✗ | ✗ | ✗ | ~ Bounded output rather than a budget parameter: trail_file_api returns signatures only, no bodies |
~ Pre-loading (not retrieval) | ✓ get_context_capsule stays within a token budget |
✗ Graph returns blast-radius context set; no token-budget parameter on retrieval | ✗ | ✗ No token-budget parameter on retrieval | ✗ No token-budget parameter on retrieval | ✗ No token-budget parameter on retrieval | ✗ No token-budget parameter on retrieval | ~ Per-file token counts reported; no retrieval-side budget: the whole pack ships every call | ~ Structural queries replace large reads; no explicit per-query token budget | ~ Compact tool returns; no explicit budget API | ✓ Compact signature context; get_budget reports what SigMap has emitted this session |
✗ No token-budget parameter on retrieval | ✓ Graph slicing returns a budgeted subgraph; the escalation ladder moves from cards to policy-gated source windows | ✗ context returns a relevant symbol set; no explicit per-query token-budget parameter documented |
✓ Per-agent budgets, profiles and throttling policies | ~ Bounded reads of exact ranges; no explicit per-query token-budget parameter documented for Runtime Lite | ~ Bounded rather than budgeted: up to 50 items per query group, and “Indexed source previews are omitted unless requested” (docs/04-pipeline.md, read 2026-09-07) |
✗ Not documented (README, read 2026-10-28) |
| Works alongside the others | ✓ Complements all of them | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ~ Same MCP layer; overlapping problem space: pick one for primary code intelligence (both expose code-search / index / graph-traversal MCP tools) | ✓ Different layer (whole-pack vs symbol-extract); pack first, query precisely with jCodeMunch when needed | ~ Same MCP layer + same agent surface; would conflict at the protocol level (overlapping tool names, both want to be the code-intelligence MCP) | ~ Same MCP layer; overlapping problem space: pick one, not both, for code intelligence in Claude Code | ~ Mostly orthogonal: SigMap writes static signatures into .context; jCodeMunch handles live retrieval. Could co-exist if you want both flat ranking and live symbol fetch. |
~ Same MCP layer and the same grounded-retrieval lane: overlapping code-intelligence graph; pick one for primary code intelligence. Its default surface is now the 29-tool minimal preset, so co-loading is cheaper than it was, but two code-intelligence graphs still overlap |
~ Same MCP layer and grounded-retrieval lane; overlapping code-intelligence surface: pick one for primary code intelligence, and it adds a write/exec runtime jCodeMunch deliberately omits | ~ Same MCP layer and grounded-symbolic lane; overlapping code-intelligence surface: pick one for primary code intelligence. It adds edit primitives jCodeMunch deliberately omits | ~ Possible, with one caveat that belongs on the record: a proxy that rewrites tool results rewrites every tool’s results, jCodeMunch’s included. Line-exact retrieval stops being line-exact if something compresses it downstream | ~ Same grounded-retrieval lane, but a full agent runtime that replaces the host’s core tools: you adopt its stack, not add it alongside; pick one for primary code intelligence | ✓ Their own agent guidance sends exact-string lookups to native grep or rg first (docs/03-mcp.md); nothing in it conflicts with a symbol-level server on the same repo |
~ Overlaps on symbols and blast radius; can run alongside, but mostly duplicates the index |
Complementary Tools: different problems, same ecosystem
| jCodeMunch + jDocMunch | RTK | Context Mode | OpenViking | ClawMem | mem0 | LanceDB | QMD | Obsidian | chonkify | Aegis | Caliber | Citadel | codesight | caveman | Ponytail | Headroom | distill | tokf | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Token reduction on code exploration | ✓ 96.2% fewer tokens per lookup than grep-and-read (15-lookup benchmark) | ~ N/A (different problem) | ~ BM25 text search over intercepted output; no structured code retrieval | ✗ Agent memory system; no code exploration tools | ✗ Agent memory system; not designed for code exploration | ✗ Memory & personalization layer; no code navigation | ✗ Vector database infrastructure; no code-specific tooling | ✗ Doc/notes search; optional AST chunking for code files, no symbol lookup or references | ✗ Note-taking app; no code navigation or symbol extraction | ✗ Document compression library; no code exploration tools | ✗ Architecture governance layer; no code exploration or symbol extraction | ✗ Config management layer; no code exploration or symbol extraction | ~ Optional codebase-memory MCP server: file-level import graph and heuristic symbol search | ~ Architecture-level map (routes, schemas, middleware chains, import graphs), not symbol-level retrieval; their README estimates 7.2x to 41x vs manual exploration | ✗ Source code passes through untouched; it shortens replies and compresses noisy data, not code retrieval | ✗ Changes what the agent writes, not what it reads | ~ Compresses tool outputs, RAG hits and files in the prompt stream (42% on their codebase-exploration scenario); not symbol retrieval | ~ UltraSave narrows searches and reads inside its own harness; no code index | ✗ Operates on CLI output, not codebase |
| Token reduction on terminal output | ~ Not the focus | ✓ 60-90% on common dev commands (their figure) | ✓ ~98% on shell/log/web output (their primary feature) | ✗ Not the focus | ✗ Not the focus; reduces session bloat via decay & dedup | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✗ Not the focus | ✓ Since 4.0 a local proxy compresses logs and test output (98.5% and 98.9% per file in their runs) | ✗ Not the focus | ✓ Compresses tool and shell output in the agent's context; RTK optional | ~ A utility model handles extraction, summaries and compression inside the harness | ✓ "60-90% reduction" via TOML rule-based filtering: no LLM in the loop |
| Agent memory / cross-session continuity | ✗ Not the focus | ✗ | ~ Session state snapshot via PreCompact hook | ✓ L0/L1/L2 summary layers; skills; session compression | ✓ Hybrid search vault; typed decay; causal links; cross-session handoffs | ✓ Multi-level adaptive memory (user / session / agent state) | ✗ Storage primitive; no memory semantics | ✗ Knowledge base retrieval, not session memory | ~ Vault functions as persistent knowledge store; no agent memory API | ✗ Not the focus | ~ Observation layer learns from agent edits and PR merges over time; not traditional session memory | ✓ Session learning hooks capture corrections, gotchas, and patterns into CALIBER_LEARNINGS.md |
✓ Campaign persistence: phases, decisions, and continuation state survive across sessions | ~ Optional wiki in .codesight/wiki/ persists across sessions (committed to git) |
~ /caveman-stats shows the session’s real token use and caveman stats keeps your history; /caveman-compress shrinks memory files such as CLAUDE.md |
~ /ponytail-debt collects deferred shortcut: comments into a ledger; no session memory |
✓ Cross-agent memory; headroom learn mines failed sessions and writes corrections (to CLAUDE.local.md by default) |
✗ Not described in its README | ✗ Stateless transformer |
| Requires pre-indexing | ✓ One-time, incremental | ✓ None needed | ~ No upfront step; auto-indexes tool output on flow-through via hooks | ~ LLM-driven; organized on first ingest, updated as agent works | ~ No upfront step; memory captured automatically via hooks | ~ No upfront step; memories accumulate as the agent interacts | ~ Data is loaded and embedded on ingest (its embedding registry, or vectors you supply) | ~ One-time embed step; re-run after adding new docs | ✗ No agent index; notes are read through the app, its CLI (1.12+) or the filesystem | ~ Embedding pass required per compression call; local model ~419 MB or cloud API | ~ Knowledge base built by importing docs (aegis_import_doc, human-approved); no code scan |
~ Setup scan once; caliber refresh and a pre-commit hook keep configs current |
~ Optional local file-level index (codebase-memory); /do setup scaffolds per-project config |
~ Scan on demand; optional persistent wiki refreshed by --watch or a commit hook |
✗ No index; one installer sets up the skill and the local proxy (Node.js 22.13+) | ✗ Skill / plugin only | ✗ Compression at request time | ✗ No index | ✗ Per-call rule application |
| Works with AI agents (MCP) | ✓ Native MCP server | ~ Hook-based, not MCP | ✓ Native MCP server + six hooks (PreToolUse, PostToolUse, UserPromptSubmit, PreCompact, SessionStart, Stop); 17 clients | ✓ Hooks + MCP for Claude Code, Codex and others; OpenClaw plugin | ✓ 33 MCP tools + Claude Code hooks + native OpenClaw and Hermes plugins | ~ Python + TypeScript SDKs and framework integrations; MCP server ships in its Claude Code plugin (Mem0 Platform API key) | ~ REST API + Python/TS/Rust SDKs; LangChain & LlamaIndex integrations; no MCP server in its README (28 October 2026) | ✓ Native MCP server (query, get, multi_get, status, metadata), stdio or HTTP; Claude Code plugin | ~ Official CLI (1.12+, app running); community MCP plugins; no official MCP server | ✗ No MCP server; standalone library and CLI only | ✓ Native MCP server; two surfaces (6 agent tools, 24 admin tools including those 6) | ~ CLI tool, not an MCP server; caliber sync mirrors MCP server configs across agents |
~ Claude Code and Codex plugin; bundles optional MCP servers (codebase-memory, citadel-state) | ✓ Native MCP server (14 tools) via npx codesight --mcp |
~ One installer for Claude Code and 30+ other agents; a local proxy compresses logs, JSON and test output on the way in | ~ Skill for Claude Code, Codex and other skill-capable hosts, a rules file for the rest; not an MCP server | ✓ Native MCP server (headroom mcp install) exposes headroom_compress / headroom_retrieve / headroom_stats |
✗ Its own harness and TUI; MCP not documented in its README | ~ Hooks for Claude Code, OpenCode, Codex CLI; not native MCP |
| Runs fully offline / local | ✓ Local index, no backend (anonymous savings counter on by default) | ✓ | ✓ Local SQLite index; no network calls | ~ Needs an embedding model and a VLM; local Ollama supported; offline deployment in the enterprise edition | ✓ Fully local, no API keys; ~4 GB VRAM or CPU in-process by default; WSL2 recommended on Windows | ~ Self-hosted Docker server; needs an LLM and an embedding model (OpenAI by default, other providers supported) | ✓ Embedded library; no external services required (with a local embedding model) | ✓ Fully local: GGUF models via node-llama-cpp (a GPU helps for semantic search and reranking) | ✓ Core app fully local; Sync is optional paid cloud add-on | ~ Local SentenceTransformers backend runs offline once the ~419 MB model is cached (CPU, CUDA or MPS) | ✓ Local SQLite; optional SLM runs locally (llama.cpp or Ollama; model downloaded on first use) | ~ Bootstrap, scoring and sync run locally; generation uses your Claude Code or Cursor seat, or an Anthropic, OpenAI, MiniMax or Vertex key | ✓ Local Node.js 22+ plugin; no external services or API keys beyond Claude Code or Codex | ✓ Fully local TypeScript; zero dependencies; no network calls at runtime | ~ Voice and proxy run locally; Auto (model routing) needs a free caveman account | ✓ One prompt plus local hooks; no service | ✓ Local proxy and Kompress-v2-base model (HuggingFace) | ~ Needs model access: subscriptions, OpenRouter or a local OpenAI-compatible model | ✓ Pure rule engine, no LLM in the loop |
| Commercial use permitted | ✓ Paid license available | ✓ Free CLI | ~ Internal & commercial use OK; SaaS/managed service prohibited (ELv2) | ~ AGPLv3 (copyleft, including network use); licensed enterprise edition available | ✓ MIT | ✓ Apache 2.0 self-hosted (free); managed platform has a free tier and paid plans from $19/month | ✓ Apache 2.0 (OSS free; cloud/enterprise paid) | ✓ MIT | ✓ Core app free including commercial; commercial license $50/user/year (optional) | ✗ Evaluation, testing and review only; production use needs a commercial license from the author | ✓ ISC license: permissive, commercial use permitted | ✓ MIT | ✓ MIT | ✓ MIT | ✓ | ✓ | ✓ | ✓ Apache-2.0 | ✓ |
| License | Free non-commercial; paid commercial | Apache-2.0, or Apache-2.0 + BUSL-1.1 with the engine; RTK Pro for teams | Elastic License 2.0 (ELv2) | AGPLv3 (CLI and examples Apache 2.0) | MIT | Apache 2.0 (self-hosted free); managed platform free tier, then paid | Apache 2.0 (OSS free); cloud/enterprise paid | MIT | Proprietary freeware; Sync $4/user/month yearly ($5 monthly); Publish $8/site/month yearly ($10 monthly); commercial license $50/user/year (optional); as of 28 October 2026 | Proprietary (evaluation, testing and review only); commercial license from the author | ISC (open source, permissive) | MIT | MIT | MIT | Apache-2.0 | MIT | Apache-2.0 | Apache-2.0 | MIT |
| Works alongside jCodeMunch | ✓ | ✓ Covers terminal output; jCodeMunch covers code reads | ✓ Covers session output bloat; jCodeMunch covers code reads | ✓ Agent memory layer; jCodeMunch is code navigation layer | ✓ Agent memory layer; jCodeMunch is code navigation layer | ✓ Agent memory layer; jCodeMunch is code navigation layer | ✓ Vector search infrastructure; jCodeMunch is structured code navigation | ✓ Doc/notes knowledge search; jCodeMunch + jDocMunch handle code and structured docs | ✓ Obsidian vault .md files are directly indexable by jDocMunch for agent retrieval | ✓ Compression step upstream; save its output as Markdown and jDocMunch can index it | ✓ Architecture rules layer; jCodeMunch covers code structure | ✓ Caliber manages agent config files; jCodeMunch is an MCP server it can sync across agents | ✓ Citadel orchestrates the workflow; jCodeMunch serves symbol-level reads to its skills | ✓ Architectural orientation layer; jCodeMunch provides the symbol-level retrieval codesight lacks: orient with codesight, then drill with jCodeMunch | ✓ Different layer: caveman shortens replies and compresses noisy data; jCodeMunch retrieves the code | ✓ Different job: Ponytail keeps what gets written small, jCodeMunch keeps the reading before it cheap | ✓ Different layer; wrap with --code-memory none so it doesn't add Serena beside jCodeMunch |
~ Different jobs; running jCodeMunch inside distill depends on MCP support its README does not document | ✓ Different layer: tokf is for terminal output, jCodeMunch is for code retrieval |
jCodeMunch vs Raw file tools: Read, Grep, Glob, Bash
Every AI coding environment ships with tools to read files and search text. They work. They just cost a lot of tokens, because they return entire files when you only needed one function.
- Read a file → get the entire file (even if you need 10 lines)
- Grep returns lines but no surrounding structure or type info
- No symbol index: agent must re-read files each session
- No import graph: tracing call chains requires many tool calls
- No section-level doc access: doc files read in full
- Token cost scales with codebase size, not query complexity
- search_symbols returns matching symbols with signatures: no file read needed
- get_symbol returns the exact implementation, nothing more
- Index is built once and reused: incremental updates on change
- find_importers and find_references trace the call graph in one call
- jDocMunch delivers section-level doc retrieval across .md, .rst, .ipynb, HTML
- Token cost is flat and tiny regardless of codebase size
Express.js (186 files), ~156× efficiency | FastAPI (1,186 files), ~323× efficiency | Gin (98 files), ~102× efficiency
Workflow measured:
search_symbols (top 5) + get_symbol ×3 vs. concatenating all source files.
Full methodology and raw data: benchmarks/
jCodeMunch vs mcp-server-filesystem
The canonical Model Context Protocol reference server: published in the modelcontextprotocol/servers monorepo (85k+ stars) and the most-cited "first MCP server" example. It exposes 13 file system operations over MCP: read, write, edit, list, move, search, and metadata. Not bundled with Claude Desktop by default; users wire it in via claude_desktop_config.json against an allowlist of directories.
read_text_file/read_multiple_filesreturn whole files: same token cost as native Read, just over MCPsearch_filesis a filename glob match, not a content search: no grep equivalent at all- No symbol index, no AST parsing, no language awareness
write_file,edit_file(text-pattern with dry-run),move_file,create_directory: full read/write surface- No import graph, no reference tracing, no doc section search
- No indexing step: point it at directories and it works immediately
- get_symbol returns the exact function body, not the whole file
- search_symbols understands types, signatures, and language constructs
- AST-based parsing for 70+ languages: finds things grep cannot
- Read-only by design: predictable, safe for agent use
- Import graph and reference tracing built into the index
- Requires one-time
index_folderorindex_repocall
search_files finds filenames; search_symbols finds symbols. A grep over content is still a job for native Grep or a separate MCP: the filesystem server doesn't do that either. jCodeMunch's search_text covers regex content search with structural context the filesystem server has no way to surface.
jCodeMunch vs RepoMapper
This comparison on its own page
RepoMapper
is an open-source Python MCP server that generates a token-budgeted "map" of a repository
by applying PageRank to a dependency graph built with Tree-sitter: a direct port of the
"Repo Map" feature Aider uses internally. Given a token budget (e.g. --map-tokens 2048),
it selects the most important files and surface-level signatures to fill that window.
Small, focused project: 217 stars and about 25 commits as of 28 October 2026, last activity December 2025; two MCP tools.
- PageRank over a Tree-sitter dependency graph identifies the most-referenced files
- Binary search fits the largest map that stays under a specified token budget
- Surfaces class/function signatures, not bodies, to maximise breadth per token
- 35 languages listed, via Tree-sitter grammars
- Two tools,
repo_mapandsearch_identifiers(identifier search with file, line and context): simple API, low learning curve - MIT-licensed; based on Aider's proven RepoMap algorithm
get_repo_map(v1.101.0): direct RepoMapper parity. Query-less, token-budgeted, signature-only repo overview ranked by PageRank. One tool, four optional parameters.search_symbolsfinds a function by name: no map to scan, no signatures to skimget_symbol_sourcereturns the complete implementation body, not just the signature- Index is built once; later queries read it instead of re-parsing the repo
find_importersandfind_referencestrace call graphs across the whole repoget_symbol_importanceranks symbols by PageRank or in-degree: on demand, no static mapget_ranked_contextassembles a token-budgeted context bundle ranked by BM25 + PageRank combined score: same idea asrepo_map, but query-driven and with full bodiesget_tectonic_mapgoes further than PageRank: fuses structural (imports), behavioral (shared symbol references), and temporal (git co-churn) signals to surface logical module boundaries, drifters, and god-module risk- jDocMunch covers documentation: section search across .md, .rst, .ipynb, HTML
- 90+ tools covering outlines, content, search, context bundles, import graphs, dead-code detection, and refactor planning
search_symbols("authenticate")) and gets a precise answer.
Summarisers are great for "What matters here?": retrievers are great for
"Where is this, exactly?" Both questions arise in a real coding session;
they are not in competition.
get_repo_map(repo, token_budget=2048) is a direct one-call counterpart
to repo_map(project_root). Query-less, signature-level, token-budgeted,
PageRank-ranked. Same job, same API shape, on jCodeMunch's already-built index.
You also get get_tectonic_map (multi-signal orientation:
imports + shared references + git co-churn) and get_ranked_context
(query-driven retrieval with full bodies). The orientation toolkit goes broader
and deeper than a single PageRank map.
search_symbols, then get_symbol_source
for the full body. For orientation, get_repo_map gives RepoMapper
parity at the API surface (one call, token budget in, ranked signature map out), while
get_tectonic_map and get_ranked_context exceed what
repo_map offers algorithmically. RepoMapper remains a fine choice when
you want a tiny single-purpose dependency and no index lifecycle at all.
jCodeMunch vs Pharaoh
Pharaoh
is a two-layer system: an open-source AST parser (pharaoh-parser, MIT)
that extracts structural metadata from TypeScript, JavaScript, Vue and Python,
and a hosted service that loads that metadata into a Neo4j knowledge graph.
Agents reach it through the pharaoh-mcp proxy, whose README lists seven tools
in three groups: Orient, Investigate and Manage. Pricing (read 28 October 2026): free for
your first repo with every analysis tool, Personal at $27/mo, Team at $99/mo.
The central design principle: function bodies are never captured, only signatures, hashes and graph edges.
- Orient:
get_codebase_map,get_module_context,search_functions,pharaoh_recon(map, module context, search and blast radius in one call) - Investigate:
get_blast_radius. Manage:pharaoh_account,pharaoh_admin - Parser is fully open source (MIT): "the exact code that runs in production"
- No function bodies captured; top-level constant values are encrypted per customer
- Live repos re-map on every push through a GitHub App: no manual re-indexing
- Decorator extraction, such as
@Get("/users")and@app.route("/api")
- 70+ languages vs. Pharaoh's TypeScript, JavaScript, Vue and Python
- Runs on your machine: local SQLite index, no account, no hosted backend
get_symbol_sourcereturns the full function body; Pharaoh intentionally omits source- 96.2% fewer tokens per lookup than grep-and-read, on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k)
- Audit tools in the same tier as everything else:
find_dead_code,get_untested_symbols,get_pr_risk_profile,get_cross_repo_map - 90+ tools across the suite, all in one tier
- jDocMunch covers documentation: Pharaoh has no equivalent
- 16,000+ tests
trusted_folders allowlist that restricts
which directories the indexer may read: suitable for multi-tenant or data-residency
environments.
pharaoh-mcp, which signs in with a device code
and connects to Pharaoh's hosted service. Its README also shows a --server option
for self-hosted Pharaoh instances, but doesn't say how to get one. jCodeMunch runs on
your machine; what it can send, and how to turn each item off, is on our
security page.
jCodeMunch vs GitNexus
This comparison on its own page
GitNexus
describes itself as "The Zero-Server Code Intelligence Engine." It builds a knowledge
graph from your codebase (call edges, inheritance chains, execution flows,
functional clusters via Leiden community detection) stored in a local LadybugDB
(formerly KuzuDB) instance and queryable via 19 MCP tools including raw Cypher.
The CLI runs locally (Node.js + Tree-sitter), and a web UI at gitnexus.vercel.app
connects to a local gitnexus serve backend.
Launched August 2025; 48.1k GitHub stars as of 28 October 2026: one of the fastest-growing open-source code-intelligence projects of the year.
- Per-repo tools (17):
list_repos,query,context,impact,trace,detect_changes,check,rename,cypher(raw Cypher on LadybugDB),route_map,tool_map,shape_check,api_impact,read_file,grep, plusexplain/pdg_queryon--pdgindexes - Multi-repo group tools (2):
group_list,group_sync. Cross-repo dependency analysis; contracts and staleness are now read as MCP resources rather than tools - Leiden community detection clusters related symbols + cohesion scores
- Hybrid search: BM25 + semantic embeddings + reciprocal rank fusion, built into
query - Web UI with Sigma.js / WebGL graph visualisation and AI chat over the index
- v1.6.12 release, v1.6.13 release candidates, 5,200+ forks (28 October 2026)
- 70+ languages vs. GitNexus's 18: adds Erlang, Fortran, SQL, Assembly, XML, GraphQL, Haskell, Elixir, Lua, Razor/Blazor, AL, Verse, and more
- Commercial license, paid once, with prices on our site: GitNexus's PolyForm NC license needs a separate commercial license from Akon Labs
- 96.2% fewer tokens per lookup than grep-and-read, on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k)
- Opt-in hybrid BM25 + vector search via
search_symbols(semantic=true): local sentence-transformers, bundled ONNX, Gemini, or OpenAI; zero overhead when disabled get_changed_symbols↔ GitNexus'sdetect_changes;get_blast_radius+get_impact_preview↔impact;plan_refactoring↔rename(rename + move + extract + signature change);get_cross_repo_map+get_group_contracts(v1.103.0) ↔group_*tools: ourget_group_contractsadds 4-tier intent classification (de_facto_api/leaky_internal/dead_contract/version_skew), stability scoring, last-breaking-change history, and runtime hit counts on top of the shared-symbol surface- Beyond GitNexus's surface:
assemble_task_context(v1.105.0. Single-call task-aware orchestrator with explainable intent classification + source-attributed entries),find_similar_symbols(multi-signal consolidation detection),get_pr_risk_profile(Phase 7 runtime-aware),get_tectonic_map(3-signal module topology),get_repo_map(PageRank-ranked overview),get_signal_chains(entry-point pathway tracing) - jDocMunch covers documentation: GitNexus has no equivalent for .md/.rst/.ipynb section search
- 16,000+ tests; SQLite index, no Neo4j/LadybugDB dependency
cypher tool. An open query
surface jCodeMunch deliberately doesn't expose (we use SQLite, not a graph DB).
Their web UI, with Sigma.js/WebGL graph visualisation and AI chat over
the index, has no equivalent on our side. Their hybrid search
is built into query; jCodeMunch's is opt-in and requires a one-time
embed_repo warm-up. And the trajectory matters: 48k
stars in fourteen months.
get_changed_symbols, get_blast_radius,
get_impact_preview, plan_refactoring, get_cross_repo_map on our side).
GitNexus adds raw Cypher queries over its graph and a web UI.
jCodeMunch covers 70+ languages to GitNexus’s 18, comes with jDocMunch and jDataMunch, and adds
runtime evidence to PR risk (get_pr_risk_profile).
They can run side by side: GitNexus for exploring the graph by hand, jCodeMunch for agent retrieval.
jCodeMunch vs Serena
This comparison on its own page
Serena
is an open-source coding agent toolkit that exposes IDE-level semantic code tools
to LLMs via MCP. Rather than static AST parsing it spins up real language servers
(Pyright, rust-analyzer, typescript-language-server, gopls, etc.) and routes tool
calls through them, giving it type-aware cross-file reference resolution,
rename-across-codebase, and symbol-level code editing. The v1.x line graduated out of pre-stable and added a JetBrains IDE backend,
symbol-level debug with breakpoints, monorepo / multi-project querying, and a
custom solidlsp LSP library replacing the earlier multilspy fork.
v2.0.0 (October 2026) added a REPL interface that cuts the tool set to a minimum, and moved the Serena
application to GPL-3.0-or-later; the solidlsp library stays MIT, and releases before v2.0.0 remain MIT.
Current release: v2.1.0 (October 19, 2026). 30k+ GitHub stars; built by Oraios AI.
- Type-aware cross-file reference + declaration + implementation resolution via real language servers
- Symbol editing:
rename_symbol,replace_symbol_body,insert_after_symbol,safe_delete,move,inline - JetBrains IDE backend (v1.x) with
debugtool: breakpoints, variable inspection, execution control; the JetBrains plugin is a paid add-on with a free trial, the LSP backend stays free get_diagnostics_for_file/get_diagnostics_for_symbol: LSP errors/warnings surfaced to the agent- Monorepo / multi-project querying:
QueryProjectTool,ListQueryableProjectsTool, multi-languageproject.yml - Memory: project-scoped + global markdowns,
read_only_memory_patterns,ignored_memory_patterns execute_shell_commandfor direct shell access- Compatible with Claude Code, Cursor, Cline, Roo Code, Codex, Gemini CLI, JetBrains IDEs
- Zero external binaries: tree-sitter grammars bundled; works instantly in CI, containers, ephemeral environments
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Python ≥3.10 (broad compatibility); Serena requires Python 3.11 to 3.14
- No per-language install burden: 70+ languages via bundled tree-sitter, no LSP setup per language
- Lightweight: no background language-server processes, no per-language tmpfs/RAM cost, no LSP indexing wait at startup
plan_refactoringcovers rename/move/extract/signature change in a read-only way: the agent applies the edits, jCodeMunch never mutates filesfind_implementations(v1.104.0): 4-channel resolution (LSP 1.0 / AST 0.85 / duck-typed 0.65 / decorator 0.45) with classification + differs_by breakdown + optional cross-repo.check_delete_safe(v1.104.0, read-only): composite of importers + references + dead-code confidence + runtime traces + entry-point heuristics; 8 verdict tiers + ranked blockers + one-line recommended_action- Runtime evidence on top of static analysis:
get_pr_risk_profile(Phase 7 runtime-aware),find_hot_paths,find_unused_paths. Serena has no equivalent - Architectural intelligence Serena doesn't ship:
get_tectonic_map,find_similar_symbols,get_group_contracts,get_repo_map,get_pr_risk_profile - jDocMunch + jDataMunch cover docs and tabular data: Serena's scope is code-only
- 16,000+ tests
rustup,
PHP needs Phpactor, Kotlin's language server is historically problematic, Julia's LSP has documented
initialisation failures. The custom solidlsp library and JetBrains backend alternative
mitigate but don't eliminate the operational cost: in CI, containerised, or ephemeral environments
every language-server install is a step that can fail or pull in hundreds of MB. jCodeMunch
requires no external binaries. Tree-sitter grammars are bundled in the wheel; indexing is fully
self-contained.
replace_symbol_body,
insert_after_symbol, safe_delete, move, inline,
cross-codebase rename_symbol) is an IDE replacement; jCodeMunch is
deliberately read-only and emits plan_refactoring + check_delete_safe
for the agent to apply via native Edit/Write.
The v1.x JetBrains backend + debug tool (breakpoints, variable
inspection, execution control) has no equivalent on our side and is uniquely useful for
agent-driven debugging sessions. LSP diagnostics surfaced as tools
(get_diagnostics_for_file, get_diagnostics_for_symbol) mean the agent
sees the same errors the IDE sees, which we don't do.
jCodeMunch vs Trail-code (formerly Graft)
Trail-code,
formerly Graft by NanoNets, turns a repository into a graph of linked plain-English markdown
pages (the “graft map”) written into graft/ and read by the agent like any
other file. A structural tree-sitter pass needs no model and no API key; an optional
--deep pass writes summaries using a provider you supply.
No embeddings, no index to keep warm; trail ask runs on your machine with no model
and costs nothing per query. It ships an MCP server with six tools and a trail init
that wires Claude Code, Cursor, Codex and Gemini in one command. It also keeps
“learnings” in .trail/: what sessions work out, added to later prompts.
TypeScript, installed from npm as @trailhq/trail-code (the old @nanonets/graft
package and graft command still work). 10.8k GitHub stars as of 28 October 2026
(created 3 July 2026); v0.28.0; MIT.
- Output is ordinary markdown in a
graft/folder (gitignored, likenode_modules): readable with a plain file read, no server running - Structural pass is free and offline: tree-sitter, no model, no API key
- Six MCP tools:
trail_find_code,trail_find_all,trail_trace_calls,trail_file_api,trail_repo_map,trail_check_freshness(the oldgraft_*names still answer) trail_file_apireturns every signature in a file, no bodies- Freshness checked before each query; results reflect uncommitted edits
- Live statusline and hooks in Claude Code
- Auto-sync: each query brings the graph up to date first
npm install -g, no Python toolchain- Full cross-file resolution for TypeScript/JavaScript, Python, Go, Java, Kotlin, PHP, Swift, R and Vue; broader symbol extraction for 15 more
- 90+ tools against six: the surface is the product, not a front end onto one artifact
- 70+ languages including YAML/Ansible, Razor/Blazor, SQL/dbt, Erlang and Fortran
- Answers Trail-code has no shape for:
find_dead_code,get_hotspots,get_pr_risk_profile,get_tectonic_map,find_similar_symbols,get_architecture_metrics - Git archaeology:
get_symbol_provenance,resolve_decision_context. Why the code is shaped this way, mined from history - Runtime evidence fused with static analysis:
find_hot_paths,find_unused_paths,get_runtime_coverage - Opt-in semantic search (BM25 + vector, three providers) where Trail-code rules embeddings out by design
- Token-budgeted retrieval as a parameter, not a fixed output cap:
get_ranked_context,get_context_bundle - Cross-repo:
get_cross_repo_map,get_group_contracts, cross-repo importers and blast radius - jDocMunch and jDataMunch cover documentation and tabular data; Trail-code’s scope is code only
- 16,000+ tests
benchmarks/swebench/power.py, computed rather
than typed.
jCodeMunch vs Dual-Graph (a.k.a. GrapeRoot)
Dual-Graph
(graperoot v3.10.19, published 3 September 2026; 104 PyPI releases) is a local CLI context engine that makes AI coding assistants
cheaper and faster by pre-loading the right files into every prompt. It supports
six AI assistants: Claude Code, Codex CLI, Gemini CLI, Cursor, OpenCode, and GitHub Copilot.
It builds two data structures: an info_graph.json (a semantic graph of files,
symbols, and import relationships) and a chat_action_graph.json (session memory
recording reads, edits, and queries). Before each turn the graph ranks relevant files and packs
them into the prompt automatically: no extra tool calls required. A persistent
context-store.json carries decisions, tasks, and facts across sessions. The tool
is activated with dgc . (Claude Code), dg . (Codex CLI), or
graperoot . --cursor/--gemini/--opencode/--copilot, and processing is local.
Launcher scripts are Apache 2.0 (the repo formerly at kunal12203/Codex-CLI-Compact, now
kunal12203/GrapeRoot); the graph engine (graperoot) is proprietary, shipped as a
compiled Cython package via PyPI.
- Semantic graph extracts files, symbols, and import relationships at project scan time; 12 languages (TS, JS, Python, Go, Swift, Rust, Java, Kotlin, Scala, C#, Ruby, PHP)
- Session memory (
chat_action_graph.json) tracks reads, edits, and queries: context compounds across turns - Auto pre-loads relevant files before the model sees the prompt: no tool calls needed for basic navigation
- Persistent
context-store.json: decisions, tasks, and facts carried across sessions CONTEXT.mdsupport for free-form session notes- MCP tools for deeper exploration:
graph_read,graph_retrieve,graph_neighbors - Their benchmark (50+ prompts, 7,700+ files): $0.49 to $0.27 per prompt, cheaper on 10 of 10 prompts, judged quality 76.6 to 86.6
- Supports 6 AI assistants: Claude Code, Codex CLI, Gemini CLI, Cursor, OpenCode, GitHub Copilot
- Configurable via env vars (
DG_HARD_MAX_READ_CHARS,DG_TURN_READ_BUDGET_CHARS, etc.) - Fully local; all data in
<project>/.dual-graph/(gitignored automatically) - Launcher scripts: Apache 2.0; graph engine: proprietary (PyPI-distributed)
- Tree-sitter AST parsing: retrieves individual functions and classes, not file blocks
search_symbols+get_symbol_source: find any function by name and return its full body in one callfind_importers/find_references/get_blast_radius: trace call graphs and impact chains across the entire repo- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k)
- 90+ MCP tools; tool profiles (core/standard/full) +
compact_schemasto control context budget - Refactor/safety surface:
plan_refactoring(rename/move/extract/signature),check_rename_safe,check_delete_safe(8-tier verdict + recommended action) - Architectural intelligence Dual-Graph doesn't ship:
get_tectonic_map(3-signal module topology),find_similar_symbols(consolidation clusters),get_group_contracts(cross-repo API surface),get_pr_risk_profile(Phase 7 runtime-aware),find_implementations(4-channel impl discovery),get_repo_map(PageRank-ranked overview) audit_agent_config: scans CLAUDE.md/.cursorrules for stale references and token waste- jDocMunch covers documentation: .md, .rst, .ipynb, and HTML section search; jDataMunch covers tabular data
- Tree-sitter grammars bundled; no Node.js required
- Commercial license, paid once; 16,000+ tests
search_symbols("authenticate")) and gets the exact symbol body back.
Pre-loading works well when the right files are predictable; retrieval wins when the codebase
is large and the agent knows exactly what it needs. The two strategies are genuinely
complementary: Dual-Graph to orient, jCodeMunch to pinpoint.
context-store.json (persisting decisions, tasks, and facts
between conversations), is a feature jCodeMunch does not offer. The automatic pre-loading
also means the model starts each turn with relevant code already in context, eliminating the
need for an explicit retrieval call in straightforward sessions. The broad AI assistant support
(6 tools including Cursor, Gemini CLI, OpenCode, and Copilot) is a practical workflow addition. For users who want
session continuity out of the box across multiple AI assistants, this is a meaningful workflow
advantage. The 104-release history on PyPI signals an actively-maintained
product: worth respecting.
search_symbols then get_symbol_source
return exactly that body without injecting anything else, and structural queries like
get_blast_radius, find_dead_code, and plan_refactoring
have no Dual-Graph equivalent. The licensing split (Apache 2.0 launchers, proprietary
engine) is clearer than the previous unlicensed state, but the proprietary engine still
limits forkability and auditability.
Running both is practical: Dual-Graph to pre-load context and persist session memory,
jCodeMunch to answer precise symbol and cross-reference queries that the graph pre-loader
would miss.
Note: GrapeRoot's 3-way benchmark scores whole agents on code-writing tasks,
not retrieval on its own.
jCodeMunch vs vexp
vexp
(vexp-cli 3.3.8 on npm, read 28 October 2026) is a local-first context engine for AI
coding agents: tree-sitter parses the code into a dependency graph stored in local SQLite, and
the agent gets back only the code that matters for the task. Markdown headings join the same
graph as sections. It ships a VS Code extension and an npm CLI, configures 17 coding agents,
and covers 34 languages; the site reports 33,000+ installs. 12 MCP tools: run_pipeline
plus eleven specialized ones. Pricing: Starter free (2,000 nodes, one repo, 20 counted calls a
day), Pro $19/mo (50,000 nodes, 3 repos), Team $29/user/mo (no node or repo cap), and a
self-hosted Enterprise SDK. Its headline benchmark: Claude Code running Claude Opus 5 with vexp
3.1.1 resolved 81.7% of SWE-bench Pro (597 of 731 tasks, run of 5 September 2026,
official Scale AI harness, $1.52 per task), with every session published.
- Tools:
run_pipeline(context search, impact analysis and memory recall in one call),verify_done,get_context_capsule,get_impact_graph,search_logic_flow,get_skeleton,index_status,workspace_setup,expand_vexp_ref,get_session_context,search_memory,save_observation(12 total) verify_donechecks the session’s changes before the agent says it is finished: parse errors, imports of names that no longer exist, dependents never touched. Free on every plan- <15s full index and <500ms P95 query latency (vendor-stated)
- Full-text and TF-IDF search, ranked by graph centrality; capsules stay within a token budget
- Session memory:
save_observationandsearch_memorykeep decisions across sessions; notes linked to a symbol flag themselves stale when the code changes - Intent detection adapts the search to the task (debug, refactor, modify): Pro and up
get_skeletonreturns signatures, docstrings and return types without bodies- SWE-bench Pro: 81.7% resolved (597 of 731) with Claude Opus 5, $1.52 per task, single run, 95% CI 78.7–84.3, vendor-run on the official harness with every session published
- Plan caps: Starter 2,000 nodes, one repo, 20 counted calls a day; Pro 50,000 nodes, 3 repos, 1,000 calls a day; Team no node or repo cap, 1,500 calls a day per seat
- Closed source (the npm package is marked UNLICENSED)
- Its published tool list has no dead-code or runtime-trace tool and no tabular-data layer
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 70+ languages (tree-sitter bundled, zero binary installs): YAML/Ansible, Razor/Blazor, SQL/dbt/SQLMesh, Erlang, Fortran, AL, Verse, and more
find_dead_code: confidence-scored with cascading chains and entry-point auto-detection; no Pro tierget_ranked_context+get_context_bundle: true token-budgeted retrieval with BM25, PageRank, fusion strategiesget_symbol_importance,get_repo_map,get_tectonic_map: PageRank centrality + 3-signal module topology- Opt-in hybrid BM25 + vector search via
search_symbols(semantic=true); bundled ONNX (all-MiniLM-L6-v2), sentence-transformers, Gemini, or OpenAI - AI summaries via 6 providers: Anthropic, Gemini, OpenAI-compat, MiniMax, GLM-5, OpenRouter (free model); circuit-breaker protection
get_changed_symbols,get_blast_radius(depth-scored),get_impact_preview,get_pr_risk_profile(Phase 7 runtime-aware: fuses static + production trace evidence)assemble_task_context(v1.105.0): task-aware single-call orchestrator. Direct counterpart to vexp'srun_pipeline: explainable intent classification (6 intents with matched keywords + confidence), per-entry source attribution, runtime evidence woven in, override hooks for forcing stages, end-to-end token budget. Free.- Architectural intelligence:
find_similar_symbols(consolidation clusters),get_group_contracts(cross-repo API surface),find_implementations(4-channel impl discovery),check_delete_safe(8-tier deletion preflight) - Cross-repo built-in:
get_cross_repo_map,cross_repo=trueon find_importers / get_blast_radius / get_dependency_graph. No repo or call caps; a local folder indexes up to 2,000 files by default, raised withmax_folder_files - Runtime evidence:
get_runtime_coverage,find_hot_paths,find_unused_paths. Phase 7 trace ingestion (OTel / SQL log / stack-frame log) index_filefor surgical reindex; Claude Code PostToolUse hook auto-triggers after every edit;watch-claudeauto-discovers worktrees- jDocMunch: section-level search across .md, .rst, .ipynb, HTML; jDataMunch: SQLite-backed tabular data MCP
- Source on GitHub, free for non-commercial use; 16,000+ tests; supply-chain integrity check at startup;
trusted_foldersallowlist
verify_done is a mechanical completion check with file:line evidence, which we don't
have as a single tool. Session memory with stale flags is a neat way to keep decisions tied to
the code. The VS Code extension lowers setup friction for IDE-bound users compared
to a raw MCP server configuration, and intent detection (debug, refactor, modify)
is packaged more simply than our plan_turn and assemble_task_context.
They have also published a full SWE-bench Pro run. If those matter most to you, vexp is worth trying.
jCodeMunch vs code-review-graph
code-review-graph
(v2.3.9, 18 September 2026) is an open-source MCP server that builds a persistent SQLite knowledge graph
using Tree-sitter, tracks changes incrementally, and surfaces blast-radius context to AI coding
assistants at review time. A single install command now auto-configures sixteen host
platforms, Codex, Claude Code, CodeBuddy, Cursor, Windsurf, Zed, Continue, OpenCode, Antigravity,
Gemini CLI, Qwen, Qoder, Kiro, GitHub Copilot (VS Code and CLI) and Hermes, and the graph updates
automatically on every file save and git commit. 32k+ GitHub stars as of 27 October
2026, one of the fastest-growing tools in this category. 30 MCP tools, MIT license. Published
benchmarks, re-captured 2026-08-02 at pinned SHAs: ~63× median per-question token
reduction across 6 real repositories (35× on Express to 358× on FastAPI, the largest corpus),
measured against a whole-corpus baseline. A second, differently shaped benchmark, full review context
versus the changed-file content of a commit, still reports ratios below 1× on small single-file edits.
They are two experiments, and the project says so in its own README.
- 30 MCP tools:
build_or_update_graph_tool,run_postprocess_tool,get_minimal_context_tool,detect_changes_tool,query_graph_tool,semantic_search_nodes_tool,traverse_graph_tool+ community detection / architecture / refactoring suite; a filter trims the surface in token-constrained environments - ~63× median per-question token reduction, 35× to 358× across 6 repos: published methodology, fixed seeds, pinned SHAs, deterministic CPU embeddings, re-captured 2026-08-02
- Blast-radius at 0.69 avg F1 / 0.55 avg precision over 13 commits. Recall reads 1.0, but their README calls that a circular graph-derived upper bound rather than “100% recall”, and the honest co-change mode currently predicts nothing and is not quoted. They flagged this against themselves
- Below-1× on small single-file Express changes: graph context exceeds raw file; acknowledged in their own benchmarks
- 5 built-in MCP prompt templates: review, architecture, debug, onboard, pre-merge
- D3.js interactive force-directed graph visualisation with edge-type toggles
- Community detection via Leiden algorithm + auto-generated Markdown wiki
- Architecture overview map with coupling warnings
- Test coverage gap detection embedded in blast-radius analysis
- Incremental re-index in ~2.5s for a two-file edit on a ~3,000-file repo via SHA-256 diff
- Multi-repo registry: search across registered repos
- 37 languages incl. Jupyter/Databricks notebooks: the surface has widened and now covers SQL, Terraform/OpenTofu structure, Ansible playbooks/roles/tasks, Elixir, Solidity and Vue/Svelte/Astro. Still absent: Razor/Blazor, dbt/SQLMesh, Erlang, Fortran, AL, Verse, GraphQL, OpenAPI, and generic YAML is deliberately not treated as source. A
languages.tomlescape hatch maps any grammar intree_sitter_language_packwithout a fork - No documentation/data layer (no .md/.rst/.ipynb section search, no schema exploration)
- No named per-symbol retrieval: context is always blast-radius sets, not individual symbols
- No token-budget parameter on retrieval; no PageRank/centrality ranking; no runtime evidence
- MRR 0.35 on keyword search; flow detection 33% recall outside Python repos (acknowledged)
- 90+ MCP tools across the suite
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 70+ languages: YAML/Ansible, Razor/Blazor, SQL/dbt/SQLMesh, Erlang, Fortran, AL, Verse, GraphQL, OpenAPI, and more
- Named per-symbol retrieval:
get_symbol_source,get_symbol_diff,get_context_bundle. Read exactly what you need, nothing more get_ranked_context: token-budgeted retrieval with BM25, PageRank, and fusion strategies (the budget knob code-review-graph doesn't expose)assemble_task_context(v1.105.0): task-aware single-call orchestrator. Direct counterpart to code-review-graph'sget_minimal_context_tool: explainable intent classification (review intent runsget_changed_symbols+ blast + risk + similar-changed clusters in one call), per-entry source attribution, override hooks, end-to-end token budget.get_blast_radiuswith depth-scored risk + per-hopimpact_by_depth+has_test_reach;get_changed_symbolsmaps a git diff to affected symbols;get_pr_risk_profilewith Phase 7 runtime-aware scoringfind_dead_code+find_similar_symbols(consolidation clusters) +get_untested_symbols+check_delete_safe(deletion preflight with 8-tier verdict) +find_implementations(4-channel impl discovery) +get_group_contracts(cross-repo API surface)get_tectonic_map: 3-signal community detection (imports + shared refs + git co-churn) vs. their Leiden-only approach;get_repo_mapfor PageRank-ranked overview- Runtime evidence:
get_runtime_coverage,find_hot_paths,find_unused_paths. Phase 7 trace ingestion (OTel / SQL log / stack-frame log) - Opt-in hybrid BM25 + vector search via
search_symbols(semantic=true); bundled ONNX, sentence-transformers, Gemini, or OpenAI - AI summaries via 6 providers with circuit-breaker;
suggest_queriesfor unfamiliar repos;audit_agent_configfor stale-reference detection - jDocMunch: section-level search across .md, .rst, .ipynb, HTML; jDataMunch: schema exploration, drift, data hotspots
- 5 MCP prompt templates: workflow, explore, assess, triage, trace
- 16,000+ tests; supply-chain integrity check at startup;
trusted_foldersallowlist
render_diagram
for static output but not interactive WebGL/force-directed graphs.
Their 16k-star trajectory (roughly 4× growth in 2026) is real adoption momentum and worth
respecting. If your primary workflow is PR-scoped code review with visual graph exploration rather
than open-ended codebase exploration, code-review-graph's commit-centric design is a closer fit.
jCodeMunch vs cymbal
cymbal
is a Go CLI for code symbol navigation. It parses your repo with tree-sitter,
stores symbols, imports and references in a local SQLite/FTS5 database, and answers queries in roughly
10-40ms on its benchmark corpus. Its hooks steer agents to call cymbal instead of Read,
Grep or Glob. v0.17.0 (23 September 2026) is current. Recent releases added changed
(maps a git diff to the symbols it touches and their impact), a body_hash on every
symbol so an agent can tell whether one changed, and --graph output (Mermaid, DOT,
JSON) for trace/impact/importers/impls.
The core commands (search, show,
refs, importers, impact, context,
outline) map closely to jCodeMunch's search_symbols,
get_symbol_source, find_references, find_importers,
get_blast_radius, get_context_bundle, and
get_file_outline. The main difference is delivery: cymbal is a command the agent
runs in a shell; jCodeMunch is an MCP server. cymbal is a single Go binary with no Python runtime.
- tree-sitter AST → SQLite/FTS5 index; ~10-40ms for most queries on their 11-repo benchmark corpus
- Named on-demand symbol retrieval:
cymbal show <symbol> - Call graph traversal:
cymbal trace(down) +cymbal impact(up, callers split production/test, depth cap 5);--graphmode emits Mermaid/DOT/JSON changedmaps a git diff to changed symbols and their impact;structurefor entry points / hotspots / central packages;implsfor implementers;difffor symbol-scoped git diffsinvestigateadaptive single-call command; batch mode (cymbal investigate Foo Bar Baz)- Go binary: no Python runtime; Homebrew / AUR / PowerShell / Docker /
go install - Freshness: checks for changed files (mtime+size) before every query and fails rather than answer from a stale index. No watch daemon
- 20 parseable languages; per-OS cache index (
~/.cache/cymbal/repos/<hash>/index.db); fully offline - One-line agent-hook install and uninstall for OpenCode and Claude Code; reminder snippets for Cursor, Windsurf, Cline, Continue, Zed, aider and Codex
- CLI: the agent runs it as a shell command; not an MCP server. Also usable as a Go library
- FTS5 keyword search only; no vector/embedding layer
- 17 commands; no doc section search, no dead code detection, no rename/delete-safety preflight
- Native MCP server (stdio, SSE, streamable-http): tools appear directly in Claude, Cursor, Windsurf, Zed, Continue
- 90+ tools covering symbol retrieval, session context, architectural health, data-layer exploration, and doc search
- Opt-in BM25 + vector hybrid search (
embed_repo): 4 embedding providers; FTS5 when disabled - 70+ languages incl. YAML/Ansible, Razor/Blazor, SQL/dbt, Erlang, Fortran
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
find_dead_code,get_hotspots,get_churn_rate,audit_agent_config- Refactoring preflight:
check_rename_safe,check_delete_safe,find_similar_symbols,get_group_contracts - Per-agent installer with uninstall + status (v1.105.1):
jcm install claude-desktop/install --list/install-status --json/uninstallwith scoping flags (--keep-claude-md, etc.); preserves user-authored hook rules on uninstall render_diagramemits Mermaid for any graph tool- jDocMunch for section-level doc retrieval; jDataMunch for tabular data
pip install jcodemunch-mcp: works in any MCP-compatible client
--json on request). As an MCP server, jCodeMunch's tools sit in the agent's
tool list with typed parameters and structured results, with no shell call in between.
Which suits you depends on your agent and how much you want running in the background.
On benchmarks: cymbal's harness (v0.13.5, 11-repo corpus, 29 May 2026) reports 113/113 accuracy checks, 79/79 ground-truth passes at 100% search precision/recall, and focused investigations that typically use 40-100% fewer tokens than comparable grep-driven flows. jCodeMunch's figure is 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark, scripted on express, fastapi and gin at pinned commits and counted with the cl100k tokenizer. The two use different baselines and tasks, so the numbers aren't directly comparable. Both projects publish their benchmark harnesses.
investigate for one-call exploration, changed for diff-scoped impact,
--graph output and one-line agent hooks.
jCodeMunch adds an MCP server, 70+ languages against 20, optional hybrid semantic search, and 90+ tools including dead code detection and refactoring preflight (
check_rename_safe, check_delete_safe,
find_similar_symbols), plus a published per-lookup token benchmark.
If you want those, jCodeMunch fits. If you want one binary with no Python
runtime and your agent is happy running shell commands, cymbal is worth a look.
jCodeMunch vs Context+
Context+ is a TypeScript MCP server that transforms
codebases into searchable, hierarchical feature graphs for AI coding assistants. It combines
tree-sitter AST parsing (43 file extensions), embedding-based semantic search via Ollama (default)
or any OpenAI-compatible endpoint (OpenAI, Gemini free tier, Groq, vLLM), spectral clustering,
and Obsidian-style wikilink hubs. Its run_static_analysis
that delegates to native linters/compilers (TypeScript, Python, Rust, Go) for unused-variable
and type-error detection, and a one-line CLI init writes the MCP config for Claude Code, Cursor, VS Code, Windsurf
and OpenCode. Bundles shadow restore points for undo without git involvement and a six-tool
memory graph for RAG-style cross-session knowledge. 1,986 stars and 169 forks as of
28 October 2026. The repository's package.json says 1.0.9 (no release tags); npm serves 1.0.8,
and the last commit was on 13 July 2026.
- 43 file extensions via tree-sitter; AST extraction with embedding-based search
- Spectral clustering groups semantically related files into navigable clusters
- Obsidian-style wikilink hubs connect features to code locations
get_blast_radiusand call-site tracing for impact analysisrun_static_analysisdelegates to native linters/compilers (TS, Python, Rust, Go): requires those toolchains installed- Shadow restore points: undo changes without git involvement;
propose_commitis the only write path - Memory graph with RAG:
upsert_memory_node,search_memory_graph,retrieve_with_traversal(6 memory tools) - Multi-provider embeddings: Ollama (default) or OpenAI-compatible (OpenAI, Gemini free tier, Groq, vLLM). Fully offline only with Ollama
- CLI init for 5 IDEs (Claude Code, Cursor, VS Code, Windsurf, OpenCode);
skeleton/treeCLI for terminal use without MCP - Describes itself as built for developers who “demand 99% accuracy”; the repo publishes no accuracy or token benchmark
- 17 tools total; no doc section search, no churn/hotspot analysis, no refactoring preflight
- 70+ languages via tree-sitter, including YAML/Ansible, Razor/Blazor, SQL/dbt, Erlang, Fortran
search_symbols+get_symbol_sourcereturn exact implementations, not graph summaries- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
find_importers,find_references,get_blast_radiuswith depth-scored risk andhas_test_reachfind_dead_codewith confidence scoring from the index; no native linter required- Refactoring preflight:
check_rename_safe,check_delete_safe,find_similar_symbols,find_implementations get_hotspots;get_churn_rate;audit_agent_config;get_pr_risk_profile- Opt-in BM25+vector hybrid search with 4 embedding providers: works fully offline with BM25 alone
get_ranked_context+assemble_task_contextassemble token-budgeted context bundles ranked by BM25 + PageRank- CLI init for 5 IDEs (same coverage as Context+) via
jcm install <agent>+uninstall+install-status(v1.105.1) - jDocMunch for section-level doc retrieval; jDataMunch for tabular data exploration
- 90+ tools covering symbols, context, architecture health, session analytics, runtime traces, and cross-repo maps
propose_commit) that jCodeMunch intentionally excludes as a read-only tool.
upsert_memory_node, create_relation,
retrieve_with_traversal) gives agents persistent, cross-session knowledge that
survives context compaction. jCodeMunch doesn't offer that. The spectral clustering
and wikilink hubs provide a "feature map" view of a codebase that is useful for orientation.
The shadow restore points are a creative alternative to git stash for quick undo.
run_static_analysis
and the choice of embedding providers (Ollama / OpenAI / Gemini free tier / Groq /
vLLM) are useful. It suits teams that want whole-codebase navigation and knowledge that
persists between sessions.
jCodeMunch offers 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark, 70+ languages, 90+ tools, token-budgeted retrieval, dead-code detection from the index (no native linter needed), refactoring preflight (
check_rename_safe / check_delete_safe /
find_similar_symbols), architectural health metrics,
and a fully offline mode with no embedding service at all.
If you want precise code retrieval with broad language and tool coverage,
jCodeMunch fits. If you want graph-based navigation with persistent cross-session
memory, Context+ is worth evaluating.
jCodeMunch vs Axon: Knowledge-Graph Code Intelligence
Axon
indexes codebases into a KuzuDB knowledge graph with community detection (Leiden algorithm),
execution flow tracing, and hybrid search (BM25 + vector + fuzzy). It also ships an interactive
web dashboard with force-directed graph visualization at localhost:8420, and exposes
seven MCP tools. Python, JavaScript and TypeScript (3 languages via tree-sitter). 815 stars as of
28 October 2026; v1.0.1 (9 March 2026) on PyPI as axoniq. Its pyproject.toml
declares MIT; the repository has no LICENSE file.
- KuzuDB graph backend (Neo4j optional) with a read-only Cypher console: powerful for ad-hoc exploration
- Leiden community detection auto-discovers architectural clusters
- Execution flow tracing: detects entry points, traces BFS paths from each
- Multi-pass dead code with Protocol conformance and override awareness
- Hybrid search (BM25 + 384-dim vector + Levenshtein) fused via RRF
- Interactive web UI (Sigma.js + WebGL): force-directed graph, health dashboard, Cypher console
- Python, JavaScript, TypeScript only: 3 languages total
- Dependencies include kuzu, igraph, leidenalg, fastembed, fastapi and uvicorn; Python 3.11+
axon_detect_changesmaps a git diff to affected symbols and flows;axon diffcompares branches symbol by symbol- No token-budgeted retrieval, no doc search, no cross-repo tracing
- Claims token efficiency from fewer tool calls; publishes no token benchmark
- 70+ languages (incl. YAML, Razor, SQL/dbt, Erlang, Fortran)
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 90+ tools: blast radius, hotspots, coupling metrics, tectonic plates, signal chains, refactoring planner
- Signal chain discovery: traces gateway-to-leaf pathways with rich labels (POST /api/users, cli:seed-db)
- Tectonic map: 3-signal fusion (structural + behavioral + temporal) community detection
- Token-budgeted retrieval: get_ranked_context packs results into a token budget
- Doc section search via jDocMunch (.md, .rst, .ipynb, HTML)
- Cross-repo dependency tracing via get_cross_repo_map
- Claude Code hook integration (PreToolUse/PostToolUse auto-reindex)
- Lightweight: pure Python, SQLite-backed, no graph database dependency
The web dashboard is a real differentiator for developers exploring code visually: force-directed graphs, community hull overlays, a health and coupling dashboard, and the Cypher console. Its dead code analysis is aware of overrides, protocols and decorators, and its watch mode re-runs file-level phases on save and batches the global ones every 30 seconds. If your team is Python/JS/TS-only and wants a visual exploration layer alongside MCP, Axon is worth trying.
jCodeMunch covers 70+ languages, publishes 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark, offers 90+ tools including signal chain discovery (our counterpart to execution flow tracing, with gateway labels and tectonic plate integration), and needs no graph database. If you need broad language support and a large tool set, jCodeMunch fits. For Python/JS/TS teams that want a visual graph dashboard, Axon is a credible choice.
jCodeMunch vs SocratiCode: Enterprise Vector Code Intelligence
SocratiCode indexes codebases into Qdrant vector collections (per branch, if you turn that on) with AST-aware chunking via ast-grep (18+ languages, line-based fallback elsewhere). It combines dense vector + BM25 retrieval via Reciprocal Rank Fusion, with local Ollama by default and OpenAI, Gemini, LM Studio or LiteLLM as options. v1.16.1 (15 October 2026) ships native plugins for Claude Code, OpenAI Codex, VS Code and Cursor, a VS Code editor extension (Marketplace and Open VSX), and direct MCP setup for Gemini CLI, OpenCode and others. It adds a polyglot dependency graph with circular-dep detection, symbol-level impact analysis, call-flow tracing, an interactive HTML graph viewer, cross-process locking so several agents can share an index, and resumable batched indexing. Its README says it has been used on repositories of around 40 million lines. Sister project JanuScope (MCP governance proxy) and SocratiCode Cloud (private beta: SSO, audit, VPC/air-gap) extend the offering. 3,356 stars as of 28 October 2026; AGPL-3.0, or a commercial license.
- Per-branch separate Qdrant vector collections: true branch isolation (opt-in via
SOCRATICODE_BRANCH_AWARE=true) - Hybrid search: dense vector + BM25 sparse, fused via RRF; 6 embedding providers
- AST-aware chunking via ast-grep for 18+ languages (line-based fallback for others)
- Polyglot dependency graph with circular-dep detection; Mermaid diagram output
- Symbol-level impact analysis + call-flow tracing across 18 languages
- Interactive HTML graph viewer (webview in VS Code extension)
- Multi-agent shared index via
proper-lockfilecross-process locking (single lock scope; holder identity not surfaced cross-process) - Resumable batched indexing: checkpoints every 50 files, survives crashes/restarts
- Cross-project/repo search across linked codebases (
.socraticode.json) - Native plugins: Claude Code, OpenAI Codex, VS Code, Cursor; VS Code editor extension (Marketplace + Open VSX); direct MCP for Gemini CLI, OpenCode and others
- Sister projects: JanuScope (MCP governance proxy) + SocratiCode Cloud (private beta. SSO, audit, VPC/air-gap)
- Self-reported: 61% less context, 84% fewer tool calls, 37× faster than grep-based exploration on VS Code (2.45M lines), run live with Claude Opus 4.6
- Docker required for default zero-config mode (auto-managed); external Qdrant + native Ollama optional
- AGPL-3.0, or a commercial license for use in proprietary products without AGPL obligations
- No dead code detection, no refactoring preflight, no churn/hotspot analysis
- Their benchmark is a live agent session against grep-based exploration; ours scripts single lookups, so the two aren't directly comparable
- 70+ languages (incl. YAML, Razor, SQL/dbt, Erlang, Fortran)
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 90+ tools: blast radius, hotspots, coupling metrics, tectonic plates, signal chains, refactoring planner, PR risk profile
- Refactoring preflight:
check_rename_safe,check_delete_safe,find_similar_symbols,find_implementations - Token-budgeted retrieval:
get_ranked_context+assemble_task_contextpack results into a token budget - Dead code detection from the index, with confidence scoring and cascading chain analysis
- Runtime trace ingestion (OTel / SQL logs / stack traces) layered onto static signals
- jDocMunch for section-level doc retrieval; jDataMunch for tabular CSV/Excel exploration
- Zero Docker, zero external databases: pure Python, SQLite-backed, pip install
- One-click install via
jcm install <agent>(5 IDEs) +uninstall+install-statusverbs (v1.105.1) - Multi-process shared index (v1.106.0): two lock scopes (watcher + indexwrite), holder identity surfaced via
get_watch_status.watcher_holder={pid, client_id, started_at, age_seconds}. Agents see when a parallel session is live and why our watcher is idle - Claude Code hook integration (PreToolUse/PostToolUse auto-reindex)
- Cross-repo dependency tracing via
get_cross_repo_map+get_group_contractswith stability scoring - Dual-use license: free for non-commercial use, a one-time paid license for commercial use; no copyleft
Per-branch vector collections give complete branch isolation with no index composition overhead at query time. Qdrant is a well-proven vector store, and the choice of embedding providers (local Ollama through Gemini and LiteLLM) is flexible. The distribution is polished: native plugins for Claude Code, Codex, VS Code and Cursor, an editor extension with a graph webview, and plain MCP setup for other hosts. Cross-process locking lets parallel agents share one index. If your team already runs Docker and wants vector search with branch isolation, SocratiCode is a credible option.
jCodeMunch covers 70+ languages, publishes 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark, installs with pip and needs no Docker or external database, and has 90+ tools including refactoring preflight (
check_rename_safe, check_delete_safe,
find_similar_symbols), dead-code detection, runtime trace ingestion,
multi-process shared-index coordination with holder identity surfaced through
get_watch_status, and the jDocMunch + jDataMunch sister servers. Its license
is not copyleft.
If you want deep analysis tooling with nothing extra to run, jCodeMunch fits.
If you already run Docker on very large repos and want resumable vector indexing, polished
plugins and an enterprise governance and cloud story, SocratiCode is worth evaluating.
jCodeMunch vs Octocode: Rust-based Structural Code Intelligence
Octocode
(by Muvon) is a Rust CLI and MCP server that combines semantic search, structural search and a
live graph of symbols and dependencies. Tree-sitter parses 16 languages (Rust, Python, TypeScript / JavaScript, Go, PHP, C / C++, Ruby, Elixir, Java, Swift, Svelte, Lua, plus CSS, JSON, Bash and Markdown).
The live graph records containment, imports, calls, inheritance and implementations from current
source, with no index or LLM needed; an optional indexed layer adds file-level relationships and
AI descriptions. Structural search finds definitions, usages and AST patterns (e.g. every
.unwrap() call). Indexed search is hybrid (vector + BM25, with optional reranking)
across code, documentation and commit history. Embeddings and reranking run on local FastEmbed
models by default; Voyage AI, OpenAI, Jina, Google and others are optional. Optional LSP tools add
definitions, references and hover from a language server. Apache-2.0, 518 stars and v0.29.0
(28 October 2026). LanceDB is embedded: no Docker, no external database.
- Live graph from current source: containment, imports, calls, inheritance, implementations; optional indexed layer adds file-level relationships such as
usesandconfigures - Structural AST pattern search: find every
.unwrap(), everynewinstantiation, etc. in current source, no index needed - 16 languages via tree-sitter (Rust, Python, TypeScript / JavaScript, Go, PHP, C / C++, Ruby, Elixir, Java, Swift, Svelte, Lua, plus CSS, JSON, Bash and Markdown)
- MCP tools:
semantic_search,structural_search,view_signatures,graphrag, plus optionallsp_*tools from a language server - Hybrid vector + BM25 search over code, documentation and indexed commit history, with optional reranking
- Local FastEmbed embedding and reranking models by default (no API key); Voyage AI, OpenAI, Jina, Google and others optional
- LanceDB embedded; no Docker, no external vector database. The MCP server doesn't update the index by default: run
octocode watchor enable in-process indexing - Published retrieval benchmark: 127 code queries, Hit@10 0.835 / MRR 0.572 at best (v0.17.1, 21 June 2026, local models); they mark it historical, not a measure of the current release
- Apache-2.0: permissive, commercial use fine
- Rust binary: single executable, no Python runtime; separate OctoFS server for file editing
- No dead-code detection, no refactoring-preflight tooling (no
check_rename_safe/check_delete_safeequivalents) - No churn / hotspot / coupling metrics; no PR-risk profile; no runtime-trace ingestion
- Benchmark axis is retrieval quality (Hit@10 / MRR), not token cost, so not directly comparable to jCodeMunch's per-lookup token figure
- 70+ languages vs. 16 (incl. YAML / Ansible, Razor / Blazor, SQL / dbt, Erlang, Fortran)
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 90+ tools (Octocode's MCP surface is four core tools plus optional LSP tools)
- Refactoring preflight:
check_rename_safe,check_delete_safe,find_similar_symbols,find_implementations - Dead-code detection from the index, with confidence scoring + cascading chains + entry-point heuristics
- Hotspots, churn, coupling metrics, tectonic plates, signal chains, PR risk profile
- Runtime trace ingestion (OTel / SQL logs / stack traces) layered onto static signals
- Token-budgeted retrieval:
get_ranked_context+get_context_bundlepack results into an explicit token budget - Sister suites: jDocMunch for section-level doc retrieval (heading hierarchy, byte-precise offsets), jDataMunch for tabular CSV / Excel / Parquet
- Multi-process shared index (v1.106.0): two lock scopes (watcher + indexwrite), holder identity surfaced via
get_watch_status.watcher_holder - Claude Code hook integration (PreToolUse / PostToolUse auto-reindex);
jcm install <agent>auto-configures 5+ IDEs - Cross-repo dependency tracing (
get_cross_repo_map,get_group_contracts) with stability scoring
The live graph and structural AST search work on current source with no index at all, in a single Rust binary. Structural pattern search (find every
.unwrap(), every new instantiation) is useful and rare in this space.
Local embedding and reranking models by default mean no API key and nothing leaves the
machine unless you configure a remote provider. The benchmark ships with ground truth, scoring
scripts and reproduction steps, and they say plainly that it is historical. LanceDB embedded
means no Docker and no external services. Apache-2.0 is permissive. For teams who want a
Rust-based MCP server with structural search and a live graph, and don't need 70+ languages
or refactoring-preflight tooling, Octocode is a credible choice.
jCodeMunch covers 70+ languages against 16, publishes 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark, and has 90+ tools including refactoring preflight (
check_rename_safe, check_delete_safe,
find_similar_symbols, find_implementations),
dead-code detection, hotspots / churn / coupling metrics, PR risk
profile, runtime-trace ingestion, token-budgeted retrieval
(get_ranked_context), multi-process shared-index
coordination, and the jDocMunch + jDataMunch sister servers for doc-section
retrieval and tabular data.
If you want broad language coverage, token-budgeted retrieval and refactoring
preflight, jCodeMunch fits. If your stack is in Octocode's 16 languages and you want
structural search and a live graph in a Rust binary, Octocode is worth evaluating.
jCodeMunch vs Repomix (by yamadashy)
This comparison on its own page
Repomix packs your entire repository into a single AI-friendly file (XML, Markdown,
or plain text) and hands it to the model in one shot. It works in the
“dump the codebase to the LLM” category, with 29,000+ stars (28 October 2026),
JSNation Open Source Awards 2025 nominee (Powered by AI category), browser
extensions for Chrome and Firefox, a hosted website at repomix.com, a community
VS Code extension, an official three-plugin Claude Code marketplace
(repomix-mcp, repomix-commands, repomix-explorer),
and one-click MCP install URLs. v1.18.1 (September 2026) is current; v1.14.0 delivered a 2.4×
perf overhaul (3.3s → 1.4s on its own repo, ~58% pack-time reduction).
Its --compress mode uses tree-sitter to strip function bodies and keep
signatures; v1.14.0+ also ships --skill-generate for Claude Agent
Skills output, --include-logs / --include-diffs for git
history in the pack, and --stdin for piped file lists. The MCP server
now has 8 tools across its two modes (6 by default), including grep_repomix_output (regex
search inside the pack), read_repomix_output with line-range
partial reads, and two sandbox-mode-only filesystem readers, meaningfully softening the “every prompt re-ships the
pack” criticism. Still pack-and-prompt at its core, but with selective retrieval
bolted on after the pack exists.
npx repomixemits a single AI-friendly file containing the entire codebase (XML / Markdown / Plain Text)--compressuses tree-sitter to strip bodies and keep signatures (~70-90% size reduction)--include/--ignoreglobs; respects.gitignore+.repomixignore;--stdinaccepts piped file lists fromfind/fd/fzf/ripgrep--include-logs/--include-diffsembed git history + working-tree diffs in the pack--skill-generateemits Claude Agent Skills format under.claude/skills/<name>/; v1.14.0 adds monorepo-aware per-package tech-stack detection--remote yamadashy/repo/ branch URL / commit SHA;--remote-trust-configopt-in for remote config execution (security fix in v1.13.0)- Secretlint integration scrubs credentials before packing; v1.13.0 brought
npm auditto 0 vulnerabilities - MCP server with 8 tools (6 by default):
pack_codebase,pack_remote_repository,attach_packed_output(reuse existing pack),generate_skill,read_repomix_output(line-range partial reads),grep_repomix_output(regex search with context lines),file_system_read_file,file_system_read_directory(the two file readers only under--sandbox, which turns off the remote-pack, skill and attach tools) - Distribution polish: Chrome + Firefox extensions, VS Code Marketplace community extension (Repomix Runner), hosted web UI at repomix.com, official Claude Code plugin marketplace with 3 plugins (mcp / commands / explorer), one-click MCP install URLs, Discord community, DeepWiki
- v1.14.0 perf: ~58% pack-time reduction via gpt-tokenizer (replaced WASM tiktoken), pipeline parallelization, lazy CLI dispatch
- ✗ No AST symbol graph: grep is regex over packed text, not symbol-aware (`find_references`, call hierarchy, blast radius all unavailable)
- ✗ The pack is the unit of work; selective retrieval is after-the-fact slicing, not a query-driven index
- ✗ No incremental index: re-running on a changed repo re-packs (mitigated by
attach_packed_outputif you can reuse a recent pack)
- AST-extracted symbols indexed once;
get_symbol_sourcereturns one function body per call, not the whole repo - SHA-256 incremental indexing;
index_filere-parses one file in milliseconds; multi-process shared index (v1.106.0) coordinates concurrent agents on the same repo find_references,find_importers,get_blast_radius,get_call_hierarchy: symbol-aware graph tracing Repomix cannot do (regex on text doesn't know "imports" vs "references")- 70+ languages with custom parsers (Razor/Blazor, Erlang, Fortran, dbt SQL) where tree-sitter is incomplete
- 90+ MCP tools covering retrieval, architecture health, refactoring preflight (
check_rename_safe/check_delete_safe/find_similar_symbols), session analytics, runtime trace ingestion - Token-budgeted retrieval (
get_ranked_context,assemble_task_context): agent says "top symbols within 4k tokens for this query" and the tool packs to fit - jDocMunch for section-level doc retrieval; jDataMunch for tabular CSV/Excel exploration
jcm install <agent>(v1.105.1) one-click for Claude Code / Cursor / Windsurf / Continue / Claude Desktop; v1.107.0 adds--skillsto emit a Claude Agent Skill bundle (loaded on demand instead of always-on baseline policy)- v1.108.0
index_folder(paths=[...]): agent re-indexes exactly the files git just touched (or any explicit list / subdir set) without paying the cost of a full-tree walk.jcodemunch-mcp index . --paths-from -composes withgit diff --name-only/rg/fd - v1.108.0: monorepo intelligence:
list_workspacesenumerates pnpm / yarn / npm / turborepo / lerna / rush / Go-workspaces / Cargo-workspaces members;get_project_intel(scope_path=...)answers "what is this package?" instead of repo-wide aggregates - ✗ No bulk “here is everything” pack: one-shot pack-and-prompt is a different operating mode
grep_repomix_output + read_repomix_output
let agents slice into an existing pack rather than re-shipping it, which is a real
improvement over older versions. But it's still slicing into a packed text file,
not querying a symbol-aware index: regex matches don't know which hits are
definitions, which are call sites, and which are unrelated comments. jCodeMunch
optimises for the agent loop: thousands of small symbol-aware retrievals across a
long session, with structural relationships (importers, references, blast radius)
that text grep cannot compute.
For multi-turn agent loops with thousands of small retrievals, jCodeMunch's symbol-aware index adds structural relationships (`find_references`, `find_importers`, `get_blast_radius`, `get_call_hierarchy`) that regex over packed text cannot compute, refactoring preflight (`check_rename_safe` / `check_delete_safe` / `find_similar_symbols`) that requires a graph not a grep, runtime trace ingestion that requires symbol identity, and the v1.106.0 multi-process shared index for parallel agents on the same repo. Use Repomix for one-and-done prompts and quick architectural reviews; use jCodeMunch for any multi-turn agent workflow that benefits from symbol-aware retrieval and graph relationships.
jCodeMunch vs codebase-memory-mcp (by DeusData)
This comparison on its own page
codebase-memory-mcp is the closest peer to jCodeMunch in this comparison: an MCP
server that indexes a repo into a persistent knowledge graph, claims aggressive
token reduction, and ships as a one-command install. It compiles 162 vendored
tree-sitter grammars into a single static C binary, adds LSP-style hybrid type
resolution for twelve languages (Python, TS/JS/JSX/TSX, PHP, C#, Go, C, C++, Java,
Kotlin, Rust, Perl), and exposes 17 MCP tools including Cypher-like graph queries,
dead-code detection, and HTTP route ↔ call-site linking. A single install
command covers 45 automatic and conditional client surfaces.
- 162 vendored tree-sitter grammars compiled into the binary; no runtime install
- LSP-style hybrid type resolution for twelve languages: Python, TS/JS/JSX/TSX, PHP, C#, Go, C, C++, Java, Kotlin, Rust, Perl (clean-room reimpl of tsserver / typescript-go, pyright, gopls, Roslyn, Eclipse JDT, rust-analyzer)
- CALLS, IMPORTS, IMPLEMENTS, INHERITS, DATA_FLOWS, SIMILAR_TO, SEMANTICALLY_RELATED edges
- HTTP, gRPC, GraphQL, tRPC cross-service route linking; channel detection (Socket.IO, EventEmitter)
- Bundled Nomic-embed-code embeddings (768d int8) compiled into the binary: semantic search with no API key
- Cypher-like queries:
MATCH (f:Function)-[:CALLS]->(g) RETURN g.name - 3D graph-visualisation UI (optional UI variant)
installcovers 45 client surfaces: Claude Code, Codex, Gemini, Zed, OpenCode, Aider, Antigravity, KiloCode, VS Code, OpenClaw, Kiro and more; conditional clients activate only when their marker or config path is present
- 70+ languages including ones tree-sitter does not cover natively (Razor/Blazor, Erlang, Fortran, dbt SQL with Jinja preprocessing, COBOL, Pascal, Ada)
get_ranked_context: query-driven token-budgeted assembly (BM25 + PageRank + identity boost)plan_refactoring: edit-ready rename/move/extract/signature-change plansget_symbol_provenance: full git archaeology per symbol with semantic commit classificationget_pr_risk_profile: composite risk score fusing blast radius, complexity, churn, and test gapswatch-claude/watch-all: auto-watch every Claude Code worktree; one-command login-service install- jDocMunch pairs natively for section-level doc retrieval (.md / .rst / .ipynb / HTML)
- Six-axis health radar +
get_pr_risk_profile+ observatory pipeline for cross-repo benchmarking - 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
jCodeMunch vs CodeGraph (by colbymchenry)
This comparison on its own page
CodeGraph is a TypeScript MCP server that ships a pre-indexed knowledge graph to
Claude Code: designed specifically to short-circuit the Explore-agent loop.
It builds a SQLite + FTS5 graph of symbols, relationships, callers/callees, and
framework-aware route nodes (17 frameworks, from Django and Flask through Express,
Laravel, Rails, Spring, Gin, Axum, ASP.NET, Vapor, React Router and SvelteKit). Its
headline benchmark is striking, and was re-measured on 2026-08-05 against the current
build on Claude Opus 4.8: across 7 real-world codebases, at the median of 4 runs per
arm, Explore-agent sessions used 88% fewer tool calls, ran 53% faster, spent 62% fewer
tokens and cut file reads to zero on all seven. The harness blocks the codegraph
CLI in both arms and reports 0 of 28 contaminated without-arm runs.
- SQLite + FTS5 graph; filewatcher uses native OS events (FSEvents / inotify / ReadDirectoryChangesW) with debounced auto-sync
codegraph_explorereturns entry points + related symbols + code snippets in one call: designed to replace Claude Code's Explore agent, and since the surface trim it is the only tool listed by defaultcodegraph_callers/codegraph_callees/codegraph_impactfor impact analysis: unlisted by default, re-enabled withCODEGRAPH_MCP_TOOLSor called from the CLI- Framework-aware route nodes:
routenodes linked byreferencesedges to handler classes/functions across 17 web frameworks - 34 languages: TS, JS, ArkTS, Python, Go, Rust, Java, C#, PHP, Ruby, C, C++, Objective-C, Metal, CUDA, Swift, Kotlin, Scala, Dart, Svelte, Vue, Astro, Liquid, Pascal/Delphi, Lua, R, Luau, CFML, COBOL, VB.NET, Erlang, Solidity, Terraform/OpenTofu, Nix, 20 of them in the native Rust kernel
npx @colbymchenry/codegraph: interactive installer auto-configures Claude Code's MCP entry + auto-allow rules- ✗ Full-text only: no semantic / embedding search
- ✗ No doc section search
- Hybrid BM25 + semantic vector search (opt-in); bundled ONNX, local sentence-transformers, Gemini, or OpenAI embeddings
get_ranked_context: query-driven token budget; BM25 + PageRank + identity boostplan_refactoring: rename / move / extract / signature-change plans with edit blocksget_pr_risk_profile: composite risk score for branch/PR review- jDocMunch for section-level doc retrieval;
get_project_intelfor Dockerfiles, CI, K8s, compose, .env templates - 70+ languages including dbt SQL (Jinja preprocessed), Razor/Blazor, Erlang, Fortran, COBOL, Pascal, Ada
- Multi-host: Claude Code, Cursor, Windsurf, Codex, Continue, not Claude-Code-specific
- Public observatory (jcodemunch-observatory) tracks 11 popular OSS repos weekly with six-axis health scores
jCodeMunch vs SigMap (by manojmallick)
SigMap
takes a different angle: it builds a deterministic, auditable map of a codebase's signatures
(no LLM calls, no embeddings, byte-stable output) and ranks files for a query with TF-IDF, writing
compact signatures to a .context file the agent can read. Its MCP server adds 22 tools
(a seven-tool core profile), including line-range reads, per-symbol blast radius and a check that
grounds an AI answer against real signatures. Its generated benchmark (capture
sigmap-v8.85-main) reports 92.8% against a 39.2% single-shot grep baseline
(125 tasks, 19 repos), 80.4% hit@5 on an 18-repo retrieval corpus, and 56.7% hit@5 on a third-party
corpus of 35 repos it doesn't control. v8.85.0, 645 stars, MIT, as of 28 October 2026.
npx sigmap ask "Where is auth handled?"ranks files by TF-IDF and writes signatures to.context/query-context.mdsigmap validateconfirms the right files are in scope;sigmap judgescores answer groundedness;sigmap weightslearns from solved tasks- Zero npm dependencies; standalone binaries (macOS arm64/x64, Linux x64, Windows x64) with SHA-256 checksums
- Adapters write to host-specific files:
CLAUDE.md,.cursorrules,.windsurfrules,.github/copilot-instructions.md,AGENTS.md,.github/openai-context.md,.github/gemini-context.md - Editor integrations: VS Code, Cursor, Windsurf, JetBrains, Neovim;
sigmap mcp installfor Claude Code, Cursor, Continue and Codex - Benchmark numbers are generated from
benchmarks/latest.jsonrather than hand-typed; scripts, tasks and raw data are public. They flag a known defect in the April Zenodo snapshot and point tobenchmarks/reports/as the current record - MCP tools include
get_lines(line ranges),get_method_impact(per-symbol blast radius),get_callee_signatures,get_diff_context,get_architecture_overview(modules, hub files, cycles) andverify_suggestion - ✗ The map holds signatures; implementations come back as line ranges rather than named symbol bodies
- ✗ TF-IDF only: no semantic embeddings
get_symbol_sourcereturns the exact body, not just the signature- Hybrid BM25 + semantic vector search (opt-in); semantic_weight tunable; local / Gemini / OpenAI embeddings
find_references,find_importers,get_blast_radius,get_call_hierarchyfor reference and call tracingget_ranked_context: query-driven, token-budgeted symbol assembly (not just file ranking)- 70+ languages including dbt SQL with Jinja preprocessing, Razor/Blazor, Erlang, Fortran
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
plan_refactoring,get_pr_risk_profile,get_symbol_provenancefor refactoring, review and code history- jDocMunch pairs for section-level doc retrieval (.md, .rst, .ipynb, HTML)
- ✗ No
judge/validate/weightstask-feedback loop: SigMap's adaptive ranking is interesting and particular to its approach
get_symbol_source returns
a named symbol's body, and the graph tools trace references, importers and callers from there.
judge / validate
/ weights feedback loop is unusual. It scores answer groundedness
and learns ranking weights from successful tasks, and sigmap verify checks the
files, scripts and imports an AI answer names. jCodeMunch's tune_weights
learns from a ranking ledger but does not ask the agent for outcome feedback.
Its benchmark reporting is careful: generated numbers, a third-party corpus with a confidence
interval, and plain labels on what a figure does not measure.
jCodeMunch vs trace-mcp
This comparison on its own page
trace-mcp
(Nikolai Vysotskyi) is a TypeScript/Node MCP server: MIT, 198 GitHub stars and v3.42.1 as of 29 October 2026,
AST-first via tree-sitter, SQLite + FTS5 with optional bundled ONNX embeddings, read-only on source. Its index
lives in ~/.trace/ (~/.trace-mcp/ on older installs), and the command is now trace.
It sends an anonymous usage ping: at most one per day per install, carrying a random install id, version, Node
major and OS platform, opt-out via TRACE_MCP_TELEMETRY=off. That’s disclosed in the README, and
worth knowing before it goes into a regulated environment. It starts from the same idea as jCodeMunch: give the
agent a structured index of the code instead of whole files. Two features stand out. get_request_flow
traces an HTTP request route→middleware→controller→service→view, with cross-language bridges (e.g.
Inertia::render('Users/Show') linking PHP→Vue). And mine_sessions pattern-matches agent
session logs for architecture decisions and stores them, so query_decisions can search them and
get_change_impact can show them. It has 182 tools and loads language and integration plugins by
project detection; the README lists 81 languages and 7 ORMs.
get_request_flowtraces route→middleware→controller→service→view, with cross-language prop mapping- Integration plugins for frameworks, ORMs and view layers, loaded by project detection; a new stack gets a new plugin
mine_sessionsextracts decisions from agent session logs (no LLM calls) and stores them;query_decisionsandget_change_impactsurface them- 182 MCP tools; per its comparison page (read 2026-10-26) the default
minimalpreset shows up to 29 and loads the rest on demand - Publishes a PR-review benchmark: 72.7% fewer input tokens, median over 60 merged PRs in six repos it doesn’t own
- TypeScript, MIT, read-only on source; tree-sitter AST + FTS5 + optional ONNX embeddings; very active
- Request flow:
get_signal_chainsfinds route registrations by call shape (Djangopath()/re_path(), Express/Fastify/Koarouter.get(p, h), Flaskadd_url_rule, Railsto:, and decorator routes), resolves each to its handler symbol as a typedroute->handleredge with a confidence, then follows the AST call graph from each handler. An unresolved handler is reported as unresolved, not dropped get_endpoint_impactuses the same edges for “what breaks if I change GET /users”. The edges are computed per query, not stored in the index, and an unusual registration shape is missed until a shape is added- Decision context:
get_blast_radius/get_impact_preview(opt-ininclude_decisions) show reverts, perf rewrites, refactors and root-cause fixes mined from git history, read at query time with nothing written - Front door: with
tool_surface=counterthe server advertises six tools;order,menuandroutedo the work.order()arguments are validated server-side against the target tool’s schema: a bad argument is refused with the schema error before the tool runs, and an unknown one is ignored and named in_meta.ignored_arguments plan_refactoringreturns index-scoped, word-boundary edit blocks (old_text/new_text) for the agent to apply; it does not AST-verify the result- 70+ languages, symbol retrieval, semantic search, dead-code detection, and jDocMunch for docs
jCodeMunch vs SDL-MCP (Symbol Delta Ledger)
SDL-MCP
is a TypeScript/Node MCP server (Node.js 24+, tree-sitter parsing with an optional native indexer)
built on an embedded graph database: 496 stars and v0.13.7 as of 28 October 2026, pre-1.0, with one
maintainer. Source-available: the community license allows use and modification, including internal
business use; a commercial license is needed to sell, bundle, embed or distribute it in a monetized
product. It covers much of the same ground as jCodeMunch: compact Symbol Cards, an escalation ladder
(the “Iris Gate Ladder”) from cards to skeletons to policy-gated source windows, budgeted
graph slices, delta/blast-radius analysis, PR risk analysis, opt-in memory and usage stats. It also
does two things jCodeMunch doesn't: it writes (sdl.file.write,
sdl.symbol.edit, sdl.search.edit) and it executes
(sdl.runtime.execute), under policy gates. That is a different product philosophy,
and a different risk class.
- Embedded graph database enables true multi-hop graph queries; dependency-weighted retrieval via BFS/beam search; optional vector embeddings for hybrid search
- Symbol Cards + an escalation ladder (cards, skeletons, hot paths, policy-gated source windows): the same tiered-retrieval shape as jCodeMunch’s outline→summary→source path
- Tool surface modes: 38 flat tools, a 6-tool gateway, or a 7-tool Code Mode; stdio or HTTP transport
- Live overlay of unsaved editor buffers, and SCIP / language-provider facts for precise cross-references where a provider covers the file
sdl.pr.risk.analyzepackages change evidence and test recommendations for PR review; opt-in development memories- Mutates and executes:
sdl.file.write, symbol-scoped and search-based edits, andsdl.runtime.execute, governed by policy gates - Tree-sitter grammars for about a dozen languages; pre-1.0; custom source-available license (commercial license required to distribute or embed in a monetized product)
- Read-only by charter: no write tool and no execution runtime. Policy gates govern a risk; a retrieval server that cannot write or execute doesn't carry it
- The read-only claim is machine-checkable: every retrieval tool ships an MCP
readOnlyHintannotation (v1.108.110), so a client can see they change nothing; Codex’swritesapproval mode, for example, prompts only for tools not marked read-only. - Compiler-verified references without a live integration:
import-scip(v1.108.96) ingests the SCIP index your CI already produces (offline, deterministic, nothing executed) andfind_referencessurfaces the references only the compiler saw - Lean tool surface, same idea:
tool_surface=counter(v1.108.66) collapses the catalog behind a six-tool front door built on three verbs (order/menu/route) with a read-only charter gate on every dispatch. Fits 50-tool caps - An open spec, not just a product: the jMRI retrieval-interface spec (Apache 2.0) makes the contract inspectable and implementable by anyone; SDL-MCP’s surface is defined by its own code
- 70+ languages; deterministic SQLite storage (no graph-DB operational surface, no embedding drift by default); runtime evidence via
import-trace, compile-time viaimport-scip: both honest about staleness - Post-1.0 releases, plus doc (jDocMunch) and data (jDataMunch) companions under one suite boundary
import-trace) and
compiler-emitted SCIP indexes (import-scip), rather than from running anything itself. Both
products consolidated their tool surfaces the same way (their gateway mode, our Counter), and both read
SCIP; the difference is that theirs is a live subsystem inside a mutating server, ours is an offline,
auditable import into a server that cannot mutate. For a security review, that is the main line to
look at: one product governs a write and execute surface, the other doesn't have one.
jCodeMunch vs TokenSave
TokenSave
is a Rust MCP server (tree-sitter over 50+ languages, libSQL/SQLite storage), MIT-licensed, 681 stars and
v7.16.0 as of 28 October 2026. It is a close architectural sibling of jCodeMunch: symbol-level retrieval,
100% local, “fewer tokens, fewer tool calls,” and no background daemon (on-demand staleness
checks instead). It is a ground-up Rust rewrite of CodeGraph and ships as a single native binary; its
README reports a full index 26× faster than CodeGraph on a 1,782-file repo. It adds two things
jCodeMunch deliberately does not: per-branch code graphs with cross-branch diff, and edit
primitives (str_replace, ast_grep_rewrite) that change your files and
re-index them. Same lane, one write line apart.
- Native Rust binary; tree-sitter over 50+ languages in three feature tiers; subprocess-isolated extraction so a grammar crash skips one file, not the run
- Agrees with the grounded-symbolic thesis: local, deterministic, token-framed. No embedding-RAG requirement, no hosted backend, no background service
- Multi-branch (opt-in): a separate code graph per git branch, with cross-branch diff/search without switching your checkout. Useful, and something jCodeMunch does relationally (git refs) rather than as persistent per-branch databases
- Per-call token metrics in an append-only savings ledger, dollar estimates, and a live
monitorTUI;tokensave benchpublishes 88% mean retrieval savings over 10 queries on its own repo and reruns on yours - Mutates code:
str_replace/multi_str_replace/insert_at/ast_grep_rewriteedit primitives with auto-reindex. A write surface, not a read-only one - 80+ tools across discovery, call-graph, code health (Gini, dependency depth, DSM, complexity), edit, git, porting and cross-branch; read tools carry
readOnlyHint; MIT
- Read-only by charter, machine-checkable: no edit primitives; every tool ships an MCP
readOnlyHint(v1.108.110), so a client can see they change nothing; Codex’swritesapproval mode, for example, prompts only for tools not marked read-only - Structural analytics in one call:
get_architecture_metricsfolds Gini concentration + Lakos dependency depth + DSM back-edges into a single tool;get_decorator_censuscensuses every@route/@Injectable/ annotation cross-language;get_parity_mapis correspondence-aware migration parity (rename-aware, divergence-flagged) with a dependency-ordered port plan. A read-only answer to their edit-driven porting - Outcome measurement:
get_delivery_metricsandreceiptfollow tokens → dollars → durable change, so you can see cost per outcome as well as tokens saved - Tool-surface discipline:
tool_surface=countercollapses the catalog behind a six-tool front door built on three verbs (order/menu/route). Fewer tool definitions loaded into each session than an 80-tool surface - A suite, not a monolith: code (jCodeMunch) + docs (jDocMunch) + data (jDataMunch) + cross-repo, vs code-only; plus the open jMRI interop spec (Apache 2.0)
- 70+ languages; deterministic SQLite; evidence imported not generated: git history, runtime traces (
import-trace), compiler SCIP indexes (import-scip), all honest about staleness
jCodeMunch vs Atelier (now LemonCrow)
Update: Atelier’s repository now redirects to lemoncrow-lab/lemoncrow. The two projects are one current codebase, covered in the LemonCrow entry below. This entry is preserved as written because it holds the benchmark rerun and its receipts, which the LemonCrow entry builds on. Details below describe Atelier as it shipped at the time of the rerun; the current product is LemonCrow.
Atelier
was an open-core “context runtime” for coding agents: FSL-1.1-ALv2 engine (Apache-2.0 SDKs and docs),
local-first CLI + MCP server, SCIP-indexed code intelligence, lexical + semantic (BGE embedding) code search,
model routing, cost tracking, and a supervised write/exec layer (edit / codemod /
shell / sql). It competes on the same grounded-retrieval thesis jCodeMunch is built on,
then adds a mutating runtime jCodeMunch deliberately omits. It also published a public benchmark scoring
jCodeMunch at 0.299 MRR against its own 0.727, so this entry does something the others don’t: it reruns
that benchmark on Atelier’s own data.
- SCIP-indexed code intelligence: search, callers/callees, outlines, and ranked code search with lexical + semantic (BGE) tiers
- Supervised
edit/codemod/shell/sql: a runtime that mutates and executes on the repo - Model routing, cost tracking, prefix-cache diagnostics, failure rescue, loop detection, and auditable run ledgers
- Headline claim ~30% cheaper / +12pp solved on SWE-bench Verified (self-reported): the token-cost lane, measured on agent-loop spend
- Alpha; FSL-1.1-ALv2 engine (no competing use; converts to Apache-2.0 after two years); macOS / Linux
- Read-only by charter: jCodeMunch never writes, spawns a shell, or runs SQL against your repo. Atelier’s edit/shell/sql runtime is exactly the line jCodeMunch won’t cross, for security and auditability
- Same-benchmark rerun: on Atelier’s own 12 repositories, own gold queries, and own file-level MRR, jCodeMunch scores 0.583 overall (table below), not the 0.299 headline Atelier published over its full repo set, linux included
- Ranked retrieval via
get_ranked_context(BM25 + PageRank) plus opt-in BM25+vector; 70+ languages; on-demand per-symbol retrieval - A code + doc + data suite (jDocMunch / jDataMunch) behind one grounded-retrieval charter, with an open interop spec
- Adaptive tool surface (
tool_surface=counter) keeps the agent’s tool budget lean instead of shipping a mutating runtime
bench_pairs_*_gold.json), and its own
file-level MRR, changing only which jCodeMunch tools the harness is allowed to call, jCodeMunch scores 0.583
on the 12-repo subset in the table below, not the 0.299 headline Atelier published over its full repo set
(linux included). Our reproduction of Atelier’s exact configuration lands within 0.018 MRR of their published figures
across 36 repo×kind cells, so the harness is faithful. Two mechanics in the original run may have unintentionally
misrepresented what jCodeMunch returns:
- The scorer read the wrong lines. jCodeMunch answers in a compact format that lists file
aliases (
@1=path) above its ranked results. The harness scraped that alias table, in declaration order, as if it were the ranking: ignoring the actual relevance-ranked rows below. Reading jCodeMunch’s real result order (the same tool, same output) lifts definition retrieval from 0.416 to 0.701. - The ranked-retrieval tool was withheld. Natural-language questions (58% of the queries) were
answered with literal keyword search only; jCodeMunch’s
get_ranked_contextwas never called. Using it (with no embeddings, just BM25 + PageRank) moves semantic retrieval from 0.084 to 0.383, level with Atelier’s own BGE embedding tier (0.398).
Mean Reciprocal Rank on Atelier’s benchmark, recomputed over the identical 12 repos × 3 retrieval kinds. Higher is better; 1.000 = the right file ranked first.
| Retrieval kind | jcm, as Atelier ran it | jcm, run fairly | Atelier lexical | Atelier +semantic |
|---|---|---|---|---|
| definition | 0.416 | 0.701 | 0.873 | 0.710 |
| content | 0.711 | 0.703 | 0.886 | 0.843 |
| semantic | 0.084 | 0.383 | 0.593 | 0.398 |
| Overall | 0.380 | 0.583 | 0.772 | 0.633 |
Every column recomputed over the same 12×3 subset. Excludes torvalds/linux (a 30M-line C repo whose 0.038 dominates the 0.299 headline) and atelier/atelier (an unpinned local checkout). jcm run with zero embeddings: a conservative floor.
jCodeMunch vs LeanCTX
LeanCTX
is a local Rust engine that now describes itself as a “context gateway” for AI systems: 3,902 stars
as of 28 October 2026 (created March 2026), v3.11.4. The public engine is Apache-2.0; enterprise controls are
licensed separately. It operates on two planes, and only one of them is the lane jCodeMunch is in.
On the read path it does very much what we do: tree-sitter AST across 27 languages, a
property graph carrying calls/imports/exports/type_ref
edges, BM25 and embeddings fused by reciprocal rank with graph proximity, incremental git-diff updates.
That is a serious retrieval stack. On the wire path it does
something we have deliberately never built: an opt-in proxy in front of the model provider that
intercepts and rewrites supported requests (system prompt, full history, tool results), plus shell
output compression with hundreds of passthrough rules. Its current README no longer leads with a savings
percentage (we previously quoted its 50-80% “where compression applies”); where it saves
tokens, much of it comes from that second plane, not the first.
- Hybrid retrieval, BM25 + embeddings fused by RRF with graph proximity, is strong, and on open-ended “find me the thing that does X” questions it may well beat a symbol-first retriever
- Compresses tool results and shell output in transit, so savings apply to every tool in the session rather than only to its own responses
- Budgets, profiles, per-agent throttling and secret scrubbing at the send boundary
- Local-first Rust engine, Apache-2.0 public tree (enterprise controls licensed separately), a very fast release cadence, session memory and a local savings ledger
- The cost of the wire plane is trust surface: a proxy that rewrites requests reads every prompt, every history and every tool result you send
- We are not in the request path. jCodeMunch answers a tool call and returns. It never sees your system prompt, never sees your conversation history, never rewrites anything in flight. For a regulated buyer that is not a feature comparison, it is a shorter security review
- Read-only by charter: not a configuration, a design constraint we have refused feature requests over
- Exact source, byte for byte. Lossy compression is a real technique with a real failure mode: what it drops, it drops silently, and the agent cannot know what it did not receive. A retriever that returns the file’s actual bytes has no such mode
- The savings are auditable per call: every response carries its own
tokens_saved, andjcodemunch-mcp surface --jsonre-measures the tool-surface cost on demand - Doc and data companions (jDocMunch, jDataMunch) for the corpora a code retriever should not be pretending to model
jCodeMunch vs LemonCrow
LemonCrow
is a runtime and code-review tool for AI coding agents (v0.8.0, 19 October 2026; 72 stars). Atelier’s
repository now redirects here. Its headline product is AI review of your own changes, locally or as a GitHub
Action. Its Runtime Lite gives Claude Code, Codex and OpenCode a local tool set that stands in for the
host’s own: code_search (exact symbols plus lexical, path and import-aware search),
read, edit, bash, relations/graph and
scan/codemod/blame. Runtime Lite leaves out embeddings and vector
search; semantic and hybrid retrieval belong to the Hosted and Enterprise paths, and a Pro plan is the access
tier for Hosted Runtime. The local product is Apache-2.0. Same grounded-retrieval thesis jCodeMunch is built on,
wrapped in a runtime that edits and runs: a different product philosophy, and a different risk class.
An earlier version published a comparison scoring jCodeMunch at 0.299 MRR; its current README and
BENCHMARKS.md no longer include a jCodeMunch row.
- Local
code_searchover exact symbols plus lexical, path/name and import-aware search;relations/graphfor repository relationships and the import map - Replaces the agent’s core tools: its
read,editandbashstand in for the host’s. Adopting LemonCrow means adopting its runtime, not adding a capability to yours - Writes and executes: verified local file edits, bounded command execution,
codemod - AI code review of your own changes, local or hosted, with a GitHub Action; publishes a 50-PR code-review benchmark with each row’s source linked
- SWE-bench Verified (50 tasks × 5 reps, self-reported): 29.5% lower cost, 37.7% fewer turns, 92.8% resolved vs an 80.8% baseline, with a SWE-bench Lite run where it scored 2 points lower shown alongside
- Local product Apache-2.0; semantic/hybrid retrieval and a Pro plan on the hosted side; pre-1.0
- Read-only by charter: no write tool and no execution runtime. LemonCrow bounds and verifies its edit and command surface; a retrieval server that cannot write or run code doesn't have one
- The read-only claim is machine-checkable: every retrieval tool ships an MCP
readOnlyHint(v1.108.110), so a client can see they change nothing; Codex’swritesapproval mode, for example, prompts only for tools not marked read-only - The numbers are machine-checkable too: every published figure carries a
basis: measured | declaredprovenance tag (v1.108.138+), and every measured claim chains to a committed artifact that CI recomputes from the source data on each run. A drift in the numbers fails the build. A prior is never presented as a measurement - Add-on, not a runtime swap: jCodeMunch plugs into any MCP host and leaves the agent’s own
read/edit/bashuntouched. You gain retrieval without handing editing or execution to another stack - Grounded in the index: jCodeMunch answers from the current index and the durable git record. Evidence stronger than static analysis is imported (
import-scipcompiler indexes,import-traceruntime signal), never generated by running your code - An open spec, not just a product: the jMRI retrieval-interface spec (Apache-2.0, no non-compete) is inspectable and implementable by anyone; plus a code + doc + data suite (jDocMunch / jDataMunch) covering docs and data as well as code
@1=path), in declaration order, as if it were the ranking, and jCodeMunch’s
ranked-retrieval tool (get_ranked_context) wasn’t called on the natural-language queries. That
harness also installed a jCodeMunch build over a hundred releases old, and its token/latency row called the
repo-summary command (digest) in place of a retrieval query. None of this reads as deliberate.
LemonCrow’s current README and BENCHMARKS.md no longer include a jCodeMunch row.
jCodeMunch vs zvec-grep
zvec-grep
(zg) describes itself as “Local-first search across your workspace, built for humans and AI agents”
(repository description, read 2026-09-07). It puts ripgrep, BM25 and vector search over one workspace index stored under
<root>/.zvec-grep/, and exposes it through a CLI, an MCP server, and one-command installs into Claude
Code, Codex, OpenCode, Qwen Code and Qoder. It comes from the zvec-ai org behind the zvec vector database;
TypeScript on Node.js 22 or newer, Apache-2.0, created 2026-07-10.
On 2026-09-07 the repository showed 3,124 stars and 168 forks, with 23 open issues, and
npm @zvec/zvec-grep
listed 0.2.2, published that day. On 2026-10-28 it showed 4,199 stars and 251 forks, and npm still listed 0.2.2. Every zvec-grep statement on this page is one of their claims or a public metadata read,
dated; none of it is a result we produced.
- Chunks code with structure awareness for seven languages (C/C++, Go, Java, JavaScript, TypeScript, Python, Rust), keeping “Symbols, signatures, breadcrumbs, and surrounding source” (
docs/04-pipeline.md); Markdown by heading section, everything else as plain-text chunks - One MCP tool by default:
zvec_grep_search; six in the full toolset (rg,index,index_drop,index_status,server_status). Results are a path plus a line range and context, and “Indexed source previews are omitted unless requested” (docs/04-pipeline.md), up to 50 items per query group - Eleven local embedding models, “downloaded on first use and cached under
~/.zvec-grep/models” (docs/07-embedding.md); remote providers optional. Nothing is bundled, so the first index needs the network once --mode directruns in-process with no daemon; the defaultautouses a server only when one is already running, and the daemon starts only onzg server on(docs/06-server.md). Index freshness reportsfreshorpossibly_stale- Their shipped agent guidance points work away from the tool where it does not help: “Agents use native grep or rg when locating an exact word, quotation, name, date, key, filename, path, source fragment, or regex is sufficient” (
docs/03-mcp.md)
- Different unit of answer. jCodeMunch extracts symbols with tree-sitter across 79 languages (the
languages.registry_minFloor inharness/thresholds.json, set 2026-09-03) and answers with symbol rows: signature, file, line. zvec-grep indexes chunks across seven languages and answers with ranked text hits plus context. Two representations, each better at a different question - Relationships are the argument for the larger surface.
find_references,find_importers,get_blast_radius,get_call_hierarchy,find_dead_codeandget_pr_risk_profileanswer “what breaks if I change this”, which ranked text retrieval does not reach. zvec-grep documents no such tool - Tool surface, stated plainly: theirs is smaller. One tool by default against jCodeMunch’s six-tool Counter front door (
order/menu/routeand three helpers) and a 90-tool full surface. In clients that load every tool schema up front, the Counter’s schemas come to 945 tokens against the full surface’s 23,928, a 96.1 % reduction (tiktokencl100k_base, v1.108.388, shipped defaults); hosts that defer MCP tools, Claude Code among them, load schemas only when they’re needed. One tool is still fewer than six, and the reader can weigh that against the relationship tools behind them - Freshness contract. jCodeMunch is tri-state,
fresh/stale/unknown, and refuses to certify an absence while the index is stale or unknown. zvec-grep reportsfresh/possibly_stale. Both publish the state; the contracts differ in what they decline to assert - Both are local, and neither needs an account. Both can run on a local embedding model: zvec-grep downloads one on first use, jCodeMunch’s semantic channel is off until a repo is embedded. Theirs is Apache-2.0; jCodeMunch is free for non-commercial use with a paid commercial license
benchmarks/swe-qa-bench/README.md, read 2026-09-07) puts 20
retrieval-intensive tasks over 11 repositories through Claude Code 2.1.212 on Claude Opus 5 at high reasoning effort,
comparing a baseline where “Claude Code uses its standard tools” against the same agent given a prepared index
over MCP. Of everything on this page, that is the closest in shape to jCodeMunch’s own Baseline B, the tool
against the agent’s built-in tools rather than against a synthetic ceiling, and they ran it themselves on a
current agent. Two things keep the protocols apart. Their answers are scored by an LLM judge, where jCodeMunch’s
Baseline B counts tiktoken cl100k_base tokens on a fixed workflow. And their treatment profiles ran on
qwen/qwen3.7-text-embedding, a remote model, where jCodeMunch’s retrieval loop calls no model at all.
Their README states no figure in prose and publishes the result as an image, so no number of theirs appears on this page.
They also publish a BrowseComp-Plus run, which is a web-retrieval benchmark rather than a code one. They name no
competitor anywhere, jCodeMunch included.
For contrast, and against a different question: on our benchmark, 15 lookups (5 each on express, fastapi and gin at pinned commits, cl100k), jCodeMunch (one symbol search, then the source of the top 3 matches) returned 96.2% fewer tokens than a scripted grep-and-read baseline (search the query terms, read the top 3 matching files), counted with the cl100k tokenizer (benchmarks/). That is a scripted task set, not a result against zvec-grep, and it should not be read as one.
docs/competitive/FIELD.md);
no measurement yet. This entry updates when the run exists, and cites its result file then. Until then everything
above is either a capability difference or a dated read of their public sources, and there is no winner to declare.
What can be said now: the two tools answer different questions over the same repository. Ranked text evidence
when the target location is unknown, symbol rows and relationship edges when the question is what depends on what.
zvec-grep’s own guidance already routes exact-string work back to grep, which is the same instinct
that keeps search_text next to search_symbols in jCodeMunch’s surface.
jCodeMunch vs repowise
repowise is a Python code-intelligence tool with an MCP server, a local dashboard and a PR bot. From the code and its git history it builds a call graph across 28 languages, symbol-level blast radius, risk and health scores, dead code and test impact, with no LLM calls and no API key. A generated wiki for every module is part of it, rendered from the code's structure or written by a model if you turn that on. As of 28 October 2026 it serves 10 MCP tools by default plus 7 opt-in, has 8,034 GitHub stars and is at v0.59.0 on PyPI. It overlaps jCodeMunch more than this page used to say: both index code locally and give agents symbols, callers and blast radius.
get_overview,get_answerandget_contextanswer codebase questions with citations;get_answercombines full-text and vector search with graph expansionget_symbolreturns one symbol's source with exact line bounds- Call graph across 28 languages;
get_riskandget_change_riskgive symbol-level blast radius, co-change partners and test gaps - Graph, risk, health, tests and dead code make no LLM calls; model-written docs are opt-in with your own provider
- Their benchmark: 3.8 tool calls instead of 7.2 and 31.6% less agent output on 43 django questions on Codex, with method in their
docs/BENCHMARKS.md - Local dashboard (the UI needs Node 20+) and a PR bot
- ✗ AGPL-3.0: a modified version offered as a network service must be released under AGPL
- AST-extracted symbols with byte offsets; no LLM in indexing or retrieval
get_symbol_sourcereturns the exact implementation- Incremental re-indexing when files change
find_importers,find_references,get_blast_radius: AST-level import graph- 70+ languages; no LLM API key required for indexing or retrieval
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- ✗ No dashboard, health scores or PR bot: repowise has those
jCodeMunch + Odysseus
Odysseus
is a self-hosted AI workspace (chat, agents, deep research, persistent memory, email,
calendar) that runs in Docker and points at whatever model you bring (Ollama, vLLM,
llama.cpp, OpenRouter). It is not a jCodeMunch alternative; it is an MCP host,
the kind of place jCodeMunch plugs into, the same way Claude Code or Cursor do. It even ships
its own built-in MCP servers, including a rag_server (embedding-RAG over your
files) and a memory_server. AGPL-3.0; 94.6k GitHub stars as of 28 October 2026.
rag_server is
embedding similarity over your files, while jCodeMunch is deterministic, symbol-level retrieval that returns exact
implementations and answers structural questions embeddings can't (who imports this, what
breaks if I change it, blast radius, dead code). So you don't choose between them: run
Odysseus as your model-agnostic workspace, and point its agents at jCodeMunch over SSE for
structured retrieval its rag_server can't do. Because every jCodeMunch tool is
read-only and named get_* / search_* / find_* /
check_*, the whole suite stays usable inside Odysseus's plan mode. Setup is in
the jCodeMunch README
under “Works with” (community-tested: the MCP round-trip is verified; the
container-to-host dial depends on your Docker networking).
jCodeMunch vs RTK: Rust Token Killer
This comparison on its own page · caveman vs Ponytail vs RTK vs Headroom vs jCodeMunch
RTK is a Rust CLI proxy that intercepts shell command output (pytest, cargo test, git diff, and file reads through cat or rtk read) and compresses it before it reaches the AI's context. It claims 60-90% fewer tokens on common dev commands across 100+ supported commands (their figures; 84.9k stars, v1.1.0, read 28 October 2026).
- Hooks into 18 AI coding tools (PreToolUse or equivalent); the hook fires on Bash tool calls, not on the agent's built-in Read, Grep or Glob
- Strong on test runners, git, package managers and linters; single Rust binary, <10ms overhead (their figure), zero dependencies
- The CLI is free: an Apache-2.0 edition (hooks and filters) or Apache-2.0 + BUSL-1.1 (adds the compression engine); RTK Pro adds team observability
- Compresses what commands print, including file contents read through the shell; it doesn't index symbols or trace references
- Answers "where is authenticate()?" without reading a single source file
- Symbol index persists across sessions: no re-reading on restart
- Structured MCP tool responses: agent gets typed results, not filtered text
- Import graph, reference tracing, file outlines all in one index
- jDocMunch handles the documentation side (RTK has no equivalent)
- Does not compress terminal output: that is RTK's lane
RTK cuts the noise from commands the agent runs (
git status, pytest, docker logs).
jCodeMunch cuts the noise from code the agent reads (get_symbol_source instead of whole files).
Using both addresses two separate sources of context bloat in a coding session.
jCodeMunch vs Context Mode
This comparison on its own page
Context Mode (github.com/mksglu/context-mode) is not a GitHub product: it's a
third-party MCP server by Mert Köseoğlu. It describes itself as "Context window
optimization for AI coding agents." It tackles a real problem: every
tool call in a long agent session dumps raw output (bash commands, log files, web
fetches, GitHub API responses) directly into the context window. Its README puts the
cost at 40% of your context after 30 minutes. Context Mode runs commands and scripts
in sandboxed subprocesses so only stdout reaches the model, indexes large output
into a local SQLite FTS5 store, and exposes a ctx_search tool so the
model queries results instead of receiving raw blobs. Hooks route the agent to those
tools and record session events, so work survives a compaction. Its own figure:
315 KB of raw output becomes 5.4 KB over a session, and session time goes from
~30 minutes to ~3 hours. It now ships for 17 clients, including Claude Code,
Cursor, Codex CLI, Gemini CLI, Kiro, and Zed.
ctx_executeruns code in 12 languages inside an isolated subprocess: only stdout enters context- "Think in Code": the agent writes a script that reads the files and prints the answer, instead of reading the files itself
- SQLite FTS5 index with BM25 ranking, Porter stemming, trigram matching merged by RRF, and Levenshtein typo correction
- PreCompact hook captures session state into a priority-tiered XML snapshot (≤2 KB); SessionStart restores it after compaction
- Routing is hook-enforced where the client has hooks. Its README reports ~60% compliance on clients that rely on an instruction file alone
- 17 clients supported, with different hook coverage on each
- README states no telemetry, no cloud sync, and no account. A separate
ctx-insightcommand opens a hosted dashboard at context-mode.com - No AST parsing and no symbol index: source files are text to it, the same as logs and web pages
- Structured symbol extraction: the agent calls
search_symbols+get_symbol_source. The symbol's source enters context, not the whole file - 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- 70+ languages with AST-level understanding, not text search over raw bytes
search_symbols(fuzzy=true): trigram Jaccard + Levenshtein fallback withmatch_type,fuzzy_similarity, andedit_distancefields; no FTS5 requiredfind_importers,find_references: structural code navigation, not BM25 approximation- jDocMunch for documentation: the same philosophy applied to .md/.rst/.ipynb/OpenAPI files
- PyPI package, Python ≥3.10, zero external binaries
ctx_index chunks markdown by heading, which is jDocMunch's job.
The script route works when the question is a count or a grep. It has no index
behind it, so "who calls this function" means writing a new script each time and
trusting a text match.
jCodeMunch vs OpenViking (by Volcengine, ByteDance)
OpenViking (github.com/volcengine/OpenViking) is an open-source context database
for AI agents, built by ByteDance's Volcengine team: 41K stars and v0.5.2.1 as of 28 October 2026.
It brings agent memory, document retrieval (RAG) and skills together in one store, organised as a
virtual filesystem under viking:// rather than a flat vector database. Directories carry
generated summaries in three layers: L0 is a one-sentence abstract for a quick relevance check, L1 an
overview for planning, and L2 the full content, read only when needed. It runs as a server that agents
reach through hooks and MCP (Claude Code, Codex, OpenClaw and others), self-hosted or as a hosted service.
- L0/L1/L2 summary layers let the agent judge relevance before it loads full content
- Filesystem directory metaphor organises memories, resources, and skills into a navigable hierarchy
- Session management: compresses conversations and extracts long-term memories
- Model providers: Volcengine, OpenAI, Codex OAuth, Kimi, GLM or local Ollama
- Reports its own LoCoMo memory benchmark: 80-83% accuracy for three agent integrations, up from 24-57% on their native memory (their figures, run with Doubao models)
- Self-hosting needs uv, Python 3.10+ and a model provider with an embedding model and a VLM; a hosted Studio and a cloud service skip the install
- Main project AGPLv3; a licensed enterprise edition adds BYOC, offline and distributed deployment
- Structured symbol extraction: the agent queries
search_symbols+get_symbol_sourcerather than reading files - 70+ languages via tree-sitter AST, not text search, not LLM-driven; deterministic and reproducible
- No external LLM required; AI summaries are optional: core indexing and retrieval is pure local computation
pip installwith bundled tree-sitter grammars; no server or model provider to set up- jDocMunch: section-level retrieval across .md, .rst, .adoc, .ipynb, HTML, OpenAPI, XML
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Does not manage agent memory, learned facts, or cross-session agent state: that is OpenViking's lane. Both do document retrieval; jDocMunch works from section structure without a model
In multi-agent systems, OpenViking provides the persistent memory and skill library while jCodemunch + jDocMunch provide token-efficient access to the live code and documentation. They are complementary infrastructure at different layers, not alternatives to each other.
pip install
with no external services. Factor this in for CI/CD pipelines, ephemeral environments, or air-gapped deployments.
jCodeMunch vs ClawMem (by yoloshii)
ClawMem (github.com/yoloshii/ClawMem) is a local, on-device memory layer for AI agents, written in TypeScript on Bun: 213 stars and v0.43.5 as of 28 October 2026. It targets the same "agent amnesia" problem as OpenViking with a different approach: hybrid BM25 + vector search + cross-encoder reranking over a SQLite vault, on local GGUF models with no API keys (cloud embedding is optional). It ships an MCP server with 33 tools, Claude Code hooks (SessionStart, UserPromptSubmit, Stop, PreCompact), a native OpenClaw memory plugin and a Hermes Agent plugin. Memory types carry ranking half-lives: hubs and preferences never decay, decisions fade over 180 days, progress notes over 45 and handoffs over 30. It also infers causal links between facts from session observations.
- Hybrid search: BM25 keyword + vector semantic matching + reciprocal rank fusion + cross-encoder reranking
- Self-evolving memory (A-MEM): entity extraction, link generation and causal link discovery
- Typed ranking half-lives: hubs and preferences never decay, decisions 180 days, progress notes 45, handoffs 30; documents are deactivated, never deleted
- Cross-session continuity via automatic handoff generation at session end
- PreCompact hook saves the last request, decisions, file paths and open questions before compaction
- Native OpenClaw memory plugin and a Hermes Agent
MemoryProviderplugin, plus any MCP client - Requires Bun v1.0+ and three local models (default stack ~4 GB VRAM or in-process on CPU; best-recall stack ~13 GB); on Windows, WSL2 is recommended over native
- Fast-moving project (v0.43 as of 28 October 2026); API surface may keep changing
- Answers structural questions: "Where is this function?" "What imports this module?" "What symbols changed?"
- Tree-sitter AST extraction across 70+ languages: deterministic, reproducible, no inference required
- No GPU, no local model downloads, no Bun runtime:
pip install - Works on Windows natively (no WSL2 requirement)
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- jDocMunch: section-level retrieval across .md, .rst, .adoc, .ipynb, HTML, OpenAPI
- Does not store agent decisions, session history, or cross-session memory: that is ClawMem's domain
jCodeMunch vs mem0 (by mem0ai, YC S24)
mem0 (github.com/mem0ai/mem0) is a memory layer for AI agents and apps, backed by Y Combinator (S24), with 68K stars as of 28 October 2026. It keeps memory scoped to users, sessions and agents that persists across interactions. Integrations exist for LangGraph, CrewAI and other agent frameworks, and it ships plugins and skills for coding agents (Claude Code, Codex, Cursor and others). It comes as a self-hostable Python/TypeScript library and server under Apache 2.0, and as a managed platform with a free tier and paid plans from $19/month (read 28 October 2026).
- Multi-level memory: user-scoped preferences, session state, and agent-specific knowledge
- April 2026 algorithm: single-pass add-only extraction, entity linking, and semantic + BM25 + entity retrieval fused together
- Reports 92.5 on LoCoMo and 94.4 on LongMemEval at about 7K tokens per query (their figures, on the managed platform, which includes optimizations not in the open-source release)
- Python + TypeScript SDKs and a CLI; integrates with LangGraph, CrewAI, and other agent frameworks
- Claude Code plugin with hooks and an MCP server (uses a Mem0 Platform API key); skills for Codex, Cursor and others
- Requires an LLM (OpenAI gpt-5-mini by default) and an embedding model; other providers supported
- Self-hosted server runs as a Docker Compose stack, with auth on by default
- Managed platform: free tier, paid plans from $19/month, Pro at $249/month (read 28 October 2026)
- No external LLM required: tree-sitter AST parsing is pure local computation
- No vector database, no server stack, no infrastructure to manage beyond a
pip install - 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Works on Windows natively (no WSL2, no Docker, no managed service)
- 70+ languages via deterministic AST parsing, with no model in the loop
- jDocMunch: section-level retrieval across .md, .rst, .adoc, .ipynb, HTML, OpenAPI
- Does not store user preferences, personalization data, or cross-session interaction history: that is mem0's domain
pip install mem0ai) and the self-hosted server are free under Apache 2.0.
The managed platform has a free tier and paid plans (from $19/month; Pro $249/month, read 28 October 2026),
and its published benchmark scores come from the platform, which includes optimizations not in the
open-source release. Self-hosting is free; the running cost is the LLM and embedding calls it makes
and the server you operate.
pip install with no external services and no per-query model calls.
jCodeMunch vs LanceDB
LanceDB (github.com/lancedb/lancedb) is an open-source embedded vector database built on the Lance columnar format (Rust core). It handles multimodal data (text, images, video, point clouds, structured metadata) and delivers vector similarity search, full-text search, and SQL queries on the same table. It runs embedded (no server process) or as a managed cloud service. It is infrastructure: a storage and retrieval layer that other tools (memory layers, RAG pipelines) can use as their backend. 11.8K stars and v0.40.0 as of 28 October 2026.
- Embedded library: runs in-process, no server to manage; zero-copy architecture
- Vector similarity search + full-text search + SQL on the same table
- Multimodal: text, images, video, point clouds, structured metadata
- Automatic data versioning and schema evolution built in
- GPU support for building vector indexes; its README cites search over billions of vectors and petabytes of data
- Python, TypeScript and Rust SDKs plus a REST API; LangChain and LlamaIndex integrations
- Embeds through a registry of model integrations (OpenAI, Ollama, sentence-transformers and others): you bring the model, LanceDB calls it on ingest and query
- No code understanding, no AST parsing, no symbol extraction: code is raw text
- Tree-sitter AST extraction: understands code structure, not just text similarity
- Zero mandatory embedding infrastructure: works out of the box with no vector DB, no cloud account, no embedding budget
- Optional hybrid semantic search via
search_symbols(semantic=true): embeddings stored directly in the existing SQLite index; no separate vector store required - Exact symbol lookup by name: deterministic retrieval, with optional semantic ranking when needed
- Structured results: function signatures, qualified names, parent/child hierarchy, import graphs
- jDocMunch preserves document heading hierarchy: sections are navigated structurally, not just by cosine distance
- One pip install; add
[semantic]extra only if you want embedding search: no Rust toolchain, no external DB - Not a general-purpose data store: purpose-built for code and documentation, nothing else
pip install jcodemunch-mcp[semantic]),
embeddings stored directly in SQLite alongside the existing index, and exact structural retrieval
as the default. The tools that use LanceDB as a backend (memory layers, custom RAG
pipelines) sit at a higher layer than LanceDB itself and are closer comparisons to jCodeMunch.
jCodeMunch vs QMD
QMD (github.com/tobi/qmd) is an on-device CLI search engine for markdown notes,
meeting transcripts, documentation, and knowledge bases. It combines BM25 full-text search,
vector semantic search, and LLM re-ranking: all running locally via node-llama-cpp and GGUF
models. Collections are indexed once; search runs with qmd search (BM25, which its README calls fast),
qmd vsearch (semantic), or qmd query (hybrid + reranking, best quality).
It also exposes a native MCP server with five tools (query, get,
multi_get, status and metadata) over stdio or HTTP, plus a Claude Code
plugin and a Node/Bun library. 30.7K stars and v2.8.3 as of 28 October 2026.
A key feature is the context tree: hierarchical metadata attached to collections that gives
LLMs richer signals when selecting which documents to retrieve.
- Collections-based: index any folder of markdown files, meeting notes, or docs
- Three search modes: BM25 keyword (fast, per its README), vector semantic, hybrid + LLM reranking (best)
- Context tree: attach hierarchical metadata to collections for richer agent document selection
- Native MCP server: query, get, multi_get, status, metadata; stdio or a shared HTTP server; Claude Code plugin
- All local: node-llama-cpp with GGUF models and no cloud calls; semantic and reranking modes load models (a GPU helps)
- CLI-first:
qmd search,qmd vsearch,qmd query,qmd get - Built for prose: an optional AST chunking mode splits code files, but no symbol lookup, references or import graph is documented
- Requires a one-time embed step; re-run after adding new documents
- Tree-sitter AST parsing: understands code structure, not just text similarity
- Exact symbol lookup by name: deterministic, no approximate nearest-neighbor
- jDocMunch preserves document heading hierarchy: sections are navigated structurally, not by cosine distance
- No GGUF model, no VRAM required: works on any hardware; optional semantic search uses lightweight
sentence-transformersor a cloud API key, not a local inference server - Structured results: function signatures, qualified names, parent/child hierarchy, import graphs
- One pip install; no Node.js toolchain, no model download
- Not a general knowledge base tool: purpose-built for code repos and technical documentation
search_symbols(semantic=true)) uses lightweight sentence-transformers
or a cloud API key: no local inference server, no VRAM.
jCodeMunch vs Obsidian
Obsidian is a personal knowledge management (PKM) application built on local plain-text
markdown vaults. Notes link to each other via [[wikilinks]], forming a
navigable graph of ideas. It runs entirely on your device, supports thousands of community
plugins, and optionally syncs across devices via Obsidian Sync. It is a writing and thinking
tool for people, not an indexing library or an MCP server. Since version 1.12 it ships an official
CLI that can search and read notes from a terminal while the app is running; there is no official
MCP server, and community plugins and servers fill that gap. Where jDocMunch fits is here: Obsidian vaults
are ordinary folders of .md files, and jDocMunch can index them directly, making the vault's content searchable to AI agents at section granularity without any
Obsidian-specific tooling.
- Local markdown vault: plain
.mdfiles, no proprietary format lock-in - Bidirectional
[[wikilinks]]and graph view: navigate your knowledge visually - Canvas for infinite freeform brainstorming boards
- Thousands of community plugins for tasks, spaced repetition, Dataview queries, diagrams, and more
- Obsidian Sync: E2E encrypted cross-device sync ($4/user/month billed yearly, $5 monthly); Publish: web publishing ($8/site/month billed yearly, $10 monthly)
- Official CLI (1.12+): search, read and create notes from a terminal; it drives the running app
- No official MCP server; community plugins and servers give agents access
- Search is built for people using the app; there is no section-level retrieval index for agents
- Points directly at an Obsidian vault folder: no format conversion, no plugin needed
- Section-level retrieval: returns the specific heading and its content, not the whole file
- Preserves document heading hierarchy: structural navigation, not approximate keyword match
- Native MCP server: agents call
search_sections,get_section,get_toc - No GUI, no sync, no visual graph: purely a retrieval layer for AI agents
- Incremental re-index when vault files change
- jCodeMunch indexes code repos in the same agent session: one MCP config covers both knowledge and code
.md
files, jDocMunch requires no Obsidian-specific knowledge: the vault is just a folder of markdown.
.md files in the vault are always plain text and fully portable.
jDocMunch vs chonkify
chonkify is an extractive document compression library aimed at fitting maximum signal into a token budget. Where jDocMunch indexes structured docs for on-demand section retrieval, chonkify compresses entire documents (.txt, .md or .pdf) to a token budget before they reach an LLM. The two tools operate at different layers: chonkify is a preprocessing step; jDocMunch is a live retrieval layer.
- Extractive compression: shrinks documents to fit a token budget
- Accepts .txt, .md and .pdf; its published benchmarks cover non-PDF text
- Their benchmark (0.3.0, 42 cases on two suites): within the token budget every time and 75.2% of tokens saved, vs 62.95% for LLMLingua and 62.76% for LLMLingua2; on the general txt/md suite LLMLingua recalls more facts but overruns the budget
- ✗ Lossy: some content is discarded in the compression pass
- ✗ No MCP server: standalone library and CLI only
- ✗ Requires an embedding model: local SentenceTransformers (~419 MB) or an Azure OpenAI, OpenAI or compatible API
- ✗ Wheels for Python 3.11 only
- ✗ Proprietary license: evaluation, testing and review only; production use needs a commercial license
- ✗ Installed from wheel files on GitHub releases; the chonkify package on PyPI is an unrelated project
- Section-level indexing: AI retrieves only the relevant sections
- Lossless: returns exact source text, nothing discarded
- Native MCP server: works in Claude Code, Cursor, OpenCode, and any MCP client
- No embedding model needed by default; semantic search is an optional extra
- Python 3.10+
- .md, .rst, .adoc, .ipynb, .html, .txt, OpenAPI, JSON and XML; PDF, DOCX, PPTX and EPUB with the optional
[office]extra - Source-available, free for non-commercial use:
pip install jdocmunch-mcp - ✗ Does not compress a whole document to a token budget: chonkify does
chonkify and jDocMunch are complementary. jDocMunch serves sections of your documentation (Markdown, RST, OpenAPI specs, notebooks, office files) to agents on demand over MCP. chonkify compresses long documents to a token budget before they enter the context window. chonkify's compressed output can itself be indexed by jDocMunch if you save it as Markdown.
chonkify was first released in March 2026, and as of 28 October 2026 its repository has had no commits since 26 March 2026. The license allows evaluation, testing and review only, the wheels are Python 3.11 only, and the published benchmark is 42 cases on two suites. Check the license before building a production pipeline on it.
jCodeMunch vs Aegis
Aegis is a DAG-based Deterministic Context Compiler for AI coding agents. It stores your architecture documents in a SQLite knowledge base, maps them to file paths via dependency edges, and when an agent is about to edit code it returns exactly which guidelines apply: deterministically, with no search or RAG ranking. jCodeMunch answers “what does the code do”; Aegis answers “what rules must the code follow.” The two tools work at different layers and can run side by side.
- DAG of dependency edges maps architecture docs to file paths
aegis_compile_contextreturns relevant guidelines before an edit- Human-approval-gated knowledge base: agents cannot silently change rules
- Observation layer: agents report compile misses, corrections and PR merges, which become proposals a human approves
- Optional SLM for intent tagging (built-in llama.cpp or Ollama): off by default
- ✗ Knows nothing about live code structure, only the docs you feed it
- ✗ The knowledge base is built by importing architecture docs; agents can propose, a human approves
- ✗ Runs on Node.js via
npx @fuwasegu/aegis
- Tree-sitter AST: live symbol extraction across 70+ languages
- Blast radius, dependency graph, class hierarchy, import tracing
- Zero setup:
index_folderonce, query immediately - 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Nothing to curate by hand: the index is built from the code and refreshed when files change
pip install jcodemunch-mcp: works in any MCP client- ✗ No architecture governance: Aegis fills this gap
Run both. Before an edit, call
aegis_compile_context to get the architectural constraints,
then get_blast_radius or get_context_bundle to understand the live code impact.
Aegis supplies the rules; jCodeMunch maps the code. The two do not overlap.
jCodeMunch vs Caliber
Caliber is an AI tooling config manager. It scans your codebase, scores your existing AI setup
(deterministically, no LLM), and generates tailored CLAUDE.md, Cursor rules, AGENTS.md,
MCP server configs, and agent skills. It also detects config drift as your code evolves and updates
everything to match. Its sync command mirrors MCP servers, skills and rules across agents, so a jCodeMunch entry set up in one agent can be copied to the others. The two tools work at different layers.
- Scans repo fingerprint (languages, frameworks, deps) and generates tailored configs
- Deterministic config scoring: no LLM, no API key needed for
caliber score caliber syncmirrors skills, rules, plugins and MCP servers across agents- Session learning hooks capture agent corrections into
CALIBER_LEARNINGS.md - A pre-commit hook refreshes the context files from your diff
- Supports Claude Code, Cursor, Codex, OpenCode and GitHub Copilot
- ✗ Not a code exploration tool: no symbol extraction or AST parsing
- ✗ Generation needs an LLM: your Claude Code or Cursor seat, or an Anthropic, OpenAI, MiniMax or Vertex key
- Tree-sitter AST: live symbol extraction across 70+ languages
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Blast radius, dependency graph, class hierarchy, import tracing
- No LLM needed for indexing or lookups: deterministic AST parsing
- Native MCP server: plug into any MCP-compatible client
pip install jcodemunch-mcp: no config scaffolding required- ✗ No config generation or setup management: Caliber fills this gap
Use Caliber to write and maintain your agent config files, and add jCodeMunch as an MCP server;
caliber sync can then copy that server entry to your other agents. jCodeMunch handles
code queries at runtime.
One tip: if Caliber regenerates your
CLAUDE.md, check that the jCodeMunch code
exploration policy is still there afterwards.
jCodeMunch vs Citadel
Citadel is an orchestration layer for Claude Code and OpenAI Codex. Its /do router classifies your
intent and dispatches it to the cheapest capable path: from a one-line fix to a multi-session
parallel campaign with persistence, quality gates, and a circuit breaker. It also ships an optional
codebase-memory MCP server: a file-level import graph with heuristic symbol search.
jCodeMunch is not an orchestration tool; it is a symbol-level retrieval layer agents can read through. The framing is simple:
Citadel tells Claude how to work; jCodeMunch tells Claude what the code is.
/doroutes any task to the right tier automatically- Campaign persistence: work survives session endings and restarts
- Parallel agents in isolated git worktrees with discovery relay between waves
- Circuit-breaker hook: repeated failures force a change of strategy
- 48 skills, including review, test-gen, refactor, systematic-debugging, research, QA and postmortem
- 36 hook scripts across 29 lifecycle events
- Optional
codebase-memoryMCP server: who imports a file, dependencies, change impact; file-level, regex extraction, not a type-aware index - ✗ Claude Code and OpenAI Codex only; needs Node.js 22+ and a git repository
- Tree-sitter AST: exact symbols, not whole files
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- Blast radius, dependency graph, class hierarchy: in one call
- Works in any MCP client: Claude Code, Cursor, Codex, Windsurf
- Zero workflow opinions: pure retrieval primitive
pip install jcodemunch-mcp- ✗ No orchestration, routing, or campaign management: Citadel fills this gap
Citadel's most expensive skills (
/review, /refactor,
/systematic-debugging) involve reading large amounts of code. By default those reads
go through raw Read / Grep / Glob calls. With jCodeMunch in
your MCP config, those skills can fetch the symbols they need instead of whole files. Citadel's own
codebase-memory server answers file-level import questions; jCodeMunch works at symbol level
(callers, references, blast radius) across 70+ languages. Citadel handles the campaign; jCodeMunch handles the reads.
jCodeMunch vs codesight (by Houseofmvps)
codesight is a TypeScript CLI and MCP server that scans your project and
compiles a high-level architectural map: routes, schemas, middleware chains, component
relationships, and import graphs. Its 14 MCP tools answer questions like “what does this
service do?” and “where does this route flow?”, not “show me the implementation of
authenticate().” The scan runs with zero dependencies through npx codesight; its optional
--wiki mode writes a persistent knowledge base to .codesight/wiki/,
meant to be committed to git, and --watch or a commit hook keeps it current.
- Scan compiles routes, schemas, middleware chains and import graphs: 30+ framework detectors, 14 ORM parsers, 14 languages
codesight_get_routes,codesight_get_schema,codesight_get_wiki_articleanswer high-level structural questions; its README says calls after the first return instantly from a session cache- Zero-install TypeScript CLI:
npx codesight, no setup codesight_get_blast_radiustraces architectural-level dependency paths- Optional wiki (
--wiki): persistent, committed to git, regenerated by--watchor a commit hook - Their own benchmark: 7.2x to 41x fewer tokens than manual exploration on open-source projects, with exploration tokens estimated by formula and output measured as characters / 4
- ✗ No named symbol extraction or on-demand implementation retrieval
- ✗ No call graph or reference search
- Knowledge mode summarises markdown docs and notes (
codesight_get_knowledge)
- AST-extracted symbols:
search_symbols+get_symbol_sourcereturn exact implementations - Persistent local index: a new session reuses it, and only changed files are re-parsed
find_importers,find_references,get_blast_radius: precision import-graph tracing- 70+ languages including YAML/Ansible, Razor/Blazor, SQL/dbt, Erlang, Fortran
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
- jDocMunch for section-level doc retrieval alongside code
- ✗ No architectural overview or wiki article generation: codesight fills this gap
codesight_get_overview
to build the mental map, then search_symbols + get_symbol_source
to retrieve the specific implementation you want to read or change.
Both offer a blast-radius tool: codesight's works on its architectural map, jCodeMunch's on symbols and imports.
jCodeMunch vs caveman (by JuliusBrussee)
This comparison on its own page · caveman vs Ponytail vs RTK vs Headroom vs jCodeMunch
caveman started as a voice: it makes the agent answer in short, plain sentences
(“New object ref each render, so React re-renders. Wrap the prop in useMemo.”).
Version 4.0 (October 2026) turned it into six parts. The voice still shrinks what the agent
writes. A local proxy now shrinks some of what it reads as well: logs, JSON, CSV,
YAML and test output, before the model sees them. Source code is left exactly as it is, and
source code is where jCodeMunch works. So the two still sit side by side without overlapping.
As of 28 October 2026 it has 115,766 GitHub stars; the latest release is bin-v4.0.2 (23 October 2026).
/caveman,/ultracave,/megacave: three strengths of the short-answer voice- Read less: a local proxy compresses logs, JSON, CSV, YAML and test output before the model reads them; the originals stay on disk
- Auto: picks the model and the effort for each request (needs a free caveman account)
- Blocks: keeps the scripts an agent writes so it can run them again (pre-release)
/caveman-commitand/caveman-review: one-line commits and one-line review findings/caveman-compress <file>: shrinks memory files such asCLAUDE.md, keeping a backup
get_symbol_sourcereturns one function body instead ofRead-ing the whole fileget_ranked_context: token-budgeted symbol assembly for query-driven retrieval- AST-extracted symbol search across 70+ languages; bytes-precise retrieval
- jDocMunch pairs natively for section-level doc retrieval
- 96.2% fewer tokens per lookup than grep-and-read on our 15-lookup benchmark (express, fastapi and gin at pinned commits, cl100k), with methodology and raw data at benchmarks/
jCodeMunch vs Ponytail (by DietrichGebert)
This comparison on its own page · caveman vs Ponytail vs RTK vs Headroom vs jCodeMunch
Ponytail works on a different problem again. It is one prompt that makes the agent behave like the senior developer who looks at your fifty lines and replaces them with one: use what the repo and the platform already provide, write only what the task needs, and never cut validation, error handling, security or accessibility to get there. Its own benchmark (Claude Code, Opus 5.5, 39 tasks including a real FastAPI + React repo, 5 runs each) reports 53% less code, 45% fewer tokens, 41% less time and 26% lower cost, with 98% of risky logic shipping with a test against 68% without it.
/ponytail [lite|full|ultra|off]: set how strict it is- Looks at what the repo and the platform already have before writing anything. Its example: a date picker in 10 lines where the agent would have written 335
/ponytail-review: reviews the diff for bugs, security, real load, missing tests and what to cut/ponytail-audit: the same check for the whole repo, most important first/ponytail-debt: collects theshortcut:comments you deferred into a ledger- Leaves one small test behind for logic with a branch, a loop, a parser, money or security
- Runs in Claude Code, Codex and other skill-capable hosts, with a rules file for the rest
get_symbol_sourcereturns one function body instead ofRead-ing the whole fileget_ranked_context: token-budgeted symbol assembly for query-driven retrievalfind_referencesandget_blast_radius: what a change touches, without reading every caller- AST-extracted symbol search across 70+ languages; bytes-precise retrieval
- jDocMunch pairs natively for section-level doc retrieval
jCodeMunch vs Headroom (by Headroom Labs)
This comparison on its own page · caveman vs Ponytail vs RTK vs Headroom vs jCodeMunch
Headroom is a context-compression layer that wraps coding agents (Claude Code, Codex, Copilot CLI, Aider, OpenClaw and about ten more; Cursor through manual setup) and compresses
the tool outputs, log lines, RAG chunks, and file contents flowing into the prompt.
The compression is reversible (CCR: the model can call headroom_retrieve
to get the original bytes back) and runs locally, with the
Kompress-v2-base model
for prose. On its own accuracy suite GSM8K scored the same with and without it (0.870, N=100).
It also keeps a cross-agent memory and learns corrections from failed sessions. As of
28 October 2026 it has 78,142 GitHub stars (v0.42.0 on PyPI). headroom wrap
installs Serena for code navigation by default (--code-memory none skips it).
headroom wrap claude: one command per agent; runs locally;headroom unwrapundoes itheadroom proxy: OpenAI/Anthropic-compatible local proxy; zero-code drop-in for any LLM client- CacheAligner → ContentRouter → CCR pipeline (SmartCrusher for JSON, CodeCompressor for AST, Kompress-v2-base for prose)
- Reversible compression:
headroom_retrievereturns the original bytes headroom learnmines failed sessions, writes corrections toCLAUDE.local.mdby default, orCLAUDE.md/AGENTS.md/GEMINI.md- Cross-agent memory store: Claude Code saves a fact, Codex reads it back
- RTK is now optional (
--context-tool), no longer installed by default - Their published scenarios (provider tokenizer, seeded): 57% SRE incident debugging, 42% codebase exploration, 30% GitHub issue triage, 21% code search with 100 results; repeated JSON and log lines can clear 90%
- AST-extracted symbol retrieval: the agent fetches the symbol instead of reading the whole file
get_ranked_context: the agent specifies a token budget, jCodeMunch packs only the symbols that fitfind_references,find_importers, call-graph tracing: structural retrieval Headroom's compression cannot synthesise- jDocMunch + jDataMunch for documentation and tabular data with the same retrieval discipline
- Token-economy ledger (
jcodemunch-mcp receipt) reports modeled savings + USD avoided at Sonnet/Opus/Haiku rates
headroom wrap registers Serena as its code-navigation server; to use jCodeMunch
instead, wrap with --code-memory none and keep jCodeMunch in your MCP config.
headroom wrap starts a local proxy and, unless told otherwise, installs Serena as
a code-navigation MCP server for the wrapped project. If you already run jCodeMunch, pass
--code-memory none so the agent has one code index, not two.
jCodeMunch vs distill (by samuelfaj)
distill used to be a CLI that piped command output through an LLM. It is now a different product: a Rust coding-agent harness with its own terminal UI (v2.0.58, 28 October 2026; 770 GitHub stars; Apache-2.0). It runs on Grok and Codex subscriptions or any OpenAI-compatible model, splits work across main, worker and utility model tiers, and offers modes such as UltraSave and UltraFast. caveman-style terse prose and Ponytail-style lean code are built into every system prompt. jCodeMunch is not a harness; it is a code index an agent reads through. distill's README does not mention MCP.
- Main, worker and utility model tiers; it picks the effort for each call
- Modes: Auto (default), UltraSave, UltraFast, UltraCode (parallel subagents)
- Their benchmark (16 October 2026, three frozen tasks, three runs each): 68.7% to 86.0% lower estimated cost than native max-effort Codex and Claude Code, with the same 9/9 pass rate
- caveman and Ponytail rule sets built into every system prompt
- Grok and Codex subscriptions, OpenRouter, or any OpenAI-compatible model
- ✗ Replaces your agent harness rather than plugging into Claude Code or Cursor
- ✗ Costs are list-price estimates, not invoices, on small benchmark tasks
- AST-extracted symbol retrieval: the agent fetches one function instead of a whole file
get_ranked_context: deterministic token budget, no LLM round-trip in the retrieval path- Works in Claude Code, Cursor, Codex and other MCP clients
- 70+ languages; offline, zero-API by default (anonymous savings counter on by default)
- Dual-use license: free for non-commercial use, a one-time paid license for commercial use
@samuelfaj/distill, last npm release 1.5.2) with no LICENSE file. Version 2 is the
Rust harness described here, installed by script, under Apache-2.0.
jCodeMunch vs tokf (by mpecan)
tokf is a Rust binary that intercepts CLI output
and applies TOML filter rules. No LLM in the loop, no round-trip latency,
no hosted-model cost. It ships hooks for Claude Code, OpenCode, and Codex CLI;
a built-in test harness with safety checks for prompt injection / shell injection /
hidden Unicode; automatic make/just task-runner wrapping; and per-filter test
suites you can verify with tokf verify. The pitch is 60-90% reduction
on tools like cargo test, git push, and docker
build: reproducible because the rules are deterministic.
As of 28 October 2026 it has 199 GitHub stars; the latest release is tokf-v0.2.54 (6 September 2026).
tokf run cargo test: runs the command, applies a TOML filter, emits only what matterstokf hook install --global: auto-wraps every command for Claude Code, OpenCode, Codex CLItokf verify --safety: runs prompt-injection / shell-injection / hidden-Unicode checks on filter rules- Auto-wraps
makeandjustso each recipe line is filtered independently - Filter rules live in plain TOML: project-local (
.tokf/filters/), user-level, or stdlib; sharable - Pure Rust binary; no LLM dependency, no per-call cost, no latency
- Per-filter test suites with
tokf verify: rules are versioned and verifiable
- Symbol-precise retrieval: the agent fetches one function instead of the whole source file
- AST extraction across 70+ languages; deterministic, offline retrieval
- jDocMunch + jDataMunch handle docs and tabular data with the same retrieval discipline
analyze_perf+get_pr_risk_profile: structured signals where tokf would compress raw verbose output
tokf verify, and no model in
the loop. Pick one of those for terminal output; jCodeMunch covers source code, which none of them index.
jCodeMunch vs LangChain RAG
LangChain is an open-source Python/TypeScript framework for building LLM-powered applications. Its Retrieval-Augmented Generation (RAG) pattern is a common way to let an LLM answer questions about a codebase: chunk the files, embed the chunks, store vectors in a database, then retrieve the closest chunks at query time. LangChain provides the glue (loaders, splitters, embedding wrappers, vector store integrations, and retrieval chains) that wires all of this together.
- Embeds chunks of file text into vectors and retrieves the n nearest by similarity: approximate, not exact
- Default splitters cut by character count; language-aware splitters (
RecursiveCharacterTextSplitter.from_language) split on functions and classes, but they work on text, not a parsed AST - Needs an embedding model, a vector store, a chunking strategy and a retrieval chain
- Its indexing API with a record manager re-embeds only changed documents; you run and schedule it
- No reference or import graph: finding callers means another tool
- Large ecosystem of document loaders, vector stores, model integrations and evaluation tools
- Well suited to semantic search over mixed prose corpora
- Tree-sitter parses source files into an AST: functions, classes and imports are the units, so a function is returned whole
search_symbols("authenticate")returns the exact implementation body, not the nearest chunk- Opt-in hybrid BM25 + vector search:
search_symbols(semantic=true)combines structural BM25 with cosine similarity;semantic_weightcontrols the blend; off by default - Symbol embeddings are stored in the same SQLite file as the index: no separate vector database to run
- Embeddings run locally (ONNX or
sentence-transformers) or through a cloud embedding API find_references/find_importerstrace references and imports, which chunk retrieval does not model- Token use is predictable: you get the symbol you asked for, not the n nearest chunks
- jDocMunch handles documentation (section-level search across .md, .rst, .ipynb, HTML, and PDF/DOCX with the
[office]extra) the same way - Works natively as an MCP server: Claude, Cursor, Windsurf, Codex call it directly; no chain wiring required
search_symbols(semantic=true) delivers hybrid BM25 + vector search
over AST-extracted symbols with no separate vector DB required
(pip install jcodemunch-mcp[semantic]).
Its embeddings are computed over whole symbols rather than text chunks.
Ready to cut your token bill?
Free for non-commercial use. Using it at work? $79, one time, with a 30-day money-back guarantee.