CodeNib 0.2.6¶
CodeNib 0.2.6 makes repository Wikis easier to read and to find your way
through. A Wiki opens as a map of its pages, starts from the main path through
the code, and checks that each page reads well before it is published. Graph
builds get faster. C/C++ and JavaScript/TypeScript projects now build on the
first run without touching the checkout. The release also previews
codenib guard for Python projects.
Once 0.2.6 is available from PyPI, upgrade the environment running CodeNib and restart its MCP client:
Rust graphs need the new pinned toolchain; codenib toolchain install
/path/to/repository --scope graph installs it.
Read a Wiki as a map¶
On a wide screen a Wiki opens as a workspace: the page list, a map of the Wiki and the reader, side by side. Each page is a node. The heavy lines are references that the code index recorded between areas; click one to read an example in the source. The map can be hidden, and narrower windows keep the single-column page.
The Overview now leads with the main path through the code, one sentence per recorded call. The path comes from the call graph, not from what a search retrieved. The page list opens on the Overview and at most five pages, ranked from the same call graph. Detail pages sit behind their parent and less central areas behind "More topics"; nothing is removed. The most important detail pages draw their longest recorded call path, labelled as one selected path.
Publication also checks how a page reads. Template sections and printed reader questions are gone, a page opens on what the code does rather than on an identifier, and limits apply to inline code, sentence length and page length. A page that fails gets one rewrite, and the model reader review blocks detail pages it rates below its floor.
Generate a Wiki for your own repository¶
Generating a Wiki uses the same map. The form page draws the repository's folders from its source check. While the Wiki is written, planned chapters appear on the map and each fills in once it passes its source checks. Source is found with grep and Jev rather than a chunk index, so the 50,000 code-chunk limit is gone.
A refused submission now says why: the key was not accepted, has no credit, is a management key, or OpenRouter could not be reached. The writing model list adds Claude Opus 5.5 and Claude Haiku 5.5 and newer GPT, Gemini, Grok and Mistral models, and Claude Sonnet 5.5 runs start again.
Build graphs faster, without touching the checkout¶
CodeNib's own stages of a graph build take less time, and the stored graph is unchanged. On CodeNib's own source, a Python build reads pyrefly's report in 2.8 s instead of 14.0 s and converts it in 12.2 s instead of 28.7 s. Every SCIP language builds its occurrence index, and Python, Go, Rust and TypeScript also build their graphs, from the parsed index instead of scanning its text again. Turning a clangd index into a graph takes 2.6 s instead of 6.6 s on redis. The MCP server starts in a median 4.24 s instead of 7.69 s on a 1,000-file Python repository.
The first codenib index of a project now publishes its graph:
- C/C++ with Make or Autotools. The compile database is built in a copy of
the checkout kept in CodeNib's repository state. Before, building in the
checkout changed the source fingerprint, so the first graph was discarded as
stale, and the build ran
make clean,autoreconf -fiandgit submodule update --initin your repository. CMake builds in the state directory. - JavaScript and TypeScript. A project without a
tsconfig.jsonorjsconfig.jsonis indexed through a config kept with the index, installs never write a lockfile, and the install cache moved out of the project root. Such a project with a dependency that ships a.d.tsfile used to fail with "no files got indexed"; it now gets a graph. A failed dependency install is skipped for 24 hours while its inputs stay the same.
C/C++ graphs also keep the real path of files whose names contain spaces, +,
#, % or non-ASCII characters, which clangd percent-encodes.
dependency_subgraph keeps its response under 36 KB so that MCP hosts with a
50,000-character tool-result limit receive it whole. On Windows, BM25 artifact
verification, the incremental LSP client and the agent's Grep and Glob tools
received fixes.
Preview: the change guard for Python¶
codenib guard lists the tests a change can reach before Claude Code or Codex
finishes, with the call path to each:
cd /path/to/repository
codenib guard install --agent claude # or --agent codex, or --agent all
codenib guard check # the working tree against HEAD
Tests that the change itself rewrote come first, with a command that runs them
as they were at the base commit. Notes anchored to code
(codenib guard note add) are shown when their code changes. The guard runs
locally, calls no model, and is enabled only by codenib guard install.
It is a preview because its benefit is not established. On 68 historical agent patches that broke tests outside SWE-bench's own check, the guard listed a broken test for 35. In a 24-task Django A/B, agents with the guard, without any hook and with a hook naming the full suite each left one hidden regression, so that cohort could not show a difference. See the guard guide for what it covers and what it misses.
Before you upgrade¶
- Rust names. rust-analyzer now comes from
nightly-2026-11-05. Library items keep their names; items in test, bench, example and binary targets are named differently, and a definition's range no longer starts at its doc comments and attributes. Rebuild a Rust graph withcodenib index --rebuild. - C/C++ submodules. Uninitialized git submodules are no longer fetched, so
their code stays out of the graph until you run
git submodule update --inityourself. The checkout copy takes disk space in CodeNib's state directory (236 MB for redis). - Wiki pages regenerate. Existing Wiki pages are rewritten under the new readability checks the next time they are opened or prewarmed, which uses the configured writing model.
Known limits¶
- In a JavaScript/TypeScript workspace without a root config, scip-typescript
still writes a
tsconfig.jsoninto each member package that has none. - After a C/C++ source file is deleted, its old clangd shard can still reach the graph on a full reindex.
- The guard supports Python only. Its constructor edges follow base classes
depth-first, which can pick a different
__init__than Python's method resolution order in diamond inheritance.
The complete list is in the changelog.