{
  "markdown": "<!-- mcp-name: dev.repowise/repowise -->\n\n<div align=\"center\">\n\n<a href=\"https://www.repowise.dev\"><img src=\".github/assets/banner-v2.png\" alt=\"repowise: evidence-backed codebase intelligence\" width=\"100%\" /></a>\n\n<h1 align=\"center\">Understand your codebase without paying your agent to rediscover it.</h1>\n\n<p align=\"center\">Repowise indexes your code, dependency graph, git history, tests,<br />\ndocumentation, and decisions once, then gives agents and developers cited answers,<br />\nchange impact, and concrete code-health fixes.</p>\n\n<p align=\"center\">\n  <a href=\"https://www.repowise.dev\"><img src=\"https://img.shields.io/badge/LIVE_DEMO-repowise.dev-F59520?style=for-the-badge&labelColor=0A0A0A\" alt=\"Open the live Repowise demo\" /></a>\n</p>\n\n<img src=\".github/assets/product-map-dark.png\" alt=\"Repowise connects code and dependency data, git history, tests and contracts, documentation, and architectural decisions in one continuously updated local index that gives developers and AI agents cited understanding, change impact, and concrete code-health improvements across editors, pull requests, dashboards, and multi-repository workspaces\" width=\"100%\" />\n\n<table align=\"center\">\n<tr>\n<td align=\"center\" width=\"250\"><h2>−31.6%</h2></td>\n<td align=\"center\" width=\"250\"><h2>97.2%</h2></td>\n<td align=\"center\" width=\"250\"><h2>2.3×</h2></td>\n</tr>\n<tr>\n<td align=\"center\" valign=\"top\"><sub><strong>less agent output</strong><br />3.8 vs 7.2 tool calls<br /><em>n=43 · p&lt;0.0001</em></sub></td>\n<td align=\"center\" valign=\"top\"><sub><strong>smaller context payload</strong><br />393 vs 13,984 tokens<br /><em>30 Flask commits</em></sub></td>\n<td align=\"center\" valign=\"top\"><sub><strong>more defects surfaced</strong><br />same 20%-of-lines budget<br /><em>2,770 files · p=0.003</em></sub></td>\n</tr>\n</table>\n\n<p align=\"center\"><sub><strong>Graph accuracy leader at matched coverage.</strong><br />\nNo tool finding as much was more precise in all 7 compiler-graded cells.<br />\n<em>5 tools · 37,853 oracle edges</em></sub></p>\n\n<p align=\"center\"><sub><strong>Zero LLM calls</strong> for graph, risk, health, tests,\ndead code, and PR review. Generated prose is optional. Every benchmark publishes its\nsample, method, limitations, and losing rows.</sub></p>\n\n<p align=\"center\"><sub>\nFree and self-hosted · core analysis stays on your infrastructure · no API key needed ·\nAGPL-3.0 or commercial\n</sub></p>\n\n<p align=\"center\">\n  <a href=\"https://repowise.dev/repo/repowise-dev/repowise\"><img src=\"https://api.repowise.dev/badge/wiki/repowise-dev/repowise.svg?style=flat-square\" alt=\"Explore Repowise's own code\" /></a>\n  <a href=\"https://repowise.dev/repo/repowise-dev/repowise/code-health\"><img src=\"https://api.repowise.dev/badge/health/repowise-dev/repowise.svg?style=flat-square\" alt=\"Repowise code health\" /></a>\n  <a href=\"https://pypi.org/project/repowise/\"><img src=\"https://img.shields.io/pypi/v/repowise?style=flat-square&logo=pypi\" alt=\"PyPI version\" /></a>\n  <a href=\"https://www.gnu.org/licenses/agpl-3.0\"><img src=\"https://img.shields.io/badge/license-AGPL--3.0-059669?style=flat-square\" alt=\"License: AGPL 3.0\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#why-repowise\"><strong>Why Repowise</strong></a> ·\n  <a href=\"#your-agent-stops-guessing\"><strong>Agents</strong></a> ·\n  <a href=\"#know-whats-dangerous-before-you-merge\"><strong>Changes</strong></a> ·\n  <a href=\"#code-health\"><strong>Code health</strong></a> ·\n  <a href=\"#past-one-repo\"><strong>Workspaces</strong></a> ·\n  <a href=\"#measured-against-the-field\"><strong>Evidence</strong></a> ·\n  <a href=\"#for-teams-and-enterprises\"><strong>Enterprise</strong></a> ·\n  <a href=\"https://docs.repowise.dev\"><strong>Docs</strong></a>\n</p>\n\n</div>\n\n---\n\n<a id=\"why-repowise\"></a>\n\n## One index. Three ways to use it.\n\n| **Understand the code** | **Change it safely** | **Improve it continuously** |\n|---|---|---|\n| Ask cited questions · explore architecture and execution flows · read always-current docs · recover the decisions behind the code | See symbol-level blast radius · run only the tests a diff exercises · catch missing companion files · detect breaking contracts before merge | Find defect-prone files · separate maintainability from performance risk · remove dead code · hand concrete, graph-aware refactoring plans to an agent |\n\nThese are not disconnected scanners. The graph locates what git history flags; code\nhealth measures it; tests show what guards it; decisions explain why it exists; and\nthe same evidence reaches your agent, editor, pull request, local dashboard, and\ncross-repository system map.\n\n<div align=\"center\">\n<img src=\".github/assets/demo.gif\" alt=\"The Repowise dashboard running locally: health scores, the code-health map, a graph-aware refactoring plan, change coupling, and the generated documentation\" width=\"100%\" />\n<p><sub>A dashboard tour recorded on this repository. The same local index powers the UI,\nMCP tools, editor views, and PR analysis. No API key and nothing uploaded.</sub></p>\n</div>\n\n### Pick your front door\n\n| If you care about… | Start here |\n|---|---|\n| **A coding agent that understands the repository** | Repowise finds the right files, returns task-shaped context in fewer calls, and proactively supplies decisions and risk. [For agents ↓](#your-agent-stops-guessing) |\n| **Safer pull requests and faster test feedback** | Get change risk, symbol-level callers, co-change partners, and a measured or graph-inferred test run list before merge. [Change intelligence ↓](#know-whats-dangerous-before-you-merge) |\n| **Finding and fixing the code most likely to hurt you** | A defect-validated 1–10 health score across defect risk, maintainability, and performance, followed by the concrete refactoring plan. [Code health ↓](#code-health) |\n| **Understanding an estate, not one repository** | Match backend and frontend contracts, catch breaking providers, map downstream services, enforce architecture rules, and query every repo through one MCP endpoint. [Workspaces ↓](#past-one-repo) |\n| **Rolling this out across an engineering organization** | Keep analysis on your infrastructure, give agents and reviewers the same evidence, and add commercial licensing, security controls, custom extensions, and SLA-backed support. [Teams and enterprise ↓](#for-teams-and-enterprises) |\n\n<a id=\"quickstart\"></a>\n\n## Start in minutes (no API key)\n\n```bash\npip install repowise\ncd /path/to/your/repo\nrepowise init --no-prose -y\nrepowise serve\n```\n\nThat builds the graph, git, decisions, health, dead-code and structural-wiki layers\nlocally. Connect Claude Code, Codex, Cursor or any MCP host, or open the dashboard.\n`init` wires Claude Code automatically. Then ask your agent: *\"Use Repowise\n`get_overview` to summarize this repository\"* or *\"What breaks if I change\n`src/auth.py`?\"*\n\n[Full setup, every agent, and optional model-written prose →](docs/start/QUICKSTART.md)\n\n---\n\n## Your agent stops guessing\n\nEvery question your agent asks about a repository has an answer that could have been\ncomputed ahead of time. *Who calls this function? What breaks if I change it? Why is\nit written this way? Which files are actually dangerous?* Without an index, the agent\nrediscovers that answer on every task: grep, read, re-read, forget.\n\nRepowise exposes **ten task-shaped MCP tools** to Claude Code, Codex, Cursor, VS Code\nand anything else that speaks MCP: graph, git, docs, decisions, and ten MCP tools\nbehind one index. See [the canonical surface](#the-ten-mcp-tools). Most tools are built around data entities (one\nfile, one symbol), which forces agents into long chains of sequential calls. These are\nbuilt around **tasks**: pass several targets in one call, get complete context back.\n\nBecause the exploration work is already done, that phase mostly disappears. In a\nmeasured agent loop across 43 questions on `django/django`, Repowise cut the agent's\nown output by **31.6%** (p&lt;0.0001) and reached the answer in **3.8 tool calls\ninstead of 7.2**. That is the end-to-end result.\n\nOne mechanism is much larger but narrower: loading a commit's context through\n`get_context` costs **393 tokens instead of 13,984**, or 97.2% less. That is one\nretrieval payload, not a claim of 97.2% total agent savings. Both measurements and\nevery competitor row are published in [the benchmark report](docs/BENCHMARKS.md).\n\n**And it arrives without being asked.** Optional [hooks](docs/agent/HOOKS.md) push\ncontext into the session at the moment it matters: the governing architectural\ndecision when your agent edits a file that decision covers, a warning when it touches\na file with a run of recent bug fixes, a compact briefing at session start. Repowise\nalso generates your `CLAUDE.md` and `AGENTS.md` from the real index, so even an agent\nwith no MCP support starts informed.\n\n**It learns from how you actually work.** Repowise reads your own agent transcripts\nfor the corrections you keep making (\"use the shared HTTP client, not raw requests\")\nand turns the durable ones into tracked decisions it delivers back later. The wiki\ngeneration budget tilts toward the modules you and your agent ask about most. All\nlocal, all deterministic, no extra LLM calls.\n\n<details>\n<summary><strong>What the index builds</strong></summary>\n\n| Foundation | What it contributes |\n|---|---|\n| **Graph** | File + symbol dependencies across 25 AST-parsed languages, confidence-stamped call resolution, communities, centrality, cycles, and execution flows |\n| **Git** | Hotspots, ownership, co-change, bus factor, and bug-fix history: behavioral signals static analysis cannot see |\n| **Docs** | A wiki for every module and file, rebuilt incrementally with freshness and confidence scoring plus hybrid search |\n| **Decisions** | Architectural rationale mined from five index-time sources plus human and agent capture, each claim traced to evidence |\n| **Code health** | 49 deterministic detectors across defect risk, maintainability, and performance, followed by concrete refactoring plans |\n\nThe structural wiki needs no model. Model-written prose is an optional upgrade, one\npage or directory at a time. Six of the seven decision sources are deterministic too;\nonly comment archaeology needs a provider.\n\n[The intelligence layers →](docs/layers/INTELLIGENCE_LAYERS.md) ·\n[How the graph earns trust →](docs/layers/GRAPH.md)\n\n</details>\n\n### Also: stop paying for output nobody reads\n\nMost of what an agent reads back from a shell command is noise: 300 lines of passing\ntests wrapped around 4 failures, full commit bodies when it asked \"what changed\nrecently\". `repowise distill <cmd>` compresses command output **before the agent reads\nit**, errors first, exit code preserved.\n\n```bash\nrepowise distill pytest          # 61% fewer tokens, all 11 failure lines kept\nrepowise distill git log -50     # 89% fewer tokens\nrepowise saved                   # what distillation saved you, in tokens and dollars\n```\n\nNothing is lost. Every omission leaves an inline `[repowise#<ref>]` marker that\n`repowise expand <ref>` reverses in full, so the agent can always pull the detail back\nwithout re-running the command. Small outputs pass through untouched. An opt-in hook\nrewrites noisy commands automatically, shown to you for approval first.\n\n<div align=\"center\">\n<img src=\".github/assets/savings.png\" alt=\"repowise Costs dashboard: tokens and dollars saved across distill and the MCP tools\" width=\"100%\" />\n<p align=\"center\"><sub>The <strong>Costs</strong> dashboard tallies both savings surfaces, priced at your own agent's model. Example from a week of heavy local use.</sub></p>\n</div>\n\nFull guide: **[docs/agent/DISTILL.md →](docs/agent/DISTILL.md)**\n\n---\n\n## Know what's dangerous before you merge\n\nFour deterministic signals, all computed from the graph and git history, no LLM:\n\n- **Change risk.** Score any commit or `base..HEAD` range **0-10** from the shape of\n  the diff, ranked against your repo's own recent commits. PR mode returns directives\n  rather than vibes: `may_break`, `missing_cochanges`, `missing_tests`, `tests_to_run`.\n  One command: `repowise risk main..HEAD`. ([reference →](docs/layers/CHANGE_RISK.md))\n- **Bug history.** Which files and symbols actually get bug-fixed, and how recently.\n  Doc, test and config commits are filtered out so the count means what it says, and a\n  file with a run of recent fixes gets flagged as a bug magnet while you edit it.\n  ([reference →](docs/layers/BUG_HISTORY.md))\n- **[Test intelligence](#which-tests-cover-this-file-without-a-coverage-report).** Which\n  tests reach a file and which ones a diff actually exercises, from the call graph,\n  with or without a coverage report.\n  ([reference →](docs/layers/TEST_INTELLIGENCE.md))\n- **Change coordination.** Which other open branches edit the files you are editing,\n  every row saying why it is listed (`same file`, or a co-change pair with the commit\n  counts behind it), and whether the diff in front of you is one change or several\n  groups the index links nothing between. Both stay quiet when there is nothing to\n  report. `repowise overlap` and `repowise risk`.\n  ([reference →](docs/layers/CHANGE_RISK.md#branch-overlap))\n\nPlus the free **[Repowise PR Bot](#the-pr-bot)**, which puts all of it on every pull\nrequest. Zero LLM calls.\n\n---\n\n## Which tests cover this file, without a coverage report\n\nIngest LCOV, Cobertura or Clover and you get the measured answer. **Most\nrepositories never produce one**, so the graph answers instead: a test file that\nimports a source file *reaches* it, which is a recorded edge rather than the\nname-shaped guess everything else falls back to.\n\nThat fallback fails in both directions, and this repo is the proof. Five of its\nsix worst bug-magnet files have no test named for them and read as untested while\nthe graph names 3 to 23 test files each. The sixth is worse: matching on basename\npaired the *health* engine with the *distill* engine's tests and called it tested.\n\n```bash\nrepowise impacted-tests main..HEAD   # only the tests this diff actually exercises\nrepowise health                      # untested hotspots, now graph-aware\n```\n\n<sub>Dogfooded against a real <code>coverage run --contexts=test</code>:\n<strong>95.7% precision</strong> on what reaches a file and <strong>97.5% on the\nrun list</strong>, at a 100% hit rate, against 72.1% and 94.8% for the one-hop\nimport walk this replaced. The two tiers are never averaged: rows are stamped\n<code>basis: \"measured\"</code> or <code>\"inferred\"</code>, measured wins outright\nwhere both can answer, and the inferred tier may never produce a percentage.\nSound as a floor, unsound as a quantity, and labelled so.\n<a href=\"docs/layers/TEST_INTELLIGENCE.md\"><strong>Test intelligence →</strong></a></sub>\n\n---\n\n## The PR bot\n\nInstall the [GitHub App](https://github.com/apps/repowise-bot) and the index shows up\nwhere the decision actually gets made. One comment per pull request, edited in place on\nevery push rather than reposted, and **a green PR gets no comment at all**.\n\n<sub>See a real comment on a real PR, not a mockup:\n[repowise-dev/repowise#1204](https://github.com/repowise-dev/repowise/pull/1204).</sub>\n\nWhat decides a review is inline. What is context sits behind one fold, so the comment\nstays about seventeen rows whatever it finds.\n\n- **Blast radius, at symbol level.** The contracts this PR changed and every caller of\n  them in a file the PR does not touch. Importing a module says nothing about whether\n  the function you changed is the one being called, so file-level impact is the wrong\n  altitude for the question a reviewer actually has.\n- **Before you merge.** The tests that import your changed files, and the files that\n  changed alongside them in past commits but are missing here.\n- **A Check Run that can gate the merge**, with annotations on the specific lines the\n  PR added. Advisory by default.\n- **Change risk**, scored against the repository's own commit distribution rather than\n  an absolute scale, so it stays meaningful on a repo whose typical commit is large.\n- **AI vs human authorship** of the changed files, with the average health of each.\n- Then hotspots, hidden coupling, declining health, dead code and the change map, one\n  fold down.\n\n### And a page the comment links to\n\nMarkdown runs out. The comment shows three callers and says \"+6 more\"; the page shows\nall nine. Public, no sign-in, on a repository the reader has never seen.\n\n<img src=\".github/assets/pr-bot/pr-page-blast-map-dark.png\" alt=\"The dark Repowise per-PR analysis page showing change risk, repository health, changed contracts, outside callers, newly added findings, and a blast-radius treemap of the repository\" width=\"100%\" />\n\n<sub>The page leads with change risk and newly introduced findings, then maps every\nchanged file and outside caller across the repository.\n[See it live →](https://repowise.dev/pr/repowise-dev/repowise/1204)</sub>\n\n**[Install the PR bot →](https://github.com/apps/repowise-bot)** ·\n[how it works →](https://www.repowise.dev/bot)\n\n---\n\n<a id=\"code-health\"></a>\n\n## ★ Know exactly what to fix\n\nA score that says *\"this file is risky\"* is where most tools stop. Repowise scores\nevery file, locates where the risk concentrates, and then names the specific fix.\n\n<div align=\"center\">\n<img src=\".github/assets/health-loop.svg\" alt=\"repowise code-health loop: deterministic markers fan into three signals, the graph and git history locate where risk concentrates, and refactoring intelligence emits concrete plans your agent executes\" width=\"100%\" />\n</div>\n\nEvery file is scored 1-10 by **49 deterministic detectors** (McCabe complexity, brain\nmethods, LCOM4 cohesion, god classes, native Rabin-Karp clone detection, untested\nhotspots, change entropy, prior-defect history and more), split into three lenses:\n**defect risk**, **maintainability**, and **performance**: static N+1 and I/O-in-loop\nrisk traced *across* files through the call graph, where file-local linters found **0**\nof the cross-function cases and repowise surfaced ~90. Only **26** of the 49 are\npermitted to move the defect number, because that is the number carrying published\naccuracy claims.\n\n> **Zero LLM calls, zero cloud, zero new runtime dependencies.** Pure Python over\n> tree-sitter and git data, **under 30 seconds** on a 3,000-file repo, a budget\n> enforced by a CI test, not an estimate. Marker weights are **calibrated against a\n> real defect corpus, not hand-tuned**: every file scored at a commit preceding the\n> bug window so nothing leaks backward, and an L2-logistic fit with file size as an\n> explicit control, so a marker only earns weight for defect lift *beyond* being big.\n> Only the learned constants ship.\n\n**It proves itself on your repo, not just on a benchmark.** After every index,\nRepowise checks its own flags against your git history and reports what it found:\n*\"16 of the 20 lowest-health files had a bug fix in the last 6 months, 3.3x the 24%\nbaseline.\"* If that number is bad on your codebase, you will see it. (It is an\nassociation on your indexed history, not a forward prediction, the leakage-free\nversion is [in the benchmarks](docs/BENCHMARKS.md#5-code-health-predicts-defects).)\n\nThen it names the fix. Not \"this class is too big\", but **Extract Class**, **Extract\nHelper**, **Move Method**, **Break Cycle**, **Split File**, or **Extract Method**, with\nthe exact methods, edges and symbols that move, the **blast radius** of callers and\nco-changing files that have to move with them, and a graph-aware ranking so a fix on a\ncentral hub outranks the same fix on a leaf. Extract Method goes down to an\nintra-procedural dataflow pass that lifts the exact span and infers a\nbehavior-preserving signature.\n\n```bash\nrepowise health                        # KPIs and lowest-scoring files\nrepowise health --refactoring-targets  # ranked, concrete plans\nrepowise health --trend                # snapshots plus declining-health alerts\n```\n\nThe dashboard renders each plan as a card with a copy-to-agent button. An optional LLM\nstep, never in the indexing path and only on request, expands any plan into generated\ncode and a unified diff.\n\n<sub>Validated on <strong>21 open-source repos across 9 languages</strong> (2,826 files,\nscored at a fixed point and checked against the following 6 months of bug fixes,\nkeyword-labelled): <strong>ROC AUC 0.737</strong> [0.683, 0.787]. The signal is\ncorrelated with file size and weakens sharply within a fixed size band, which we report\nrather than bury. Independently recomputed from the raw data.</sub>\n\n<sub>Against <strong>CodeScene</strong>, the leading commercial code-health tool, on the\nsame 2,770 files and the same defect labels, ranking by repowise health surfaces\n<strong>2.3x the defects under a fixed review budget</strong> (paired, p = 0.003).\n<a href=\"docs/BENCHMARKS.md\">Full head-to-head, methodology and limitations →</a></sub>\n\nGuides: **[code health](docs/layers/CODE_HEALTH.md)** · **[refactoring](docs/layers/REFACTORING.md)**\n\n---\n\n## See all of it\n\n`repowise serve` starts the full web dashboard next to the MCP server. No separate\nsetup, all local.\n\n<table>\n<tr>\n<td width=\"50%\"><img src=\".github/assets/dashboard/architecture-page.png\" alt=\"Architecture view: the dependency graph laid out and explorable, with a context drawer per node\" width=\"100%\" /><br/><sub><b>Architecture</b> · the dependency graph, laid out and explorable, with per-node context and change coupling</sub></td>\n<td width=\"50%\"><img src=\".github/assets/dashboard/code-health-map.png\" alt=\"Code health map: every file as a bubble, hover to inspect score, coverage and tests\" width=\"100%\" /><br/><sub><b>Code Health</b> · every file as a bubble, hover any one to inspect its score, size, coverage and findings</sub></td>\n</tr>\n<tr>\n<td width=\"50%\"><img src=\".github/assets/dashboard/chat-page.png\" alt=\"Chat view: ask questions against the indexed repo, with answers that cite the files and pages they came from\" width=\"100%\" /><br/><sub><b>Chat</b> · ask the codebase a question, answers cite the files and pages they came from</sub></td>\n<td width=\"50%\"><img src=\".github/assets/dashboard/docs-page.png\" alt=\"Docs view: auto-generated wiki pages with a tree, mermaid diagrams, and freshness badges\" width=\"100%\" /><br/><sub><b>Docs</b> · auto-generated wiki pages for the whole codebase, with confidence and freshness badges</sub></td>\n</tr>\n</table>\n\nAlso in there: **Chat** (ask the codebase in natural language) · **Docs** (the\ngenerated wiki, with Mermaid and a graph sidebar) · **Architecture** and **C4**\n(Context → Containers → Components) · **Knowledge Graph** plus a zoomable canvas map ·\n**Risk**, **Hotspots**, **Coupling** and **Blast radius** · **Contributors** ·\n**Decisions** (evidence drawer and evolution timeline) · **Symbols** · **Security** ·\n**Dead code** · **Stats** · **Costs** · **Workspace**.\n\nEvery view and what each one answers: **[docs/start/DASHBOARD.md →](docs/start/DASHBOARD.md)**\n\n---\n\n<a id=\"past-one-repo\"></a>\n\n## One intelligence layer across your software estate\n\nReal systems are not one repository, and the expensive failures live in the gaps\nbetween them. Change a backend contract and Repowise can name the frontend calls that\nconsume it, the services downstream, the historical companion files missing from the\nchange, and the architecture rule the new dependency violates before it ships.\n\n| Workspace intelligence | What it answers |\n|---|---|\n| **Contract map** | Which services provide and consume each HTTP, gRPC, event, socket, and data contract? Links retain exact/candidate confidence and the source evidence. |\n| **Cross-repo blast radius** | If this provider changes, which downstream services **will break** through structural dependencies, and which ones **may drift** through historical co-change? |\n| **Breaking-change guard** | Was an endpoint removed or a typed contract changed incompatibly, and which exact consumer files call it? |\n| **Test impact** | Which tests in the consumer repos should run for this provider change, measured from coverage or inferred from the call graph, and which links could not be determined? |\n| **Architecture as code** | Does the live system graph violate declared dependency rules or contain cycles? `repowise workspace check` gates CI. |\n| **Architecture health** | How coupled is the estate? Track propagation cost, the cyclic core, service roles, and a deterministic 1–10 architecture score. |\n| **Federated context** | One dashboard and one MCP server answer across every repository while preserving repo-level evidence. |\n\nThe system map models **services**, not merely repository boxes, and never conflates a\nreal contract with “these files often changed together.” Field-level breaking diffs\ncurrently require a gRPC schema; HTTP supports endpoint-level removal detection.\n\n**[Workspace guide and exact support matrix →](docs/scale/WORKSPACES.md)**\n\nWorktrees and updates stay lightweight: a linked worktree seeds its index from the base\ncheckout automatically, and post-commit hooks, file watching, webhooks, or polling keep\neach repository and the cross-repo graph current.\n\n---\n\n## In your editor\n\nThe **Repowise** VS Code extension puts the index where code actually gets written:\nknow what your change breaks before you push (riskiest files ranked, what is\ndownstream, forgotten companion files, missing tests, suggested reviewers), health in\nthe gutter and status bar, callers and ownership on hover, refactoring plans as\nCodeLens, and the full dashboards inside the editor. One install also registers the MCP\nserver with VS Code, so the same local index serves both you and your agent, and\nexposes six tools to GitHub Copilot. Quiet by default, everything toggleable, nothing\nleaves your machine.\n\nInstall from the Marketplace (search **Repowise**) or Open VSX, then run **Repowise:\nSet Up This Repository**. Guide: **[docs/agent/VSCODE.md →](docs/agent/VSCODE.md)**\n\n---\n\n## Supported agents\n\n**Six agents wired end to end · two at the Full tier · every other MCP host one\npaste away.**\n\n<details>\n<summary><strong>See integration tiers and supported agents</strong></summary>\n\n<p>\n  <strong>Full tier &nbsp;</strong>\n  <img src=\"https://img.shields.io/badge/Claude_Code-D97757?style=flat-square&logo=claude&logoColor=white\" alt=\"Claude Code\" />\n  <img src=\"https://img.shields.io/badge/Codex_CLI-000000?style=flat-square&logo=openai&logoColor=white\" alt=\"Codex CLI\" />\n</p>\n<p>\n  <strong>Good tier &nbsp;</strong>\n  <img src=\"https://img.shields.io/badge/VS_Code-007ACC?style=flat-square&logo=visualstudiocode&logoColor=white\" alt=\"VS Code\" />\n  <img src=\"https://img.shields.io/badge/Cursor-000000?style=flat-square&logo=cursor&logoColor=white\" alt=\"Cursor\" />\n  <img src=\"https://img.shields.io/badge/OpenCode-000000?style=flat-square&logo=opencode&logoColor=white\" alt=\"OpenCode\" />\n  <img src=\"https://img.shields.io/badge/Hermes-000000?style=flat-square&logoColor=white\" alt=\"Hermes\" />\n</p>\n\n**Full** is every surface repowise has: MCP tools, skills, slash commands, a managed\ninstructions file, hook-level interception of tool calls, and transcript mining after\nthe session. **Good** is the honest half of that: MCP tools and the config to reach\nthem, but no hook-level interception and no transcript mining. A Good-tier agent can\nask repowise anything; repowise never sees the tool calls in between. The tier is\ncomputed from what each integration actually wires, so this list cannot claim a depth\nthe code does not have.\n\nEverything else that speaks MCP is one snippet away. `repowise agents print-config\nclaude-code` prints a stdio server entry to paste into Cline, Windsurf, Zed, Gemini\nCLI or any other host that keys on `mcpServers`, and repowise writes nothing.\n\nAdding an agent takes **one descriptor file and one registry line**, with no changes to\nthe orchestrators. Full matrix and the contributor recipe:\n**[docs/agent/INTEGRATIONS.md →](docs/agent/INTEGRATIONS.md)**\n\n</details>\n\n---\n\n## Supported languages\n\n**25 languages parsed to AST · 39 on a five-rung ladder · framework-aware across\nall of them.**\n\n\"Do you support X\" has five useful answers, not two, so languages land on a\nladder and every rung says what it buys you.\n\n<details>\n<summary><strong>See the complete language ladder</strong></summary>\n\n<p>\n  <strong>Full tier &nbsp;</strong>\n  <img src=\"https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white\" alt=\"Python\" />\n  <img src=\"https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white\" alt=\"TypeScript\" />\n  <img src=\"https://img.shields.io/badge/JavaScript-F7DF1E?style=flat-square&logo=javascript&logoColor=black\" alt=\"JavaScript\" />\n  <img src=\"https://img.shields.io/badge/Svelte-FF3E00?style=flat-square&logo=svelte&logoColor=white\" alt=\"Svelte\" />\n  <img src=\"https://img.shields.io/badge/Vue-42B883?style=flat-square&logo=vuedotjs&logoColor=white\" alt=\"Vue\" />\n  <img src=\"https://img.shields.io/badge/Java-ED8B00?style=flat-square&logo=openjdk&logoColor=white\" alt=\"Java\" />\n  <img src=\"https://img.shields.io/badge/Kotlin-7F52FF?style=flat-square&logo=kotlin&logoColor=white\" alt=\"Kotlin\" />\n  <img src=\"https://img.shields.io/badge/Go-00ADD8?style=flat-square&logo=go&logoColor=white\" alt=\"Go\" />\n  <img src=\"https://img.shields.io/badge/Rust-000000?style=flat-square&logo=rust&logoColor=white\" alt=\"Rust\" />\n  <img src=\"https://img.shields.io/badge/C++-00599C?style=flat-square&logo=cplusplus&logoColor=white\" alt=\"C++\" />\n  <img src=\"https://img.shields.io/badge/C%23-512BD4?style=flat-square&logo=csharp&logoColor=white\" alt=\"C#\" />\n  <img src=\"https://img.shields.io/badge/Scala-DC322F?style=flat-square&logo=scala&logoColor=white\" alt=\"Scala\" />\n  <img src=\"https://img.shields.io/badge/Ruby-CC342D?style=flat-square&logo=ruby&logoColor=white\" alt=\"Ruby\" />\n</p>\n<p>\n  <strong>Good tier &nbsp;</strong>\n  <img src=\"https://img.shields.io/badge/C-A8B9CC?style=flat-square&logo=c&logoColor=black\" alt=\"C\" />\n  <img src=\"https://img.shields.io/badge/Swift-F05138?style=flat-square&logo=swift&logoColor=white\" alt=\"Swift\" />\n  <img src=\"https://img.shields.io/badge/PHP-777BB4?style=flat-square&logo=php&logoColor=white\" alt=\"PHP\" />\n  <img src=\"https://img.shields.io/badge/Dart-0175C2?style=flat-square&logo=dart&logoColor=white\" alt=\"Dart\" />\n  <img src=\"https://img.shields.io/badge/Delphi-EE1F35?style=flat-square&logo=delphi&logoColor=white\" alt=\"Object Pascal / Delphi\" />\n  <img src=\"https://img.shields.io/badge/GDScript-478CBF?style=flat-square&logo=godotengine&logoColor=white\" alt=\"GDScript / Godot\" />\n  <img src=\"https://img.shields.io/badge/VB.NET-945DB7?style=flat-square&logo=dotnet&logoColor=white\" alt=\"VB.NET\" />\n  <img src=\"https://img.shields.io/badge/Elixir-6E4A7E?style=flat-square&logo=elixir&logoColor=white\" alt=\"Elixir\" />\n  <img src=\"https://img.shields.io/badge/F%23-378BBA?style=flat-square&logo=fsharp&logoColor=white\" alt=\"F#\" />\n  <img src=\"https://img.shields.io/badge/Objective--C-438EFF?style=flat-square&logo=apple&logoColor=white\" alt=\"Objective-C\" />\n  &nbsp;<strong>· Partial &nbsp;</strong>\n  <img src=\"https://img.shields.io/badge/Luau-00A2FF?style=flat-square&logo=lua&logoColor=white\" alt=\"Luau\" />\n  <img src=\"https://img.shields.io/badge/Razor-512BD4?style=flat-square&logo=blazor&logoColor=white\" alt=\"Razor / Blazor\" />\n</p>\n\nBelow those two rungs the ladder keeps going, and a language on a lower rung is\nstill doing real work rather than being ignored:\n\n| Rung | Languages | What you get |\n|---|---|---|\n| **Full** (13) | Python · TypeScript · JavaScript · Svelte · Vue · Java · Kotlin · Go · Rust · C++ · C# · Scala · Ruby | The whole pipeline: AST symbols, import resolution, a resolved call graph, heritage, docstrings, framework edges, **and code-health markers** |\n| **Good** (10) | C · Swift · PHP · Dart · Object Pascal · GDScript · VB.NET · Elixir · F# · Objective-C | All of the above except the full health suite |\n| **Partial** (2) | Luau / Roblox · Razor / Blazor | Luau: AST symbols and `require()` resolution, Rojo and `.luaurc` aware. Razor: component symbols, `@code` and component-tag call edges, C# health markers; no import resolution yet |\n| | | ⎯⎯ *tree-sitter parsing stops here; the rungs below come from git and imports* ⎯⎯ |\n| **Lightweight** (6) | Clojure · Haskell · Lean 4 · Erlang · HTML · QML | A real file-to-file import graph, and no symbol-level claims |\n| **Structural** (8) | R · Zig · Julia · Elm · OCaml · Crystal · Nim · D | Git history: blame, hotspots, co-change, ownership, bug history |\n\n**Every language ships in the open-source distribution.** None is gated behind\nthe commercial licence, and none will be. Languages on the way up the ladder,\nincluding **COBOL**, are on the\n**[roadmap →](ROADMAP.md#languages)**.\n\nSQL and dbt projects get real `ref()` / `source()` lineage, shell scripts get\nfunction-level symbols, HTML pages contribute their `<script src>` / `<link href>`\ndependencies (including `index.html` → `src/main.ts`), and OpenAPI, Protobuf,\nGraphQL, Dockerfile, Terraform and friends get dedicated handlers. Anything else is\nstill tracked through git history: blame, hotspots, co-change.\n\nEvery call edge is stamped with **how it was resolved and how much to trust it**, from\n`same_file` at 0.95 down to a repo-wide name match at 0.50, labelled as the guess it is\n([how that works](docs/layers/GRAPH.md)).\nAdding a language takes five small steps and **no changes to the parser core**.\n\nFull matrix: **[docs/layers/LANGUAGE_SUPPORT.md →](docs/layers/LANGUAGE_SUPPORT.md)** ·\nThe graph itself: **[docs/layers/GRAPH.md →](docs/layers/GRAPH.md)** ·\nContributor recipe and internals:\n**[docs/architecture/language-support.md →](docs/architecture/language-support.md)**\n\n</details>\n\n---\n\n<details>\n<summary><strong>Agent setup and optional model-written prose</strong></summary>\n\n**1. Install**\n\n```bash\npip install repowise          # Windows: python -m pip install repowise\nrepowise --version\n```\n\n**2. Index your repo**\n\n```bash\ncd /path/to/your/repo\nrepowise init\n```\n\nBare `init` asks. It scans the repo first, then offers three ways to index it:\neverything (the wiki written by a model), no prose (the same wiki rendered from\nyour code's structure, no key and no spend), or advanced, which walks through the\nindexing and generation knobs. Nothing is spent before you see an estimate and\nconfirm it.\n\nIf you would rather not answer questions, or you are scripting this, name the\nmode and add `-y`:\n\n```bash\nrepowise init --no-prose -y    # free, no key, no questions\nrepowise init --prose -y       # model-written subsystem pages, cost pre-approved\n```\n\nEither way you get the dependency graph, git history, code-health scores and\ndead-code findings in seconds, plus a complete wiki: file, module, layer and cycle\npages, the architecture diagram, the repo overview, API and infra pages, and the\nonboarding collection. On the keyless path every page carries a footer saying it\nwas derived from structure, and the repo overview describes composition, entry\npoints, clusters and dependencies rather than what the project does end to end,\nbecause no template can derive that. Full-text search works on this index;\nsemantic search needs an embedder configured (Ollama is the keyless option).\n\nWent keyless and want the wiki written by a model later? You do not have to decide\nnow. Upgrade it whenever you like with `repowise generate`, a page, a directory,\nor the whole thing at a time, each behind a cost estimate:\n\n```bash\nexport ANTHROPIC_API_KEY=\"sk-ant-...\"   # or OPENAI_API_KEY / GEMINI_API_KEY\nrepowise generate                       # write the unwritten subsystem pages, behind one cost estimate\nrepowise generate --path src/api        # or just one area first\nrepowise generate --all                 # or rewrite the prose on every subsystem page\n```\n\nBare `repowise generate` prints the wiki's state and writes the unwritten\nsubsystem (concept) pages behind a single cost estimate. Every other page was\nalready rendered from structure at index time.\n\nOr pick the provider for the first index directly with `repowise init --provider\ngemini|anthropic|openai`.\n\n**Resuming an interrupted index.** If `init` is interrupted (timeout, crash,\nCtrl+C), re-run it with `--resume` and it continues from where it stopped —\npages already written to the vector store are skipped, and only the missing\nones are generated:\n\n```bash\nrepowise init . --resume\n```\n\n`--resume` is a safe no-op on a fully indexed repo, so it is the right thing to\nreach for whenever a long run is cut short. It works because pages are written\nto LanceDB incrementally, while the SQL `generation_jobs` row only finalizes at\nthe end — a hard interrupt can leave LanceDB ahead of SQL, and `--resume` is\nthe supported recovery path (`repowise doctor` flags the drift).\n\n**3. Connect your agent.** Step 2 already did this for Claude Code: `init`\nwrites a repo-root `.mcp.json` unconditionally and, unless you passed\n`--no-editor-setup`, also registers repowise with `~/.claude/settings.json`.\nOpen a session in this repo and it is already wired; check with `repowise\nagents`.\n\n<details><summary><b>Claude Code</b></summary>\n\nSkipped editor setup, or setting up another machine?\n\n```bash\nrepowise agents add --target=claude-code\n```\n\nThe plugin additionally adds slash commands and skills, which `init` does not\ninstall:\n\n```bash\n/plugin marketplace add repowise-dev/repowise\n/plugin install repowise@repowise\n```\n\nOr wire the MCP server by hand:\n\n```bash\nclaude mcp add repowise -- repowise mcp\n```\nOr edit the project `.mcp.json` `init` already wrote:\n```json\n{ \"mcpServers\": { \"repowise\": { \"command\": \"repowise\", \"args\": [\"mcp\"] } } }\n```\n</details>\n\n<details><summary><b>Codex CLI</b></summary>\n\nAdd to `~/.codex/config.toml`:\n```toml\n[mcp_servers.repowise]\ncommand = \"repowise\"\nargs = [\"mcp\"]\n```\nOr: `codex mcp add repowise -- repowise mcp`\n</details>\n\n**4. First real call.** Ask your agent: *\"Use repowise `get_overview` to summarize this\nrepo\"*, or *\"`get_context` for `src/auth.py`\"*. You get graph-grounded architecture and\nper-file triage instead of a flurry of greps.\n\n> `get_overview` and `get_context` work in index-only mode with no key, synthesized\n> from the graph, git and health layers. `search_codebase` and `get_answer` read the\n> wiki, which index-only mode does build, but they answer from pages rendered from\n> structure rather than model-written prose, and `search_codebase` is full-text only\n> until you configure an embedder.\n\nFull walkthrough: **[docs/start/QUICKSTART.md →](docs/start/QUICKSTART.md)**\n\n</details>\n\n---\n\n## The ten MCP tools\n\nEvery response carries an `_meta` envelope with `index_age_days`, `indexed_commit`, and\na `stale_warning` that fires only when the indexed HEAD diverges from live `.git/HEAD`,\nso your agent always knows how much to trust what it just read.\n\n<details>\n<summary><strong>See the complete MCP tool surface</strong></summary>\n\n| Tool | What only this tool answers |\n|---|---|\n| `get_overview()` | Architecture summary, module map, entry points, git health. The first call on any unfamiliar codebase. |\n| `get_answer(question)` | Hybrid retrieval (full-text plus vector via RRF), PageRank bias and 1-hop graph expansion into one cited answer with a calibrated `retrieval_quality`. Collapses search → read → reason into a single round-trip. |\n| `get_context(targets, include?)` | Triage card for files, modules or symbols: summary, signatures, `hotspot` bit, governing decisions, `symbol_id`s. `include` opens callers, callees, ownership and metrics. Batch many targets in one call. |\n| `get_symbol(\"file.py::Name\")` | Source for one indexed symbol with exact line bounds. Cheaper and safer than `Read` plus offset math. |\n| `search_codebase(query, kind?)` | Semantic search over the wiki, filterable by kind (implementation / test / config / doc), tagging each result's `search_method`. |\n| `get_risk(targets, changed_files?)` | Hotspots, dependents, co-change partners, ownership, test gaps, bug history. Pass `changed_files` for PR mode and get a `directive` block back. |\n| `get_change_risk(revspec)` | What a commit, range or uncommitted change newly made worse across defect, maintainability and performance, why each finding is attributable to it, the tests coverage proves it touches, and how the diff's shape ranks against recent commits. |\n| `get_why(query?, targets?)` | Architectural decisions and their verbatim evidence spans, stamped exact / fuzzy / unverified. Falls back to git archaeology when no decisions exist. |\n| `get_dead_code(...)` | Unreachable code by confidence tier with cleanup-impact estimates, and cross-repo consumer detection in workspace mode. |\n| `get_health(targets?, include?)` | Per-file marker scores across all three signals. `include` opens coverage, trends, per-file signals, the accuracy self-check, and structured refactoring plans. |\n\nTen is a deliberate ceiling rather than a limit we ran into: a small, task-shaped\nsurface is easier for an agent to choose from than a large one. Worked example (*\"add\nrate limiting to all API endpoints\"* in 5 calls instead of ~30 greps and reads), the\nopt-in tools, and the full reference: **[docs/agent/MCP_TOOLS.md →](docs/agent/MCP_TOOLS.md)**\n\n</details>\n\n---\n\n## Measured against the field\n\nSix open-source agent-context tools, the same repositories, the same pinned\ncommits, the same questions, each one given its own full advertised tool surface.\nThe full page carries the rows we lose beside the rows we win.\n\n**Token reduction needs a denominator.** If the comparison is one context payload,\nRepowise reduces 13,984 naive-read tokens to 393, a **97.2% reduction**. If the\ncomparison is the agent's complete output across a real task loop, the reduction is\n**31.6%**. Competitor pages often publish the first kind as \"token savings\"; we\npublish both and call only the second one agent savings.\n\nThe same rule applies to graphs: coverage without correctness rewards fake edges,\nwhile precision without recall rewards drawing almost nothing. Our compiler-graded\nclaim is therefore the pair: in all seven comparisons, no tool that recovers as much\nof the call graph gets more of it right.\n\n<div align=\"center\">\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\".github/assets/bench/file-coverage-dark.svg\" />\n  <img src=\".github/assets/bench/file-coverage.svg\" alt=\"File coverage on 42 sealed ContextBench instances: repowise get_answer 0.876, repowise search_codebase 0.742, CodeGraph 0.610, Graphify 0.546, code-review-graph 0.445, cocoindex 0.361\" width=\"100%\" />\n</picture>\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\".github/assets/bench/agent-output-tokens-dark.svg\" />\n  <img src=\".github/assets/bench/agent-output-tokens.svg\" alt=\"Output tokens an agent writes to reach an answer across 43 django questions on Codex: repowise 1,250, CodeGraph 1,383, Serena 1,550, Graphify 1,658, code-review-graph 1,710, bare agent 1,828\" width=\"100%\" />\n</picture>\n</div>\n\n- **Finds the right files.** 0.876 file coverage against CodeGraph's 0.610 on a\n  **sealed** 42-instance split, held out from every improvement round. 19 wins,\n  1 loss per instance. Deterministic grading, no LLM judge. *n=42, sign test\n  p=0.00004.* CodeGraph scores the same on both halves to three decimals, so\n  neither half is the easy one.\n- **Less work in a real agent loop.** -31.6% output tokens against a bare agent,\n  leaner on 37 of 44 questions. *n=43, p&lt;0.0001.* CodeGraph is a genuine second\n  at -24.4%: more than one tool here works, and we lead the field rather than\n  being alone in it.\n- **Fewer steps to get there.** 3.8 tool calls where the bare agent needed 7.2,\n  and 3.0 files opened instead of 7.2, the mechanism behind the token saving,\n  visible directly rather than inferred.\n\n**[The full results, the methodology, and the rows we lose →](docs/BENCHMARKS.md)**\n\n---\n\n## How it compares on capability\n\nNo single product competes with all of this, so there is no single table. Three\naxes, three sets of real peers. Rows marked *measured* are head-to-head numbers,\nand they link to **[docs/BENCHMARKS.md](docs/BENCHMARKS.md)** where the sample\nsizes, the tests and the rows we lose all live.\n\n<details>\n<summary><strong>Open the complete capability comparisons</strong></summary>\n\n### As an agent context layer\n\nAgainst the tools doing the same job: index a repository, serve it to a coding\nagent over MCP.\n\n| | repowise | CodeGraph | Serena | DeepWiki |\n|---|---|---|---|---|\n| Self-hostable, open source | ✅ AGPL-3.0 | ✅ | ✅ | ❌ cloud only |\n| Private repo, no cloud | ✅ | ✅ | ✅ | ❌ OSS forks only |\n| MCP tools served | 10 core + workspace tools | 1 | 29 | 3 |\n| **Finds the gold files** *([measured](docs/BENCHMARKS.md#1-finding-the-right-files), n=42 sealed)* | ✅ **0.876** | 0.610 | not in this run | not measured |\n| **Output tokens vs a bare agent** *([measured](docs/BENCHMARKS.md#2-what-changes-in-a-real-agent-loop), n=43)* | ✅ **-31.6%** | -24.4% | -14.8% | not measured |\n| **Memory to build the graph** *([measured](docs/BENCHMARKS.md#what-it-costs-to-run), 5 tools, 35 repos)* | ✅ **75 MB**, lowest on 35 of 35 | 757 MB | not measured | n/a, cloud |\n| **Time to build the graph** *([measured](docs/BENCHMARKS.md#what-it-costs-to-run), same run)* | **2.77s**, fastest on 14 of 35 | **3.65s**, fastest on 16 | not measured | n/a, cloud |\n| **Time to build the full index, django** *([measured](docs/BENCHMARKS.md#what-it-costs-to-run))* | ⚠️ **366.8s**, slowest here | ✅ **16.4s** | not measured | n/a, cloud |\n| | *five layers against their one; one-time, updates after it are incremental* | | | |\n| **Call-edge precision** *([measured](docs/BENCHMARKS.md#7-edge-precision), 540 rows hand-graded from source)* | ✅ **84.8%** | 57.0% | not measured | not measured |\n| **Call-edge precision, judged by a compiler** *([measured](docs/BENCHMARKS.md#8-the-same-question-against-an-answer-key-we-do-not-control), 5 tools, 7 cells, 37,853 edges)* | ✅ **nothing that finds as much gets more of it right**, 7 of 7 | lower precision in 7, and lower recall in 5 | not measured | not measured |\n| Generated documentation | ✅ | ❌ | ❌ | ✅ |\n| Proactive agent hooks | ✅ Claude + Codex | ❌ | ❌ | ❌ |\n| Auto-generated AI instructions (`CLAUDE.md`, `AGENTS.md`) | ✅ | ❌ | ❌ | ❌ |\n| Command-output distillation | ✅ reversible | ❌ | ❌ | ❌ |\n| Learns from your usage (session-mined decisions, demand-weighted docs) | ✅ | ❌ | ❌ | ❌ |\n| Architectural decision records | ✅ | ❌ | ❌ | ❌ |\n| Multi-repo workspace intelligence | ✅ contracts, co-change, federated MCP | ❌ | ❌ | ❌ |\n\n**The two cost rows answer different questions.** Building the call graph, we are\nthe lightest tool measured, about ten times lighter than the next, and roughly as\nfast as the fastest. Building the *whole* index, CodeGraph is **22x faster than we\nare**, because by then we have also built the git-history layer, the wiki, the\ndecisions and the health pass. If a call graph is all you need, that is the right\ntrade and you should take it. With prose generation on, which is what a default\n`repowise init` costs, it is **135x**. Graphify and\ncode-review-graph were in the same measured field and are on the benchmarks page.\n\nThe precision row cuts the other way and is worth stating as plainly: of the call\nedges we draw, **about fifteen percent are wrong**, and on `seastar` CodeGraph\ngrades better than we do. Nine languages were read on both sides, four separate,\nfive are statistical ties.\n\nThe compiler row exists because we graded the hand-read one ourselves. On Go and\nTypeScript the answer key is the Go team's own RTA call graph and the `tsc`\nchecker's own resolution, which we neither wrote nor can tune.\n\n**Read that row carefully, because it is a claim about two numbers.** Precision\nalone is easy to win by drawing almost nothing, and two of the five tools score\nabove us that way, one of them at 0.997 from a graph holding 17% of the calls in\nthe repository. Recall alone is easy to win by drawing everything, and the tool\nthat leads it emits, on the largest repository measured, more than a third of its\nedges as calls that do not exist. What we claim is the pair: **in all seven cells,\nno tool that recovers as much of the call graph as we do gets more of it right.**\nThe column we lose is still there and is still ours to lose: **the tool with the\nhighest recall in every Go cell is not us.**\n\n<sub>Measured against CodeGraph 1.5.0, Graphify 0.9.31, Serena 1.6.2.dev0,\ncode-review-graph 2.3.7, on repowise `081a59fa` (between v0.37.0 and v0.38.0),\nAugust 2026. Unmarked rows are capability presence, not measurements.</sub>\n\n### As a code health tool\n\n| | repowise | CodeScene |\n|---|---|---|\n| Self-hostable, open source | ✅ AGPL-3.0 | ⚠️ on-prem Docker, proprietary |\n| Code health score (1-10) | ✅ 49 detectors, 26 scoring | ✅ 25-30 |\n| Brain Method / LCOM4 / god class | ✅ | ✅ |\n| **Defects found at a 20% review budget** *([measured](docs/BENCHMARKS.md#5-code-health-predicts-defects), 2,770 files)* | ✅ **0.173** | 0.074 |\n| **Effort-aware ranking, Popt** *(measured, p=0.003)* | ✅ **0.607** | 0.462 |\n| **Precision at that budget** *(measured)* | 0.580 | ✅ **0.636**, a shorter list |\n| **Discrimination, ROC AUC** *(measured, paired)* | 0.731 | 0.705, *p=0.054, not significant* |\n| Defect-prediction AUC, published and reproducible | ✅ 0.737 over 21 repos, held-out 0.76-0.78 | ✅ Code Red study |\n| Business impact (resolution time) | ❌ *we could not replicate this on open data* | ✅ Code Red study |\n| Git intelligence (hotspots, ownership, co-change) | ✅ | ✅ |\n| Pre-merge change-risk scoring | ✅ 0-10 + directives | ✅ |\n| Health trend + declining alerts | ✅ rolling snapshots | ✅ |\n| Bus factor analysis | ✅ | ✅ |\n| Concrete cross-file refactoring plans | ✅ graph-aware + blast radius | ⚠️ within-function only |\n| Dataflow-verified within-function plans | ✅ CFG + reaching definitions | ⚠️ LLM-generated, unverified |\n| Test-coverage intelligence | ✅ LCOV/Cobertura/Clover | ❌ |\n| Untested-hotspot detection | ✅ coverage × hotspot | ❌ |\n| Dead code detection | ✅ | ❌ |\n| Serves it to an AI agent over MCP | ✅ | ✅ |\n| Local dashboard | ✅ | ✅ |\n\nCodeScene is the only other vendor in this category with a published empirical\ndefect study, which is why it is the one we ran head to head against. It flags\nabout 27 files where we flag 132, so if you want a short list to action rather\nthan the ranking that catches the most defects, its threshold is the better fit.\n\n### Documentation generators\n\nDeepWiki, Google Code Wiki and Swimm generate documentation from a repository,\nwhich overlaps one of our five layers. **We have not measured against them**, so\nthere is no table here rather than a table of checkmarks. DeepWiki appears above\nbecause it also serves an agent over MCP, which is a job we can be measured on.\n\n### The PR bot, against the LLM review bots\n\n| | Repowise PR Bot | CodeRabbit | Greptile |\n|---|---|---|---|\n| LLM calls per PR | ✅ **zero** | ❌ every review | ❌ every review |\n| Same diff, same review | ✅ deterministic | ❌ sampled output | ❌ sampled output |\n| Your code sent to a model provider | ✅ never | ❌ yes | ❌ yes |\n| Symbol-level blast radius (changed contracts → their callers) | ✅ call graph | ❌ | ⚠️ prose, from context |\n| Co-change partners missing from the PR | ✅ git history | ❌ | ❌ |\n| Change risk vs the repo's own distribution | ✅ 0-10 + percentile | ❌ | ❌ |\n| Public analysis page per PR, no sign-in | ✅ | ❌ | ❌ |\n| Silent on a clean PR | ✅ by default | ⚠️ configurable | ⚠️ configurable |\n| Cost on public repos | ✅ free, uncapped | ⚠️ free tier | ⚠️ free tier |\n| Self-hostable | ✅ AGPL-3.0 | ❌ | ❌ |\n\nThe axis where this is not close is the first two rows. An LLM reviewer is a different\nproduct with a different failure mode: it can read intent, and it can also be wrong in a\nnew way on every run. This one does set arithmetic over a call graph and a git history,\nso there is nothing to hallucinate and nothing to prompt-inject, and pushing the same\ndiff twice produces the same review twice.\n\n**Repowise is the intersection:** an agent-native context layer *and* behavioral git\nintelligence *and* a defect-validated health score with the fix attached, all out of\none index, self-hostable and open source. Full side-by-side comparisons:\n**[repowise.dev/compare →](https://www.repowise.dev/compare)**\n\n</details>\n\n---\n\n<a id=\"for-teams-and-enterprises\"></a>\n\n## For teams and enterprises\n\nAI makes producing a change cheaper; it does not make understanding its consequences\ncheaper. In a large estate, the answer crosses repositories, ownership boundaries,\nservice contracts, test suites, and years of architectural history. Repowise gives\ndevelopers, agents, reviewers, and platform teams the same evidence about what exists,\nwhat depends on it, what is risky, and what will break.\n\nThat is the engineering reason to deploy it. The security reason is structural:\n**graph, git, health, change risk, tests, dead code, and PR review make zero LLM\ncalls.** Documentation prose is optional and can use your provider contract or run\nfully offline through Ollama.\n\n| Status | Enterprise capability |\n|---|---|\n| **Shipping now** | Five deterministic intelligence layers, ten MCP tools, multi-repo workspaces, contract extraction and blast radius, test intelligence, architecture conformance, local dashboard, auto-sync, and full-history secret scanning. |\n| **GA commercially** | Hosted graph-aware security, CVE prioritization, CycloneDX SBOM and VEX, PCI-DSS and SOC 2 evidence reports, audit exports and webhook stream, Jira and Confluence, customer-infrastructure HA topology, custom extensions, SLA support, and IP indemnification. |\n| **Rolling out** | GitHub Enterprise, Azure DevOps, GitLab and Bitbucket integrations; SAML/OIDC SSO and SCIM; engineering-leader dashboards. |\n| **Planned** | RBAC and multi-tenancy, packaged air-gap install bundle, and the Helm chart. |\n\nSelf-host with `pip install` or run the API, workers, dashboard, Postgres, and\nLanceDB/pgvector containers on your infrastructure. Deterministic analysis needs no\nprovider. When optional prose is enabled, provider choice is per repository. Stored\ndata includes the graph, embeddings, wiki pages, and git metadata; raw source is\nprocessed transiently and is not persisted.\n\n**Past one repository.** Workspaces index an estate as one unit: API contracts\nmatched producer to consumer so a breaking change is caught before it ships,\ncross-repo co-change, and one federated MCP endpoint that answers across all of\nit. *(Estate-scale dashboards: [in development](ROADMAP.md#multi-repo-and-workspace).)*\n\n**Not on git?** Only the history layer needs a commit log. Point `repowise init`\nat a plain directory, an export, or a Perforce or SVN workspace and the graph,\ndocumentation, decisions and code-health layers all build normally; what is\nmissing is hotspots, ownership, co-change and bug history until the history layer\nlearns to read your system.\n*([Perforce, SVN, Endevor and ChangeMan on the roadmap →](ROADMAP.md#source-control-beyond-git))*\n\nThe complete capability matrix is maintained in\n[COMMERCIAL.md](docs/business/COMMERCIAL.md#4-commercial-capabilities-at-a-glance),\nwith every item labelled GA, rolling out, in development, or planned.\n\n[**repowise.dev**](https://www.repowise.dev) runs the same engine fully managed, at\nfeature parity with self-hosted. We run it on our own codebase in the open:\n[live snapshot →](https://www.repowise.dev/s/5a6b93fa9a69) ·\n[explore public repos →](https://www.repowise.dev/explore).\n\n**[Commercial detail and pricing models →](docs/business/COMMERCIAL.md)** ·\n**[Security review pack →](docs/business/SECURITY_COMPLIANCE.md)** ·\n**[Roadmap →](ROADMAP.md)** ·\n[hello@repowise.dev](mailto:hello@repowise.dev) ·\n[security@repowise.dev](mailto:security@repowise.dev)\n\n---\n\n## Privacy\n\n- **Deterministic or offline mode:** with `--no-prose`, code-derived content stays on\n  your infrastructure. The CLI reports **anonymous, opt-out** usage telemetry\n  (command names and coarse environment only); disable it with `repowise telemetry\n  disable`, `DO_NOT_TRACK=1`, or by running fully offline.\n  [What's collected →](docs/reference/TELEMETRY.md)\n- **Optional LLM features:** generated prose, decision extraction and code-generating\n  refactoring can send code-derived prompts directly to the provider configured with\n  your own key. Repowise does not proxy those calls; provider handling and retention\n  follow your account and provider terms.\n- **What's stored:** the graph, embeddings, generated wiki pages, and git metadata.\n  Raw source is processed transiently and never persisted. See the\n  [security review pack](docs/business/SECURITY_COMPLIANCE.md) for the threat model\n  and data-flow boundaries.\n- **Fully offline:** Ollama plus a local embedding model means zero external calls.\n\nDoing a security review? **[docs/business/SECURITY_COMPLIANCE.md →](docs/business/SECURITY_COMPLIANCE.md)**\n\n---\n\n## CLI\n\n```bash\nrepowise init [PATH]      # index a codebase (one-time; asks, or --no-prose -y needs no LLM)\nrepowise generate [PATH]  # write wiki pages with a model, on demand (upgrade a keyless wiki)\nrepowise serve [PATH]     # MCP server + local dashboard\nrepowise update [PATH]    # incremental update (seconds; --workspace for every repo)\nrepowise watch            # auto-sync daemon, re-index on file change\nrepowise search \"<q>\"     # hybrid search (fulltext / semantic / symbol / path)\nrepowise ask \"<q>\"        # a synthesized answer with citations\nrepowise context <files>  # triage card: layer, hotspot, fix history, freshness\nrepowise symbol <id>      # one symbol's body, with verified line bounds\nrepowise why <q|path>     # decisions, rationale, git archaeology\nrepowise health           # code-health KPIs and lowest-scoring files\nrepowise risk main..HEAD  # score a branch or PR range for defect risk\nrepowise risk -t <file>   # what history says about touching a file\nrepowise impacted-tests   # only the tests a diff actually exercises\nrepowise dead-code        # unreachable-code report\nrepowise decision list    # architectural decisions\nrepowise export --format structurizr  # the architecture as Structurizr DSL, no LLM\nrepowise distill pytest   # compact, errors-first, reversible command output\nrepowise saved            # tokens and dollars saved by distillation\nrepowise workspace add    # multi-repo workspace management\nrepowise doctor           # check setup, API keys, index drift\nrepowise uninstall        # remove what repowise wrote, and say what it left\n```\n\nEvery command and flag: **[docs/reference/CLI_REFERENCE.md](docs/reference/CLI_REFERENCE.md)** ·\nconfig: **[docs/reference/CONFIG.md](docs/reference/CONFIG.md)** ·\nexamples: **[examples/](examples/)**\n\n---\n\n## Contributing\n\n```bash\ngit clone https://github.com/repowise-dev/repowise\ncd repowise\nuv sync --all-packages\nuv run repowise --version\nuv run pytest tests/unit/\n```\n\nNew here? You do not have to read 3,000 files to start. We keep a public index of this\nrepo built by repowise itself, re-indexed on every push:\n[**explore repowise with repowise →**](https://repowise.dev/repo/repowise-dev/repowise)\n(architecture, hotspots, ownership, decisions, and a ranked\n[refactoring backlog](https://repowise.dev/repo/repowise-dev/repowise/refactoring) you\nare welcome to pick from).\n\nFull guide, including how to add languages and LLM providers:\n[CONTRIBUTING.md](.github/CONTRIBUTING.md) · architecture:\n[docs/architecture/](docs/architecture/README.md)\n\n---\n\n## License\n\nAGPL-3.0. Free for individuals, teams and companies using repowise internally.\n\nFor commercial licensing (the enterprise security and compliance layer, SSO/SCIM, RBAC,\nworkflow integrations, priority support and SLA, or embedding repowise in a product\nwithout AGPL obligations), see\n**[docs/business/COMMERCIAL.md](docs/business/COMMERCIAL.md)** or contact\n[hello@repowise.dev](mailto:hello@repowise.dev).\n\n---\n\n<div align=\"center\">\n\n<em>Built for engineers who got tired of watching their AI agent <code>cat</code> the same ",
  "bytes": 60000,
  "sha": "36848c302e1d06ee637c551dad4a94cbb3345730bd611a3471ec11bae7984ff6",
  "repo_slug": "repowise-dev/repowise",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_dev_repowise_repowise_433a5755/readme"
}