HomeProductsBNLGitFor engineers
BNLGit · For engineers

Exact context, or an honest refusal.

BNLGit does not change your model — it changes what your model sees. Every file gets a summary twin in a real git repository beside your source, every fact is anchored to a line span at a pinned commit, and every span is re-checked against the actual blob before it reaches your agent.

What your agent actually gets back.

A search hit is an evidence bundle, not a snippet. That distinction is the whole product.

The BNLGit retrieval path Four stages left to right: an agent asks a question over MCP; BNLGit resolves the summary twin and re-validates its line spans against the pinned commit; it returns an evidence bundle containing the summary excerpt, the backing source lines, the freshness state and the summary's provenance; and a human verifies the answer by following the jump-back link into the web UI. 01 · ASK Your agent Claude Code, or any MCP client, asks a question over a read-only server. 02 · RESOLVE Re-validate Line spans are checked against the pinned blob. A span that no longer fits is caught here. 03 · EVIDENCE The bundle Summary excerpt, plus the backing source lines, the freshness state and the model provenance. 04 · VERIFY You check it A jump-back link opens the exact lines in the web UI, so the agent’s work is auditable. stale and unverified results are excluded unless you ask for them on purpose
The retrieval path. Freshness travels with the result, so an agent is never handed a confident-looking answer built on a summary that stopped being true three commits ago.

Not a paragraph about the file. A structured record of it.

Each summary twin holds a readable summary and a block of typed facts. Every one of them is anchored to a line span in a specific blob at a specific commit.

Symbols

What the file defines

Functions, classes and exported names, each anchored to the line span where it is declared rather than described in prose.

Imports

What it depends on

The modules and packages a file pulls in, so an agent can walk a dependency edge instead of grepping for it.

Endpoints

What it exposes

API routes and handlers surfaced as typed facts, so "where is this endpoint served" is a lookup, not a search.

Entities

What it stores

Database entities the file touches — the layer that usually lives only in a migration folder and someone's memory.

Effects

What it changes

Side effects worth knowing about before an agent proposes an edit: writes, network calls, process and filesystem work.

Security

What to be careful with

Security-relevant concerns flagged on the file that carries them, plus the related files a change is likely to ripple into.

Results are ranked by how much they deserve to be believed.

You have to ask for the untrustworthy material on purpose. That is the design.

TierMeaningBy default
verified_current Highest — the summary matches the current source blob. Included
code_only_current Source matched; there is no current summary. Included
legacy_unverified Imported before BNLGit; provenance unverified. Excluded
verified_stale Summary matched, but the source has since changed. Excluded
unavailable Excluded by default. Excluded

Pass include_stale or include_unverified to opt back in.

Two read-only servers: one repository, or the whole fleet.

Four repo-scoped tools and two fleet-scoped ones. They do not widen what a token can reach — they are a different way to ask the same permission system the same question.

Repository scope
POST /api/v1/repos/{owner}/{repo}/bnlgit/mcp
  • fetch_bnlgit_overview
  • search_bnlgit_documentation
  • search_bnlgit_code
  • search_bnlgit_hybrid

Code-read access to that repository.

Fleet scope
POST /api/v1/bnlgit/mcp
  • list_bnlgit_repos
  • search_bnlgit_hybrid

The repository token scope. Limited to whatever its owner can already see.

The mechanics, without the marketing.

PairingPair a repository and BNLGit creates a second, real git repository beside it holding one summary twin per source file.
AnchoringEvery fact points at a line span in a specific blob at a specific commit — not at a file in the abstract.
Re-validationLine spans are re-checked against the pinned blob before they are returned. A span pointing at line 240 of a file that is now 180 lines long is caught, not silently mis-served.
StalenessWhen the source moves on, the summary is marked stale and down-ranked. Stale and unverified results are excluded unless you opt back in.
Lexical searchExact and fuzzy text search across summaries. Available on every paired repository, always.
Exact code searchExact search over your real source files, backed by git grep. Exposed to agents as search_bnlgit_code.
Result packingPacked to a token budget: 8 results and 6000 tokens by default, raisable to 25 and 32000. A summary_only mode returns excerpts without the backing source.
Wire protocolJSON-RPC 2.0 over HTTP POST, MCP protocol version 2025-06-18. Methods: initialize, ping, tools/list, tools/call. No SSE or streaming transport. Request bodies capped at 2 MiB.
AuthenticationA normal Gitea personal access token — Authorization: token <t>, or Bearer, which is what most MCP clients send. Access is enforced per request, on every read.
CapabilitiesGET /api/v1/bnlgit/capabilities needs no authentication and returns the running edition, licence status, feature-flag map and drift thresholds. Scripts and agents should read this rather than assume.
Fail-closed editionsAn instance configured with an edition value it does not recognise resolves to Lite, not Pro. There is no configuration typo that accidentally unlocks paid features.

BNLGit publishes no performance benchmarks, because none have been run that it would be willing to defend. The argument for it is a mechanical one, not a leaderboard.

Point an agent at it and see what changes.

The documentation is public and needs no account. Start with the MCP guide if you want to wire a client up in ten minutes.

AI Chat — Beta Testing, Online Soon