<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Codebase Analysis on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/codebase-analysis/</link>
        <description>Recent content in Codebase Analysis on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 28 Apr 2026 17:29:12 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/codebase-analysis/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>GitNexus</title>
        <link>https://producthunt.programnotes.cn/en/p/gitnexus/</link>
        <pubDate>Tue, 28 Apr 2026 17:29:12 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/gitnexus/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1705321791621-f0548129282a?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NzczNjg1Mjd8&amp;ixlib=rb-4.1.0" alt="Featured image of post GitNexus" /&gt;&lt;h1 id=&#34;abhigyanpatwarigitnexus&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/abhigyanpatwari/GitNexus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;abhigyanpatwari/GitNexus&lt;/a&gt;
&lt;/h1&gt;&lt;h1 id=&#34;gitnexus&#34;&gt;GitNexus
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;⚠️ Important Notice:&lt;/strong&gt; GitNexus has NO official cryptocurrency, token, or coin. Any token/coin using the GitNexus name on Pump.fun or any other platform is &lt;strong&gt;not affiliated with, endorsed by, or created by&lt;/strong&gt; this project or its maintainers. Do not purchase any cryptocurrency claiming association with GitNexus.&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://trendshift.io/repositories/19809&#34; target=&#34;_blank&#34;&gt;
    &lt;img src=&#34;https://trendshift.io/api/badge/repositories/19809&#34; alt=&#34;abhigyanpatwari%2FGitNexus | Trendshift&#34; style=&#34;width: 250px; height: 55px;&#34; width=&#34;250&#34; height=&#34;55&#34;/&gt;
  &lt;/a&gt;
  &lt;h2&gt;Join the official Discord to discuss ideas, issues etc!&lt;/h2&gt;
  &lt;a href=&#34;https://discord.gg/MgJrmsqr62&#34;&gt;
    &lt;img src=&#34;https://img.shields.io/discord/1477255801545429032?color=5865F2&amp;logo=discord&amp;logoColor=white&#34; alt=&#34;Discord&#34;/&gt;
  &lt;/a&gt;
  &lt;a href=&#34;https://www.npmjs.com/package/gitnexus&#34;&gt;
    &lt;img src=&#34;https://img.shields.io/npm/v/gitnexus.svg&#34; alt=&#34;npm version&#34;/&gt;
  &lt;/a&gt;
  &lt;a href=&#34;https://polyformproject.org/licenses/noncommercial/1.0.0/&#34;&gt;
    &lt;img src=&#34;https://img.shields.io/badge/License-PolyForm%20Noncommercial-blue.svg&#34; alt=&#34;License: PolyForm Noncommercial&#34;/&gt;
  &lt;/a&gt;
  &lt;p&gt;&lt;strong&gt;Enterprise (SaaS &amp; Self-hosted)&lt;/strong&gt; - &lt;a href=&#34;https://akonlabs.com&#34;&gt;akonlabs.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Building nervous system for agent context.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Indexes any codebase into a knowledge graph — every dependency, call chain, cluster, and execution flow — then exposes it through smart tools so AI agents never miss code.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/user-attachments/assets/172685ba-8e54-4ea7-9ad1-e31a3398da72&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/user-attachments/assets/172685ba-8e54-4ea7-9ad1-e31a3398da72&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Like DeepWiki, but deeper.&lt;/em&gt; DeepWiki helps you &lt;em&gt;understand&lt;/em&gt; code. GitNexus lets you &lt;em&gt;analyze&lt;/em&gt; it — because a knowledge graph tracks every relationship, not just descriptions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The &lt;strong&gt;Web UI&lt;/strong&gt; is a quick way to chat with any repo. The &lt;strong&gt;CLI + MCP&lt;/strong&gt; is how you make your AI agent actually reliable — it gives Cursor, Claude Code, Codex, and friends a deep architectural view of your codebase so they stop missing dependencies, breaking call chains, and shipping blind edits. Even smaller models get full architectural clarity, making it compete with Goliath models.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;star-history&#34;&gt;Star History
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.star-history.com/#abhigyanpatwari/GitNexus&amp;amp;type=date&amp;amp;legend=top-left&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://api.star-history.com/svg?repos=abhigyanpatwari/GitNexus&amp;amp;type=date&amp;amp;legend=top-left&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Star History Chart&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;two-ways-to-use-gitnexus&#34;&gt;Two Ways to Use GitNexus
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;CLI + MCP&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;Web UI&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;What&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Index repos locally, connect AI agents via MCP&lt;/td&gt;
          &lt;td&gt;Visual graph explorer + AI chat in browser&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;For&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Daily development with Cursor, Claude Code, Codex, Windsurf, OpenCode&lt;/td&gt;
          &lt;td&gt;Quick exploration, demos, one-off analysis&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Full repos, any size&lt;/td&gt;
          &lt;td&gt;Limited by browser memory (~5k files), or unlimited via backend mode&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;npm install -g gitnexus&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;No install — &lt;a class=&#34;link&#34; href=&#34;https://gitnexus.vercel.app&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;gitnexus.vercel.app&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;LadybugDB native (fast, persistent)&lt;/td&gt;
          &lt;td&gt;LadybugDB WASM (in-memory, per session)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Parsing&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Tree-sitter native bindings&lt;/td&gt;
          &lt;td&gt;Tree-sitter WASM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Privacy&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Everything local, no network&lt;/td&gt;
          &lt;td&gt;Everything in-browser, no server&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bridge mode:&lt;/strong&gt; &lt;code&gt;gitnexus serve&lt;/code&gt; connects the two — the web UI auto-detects the local server and can browse all your CLI-indexed repos without re-uploading or re-indexing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;enterprise&#34;&gt;Enterprise
&lt;/h2&gt;&lt;p&gt;GitNexus is available as an &lt;strong&gt;enterprise offering&lt;/strong&gt; - either as a fully managed &lt;strong&gt;SaaS&lt;/strong&gt; or a &lt;strong&gt;self-hosted&lt;/strong&gt; deployment. Also available for &lt;strong&gt;commercial use&lt;/strong&gt; of the OSS version with proper licensing.&lt;/p&gt;
&lt;p&gt;Enterprise includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PR Review&lt;/strong&gt; - automated blast radius analysis on pull requests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-updating Code Wiki&lt;/strong&gt; - always up-to-date documentation (Code Wiki is also available in OSS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-reindexing&lt;/strong&gt; - knowledge graph stays fresh automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-repo support&lt;/strong&gt; - unified graph across repositories&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OCaml support&lt;/strong&gt; - additional language coverage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority feature/language support&lt;/strong&gt; - request new languages or features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Upcoming:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto regression forensics&lt;/li&gt;
&lt;li&gt;End-to-end test generation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 Learn more at &lt;a class=&#34;link&#34; href=&#34;https://akonlabs.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;akonlabs.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;💬 For commercial licensing or enterprise inquiries, ping us on &lt;a class=&#34;link&#34; href=&#34;https://discord.gg/AAsRVT6fGb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord&lt;/a&gt; or drop an email at &lt;a class=&#34;link&#34; href=&#34;mailto:founders@akonlabs.com&#34; &gt;founders@akonlabs.com&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;development&#34;&gt;Development
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;ARCHITECTURE.md&#34; &gt;ARCHITECTURE.md&lt;/a&gt; — packages, index → graph → MCP flow, where to change code&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;RUNBOOK.md&#34; &gt;RUNBOOK.md&lt;/a&gt; — analyze, embeddings, stale index, MCP recovery, CI snippets&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;GUARDRAILS.md&#34; &gt;GUARDRAILS.md&lt;/a&gt; — safety rules and operational “Signs” for contributors and agents&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;CONTRIBUTING.md&#34; &gt;CONTRIBUTING.md&lt;/a&gt; — license, setup, commits, and pull requests&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;TESTING.md&#34; &gt;TESTING.md&lt;/a&gt; — test commands for &lt;code&gt;gitnexus&lt;/code&gt; and &lt;code&gt;gitnexus-web&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cli--mcp-recommended&#34;&gt;CLI + MCP (recommended)
&lt;/h2&gt;&lt;p&gt;The CLI indexes your repository and runs an MCP server that gives AI agents deep codebase awareness.&lt;/p&gt;
&lt;h3 id=&#34;quick-start&#34;&gt;Quick Start
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Index your repo (run from repo root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx gitnexus analyze
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. This indexes the codebase, installs agent skills, registers Claude Code hooks, and creates &lt;code&gt;AGENTS.md&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt; context files — all in one command.&lt;/p&gt;
&lt;p&gt;To configure MCP for your editor, run &lt;code&gt;npx gitnexus setup&lt;/code&gt; once — or set it up manually below.&lt;/p&gt;
&lt;h3 id=&#34;mcp-setup&#34;&gt;MCP Setup
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;gitnexus setup&lt;/code&gt; auto-detects your editors and writes the correct global MCP config. You only need to run it once.&lt;/p&gt;
&lt;h3 id=&#34;editor-support&#34;&gt;Editor Support
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Editor&lt;/th&gt;
          &lt;th&gt;MCP&lt;/th&gt;
          &lt;th&gt;Skills&lt;/th&gt;
          &lt;th&gt;Hooks (auto-augment)&lt;/th&gt;
          &lt;th&gt;Support&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;Yes (PreToolUse + PostToolUse)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Full&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;MCP + Skills&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Codex&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;MCP + Skills&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Windsurf&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;MCP&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;OpenCode&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;Yes&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;MCP + Skills&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; gets the deepest integration: MCP tools + agent skills + PreToolUse hooks that enrich searches with graph context + PostToolUse hooks that detect a stale index after commits and prompt the agent to reindex.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;community-integrations&#34;&gt;Community Integrations
&lt;/h2&gt;&lt;p&gt;Built by the community — not officially maintained, but worth checking out.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Project&lt;/th&gt;
          &lt;th&gt;Author&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tintinweb/pi-gitnexus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pi-gitnexus&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/tintinweb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@tintinweb&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;GitNexus plugin for &lt;a class=&#34;link&#34; href=&#34;https://pi.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pi&lt;/a&gt; — &lt;code&gt;pi install npm:pi-gitnexus&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ShunsukeHayashi/gitnexus-stable-ops&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;gitnexus-stable-ops&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ShunsukeHayashi&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@ShunsukeHayashi&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Stable ops &amp;amp; deployment workflows (Miyabi ecosystem)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Have a project built on GitNexus? Open a PR to add it here!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you prefer manual configuration:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; (full support — MCP + skills + hooks):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# macOS / Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude mcp add gitnexus -- npx -y gitnexus@latest mcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Windows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; (full support — MCP + skills):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;codex mcp add gitnexus -- npx -y gitnexus@latest mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; (&lt;code&gt;~/.cursor/mcp.json&lt;/code&gt; — global, works for all projects):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;gitnexus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gitnexus@latest&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;OpenCode&lt;/strong&gt; (&lt;code&gt;~/.config/opencode/config.json&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;gitnexus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;local&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gitnexus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; (&lt;code&gt;~/.codex/config.toml&lt;/code&gt; for system scope, or &lt;code&gt;.codex/config.toml&lt;/code&gt; for project scope):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mcp_servers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;gitnexus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gitnexus@latest&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;cli-commands&#34;&gt;CLI Commands
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus setup                   &lt;span class=&#34;c1&#34;&gt;# Configure MCP for your editors (one-time)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;# Index a repository (or update stale index)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --force         &lt;span class=&#34;c1&#34;&gt;# Force full re-index&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --skills        &lt;span class=&#34;c1&#34;&gt;# Generate repo-specific skill files from detected communities&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --skip-embeddings  &lt;span class=&#34;c1&#34;&gt;# Skip embedding generation (faster)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --skip-agents-md  &lt;span class=&#34;c1&#34;&gt;# Preserve custom AGENTS.md/CLAUDE.md gitnexus section edits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --skip-git        &lt;span class=&#34;c1&#34;&gt;# Index folders that are not Git repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --embeddings    &lt;span class=&#34;c1&#34;&gt;# Enable embedding generation (slower, better search)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --verbose       &lt;span class=&#34;c1&#34;&gt;# Log skipped files when parsers are unavailable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus analyze --worker-timeout &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Increase worker idle timeout for slow parses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus mcp                     &lt;span class=&#34;c1&#34;&gt;# Start MCP server (stdio) — serves all indexed repos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus serve                   &lt;span class=&#34;c1&#34;&gt;# Start local HTTP server (multi-repo) for web UI connection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus list                    &lt;span class=&#34;c1&#34;&gt;# List all indexed repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus status                  &lt;span class=&#34;c1&#34;&gt;# Show index status for current repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus clean                   &lt;span class=&#34;c1&#34;&gt;# Delete index for current repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus clean --all --force     &lt;span class=&#34;c1&#34;&gt;# Delete all indexes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;# Generate repository wiki from knowledge graph&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki --model &amp;lt;model&amp;gt;    &lt;span class=&#34;c1&#34;&gt;# Wiki with custom LLM model (default: gpt-4o-mini)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki --base-url &amp;lt;url&amp;gt;   &lt;span class=&#34;c1&#34;&gt;# Wiki with custom LLM API base URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Repository groups (multi-repo / monorepo service tracking)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group create &amp;lt;name&amp;gt;                                   &lt;span class=&#34;c1&#34;&gt;# Create a repository group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group add &amp;lt;group&amp;gt; &amp;lt;groupPath&amp;gt; &amp;lt;registryName&amp;gt;          &lt;span class=&#34;c1&#34;&gt;# Add a repo to a group. &amp;lt;groupPath&amp;gt; is a hierarchy path (e.g. hr/hiring/backend); &amp;lt;registryName&amp;gt; is the repo&amp;#39;s name from the registry (see `gitnexus list`)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group remove &amp;lt;group&amp;gt; &amp;lt;groupPath&amp;gt;                      &lt;span class=&#34;c1&#34;&gt;# Remove a repo from a group by its hierarchy path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group list &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                     &lt;span class=&#34;c1&#34;&gt;# List groups, or show one group&amp;#39;s config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group sync &amp;lt;name&amp;gt;                                     &lt;span class=&#34;c1&#34;&gt;# Extract contracts and match across repos/services&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group contracts &amp;lt;name&amp;gt;  &lt;span class=&#34;c1&#34;&gt;# Inspect extracted contracts and cross-links&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group query &amp;lt;name&amp;gt; &amp;lt;q&amp;gt;  &lt;span class=&#34;c1&#34;&gt;# Search execution flows across all repos in a group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus group status &amp;lt;name&amp;gt;     &lt;span class=&#34;c1&#34;&gt;# Check staleness of repos in a group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If &lt;code&gt;analyze&lt;/code&gt; reports a worker parse timeout on a large or unusual repository, it keeps running and falls back safely. To give slow worker jobs more time, use &lt;code&gt;gitnexus analyze --worker-timeout 60&lt;/code&gt; or set &lt;code&gt;GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=60000&lt;/code&gt;. For very large files, &lt;code&gt;GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES&lt;/code&gt; controls the worker job byte budget.&lt;/p&gt;
&lt;h3 id=&#34;what-your-ai-agent-gets&#34;&gt;What Your AI Agent Gets
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;16 tools&lt;/strong&gt; exposed via MCP (11 per-repo + 5 group):&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tool&lt;/th&gt;
          &lt;th&gt;What It Does&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;repo&lt;/code&gt; Param&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;list_repos&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Discover all indexed repositories&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Process-grouped hybrid search (BM25 + semantic + RRF)&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;context&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;360-degree symbol view — categorized refs, process participation&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;impact&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Blast radius analysis with depth grouping and confidence&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;detect_changes&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Git-diff impact — maps changed lines to affected processes&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;rename&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Multi-file coordinated rename with graph + text search&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;cypher&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Raw Cypher graph queries&lt;/td&gt;
          &lt;td&gt;Optional&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;group_list&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;List configured repository groups&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;group_sync&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Extract contracts and match across repos/services&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;group_contracts&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Inspect extracted contracts and cross-links&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;group_query&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Search execution flows across all repos in a group&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;group_status&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Check staleness of repos in a group&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;When only one repo is indexed, the &lt;code&gt;repo&lt;/code&gt; parameter is optional. With multiple repos, specify which one: &lt;code&gt;query({query: &amp;quot;auth&amp;quot;, repo: &amp;quot;my-app&amp;quot;})&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt; for instant context:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Resource&lt;/th&gt;
          &lt;th&gt;Purpose&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repos&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;List all indexed repositories (read this first)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/context&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Codebase stats, staleness check, and available tools&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/clusters&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;All functional clusters with cohesion scores&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/cluster/{name}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Cluster members and details&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/processes&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;All execution flows&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/process/{name}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Full process trace with steps&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;gitnexus://repo/{name}/schema&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Graph schema for Cypher queries&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;2 MCP prompts&lt;/strong&gt; for guided workflows:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Prompt&lt;/th&gt;
          &lt;th&gt;What It Does&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;detect_impact&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Pre-commit change analysis — scope, affected processes, risk level&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;generate_map&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Architecture documentation from the knowledge graph with mermaid diagrams&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;4 agent skills&lt;/strong&gt; installed to &lt;code&gt;.claude/skills/&lt;/code&gt; automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exploring&lt;/strong&gt; — Navigate unfamiliar code using the knowledge graph&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging&lt;/strong&gt; — Trace bugs through call chains&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact Analysis&lt;/strong&gt; — Analyze blast radius before changes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refactoring&lt;/strong&gt; — Plan safe refactors using dependency mapping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Repo-specific skills&lt;/strong&gt; generated with &lt;code&gt;--skills&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;When you run &lt;code&gt;gitnexus analyze --skills&lt;/code&gt;, GitNexus detects the functional areas of your codebase (via Leiden community detection) and generates a &lt;code&gt;SKILL.md&lt;/code&gt; file for each one under &lt;code&gt;.claude/skills/generated/&lt;/code&gt;. Each skill describes a module&amp;rsquo;s key files, entry points, execution flows, and cross-area connections — so your AI agent gets targeted context for the exact area of code you&amp;rsquo;re working in. Skills are regenerated on each &lt;code&gt;--skills&lt;/code&gt; run to stay current with the codebase.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;multi-repo-mcp-architecture&#34;&gt;Multi-Repo MCP Architecture
&lt;/h2&gt;&lt;p&gt;GitNexus uses a &lt;strong&gt;global registry&lt;/strong&gt; so one MCP server can serve multiple indexed repos. No per-project MCP config needed — set it up once and it works everywhere.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    subgraph CLI [CLI Commands]
        Setup[&amp;#34;gitnexus setup&amp;#34;]
        Analyze[&amp;#34;gitnexus analyze&amp;#34;]
        Clean[&amp;#34;gitnexus clean&amp;#34;]
        List[&amp;#34;gitnexus list&amp;#34;]
    end

    subgraph Registry [&amp;#34;~/.gitnexus/&amp;#34;]
        RegFile[&amp;#34;registry.json&amp;#34;]
    end

    subgraph Repos [Project Repos]
        RepoA[&amp;#34;.gitnexus/ in repo A&amp;#34;]
        RepoB[&amp;#34;.gitnexus/ in repo B&amp;#34;]
    end

    subgraph MCP [MCP Server]
        Server[&amp;#34;server.ts&amp;#34;]
        Backend[&amp;#34;LocalBackend&amp;#34;]
        Pool[&amp;#34;Connection Pool&amp;#34;]
        ConnA[&amp;#34;LadybugDB conn A&amp;#34;]
        ConnB[&amp;#34;LadybugDB conn B&amp;#34;]
    end

    Setup --&amp;gt;|&amp;#34;writes global MCP config&amp;#34;| CursorConfig[&amp;#34;~/.cursor/mcp.json&amp;#34;]
    Analyze --&amp;gt;|&amp;#34;registers repo&amp;#34;| RegFile
    Analyze --&amp;gt;|&amp;#34;stores index&amp;#34;| RepoA
    Clean --&amp;gt;|&amp;#34;unregisters repo&amp;#34;| RegFile
    List --&amp;gt;|&amp;#34;reads&amp;#34;| RegFile
    Server --&amp;gt;|&amp;#34;reads registry&amp;#34;| RegFile
    Server --&amp;gt; Backend
    Backend --&amp;gt; Pool
    Pool --&amp;gt;|&amp;#34;lazy open&amp;#34;| ConnA
    Pool --&amp;gt;|&amp;#34;lazy open&amp;#34;| ConnB
    ConnA --&amp;gt;|&amp;#34;queries&amp;#34;| RepoA
    ConnB --&amp;gt;|&amp;#34;queries&amp;#34;| RepoB
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; Each &lt;code&gt;gitnexus analyze&lt;/code&gt; stores the index in &lt;code&gt;.gitnexus/&lt;/code&gt; inside the repo (portable, gitignored) and registers a pointer in &lt;code&gt;~/.gitnexus/registry.json&lt;/code&gt;. When an AI agent starts, the MCP server reads the registry and can serve any indexed repo. LadybugDB connections are opened lazily on first query and evicted after 5 minutes of inactivity (max 5 concurrent). If only one repo is indexed, the &lt;code&gt;repo&lt;/code&gt; parameter is optional on all tools — agents don&amp;rsquo;t need to change anything.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;web-ui-browser-based&#34;&gt;Web UI (browser-based)
&lt;/h2&gt;&lt;p&gt;A fully client-side graph explorer and AI chat. No server, no install — your code never leaves the browser.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try it now:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://gitnexus.vercel.app&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;gitnexus.vercel.app&lt;/a&gt; — drag &amp;amp; drop a ZIP and start exploring.&lt;/p&gt;
&lt;img width=&#34;2550&#34; height=&#34;1343&#34; alt=&#34;gitnexus_img&#34; src=&#34;https://github.com/user-attachments/assets/cc5d637d-e0e5-48e6-93ff-5bcfdb929285&#34; /&gt;
&lt;p&gt;Or run locally:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/abhigyanpatwari/gitnexus.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; gitnexus/gitnexus-shared &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm install &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ../gitnexus-web &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;docker&#34;&gt;Docker
&lt;/h2&gt;&lt;p&gt;The official Docker setup ships &lt;strong&gt;two signed images&lt;/strong&gt; orchestrated by &lt;code&gt;docker-compose.yaml&lt;/code&gt;. Each image is published to both &lt;strong&gt;GitHub Container Registry&lt;/strong&gt; (GHCR) and &lt;strong&gt;Docker Hub&lt;/strong&gt; — same build, same digest, same Cosign signature — so pick whichever registry you prefer:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Purpose&lt;/th&gt;
          &lt;th&gt;GHCR (default in &lt;code&gt;docker-compose.yaml&lt;/code&gt;)&lt;/th&gt;
          &lt;th&gt;Docker Hub mirror&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;CLI / &lt;code&gt;gitnexus serve&lt;/code&gt; backend (HTTP API on port &lt;code&gt;4747&lt;/code&gt;, MCP, indexer)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ghcr.io/abhigyanpatwari/gitnexus:latest&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;akonlabs/gitnexus:latest&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Static web UI (port &lt;code&gt;4173&lt;/code&gt;)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ghcr.io/abhigyanpatwari/gitnexus-web:latest&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;akonlabs/gitnexus-web:latest&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heads-up — image rename.&lt;/strong&gt; Earlier releases published the web UI under
&lt;code&gt;ghcr.io/abhigyanpatwari/gitnexus&lt;/code&gt;. Starting with the introduction of the
bundled backend, that slug now hosts the CLI/server image and the UI moved
to &lt;code&gt;ghcr.io/abhigyanpatwari/gitnexus-web&lt;/code&gt;. The previous tags remain
available for pulling, but new versions are only published under the new
slugs. Update your &lt;code&gt;docker run&lt;/code&gt; / compose files accordingly (or just adopt
the bundled compose).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;one-command-setup&#34;&gt;One-command setup
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This starts the server on &lt;code&gt;http://localhost:4747&lt;/code&gt; and the web UI on
&lt;code&gt;http://localhost:4173&lt;/code&gt;. The UI auto-detects the server because the browser
runs on the host and reaches the container via the mapped port.&lt;/p&gt;
&lt;p&gt;A named volume (&lt;code&gt;gitnexus-data&lt;/code&gt;) persists the global registry, indexes, and
cloned repos at &lt;code&gt;/data/gitnexus&lt;/code&gt; inside the server container. To make repos on
your host machine indexable, set &lt;code&gt;WORKSPACE_DIR&lt;/code&gt; before bringing the stack up:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WORKSPACE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/code docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Inside the server container the directory is mounted read-only at /workspace.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; gitnexus-server gitnexus index /workspace/my-repo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;direct-docker-run&#34;&gt;Direct &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm -d &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name gitnexus-server &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 4747:4747 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v gitnexus-data:/data/gitnexus &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ghcr.io/abhigyanpatwari/gitnexus:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Web UI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm -d &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name gitnexus-web &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 4173:4173 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ghcr.io/abhigyanpatwari/gitnexus-web:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Optional env file (override image tags, container names, ports, workspace dir):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose --env-file .env up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;versioning--supply-chain-protection&#34;&gt;Versioning &amp;amp; supply-chain protection
&lt;/h3&gt;&lt;p&gt;The Docker images are version-locked to the npm package:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stable images are &lt;strong&gt;only published from &lt;code&gt;vX.Y.Z&lt;/code&gt; git tags&lt;/strong&gt; (via &lt;code&gt;docker.yml&lt;/code&gt;
triggered directly by the tag push), and the workflow refuses to build unless
the tag exactly matches &lt;code&gt;gitnexus/package.json&lt;/code&gt;&amp;rsquo;s version. So
&lt;code&gt;ghcr.io/abhigyanpatwari/gitnexus:1.6.2&lt;/code&gt; (and its Docker Hub mirror
&lt;code&gt;akonlabs/gitnexus:1.6.2&lt;/code&gt;) is byte-for-byte the same release as
&lt;code&gt;npm install gitnexus@1.6.2&lt;/code&gt; — no drift, no floating builds from &lt;code&gt;main&lt;/code&gt;.
Both registries receive the same digest from a single build step, so you can
pull from either and the signature verifies identically.&lt;/li&gt;
&lt;li&gt;Release-candidate images (e.g. &lt;code&gt;:1.7.0-rc.1&lt;/code&gt;) are published alongside each
RC npm release. They are built by &lt;code&gt;release-candidate.yml&lt;/code&gt; calling &lt;code&gt;docker.yml&lt;/code&gt;
as a reusable workflow after the RC tag is created and pushed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:latest&lt;/code&gt; is auto-promoted only from non-prerelease tags by the Docker
metadata action, so it always points at a real, npm-published version.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both images are signed with &lt;a class=&#34;link&#34; href=&#34;https://docs.sigstore.dev/cosign/signing/overview/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cosign keyless signing&lt;/a&gt; using the
workflow&amp;rsquo;s GitHub OIDC identity, and shipped with build provenance and SBOM
attestations. &lt;strong&gt;This is your protection against supply-chain attacks&lt;/strong&gt;: even if
an attacker republishes a same-named image elsewhere (or somehow pushes to a
typo-squatted registry), they cannot forge a Cosign signature tied to
&lt;code&gt;abhigyanpatwari/GitNexus&lt;/code&gt;&amp;rsquo;s &lt;code&gt;docker.yml&lt;/code&gt;. Always verify before pulling into
sensitive environments:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stable releases&lt;/strong&gt; — signed from the &lt;code&gt;v*&lt;/code&gt; tag ref:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign verify ghcr.io/abhigyanpatwari/gitnexus:1.6.2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-identity-regexp &lt;span class=&#34;s1&#34;&gt;&amp;#39;^https://github\.com/abhigyanpatwari/GitNexus/\.github/workflows/docker\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-oidc-issuer https://token.actions.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Same signature verifies the Docker Hub mirror (identical digest):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign verify docker.io/akonlabs/gitnexus:1.6.2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-identity-regexp &lt;span class=&#34;s1&#34;&gt;&amp;#39;^https://github\.com/abhigyanpatwari/GitNexus/\.github/workflows/docker\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-oidc-issuer https://token.actions.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The regex pins the certificate identity to this repo&amp;rsquo;s &lt;code&gt;docker.yml&lt;/code&gt; workflow
&lt;strong&gt;run from a &lt;code&gt;v*&lt;/code&gt; tag&lt;/strong&gt; — rejecting unsigned images, images signed by other
workflows, and images signed from unprotected refs. It is identical for both
registries because both sets of tags were signed at the same digest in one
workflow run.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release candidates&lt;/strong&gt; — signed from &lt;code&gt;refs/heads/main&lt;/code&gt; (the caller&amp;rsquo;s ref when
&lt;code&gt;release-candidate.yml&lt;/code&gt; invokes &lt;code&gt;docker.yml&lt;/code&gt; as a reusable workflow):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign verify ghcr.io/abhigyanpatwari/gitnexus:1.7.0-rc.1 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-identity &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://github.com/abhigyanpatwari/GitNexus/.github/workflows/docker.yml@refs/heads/main&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --certificate-oidc-issuer https://token.actions.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can also inspect the build provenance and SBOM:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign download attestation ghcr.io/abhigyanpatwari/gitnexus:1.6.2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --predicate-type https://slsa.dev/provenance/v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;kubernetes-enforce-signatures-at-admission&#34;&gt;Kubernetes: enforce signatures at admission
&lt;/h4&gt;&lt;p&gt;For Kubernetes deployments, ship the bundled
&lt;a class=&#34;link&#34; href=&#34;deploy/kubernetes/cluster-image-policy.yaml&#34; &gt;&lt;code&gt;ClusterImagePolicy&lt;/code&gt;&lt;/a&gt; so the
&lt;a class=&#34;link&#34; href=&#34;https://docs.sigstore.dev/policy-controller/overview/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sigstore policy-controller&lt;/a&gt; rejects any GitNexus pod whose
image is not signed by this repo&amp;rsquo;s &lt;code&gt;docker.yml&lt;/code&gt; running from a &lt;code&gt;vX.Y.Z&lt;/code&gt; tag —
the same identity the &lt;code&gt;cosign verify&lt;/code&gt; snippet above pins.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. Install the controller (one-time, cluster-wide)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm repo add sigstore https://sigstore.github.io/helm-charts &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm install policy-controller -n cosign-system --create-namespace &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sigstore/policy-controller
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Opt your namespace in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl label namespace &amp;lt;your-ns&amp;gt; policy.sigstore.dev/include&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Apply the policy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply -f deploy/kubernetes/cluster-image-policy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After this, attempting to deploy an unsigned image — or one signed by anything
other than &lt;code&gt;abhigyanpatwari/GitNexus&lt;/code&gt;&amp;rsquo;s &lt;code&gt;docker.yml&lt;/code&gt; at a &lt;code&gt;v*&lt;/code&gt; tag — fails the
admission webhook before a pod is ever created. This turns the verifiable
signature into an enforced policy, which is the supply-chain control most
clusters actually need.&lt;/p&gt;
&lt;h3 id=&#34;files&#34;&gt;Files
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;Dockerfile.web&#34; &gt;Dockerfile.web&lt;/a&gt; — builds &lt;code&gt;gitnexus-shared&lt;/code&gt; and &lt;code&gt;gitnexus-web&lt;/code&gt;, then serves the production frontend.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;Dockerfile.cli&#34; &gt;Dockerfile.cli&lt;/a&gt; — builds the CLI/server (with its native deps) and runs &lt;code&gt;gitnexus serve --host 0.0.0.0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;docker-compose.yaml&#34; &gt;docker-compose.yaml&lt;/a&gt; — starts both signed images side by side.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;.env.example&#34; &gt;.env.example&lt;/a&gt; — overrides for image names, container names, ports, and the workspace mount.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The web UI uses the same indexing pipeline as the CLI but runs entirely in WebAssembly (Tree-sitter WASM, LadybugDB WASM, in-browser embeddings). It&amp;rsquo;s great for quick exploration but limited by browser memory for larger repos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local Backend Mode:&lt;/strong&gt; Run &lt;code&gt;gitnexus serve&lt;/code&gt; and open the web UI locally — it auto-detects the server and shows all your indexed repos, with full AI chat support. No need to re-upload or re-index. The agent&amp;rsquo;s tools (Cypher queries, search, code navigation) route through the backend HTTP API automatically.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-gitnexus-solves&#34;&gt;The Problem GitNexus Solves
&lt;/h2&gt;&lt;p&gt;Tools like &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;Codex&lt;/strong&gt;, &lt;strong&gt;Cline&lt;/strong&gt;, &lt;strong&gt;Roo Code&lt;/strong&gt;, and &lt;strong&gt;Windsurf&lt;/strong&gt; are powerful — but they don&amp;rsquo;t truly know your codebase structure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What happens:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AI edits &lt;code&gt;UserService.validate()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Doesn&amp;rsquo;t know 47 functions depend on its return type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking changes ship&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;traditional-graph-rag-vs-gitnexus&#34;&gt;Traditional Graph RAG vs GitNexus
&lt;/h3&gt;&lt;p&gt;Traditional approaches give the LLM raw graph edges and hope it explores enough. GitNexus &lt;strong&gt;precomputes structure at index time&lt;/strong&gt; — clustering, tracing, scoring — so tools return complete context in one call:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TB
    subgraph Traditional[&amp;#34;Traditional Graph RAG&amp;#34;]
        direction TB
        U1[&amp;#34;User: What depends on UserService?&amp;#34;]
        U1 --&amp;gt; LLM1[&amp;#34;LLM receives raw graph&amp;#34;]
        LLM1 --&amp;gt; Q1[&amp;#34;Query 1: Find callers&amp;#34;]
        Q1 --&amp;gt; Q2[&amp;#34;Query 2: What files?&amp;#34;]
        Q2 --&amp;gt; Q3[&amp;#34;Query 3: Filter tests?&amp;#34;]
        Q3 --&amp;gt; Q4[&amp;#34;Query 4: High-risk?&amp;#34;]
        Q4 --&amp;gt; OUT1[&amp;#34;Answer after 4+ queries&amp;#34;]
    end

    subgraph GN[&amp;#34;GitNexus Smart Tools&amp;#34;]
        direction TB
        U2[&amp;#34;User: What depends on UserService?&amp;#34;]
        U2 --&amp;gt; TOOL[&amp;#34;impact UserService upstream&amp;#34;]
        TOOL --&amp;gt; PRECOMP[&amp;#34;Pre-structured response:
        8 callers, 3 clusters, all 90%+ confidence&amp;#34;]
        PRECOMP --&amp;gt; OUT2[&amp;#34;Complete answer, 1 query&amp;#34;]
    end
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Core innovation: Precomputed Relational Intelligence&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt; — LLM can&amp;rsquo;t miss context, it&amp;rsquo;s already in the tool response&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Token efficiency&lt;/strong&gt; — No 10-query chains to understand one function&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model democratization&lt;/strong&gt; — Smaller LLMs work because tools do the heavy lifting&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works
&lt;/h2&gt;&lt;p&gt;GitNexus builds a complete knowledge graph of your codebase through a multi-phase indexing pipeline:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Structure&lt;/strong&gt; — Walks the file tree and maps folder/file relationships&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parsing&lt;/strong&gt; — Extracts functions, classes, methods, and interfaces using Tree-sitter ASTs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resolution&lt;/strong&gt; — Resolves imports, function calls, heritage, constructor inference, and &lt;code&gt;self&lt;/code&gt;/&lt;code&gt;this&lt;/code&gt; receiver types across files with language-aware logic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clustering&lt;/strong&gt; — Groups related symbols into functional communities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processes&lt;/strong&gt; — Traces execution flows from entry points through call chains&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt; — Builds hybrid search indexes for fast retrieval&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;supported-languages&#34;&gt;Supported Languages
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Language&lt;/th&gt;
          &lt;th&gt;Imports&lt;/th&gt;
          &lt;th&gt;Named Bindings&lt;/th&gt;
          &lt;th&gt;Exports&lt;/th&gt;
          &lt;th&gt;Heritage&lt;/th&gt;
          &lt;th&gt;Type Annotations&lt;/th&gt;
          &lt;th&gt;Constructor Inference&lt;/th&gt;
          &lt;th&gt;Config&lt;/th&gt;
          &lt;th&gt;Frameworks&lt;/th&gt;
          &lt;th&gt;Entry Points&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;TypeScript&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;JavaScript&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Python&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Java&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Kotlin&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;C#&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Go&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Rust&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PHP&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ruby&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Swift&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;C&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;C++&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Dart&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Imports&lt;/strong&gt; — cross-file import resolution · &lt;strong&gt;Named Bindings&lt;/strong&gt; — &lt;code&gt;import { X as Y }&lt;/code&gt; / re-export tracking · &lt;strong&gt;Exports&lt;/strong&gt; — public/exported symbol detection · &lt;strong&gt;Heritage&lt;/strong&gt; — class inheritance, interfaces, mixins · &lt;strong&gt;Type Annotations&lt;/strong&gt; — explicit type extraction for receiver resolution · &lt;strong&gt;Constructor Inference&lt;/strong&gt; — infer receiver type from constructor calls (&lt;code&gt;self&lt;/code&gt;/&lt;code&gt;this&lt;/code&gt; resolution included for all languages) · &lt;strong&gt;Config&lt;/strong&gt; — language toolchain config parsing (tsconfig, go.mod, etc.) · &lt;strong&gt;Frameworks&lt;/strong&gt; — AST-based framework pattern detection · &lt;strong&gt;Entry Points&lt;/strong&gt; — entry point scoring heuristics&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;tool-examples&#34;&gt;Tool Examples
&lt;/h2&gt;&lt;h3 id=&#34;impact-analysis&#34;&gt;Impact Analysis
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;impact({target: &amp;#34;UserService&amp;#34;, direction: &amp;#34;upstream&amp;#34;, minConfidence: 0.8})
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TARGET: Class UserService (src/services/user.ts)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UPSTREAM (what depends on this):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Depth 1 (WILL BREAK):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    handleLogin [CALLS 90%] -&amp;gt; src/api/auth.ts:45
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    handleRegister [CALLS 90%] -&amp;gt; src/api/auth.ts:78
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    UserController [CALLS 85%] -&amp;gt; src/controllers/user.ts:12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Depth 2 (LIKELY AFFECTED):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    authRouter [IMPORTS] -&amp;gt; src/routes/auth.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Options: &lt;code&gt;maxDepth&lt;/code&gt;, &lt;code&gt;minConfidence&lt;/code&gt;, &lt;code&gt;relationTypes&lt;/code&gt; (&lt;code&gt;CALLS&lt;/code&gt;, &lt;code&gt;IMPORTS&lt;/code&gt;, &lt;code&gt;EXTENDS&lt;/code&gt;, &lt;code&gt;IMPLEMENTS&lt;/code&gt;), &lt;code&gt;includeTests&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;process-grouped-search&#34;&gt;Process-Grouped Search
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;query({query: &amp;#34;authentication middleware&amp;#34;})
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;processes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - summary: &amp;#34;LoginFlow&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    priority: 0.042
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    symbol_count: 4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    process_type: cross_community
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    step_count: 7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;process_symbols:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - name: validateUser
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    type: Function
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    filePath: src/auth/validate.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    process_id: proc_login
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    step_index: 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;definitions:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - name: AuthConfig
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    type: Interface
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    filePath: src/types/auth.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;context-360-degree-symbol-view&#34;&gt;Context (360-degree Symbol View)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;context({name: &amp;#34;validateUser&amp;#34;})
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;symbol:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  uid: &amp;#34;Function:validateUser&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kind: Function
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  filePath: src/auth/validate.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  startLine: 15
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;incoming:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  calls: [handleLogin, handleRegister, UserController]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  imports: [authRouter]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;outgoing:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  calls: [checkPassword, createSession]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;processes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - name: LoginFlow (step 2/7)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - name: RegistrationFlow (step 3/5)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;detect-changes-pre-commit&#34;&gt;Detect Changes (Pre-Commit)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;detect_changes({scope: &amp;#34;all&amp;#34;})
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;summary:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  changed_count: 12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  affected_count: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  changed_files: 4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  risk_level: medium
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;changed_symbols: [validateUser, AuthService, ...]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;affected_processes: [LoginFlow, RegistrationFlow, ...]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;rename-multi-file&#34;&gt;Rename (Multi-File)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rename({symbol_name: &amp;#34;validateUser&amp;#34;, new_name: &amp;#34;verifyUser&amp;#34;, dry_run: true})
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;status: success
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;files_affected: 5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;total_edits: 8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;graph_edits: 6     (high confidence)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;text_search_edits: 2  (review carefully)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;changes: [...]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;cypher-queries&#34;&gt;Cypher Queries
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-- Find what calls auth functions with high confidence
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MATCH (c:Community {heuristicLabel: &amp;#39;Authentication&amp;#39;})&amp;lt;-[:CodeRelation {type: &amp;#39;MEMBER_OF&amp;#39;}]-(fn)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MATCH (caller)-[r:CodeRelation {type: &amp;#39;CALLS&amp;#39;}]-&amp;gt;(fn)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WHERE r.confidence &amp;gt; 0.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RETURN caller.name, fn.name, r.confidence
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ORDER BY r.confidence DESC
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;wiki-generation&#34;&gt;Wiki Generation
&lt;/h2&gt;&lt;p&gt;Generate LLM-powered documentation from your knowledge graph:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Requires an LLM API key (OPENAI_API_KEY, etc.)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use a custom model or provider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki --model gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki --base-url https://api.anthropic.com/v1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Force full regeneration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitnexus wiki --force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The wiki generator reads the indexed graph structure, groups files into modules via LLM, generates per-module documentation pages, and creates an overview page — all with cross-references to the knowledge graph.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;tech-stack&#34;&gt;Tech Stack
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Layer&lt;/th&gt;
          &lt;th&gt;CLI&lt;/th&gt;
          &lt;th&gt;Web&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Node.js (native)&lt;/td&gt;
          &lt;td&gt;Browser (WASM)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Parsing&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Tree-sitter native bindings&lt;/td&gt;
          &lt;td&gt;Tree-sitter WASM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;LadybugDB native&lt;/td&gt;
          &lt;td&gt;LadybugDB WASM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Embeddings&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;HuggingFace transformers.js (GPU/CPU)&lt;/td&gt;
          &lt;td&gt;transformers.js (WebGPU/WASM)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Search&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;BM25 + semantic + RRF&lt;/td&gt;
          &lt;td&gt;BM25 + semantic + RRF&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Agent Interface&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;MCP (stdio)&lt;/td&gt;
          &lt;td&gt;LangChain ReAct agent&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Visualization&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;Sigma.js + Graphology (WebGL)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
          &lt;td&gt;React 18, TypeScript, Vite, Tailwind v4&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Clustering&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Graphology&lt;/td&gt;
          &lt;td&gt;Graphology&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Concurrency&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Worker threads + async&lt;/td&gt;
          &lt;td&gt;Web Workers + Comlink&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;roadmap&#34;&gt;Roadmap
&lt;/h2&gt;&lt;h3 id=&#34;actively-building&#34;&gt;Actively Building
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;LLM Cluster Enrichment&lt;/strong&gt; — Semantic cluster names via LLM API&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;AST Decorator Detection&lt;/strong&gt; — Parse @Controller, @Get, etc.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;Incremental Indexing&lt;/strong&gt; — Only re-index changed files&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;recently-completed&#34;&gt;Recently Completed
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Constructor-Inferred Type Resolution, &lt;code&gt;self&lt;/code&gt;/&lt;code&gt;this&lt;/code&gt; Receiver Mapping&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Wiki Generation, Multi-File Rename, Git-Diff Impact Analysis&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Process-Grouped Search, 360-Degree Context, Claude Code Hooks&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Multi-Repo MCP, Zero-Config Setup, 14 Language Support&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Community Detection, Process Detection, Confidence Scoring&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Hybrid Search, Vector Index&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;security--privacy&#34;&gt;Security &amp;amp; Privacy
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLI&lt;/strong&gt;: Everything runs locally on your machine. No network calls. Index stored in &lt;code&gt;.gitnexus/&lt;/code&gt; (gitignored). Global registry at &lt;code&gt;~/.gitnexus/&lt;/code&gt; stores only paths and metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web&lt;/strong&gt;: Everything runs in your browser. No code uploaded to any server. API keys stored in localStorage only.&lt;/li&gt;
&lt;li&gt;Open source — audit the code yourself.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;acknowledgments&#34;&gt;Acknowledgments
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://tree-sitter.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Tree-sitter&lt;/a&gt; — AST parsing&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ladybugdb.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LadybugDB&lt;/a&gt; — Embedded graph database with vector support (formerly KuzuDB)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.sigmajs.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sigma.js&lt;/a&gt; — WebGL graph rendering&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/docs/transformers.js&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;transformers.js&lt;/a&gt; — Browser ML&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://graphology.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Graphology&lt;/a&gt; — Graph data structures&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://modelcontextprotocol.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MCP&lt;/a&gt; — Model Context Protocol&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
