mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-09-11 22:53:04 +00:00
* feat(cursor): upgrade hooks to Cursor 2.4 postToolUse for Read/Grep/Shell coverage
Cursor 2.4 (released 2026-01-22) shipped generic preToolUse/postToolUse hooks
matching `Shell|Read|Write|Grep|Delete|Task|MCP:<tool>`, replacing the
2.3-era beforeShellExecution hook that only fired on shell commands. The
existing integration only intercepted the shell path, so Cursor users got
graph augmentation roughly 10% as often as Claude Code users — only when
the agent dropped to rg/grep instead of using its native Read/Grep tools.
This swaps the integration over to postToolUse and ports the bash+jq
hook script to cross-platform Node:
- gitnexus-cursor-integration/hooks/hooks.json: registers a single
postToolUse hook matching Shell|Read|Grep that invokes the new
gitnexus-hook.cjs.
- gitnexus-cursor-integration/hooks/gitnexus-hook.cjs: new Node hook
mirroring the safety patterns from the Claude hook (absolute-cwd
validation, .gitnexus discovery with linked-worktree fallback,
npx.cmd on Windows, end-of-options `--` marker, debug truncation,
graceful failure). Extracts the search pattern per tool kind:
Grep -> toolInput.query; Read -> file basename stripped to identifier
chars; Shell -> existing rg/grep arg parser. Emits Cursor-shape
`{ "additional_context": "..." }` on stdout — no shell, no jq.
- gitnexus-cursor-integration/hooks/augment-shell.sh: removed (Windows
incompatible, narrower coverage).
- gitnexus/test/unit/cursor-hook.test.ts: 33 regression tests covering
manifest wiring, source-level invariants (no shell:true, npx.cmd,
isAbsolute, additional_context output shape, end-of-options marker),
extractPattern coverage per tool, and behavioral early-exit paths
(empty/invalid stdin, relative cwd, no .gitnexus, unknown tool name,
short patterns, non-search shell commands, case-insensitive matching).
- README.md / gitnexus/README.md: editor-support table now lists Cursor
as Full / hooks=Yes (postToolUse), matching reality.
- gitnexus/src/cli/augment.ts and gitnexus/src/core/augmentation/engine.ts:
doc-strings updated from `Cursor beforeShellExecution` to
`Cursor postToolUse`.
Closes #1466.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(cursor): hook timeout is in seconds, not milliseconds
Cursor's `timeout` field in hooks.json is in seconds (per
https://cursor.com/docs/agent/hooks and the original integration's
`"timeout": 5`). I'd written `10000` after blindly copying the issue
body's example — that resolves to ~2.8 hours, not 10 seconds. If the
script ever hangs before reaching its inner spawnSync timeouts (e.g.
during stdin read), Cursor would have waited that long before killing
it.
Drop to `10` (seconds), matching the Claude plugin's hooks.json and
giving plenty of headroom over the inner 7s augment-CLI timeout.
Add a regression-guard assertion in cursor-hook.test.ts so a future
ms/s mixup fails fast.
Reported by Cursor Bugbot on PR #1467.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(cursor): address Claude review findings — payload aliases, debug, install docs
Resolves three findings from Claude reviewer on PR #1467:
1. Cursor payload field-name uncertainty (SIGNIFICANT)
Claude flagged that the Grep `query` field is an unverified assumption
per Cursor 2.4 docs (https://cursor.com/docs/agent/hooks). Mitigated:
- Expanded Grep aliases: query | pattern | regex | q | search | searchQuery
- Added pickLongestStringValue() last-resort fallback so the hook
extracts *something* even if Cursor renames every documented field
- Added GITNEXUS_DEBUG=1 stderr logging of the raw stdin payload so
users can capture Cursor's actual contract when diagnosing silent
no-ops, and report it back if aliases drift
- Added Read alias `filePath` (camelCase variant alongside `file_path`)
- Inline comment block citing the docs URL and the uncertainty
2. Hook command path resolution + install docs (SIGNIFICANT)
Claude flagged `node ./hooks/gitnexus-hook.cjs` as relative without
documented install path. Added gitnexus-cursor-integration/README.md
with explicit install steps:
- .cursor/hooks.json + hooks/gitnexus-hook.cjs at project root
- Confirms Cursor's project-root CWD convention with doc link
- Verify steps including GITNEXUS_DEBUG capture
- Pattern-extraction contract table per tool
- Troubleshooting: not-firing, npx fallback, wrong-pattern diagnosis
3. README "Full" overclaim for Cursor (MODERATE)
Both README rows now read `Yes (postToolUse, manual install)` linking
to the new install README, accurately signaling that hooks aren't
automated by `gitnexus setup` like they are for Claude Code.
4. Shell quoted-pattern parser limitation (MINOR, documented)
Added inline comment in gitnexus-hook.cjs documenting the known
`rg "User Service"` -> `User` truncation, plus regression tests in
cursor-hook.test.ts pinning the behavior so a future change is
visible.
Test additions (33 -> 41):
- Wide-alias source coverage for Grep (query / pattern / regex / q /
search / searchQuery) plus pickLongestStringValue fallback
- Read alias coverage including camelCase filePath
- GITNEXUS_DEBUG behavioral test: stderr quiet by default, payload
echoed when env var set, stdout output contract preserved either way
- Shell quoted-pattern documented behavior tests
- Install README presence + content (.cursor/hooks.json, hooks/, debug
diagnostics)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Gergő Magyar <gergomagyar@icloud.com>
378 lines
17 KiB
Markdown
378 lines
17 KiB
Markdown
# GitNexus
|
|
|
|
**Graph-powered code intelligence for AI agents.** Index any codebase into a knowledge graph, then query it via MCP or CLI.
|
|
|
|
Works with **Cursor**, **Claude Code**, **Codex**, **Windsurf**, **Cline**, **OpenCode**, and any MCP-compatible tool.
|
|
|
|
[](https://www.npmjs.com/package/gitnexus)
|
|
[](https://polyformproject.org/licenses/noncommercial/1.0.0/)
|
|
|
|
---
|
|
|
|
## Why?
|
|
|
|
AI coding tools don't understand your codebase structure. They edit a function without knowing 47 other functions depend on it. GitNexus fixes this by **precomputing every dependency, call chain, and relationship** into a queryable graph.
|
|
|
|
**Three commands to give your AI agent full codebase awareness.**
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Index your repo (run from repo root)
|
|
npx gitnexus analyze
|
|
```
|
|
|
|
That's it. This indexes the codebase, installs agent skills, registers Claude Code hooks, and creates `AGENTS.md` / `CLAUDE.md` context files — all in one command.
|
|
|
|
To configure MCP for your editor, run `npx gitnexus setup` once — or set it up manually below.
|
|
|
|
`gitnexus setup` auto-detects your editors and writes the correct global MCP config. You only need to run it once.
|
|
|
|
### Editor Support
|
|
|
|
| Editor | MCP | Skills | Hooks (auto-augment) | Support |
|
|
|--------|-----|--------|---------------------|---------|
|
|
| **Claude Code** | Yes | Yes | Yes (PreToolUse) | **Full** |
|
|
| **Cursor** | Yes | Yes | Yes (postToolUse, [manual install](../gitnexus-cursor-integration/README.md#hook-install)) | **Full** |
|
|
| **Codex** | Yes | Yes | — | MCP + Skills |
|
|
| **Windsurf** | Yes | — | — | MCP |
|
|
| **OpenCode** | Yes | Yes | — | MCP + Skills |
|
|
|
|
> **Claude Code** gets the deepest integration: MCP tools + agent skills + PreToolUse hooks that automatically enrich grep/glob/bash calls with knowledge graph context.
|
|
|
|
### Community Integrations
|
|
|
|
| Agent | Install | Source |
|
|
|-------|---------|--------|
|
|
| [pi](https://pi.dev) | `pi install npm:pi-gitnexus` | [pi-gitnexus](https://github.com/tintinweb/pi-gitnexus) |
|
|
|
|
## MCP Setup (manual)
|
|
|
|
If you prefer to configure manually instead of using `gitnexus setup`:
|
|
|
|
### Claude Code (full support — MCP + skills + hooks)
|
|
|
|
```bash
|
|
# macOS / Linux
|
|
claude mcp add gitnexus -- npx -y gitnexus@latest mcp
|
|
|
|
# Windows
|
|
claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp
|
|
```
|
|
|
|
### Codex (full support — MCP + skills)
|
|
|
|
```bash
|
|
codex mcp add gitnexus -- npx -y gitnexus@latest mcp
|
|
```
|
|
|
|
### Cursor / Windsurf
|
|
|
|
Add to `~/.cursor/mcp.json` (global — works for all projects):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"gitnexus": {
|
|
"command": "npx",
|
|
"args": ["-y", "gitnexus@latest", "mcp"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### OpenCode
|
|
|
|
Add to `~/.config/opencode/config.json`:
|
|
|
|
```json
|
|
{
|
|
"mcp": {
|
|
"gitnexus": {
|
|
"command": "npx",
|
|
"args": ["-y", "gitnexus@latest", "mcp"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## How It Works
|
|
|
|
GitNexus builds a complete knowledge graph of your codebase through a multi-phase indexing pipeline:
|
|
|
|
1. **Structure** — Walks the file tree and maps folder/file relationships
|
|
2. **Parsing** — Extracts functions, classes, methods, and interfaces using Tree-sitter ASTs
|
|
3. **Resolution** — Resolves imports and function calls across files with language-aware logic
|
|
- **Field & Property Type Resolution** — Tracks field types across classes and interfaces for deep chain resolution (e.g., `user.address.city.getName()`)
|
|
- **Return-Type-Aware Variable Binding** — Infers variable types from function return types, enabling accurate call-result binding
|
|
4. **Clustering** — Groups related symbols into functional communities
|
|
5. **Processes** — Traces execution flows from entry points through call chains
|
|
6. **Search** — Builds hybrid search indexes for fast retrieval
|
|
|
|
The result is a **LadybugDB graph database** stored locally in `.gitnexus/` with full-text search and semantic embeddings.
|
|
|
|
## MCP Tools
|
|
|
|
Your AI agent gets these tools automatically:
|
|
|
|
| Tool | What It Does | `repo` Param |
|
|
|------|-------------|--------------|
|
|
| `list_repos` | Discover all indexed repositories | — |
|
|
| `query` | Process-grouped hybrid search (BM25 + semantic + RRF) | Optional |
|
|
| `context` | 360-degree symbol view — categorized refs, process participation | Optional |
|
|
| `impact` | Blast radius analysis with depth grouping and confidence | Optional |
|
|
| `detect_changes` | Git-diff impact — maps changed lines to affected processes | Optional |
|
|
| `rename` | Multi-file coordinated rename with graph + text search | Optional |
|
|
| `cypher` | Raw Cypher graph queries | Optional |
|
|
|
|
> With one indexed repo, the `repo` param is optional. With multiple, specify which: `query({query: "auth", repo: "my-app"})`.
|
|
|
|
## MCP Resources
|
|
|
|
| Resource | Purpose |
|
|
|----------|---------|
|
|
| `gitnexus://repos` | List all indexed repositories (read first) |
|
|
| `gitnexus://repo/{name}/context` | Codebase stats, staleness check, and available tools |
|
|
| `gitnexus://repo/{name}/clusters` | All functional clusters with cohesion scores |
|
|
| `gitnexus://repo/{name}/cluster/{name}` | Cluster members and details |
|
|
| `gitnexus://repo/{name}/processes` | All execution flows |
|
|
| `gitnexus://repo/{name}/process/{name}` | Full process trace with steps |
|
|
| `gitnexus://repo/{name}/schema` | Graph schema for Cypher queries |
|
|
|
|
## MCP Prompts
|
|
|
|
| Prompt | What It Does |
|
|
|--------|-------------|
|
|
| `detect_impact` | Pre-commit change analysis — scope, affected processes, risk level |
|
|
| `generate_map` | Architecture documentation from the knowledge graph with mermaid diagrams |
|
|
|
|
## CLI Commands
|
|
|
|
```bash
|
|
gitnexus setup # Configure MCP for your editors (one-time)
|
|
gitnexus analyze [path] # Index a repository (or update stale index)
|
|
gitnexus analyze --force # Force full re-index
|
|
gitnexus analyze --embeddings # Enable embedding generation (slower, better search)
|
|
gitnexus analyze --skip-agents-md # Preserve custom AGENTS.md/CLAUDE.md gitnexus section edits
|
|
gitnexus analyze --verbose # Log skipped files when parsers are unavailable
|
|
gitnexus analyze --max-file-size 1024 # Skip files larger than N KB (default: 512, cap: 32768)
|
|
gitnexus analyze --worker-timeout 60 # Increase worker idle timeout for slow parses
|
|
gitnexus mcp # Start MCP server (stdio) — serves all indexed repos
|
|
gitnexus serve # Start local HTTP server (multi-repo) for web UI
|
|
gitnexus index # Register an existing .gitnexus/ folder into the global registry
|
|
gitnexus list # List all indexed repositories
|
|
gitnexus status # Show index status for current repo
|
|
gitnexus clean # Delete index for current repo
|
|
gitnexus clean --all --force # Delete all indexes
|
|
gitnexus wiki [path] # Generate LLM-powered docs from knowledge graph
|
|
gitnexus wiki --model <model> # Wiki with custom LLM model (default: gpt-4o-mini)
|
|
|
|
# Repository groups (multi-repo / monorepo service tracking)
|
|
gitnexus group create <name> # Create a repository group
|
|
gitnexus group add <group> <groupPath> <registryName> # Add a repo to a group. <groupPath> is a hierarchy path (e.g. hr/hiring/backend); <registryName> is the repo's name from the registry (see `gitnexus list`)
|
|
gitnexus group remove <group> <groupPath> # Remove a repo from a group by its hierarchy path
|
|
gitnexus group list [name] # List groups, or show one group's config
|
|
gitnexus group sync <name> # Extract contracts and match across repos/services
|
|
gitnexus group contracts <name> # Inspect extracted contracts and cross-links
|
|
gitnexus group query <name> <q> # Search execution flows across all repos in a group
|
|
gitnexus group status <name> # Check staleness of repos in a group
|
|
```
|
|
|
|
## Remote Embeddings
|
|
|
|
Set these env vars to use a remote OpenAI-compatible `/v1/embeddings` endpoint instead of the local model:
|
|
|
|
```bash
|
|
export GITNEXUS_EMBEDDING_URL=http://your-server:8080/v1
|
|
export GITNEXUS_EMBEDDING_MODEL=BAAI/bge-large-en-v1.5
|
|
export GITNEXUS_EMBEDDING_DIMS=1024 # optional, default 384
|
|
export GITNEXUS_EMBEDDING_API_KEY=your-key # optional, default: "unused"
|
|
gitnexus analyze . --embeddings
|
|
```
|
|
|
|
Works with Infinity, vLLM, TEI, llama.cpp, Ollama, LM Studio, or OpenAI. When unset, local embeddings are used unchanged.
|
|
|
|
## Multi-Repo Support
|
|
|
|
GitNexus supports indexing multiple repositories. Each `gitnexus analyze` registers the repo in a global registry (`~/.gitnexus/registry.json`). The MCP server serves all indexed repos automatically.
|
|
|
|
## Supported Languages
|
|
|
|
TypeScript, JavaScript, Python, Java, C, C++, C#, Go, Rust, PHP, Kotlin, Swift, Ruby
|
|
|
|
### Language Feature Matrix
|
|
|
|
| Language | Imports | Named Bindings | Exports | Heritage | Type Annotations | Constructor Inference | Config | Frameworks | Entry Points |
|
|
|----------|---------|----------------|---------|----------|-----------------|---------------------|--------|------------|-------------|
|
|
| TypeScript | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| JavaScript | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ |
|
|
| Python | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| Java | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
|
|
| Kotlin | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
|
|
| C# | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| Go | ✓ | — | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| Rust | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
|
|
| PHP | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| Ruby | ✓ | — | ✓ | ✓ | — | ✓ | — | ✓ | ✓ |
|
|
| Swift | — | — | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| C | — | — | ✓ | — | ✓ | ✓ | — | ✓ | ✓ |
|
|
| C++ | — | — | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ |
|
|
|
|
**Imports** — cross-file import resolution · **Named Bindings** — `import { X as Y }` / re-export tracking · **Exports** — public/exported symbol detection · **Heritage** — class inheritance, interfaces, mixins · **Type Annotations** — explicit type extraction for receiver resolution · **Constructor Inference** — infer receiver type from constructor calls (`self`/`this` resolution included for all languages) · **Config** — language toolchain config parsing (tsconfig, go.mod, etc.) · **Frameworks** — AST-based framework pattern detection · **Entry Points** — entry point scoring heuristics
|
|
|
|
## Agent Skills
|
|
|
|
GitNexus ships with skill files that teach AI agents how to use the tools effectively:
|
|
|
|
- **Exploring** — Navigate unfamiliar code using the knowledge graph
|
|
- **Debugging** — Trace bugs through call chains
|
|
- **Impact Analysis** — Analyze blast radius before changes
|
|
- **Refactoring** — Plan safe refactors using dependency mapping
|
|
|
|
Installed automatically by both `gitnexus analyze` (per-repo) and `gitnexus setup` (global).
|
|
|
|
## Requirements
|
|
|
|
- Node.js >= 18
|
|
- Git repository (uses git for commit tracking)
|
|
|
|
## Release candidates
|
|
|
|
Stable releases publish to the default `latest` dist-tag. When a pull request
|
|
with non-documentation changes merges into `main`, an automated workflow also
|
|
publishes a prerelease build under the `rc` dist-tag, so early adopters can
|
|
try in-flight fixes without waiting for the next stable cut. (Docs-only
|
|
merges are skipped.)
|
|
|
|
```bash
|
|
# Try the latest release candidate (pre-stable — may change at any time)
|
|
npm install -g gitnexus@rc
|
|
# — or —
|
|
npx gitnexus@rc analyze
|
|
```
|
|
|
|
Release-candidate versions follow the standard semver prerelease format
|
|
`X.Y.Z-rc.N`, where `X.Y.Z` is the next stable target (bumped from the
|
|
current `latest` by patch by default; `minor` or `major` when kicking off a
|
|
bigger cycle) and `N` increments per published rc. Example sequence:
|
|
`1.6.2-rc.1`, `1.6.2-rc.2`, …, then once `1.6.2` ships stable,
|
|
`1.6.3-rc.1`. See the [Releases page](https://github.com/abhigyanpatwari/GitNexus/releases)
|
|
for the full list; stable `latest` is unaffected.
|
|
|
|
## Troubleshooting
|
|
|
|
### `Cannot destructure property 'package' of 'node.target' as it is null`
|
|
|
|
This crash was caused by a dependency URL format that is incompatible with
|
|
certain npm/arborist versions ([npm/cli#8126](https://github.com/npm/cli/issues/8126)).
|
|
It is fixed in **gitnexus v1.6.2+**. Upgrade to the latest version:
|
|
|
|
```bash
|
|
npx gitnexus@latest analyze # always uses the newest release
|
|
# — or —
|
|
npm install -g gitnexus@latest # upgrade a global install
|
|
```
|
|
|
|
If you still hit npm install issues after upgrading, these generic workarounds
|
|
may help:
|
|
|
|
```bash
|
|
npm install -g npm@latest # update npm itself
|
|
npm cache clean --force # clear a possibly corrupt cache
|
|
```
|
|
|
|
### Installation fails with native module errors
|
|
|
|
Some optional language grammars (Dart, Kotlin, Swift) require native compilation. If they fail, GitNexus still works — those languages will be skipped.
|
|
|
|
If `npm install -g gitnexus` fails on native modules:
|
|
|
|
```bash
|
|
# Ensure build tools are available (Linux/macOS)
|
|
# Ubuntu/Debian: sudo apt install python3 make g++
|
|
# macOS: xcode-select --install
|
|
|
|
# Retry installation
|
|
npm install -g gitnexus
|
|
```
|
|
|
|
### Analyze warns about unavailable FTS or VECTOR extensions
|
|
|
|
GitNexus uses optional DuckDB extensions for BM25 and vector search. The `gitnexus serve` and MCP read paths only ever try to `LOAD` the extensions — they never block on a network install. The `analyze` command, by default, attempts one bounded out-of-process `INSTALL` if `LOAD` fails and proceeds even when that install times out, so the index is always written to disk; BM25/vector search degrade gracefully until the extensions become available.
|
|
|
|
Configure the behavior with two environment variables:
|
|
|
|
| Variable | Values | Default | Effect |
|
|
|----------|--------|---------|--------|
|
|
| `GITNEXUS_LBUG_EXTENSION_INSTALL` | `auto`, `load-only`, `never` | `auto` | `auto` runs one bounded INSTALL if LOAD fails. `load-only` only uses already-installed extensions (recommended for offline / firewalled environments). `never` skips optional extensions entirely. |
|
|
| `GITNEXUS_LBUG_EXTENSION_INSTALL_TIMEOUT_MS` | positive integer | `15000` | Wall-clock budget for the out-of-process `INSTALL` child before it is killed. |
|
|
|
|
```bash
|
|
# Offline/airgapped: never reach the network for extensions
|
|
GITNEXUS_LBUG_EXTENSION_INSTALL=load-only npx gitnexus analyze
|
|
|
|
# Slow network: give extension downloads more time
|
|
GITNEXUS_LBUG_EXTENSION_INSTALL_TIMEOUT_MS=30000 npx gitnexus analyze
|
|
```
|
|
|
|
### Analysis runs out of memory
|
|
|
|
For very large repositories:
|
|
|
|
```bash
|
|
# Increase Node.js heap size
|
|
NODE_OPTIONS="--max-old-space-size=16384" npx gitnexus analyze
|
|
|
|
# Exclude large directories
|
|
echo "vendor/" >> .gitnexusignore
|
|
echo "dist/" >> .gitnexusignore
|
|
```
|
|
|
|
### Large files are being skipped
|
|
|
|
By default the walker skips files larger than **512 KB** (see log line `Skipped N large files (>512KB)`). Raise the threshold via either the CLI flag or the environment variable — both accept a value in **KB**:
|
|
|
|
```bash
|
|
# CLI flag (takes precedence over the env var)
|
|
npx gitnexus analyze --max-file-size 2048 # skip only files > 2 MB
|
|
|
|
# Environment variable (persists across commands)
|
|
export GITNEXUS_MAX_FILE_SIZE=2048
|
|
npx gitnexus analyze
|
|
```
|
|
|
|
Values above **32768 KB (32 MB)** are clamped to the tree-sitter parser ceiling; invalid values fall back to the 512 KB default with a one-time warning. When an override is active, `analyze` prints the effective threshold in its startup banner (e.g. `GITNEXUS_MAX_FILE_SIZE: effective threshold 2048KB (default 512KB)`).
|
|
|
|
### Analyze reports a worker timeout
|
|
|
|
Worker parse timeouts are recoverable. GitNexus retries stalled worker jobs with backoff, splits large jobs to isolate slow files, and falls back to the sequential parser when needed. If a large repository needs more time per worker job, use either:
|
|
|
|
```bash
|
|
# CLI flag, in seconds
|
|
npx gitnexus analyze --worker-timeout 60
|
|
|
|
# Environment variable, in milliseconds
|
|
export GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS=60000
|
|
npx gitnexus analyze
|
|
```
|
|
|
|
For repositories with very large source files, `GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES` controls the worker job byte budget. The default is **8388608 bytes (8 MB)**.
|
|
|
|
## Privacy
|
|
|
|
- All processing happens locally on your machine
|
|
- No code is sent to any server
|
|
- Index stored in `.gitnexus/` inside your repo (gitignored)
|
|
- Global registry at `~/.gitnexus/` stores only paths and metadata
|
|
|
|
## Web UI
|
|
|
|
GitNexus also has a browser-based UI at [gitnexus.vercel.app](https://gitnexus.vercel.app) — 100% client-side, your code never leaves the browser.
|
|
|
|
**Local Backend Mode:** Run `gitnexus serve` 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's tools (Cypher queries, search, code navigation) route through the backend HTTP API automatically.
|
|
|
|
## License
|
|
|
|
[PolyForm Noncommercial 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0/)
|
|
|
|
Free for non-commercial use. Contact for commercial licensing.
|