{"slug": "show-hn-sverklo-repo-memory-for-coding-agents", "title": "Show HN: Sverklo – repo memory for coding agents", "summary": "Sverklo, a local-first MCP server, launched to give coding agents like Claude Code and Cursor repository memory by tracking symbols, callers, diffs, and git-pinned decisions before edits. The tool, which keeps code on the user's machine, was benchmarked against competitors jcodemunch-mcp and GitNexus, leading to mutual bug fixes and a 29% F1 score improvement after parser updates. Sverklo complements grep by handling exploratory questions and refactor blast radius, while its GitHub Action posts inline review comments with risk scores and missing-test detection on every PR.", "body_md": "# Give your coding agent repo memory.\n\n**Sverklo is a local-first MCP server** that gives Claude Code, Cursor, Windsurf, and Codex-style agents your repo's symbols, callers, diffs, blast radius, and git-pinned decisions before they edit.\n\nUse grep when you know the exact string. Use Sverklo when the agent needs relationships: who calls this, what depends on it, what changed, and which project decisions still apply. Your code stays on your machine.\n\nRun the copied commands, then use the markdown receipt and paste it into [the proof thread](https://github.com/sverklo/sverklo/discussions/79). Takes about 2 minutes; no API keys, no code upload, first run downloads a local ONNX model.\n\n/* 90-second walkthrough — terminal then live Claude Code MCP integration */\n\n/* what happened when we published the bench */\n\n## A public benchmark, two competitors, fixes shipped on both sides in 36 hours.\n\n-\nApr 28\nPublished\n[180-task bench](/bench/)across 6 codebases with two competing local-first MCP code-intel servers (jcodemunch-mcp, GitNexus) and the slices where sverklo lost — including FastAPI P5 dead-code (0.00 vs grep's 1.00). -\nMay 2 → 3\njcodemunch maintainer\n[@jgravelle](https://github.com/jgravelle)shipped[v1.80.7 / 1.80.8 / 1.80.9](https://github.com/jgravelle/jcodemunch-mcp/releases)against specific bench findings. P5 recall**0.00 → 1.00**; lodash P1** 0/10 → 9/10**. -\nMay 4\nAdding lodash to the bench exposed the symmetric blind spot in sverklo's parser.\n[sverklo v0.20.2](https://github.com/sverklo/sverklo/releases/tag/v0.20.2)ships the fix. Sverklo P1**0.30 → 0.73**; overall F1** 0.45 → 0.56**(now leader).\n\n\"the bigger opportunity here is the potential genesis of an 'MCP Server Arena' on par with what the leading AI/LLM/Chatbot arenas provide…\"\n\n[— Jake Gravelle, jcodemunch-mcp maintainer, on r/mcp]\n\n## Sverklo doesn't replace grep. It complements it.\n\n- ✓ Exploratory questions (\"how does the auth flow work?\")\n- ✓ Refactor blast radius (\n`impact`\n\n) - ✓ Large interconnected codebases\n- ✓ Memory across sessions, tied to git SHAs\n- ✓ Project audits — god nodes, dead code\n\n- — Focused diff review\n- — Exact string matching\n- — Reading file contents\n- — Build & test verification\n- — Anything where you already know the symbol\n\nSverklo is the right tool when you **don't know exactly what to search for**. When you do know, grep is fine.\n\n## your agent\n\nreviews like\n\na senior dev.\n\n`src/auth/session.ts`\n\n78\n`src/api/billing.ts`\n\n52\n`src/lib/jwt.ts`\n\n34\n`src/utils/clock.ts`\n\n12\nv0.17 → the GitHub Action posts\n\n**inline review comments** on every PR alongside the sticky summary, anchored to the heuristic-flagged lines.\n\n### risk score\n\nEvery changed file gets a 0–100 score combining untested status, security-sensitive paths, importer fan-in, caller count, dangling references, and churn. Reasons are explicit — no black box.\n\n### missing-test detection\n\n`test_map`\n\nwalks the diff, the import graph, and filename conventions to flag changed code without matching tests — ranked by risk.\n\n### dangling-ref check\n\nEvery removed symbol is checked against the symbol-reference graph. If a caller still exists, the merge is blocked with file:line evidence.\n\n### mcp prompts\n\nFive workflows: `/sverklo:review-changes`\n\n, `/sverklo:pre-merge`\n\n, `/sverklo:onboard`\n\n, `/sverklo:architecture-map`\n\n, `/sverklo:debug-issue`\n\n.\n\n`benchmark/`\n\n— reproducible.\n**+29% F1** after parser improvements on P1/P2 categories.\n\n**2–4× fewer tokens** per review on most repos. Mixed results on small focused diffs (built-in tools win there). Honest receipts beat marketing math.\n\n**facebook/react**(4,368 files, 20k chunks). On smaller repos (gin, nestjs) it drops to 11–14 ms. Sverklo lives in the agent's hot loop — the latency budget allows it.\n\n`impact render`\n\non React's most-called symbol. Sub-millisecond on every repo we tested — it's an indexed SQL join, not a 200-grep-match scan.\n[BENCHMARKS.md](https://github.com/sverklo/sverklo/blob/main/BENCHMARKS.md). See the\n\n[MCP benchmark comparison](/benchmarks/).\n\n## indexed.\n\nranked.\n\nremembered.\n\n+ filename / path channels\n\nchannel weights, path × 1.5\n\n### hybrid search\n\nBM25 for precision, semantic embeddings for recall, PageRank for structural importance — fused via RRF. Faster and more accurate than grep.\n\n### local embeddings\n\nall-MiniLM-L6-v2 via ONNX runtime. 384-dimensional vectors generated on your machine. No API calls, no data leaves your laptop.\n\n### pagerank ranking\n\nFiles that are imported by many others rank higher. Your agent finds the actually-important code first, not just keyword matches.\n\n### persistent memory\n\nSave decisions, patterns, and preferences with git-state linking. Stale memories flagged automatically when referenced files change.\n\n### multi-repo + cross impact\n\nOne MCP server serves all your repos via a global registry. Trace how a change ripples across dependent repos. No per-project config needed — `sverklo init`\n\nin any repo, done.\n\n### configurable pagerank\n\nDrop a `.sverklo.yaml`\n\nin your project root to tune PageRank weights, boost or penalize paths, and customize ranking to match your codebase's shape.\n\n### incremental\n\nFile watcher updates the index on every save. Dependency graph and PageRank recompute in real time. Always fresh.\n\n### eleven languages\n\nTypeScript, JavaScript, Python, Go, Rust, Java, C, C++, Ruby, PHP, Vue.\n\n## your agent\n\nfinally\n\nremembers.\n\n`remember scope:\"workspace\"`\n\nwrites once, surfaces across every repo in the workspace.\n`sverklo init`\n\nimports your existing project knowledge:\n`CLAUDE.md`\n\n(12)`.cursorrules`\n\n(3)`docs/adr/001-prisma.md`\n\n`docs/adr/002-auth.md`\n\n`CONTRIBUTING.md`\n\n(1)\n\nv0.17 →\n\n`sverklo memory export`\n\npushes them to markdown / Notion / JSON.\n### bring your own docs\n\nAuto-imports memories from CLAUDE.md, .cursorrules, AGENTS.md, CONTRIBUTING.md, and ADRs on init. Your existing project knowledge becomes semantically searchable instantly.\n\n### bi-temporal (unique to sverklo)\n\nEvery memory has `valid_from_sha`\n\nand `valid_until_sha`\n\n. Memories are never deleted, only superseded — so you can query \"what we believed at commit X\". Zep does this for conversations; sverklo is the only one doing it for code.\n\n### staleness detection\n\nIf a memory references a file that no longer exists, it's flagged as stale. No more advice based on deleted code.\n\n### semantic recall\n\nMemories are embedded and searched the same way as code. Ask \"what did we decide about auth?\" and get the relevant memory.\n\n### auto-inject on session start\n\nAn MCP resource surfaces top memories to Claude before you type anything. Your decisions travel across sessions automatically.\n\n[Full reference on GitHub.](https://github.com/sverklo/sverklo#tools)\n\n## only one tool\n\nhas everything.\n\n| Tool | Code-native | Local-first | MCP drop-in | Git-aware memory | Symbol graph | Bi-temporal | Cross-repo |\n|---|---|---|---|---|---|---|---|\n| ▸sverklo | ● | ● | ● | ● | ● | ● | ● |\n| mempalace | — | ● | ● | — | — | ● | — |\n| claude-mem | — | ● | CC only | — | — | — | — |\n| Mem0 | — | crippled | SDK | — | — | — | — |\n| Zep / Graphiti | — | Neo4j | ● | — | — | ● | — |\n| Augment Code | ● | cloud | ● | — | ● | — | — |\n| Greptile | ● | cloud | 3rd party | — | ● | — | — |\n| Aider repo-map | ● | ● | — | — | — | — | — |\n| Zilliz claude-context | ● | Milvus | ● | — | — | — | — |\n| XRAY MCP | ● | ● | ● | — | partial | — | — |\n\n**Different lanes:** Most \"AI memory\" tools (mempalace, claude-mem, Mem0, Zep) are built to remember\n\n*conversations*. Sverklo is built to understand\n\n*code*. We index 24 languages (10 first-class with structural parsing, 14 via regex fallback), build a symbol-level dependency graph, and run hybrid BM25 + vector + PageRank search — then bolt a bi-temporal memory layer on top that's tied to git commits, not wall-clock time.\n\n**The wedge:** Sverklo is the only tool that knows what the code looked like when you made that decision — and warns you when the code has drifted since. If you want conversation memory, use mempalace. If you want your agent to actually understand a codebase, use sverklo.\n\n**Want a deeper dive?**\n\n[See side-by-side comparisons →](/vs/)against Serena, GitNexus, codebase-memory-mcp, Cursor @codebase, and Sourcegraph Cody.\n\n## install.\n\nprove.\n\ncode.\n\n`--markdown`\n\nto share it.## questions,\n\nhonestly\n\nanswered.\n\n## How do I stop Claude Code from hallucinating function names that don't exist in my codebase?\n\nClaude Code hallucinates function names because it generates from training-data patterns rather than your actual symbol graph. It will write `getUserByEmail()`\n\nwhen your code uses `findByEmail()`\n\n, invent imports for packages you don't depend on, and forget yesterday's design decision because context was compacted. Sverklo solves this with a 37-tool MCP retrieval layer the agent calls before writing code: `lookup`\n\nresolves a name to its definition with file:line, `refs`\n\nproves whether a symbol exists with caller context, `verify`\n\nlets the agent re-check that a quoted span is still present at the cited git SHA. Install with `npm install -g sverklo`\n\n, run `sverklo init`\n\n, then run `sverklo prove`\n\nto see central files and a real caller graph from your repo. Use `sverklo prove --markdown`\n\nfor a shareable proof receipt. Local-first, MIT-licensed, no API keys.\n\n## Why would I install another MCP server?\n\nMost MCP servers are single-purpose wrappers around an API. Sverklo is local-first code intelligence: hybrid search (BM25 + ONNX embeddings + PageRank), symbol-level impact analysis, diff-aware PR review, and bi-temporal memory — all running on your laptop with no API keys. It works with Claude Code, Cursor, Windsurf, Zed, VS Code, JetBrains, and Google Antigravity, so if you already have an MCP client, sverklo just appears as 37 new tools alongside whatever else you run.\n\n## How is Sverklo different from Cursor's @codebase or Claude Context?\n\nCursor's @codebase indexing is cloud-based and tied to the Cursor editor. Claude Context (Zilliz) requires a Milvus database. Sverklo runs entirely on your laptop with SQLite and ONNX embeddings, works across every major AI coding agent via the MCP protocol, and adds symbol-level impact analysis and bi-temporal memory that neither offers.\n\n## Does Sverklo work offline?\n\nYes. The only network call Sverklo ever makes is downloading the ONNX embedding model on first run (~90MB, cached locally). After that you can disconnect from the internet and everything continues to work — indexing, search, embeddings, memory, dashboard. No telemetry. No cloud calls. Your code never leaves your laptop.\n\n## Which AI coding agents does Sverklo support?\n\nSverklo works with any AI coding agent that speaks the Model Context Protocol (MCP): Claude Code, Cursor, Windsurf, Zed, VS Code, JetBrains, and Google Antigravity. The `sverklo init`\n\ncommand auto-detects which clients you have installed and writes the right config files.\n\n## Is Sverklo free and open source?\n\nYes. MIT licensed and free forever. All 37 tools have no limits and opt-in telemetry that's off by default ([see /security](/security/)). A future Sverklo Pro tier will add smart auto-capture and larger embedding models, and Sverklo Team will add shared team memory — but the rule is \"Pro adds new things, never gates current things.\" Anything in the OSS server today stays in the OSS server forever.\n\n## How do I install Sverklo in Claude Code?\n\nRun `npm install -g sverklo`\n\n, then `cd`\n\nto your project and run `sverklo init`\n\n. That writes `.mcp.json`\n\nat your project root, appends sverklo instructions to your `CLAUDE.md`\n\n, and runs `sverklo doctor`\n\nto verify the MCP handshake. Run `sverklo prove`\n\nto get a real repo-memory prompt, add `--markdown`\n\nfor a shareable receipt, then restart Claude Code and the sverklo tools appear in the `/mcp`\n\nlist.\n\n## What programming languages does Sverklo support?\n\n24 languages total. 10 first-class with structural parsing: TypeScript/TSX, JavaScript, Python, Go, Rust, C# (tree-sitter), plus Vue (SFC), Markdown, and Jupyter notebooks (custom parsers). 14 more via regex fallback: Java, C, C++, Ruby, PHP, Kotlin, Scala, Swift, Dart, Elixir, Lua, Zig, Haskell, Clojure, OCaml. Hybrid search works across all 24; symbol-level impact analysis is sharpest on the first-class 10.\n\n## When is Sverklo the wrong tool?\n\nSverklo is the right tool when you don't know exactly what string to search for. When you do know the literal string, plain grep is faster and more reliable. On a 30-file repo, you don't need Sverklo. It earns its place on large interconnected codebases where AI coding agents waste thousands of tokens reading the wrong files.\n\n## your agent is still guessing.\n\nGive it repo memory: symbols, callers, diffs, blast radius, and decisions. Local-first, MIT, no API keys, no code upload.", "url": "https://wpnews.pro/news/show-hn-sverklo-repo-memory-for-coding-agents", "canonical_source": "https://sverklo.com/", "published_at": "2026-05-29 17:25:16+00:00", "updated_at": "2026-05-29 17:47:34.532519+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products", "large-language-models", "artificial-intelligence"], "entities": ["Sverklo", "Claude Code", "Cursor", "Windsurf", "Codex", "jcodemunch-mcp", "GitNexus", "jgravelle"], "alternates": {"html": "https://wpnews.pro/news/show-hn-sverklo-repo-memory-for-coding-agents", "markdown": "https://wpnews.pro/news/show-hn-sverklo-repo-memory-for-coding-agents.md", "text": "https://wpnews.pro/news/show-hn-sverklo-repo-memory-for-coding-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-sverklo-repo-memory-for-coding-agents.jsonld"}}