nyxCore/CKBInstall
nyxCore

Code knowledge base · Python · SCIP-native

CKB

Know your code. Change it safely.

A SCIP-native symbol graph over your repository, queried from a CLI, an HTTP API, or 79 MCP tools across 7 presets. The deterministic foundation LIP, ArchReview, Onboarding Tutor, and Cartographer all stand on. MIT-licensed, 226 tests passing, v9.2.0.

Tests passing

226

MCP tools

76

MCP presets

7

Review checks

20

Compliance frameworks

20

Current release

v9.2.0

What CKB knows — the graph, not the grep

Compiler-accurate, not pattern-matching

Most AI assistants grep. CKB navigates the symbol graph.

CKB builds a SCIP index of your repository and answers questions against it. Definitions, references, call edges, ownership, churn — every fact is derived from the index or the git history, not from regex matching source text. When the indexer is unavailable, tree-sitter parsing covers the basics; the code is still honest about which mode it is in.

Symbols, resolved

SCIP index built by scip-go, scip-typescript, scip-python, and friends. Every definition, every reference, every call site, typed and ranked. Tree-sitter fallback when no indexer is installed.

Call graph

getCallGraph walks both directions — callers and callees, bounded depth, cycle-safe. traceUsage answers the debugger question: how does execution reach this line?

Blast radius

analyzeImpact returns the reachable set of a proposed change: direct references, transitive callers, affected tests, cross-module edges. Risk-scored, not hand-waved.

API surface diff

compareAPI reads two refs and emits a structured list of breaking changes: removed exports, changed signatures, narrowed visibility. Feeds the review preset directly.

Architecture

getArchitecture, getModuleOverview, listKeyConcepts. The high-level shape of the repo as the graph sees it, not as the README claims. Hotspots by churn × coupling.

Coverage seams

getAffectedTests returns the minimal test set touching a diff. analyzeTestGaps flags untested functions inside the changed files. findDeadCode surfaces what the graph says no-one calls.

Language tiers: Go (T1), TypeScript / JavaScript / Python (T2), Rust / Java / Kotlin / C++ / Ruby / Dart (T3), C# / PHP (T4, experimental). Run ckb doctor before you wire it into CI — the doctor tells the truth about what your toolchain can actually index.

MCP-native — 76 tools · 7 presets

Load the smallest preset that answers the question

An MCP server is just a tool catalogue. Size matters more than count.

The Core preset ships 24 tools and is enough to finish an investigate-and-assess-impact task end-to-end. The compound tools — explore, understand, prepareChange, batchGet, batchSearch — collapse what used to be five sequential MCP calls into one. Reported in the README as 60-70 % fewer round-trips; in practice the tokens saved are the tokens you spend on the model that matters.

PresetToolsWhat it enables
--preset=core24Default. Investigate-and-assess-impact workflow complete in one preset — the compound tools explore, understand, prepareChange cut 60-70% of round-trips.
--preset=review37Core plus summarizeDiff, summarizePr, reviewPR, compareAPI, scanSecrets, auditRisk, auditCompliance. The preset that runs in CI.
--preset=refactor34Core plus justifySymbol, analyzeCoupling, findDeadCodeCandidates, planRefactor. Safe-rename grade answers before the rename.
--preset=docs18Doc-symbol linking, staleness detection, coverage metrics. For the Onboarding Tutor and anyone auto-generating reference material.
--preset=ops16OpenTelemetry integration, observed usage, production dead-code detection. Runtime reality against the static graph.
--preset=federation12Remote index serving, multi-repo API contracts, cross-repo search. For monorepo federations and polyrepo orgs.
--preset=full76Every tool registered. Use when you are exploring what CKB can do, not when you are shipping to an AI session.

Also on disk: SSE streaming for findReferences and searchSymbols, watch mode that re-indexes every 30 s when the graph goes stale, and an HTTP API on port 8080 for the tools that don’t speak MCP.

Who rides on it — 4 products

CKB is a foundation, not a product you open every day

The deterministic floor under the rest of the stack.

You install CKB once per machine and forget about it. It is the thing the other nyxCore products are standing on — each of them asks CKB for facts and then adds its own judgement on top.

In anger — the actual commands

Copy, paste, keep working

One index. Every tool in the stack benefits.

CKB is a single Go binary with a Node wrapper on npm. No runtime, no database, no hosted control plane — the index lives next to your .git directory and never leaves the machine.

# First-time setup inside a repo
npx @tastehub/ckb init
npx @tastehub/ckb index  # auto-detects the language, calls the right SCIP emitter

# Wire it into Claude Code with the review preset
ckb mcp --preset=review --repo=.

# Or run a PR review in CI — zero tokens, exit code on fail
npx @tastehub/ckb review --base=main --ci --format=sarif > review.sarif

# Ask the graph directly
ckb hotspots --format=human
ckb search HandleRequest
ckb analyzeImpact internal/billing/charge.go:Charge

The HTTP API lives on ckb serve --port 8080 if you would rather not speak MCP. Token-authed upload endpoints for the index-server mode are documented in the wiki.

Honest positioning — 03

What this is not

The adversary’s disclosure. Read before you install.

Ipcha Mistabra wrote this section. Every product page in the nyxCore stack carries one. Here is where CKB will not help you — or will help only approximately.

Disclosure

Not an LSP replacement.

Your IDE still owns go-to-definition, rename-refactor, inline diagnostics. CKB is a read-only index queried by agents and CI — the complement, not the substitute. If a question is best answered in a microsecond, your language server already answered it.

Disclosure

Only as good as the indexer.

Go is Tier 1. TypeScript, JavaScript, Python are Tier 2. Rust, Java, Kotlin, C++, Ruby, Dart are Tier 3 — basic support, call graph may be incomplete. C# and PHP are experimental. `ckb doctor --tier standard` tells the truth before you commit to CI.

Disclosure

Approximate where it matters.

Hotspot scoring blends churn, complexity, and coupling — the weights are heuristics, not physics. Dead-code detection is confidence-scored, not a proof. Compliance rules map findings; they do not turn into audit certificates. Treat CKB as a prior, not a verdict.

Install — under two minutes

Three paths, same binary

One command. No runtime, no database, no account.

Node 20+ if you go via npm. No Node at all if you use the Homebrew tap or build from source. The CLI discovers your SCIP indexer on its own; install one only if you want the call graph.

# Option 1 — npm, the fastest path
npm install -g @tastehub/ckb
ckb setup  # auto-writes .mcp.json for Claude Code, Cursor, Windsurf, …

# Option 2 — Homebrew on macOS / Linux
brew tap SimplyLiz/ckb
brew install ckb

# Option 3 — build from source
git clone https://github.com/SimplyLiz/CodeMCP.git
cd CodeMCP && go build -o ckb ./cmd/ckb
Get it on GitHub @tastehub/ckb on npm v9.2.0 release notes

MIT licensed · index stays on your machine

Before you wire it into CI

Run ckb doctor --tier standard on a representative build host. It will tell you which language indexers are missing, whether incremental indexing is available for your stack, and whether your CI clone is shallow enough to break ckb review --base=main (as of v9.0.1 we auto-fetch the base ref; before that, depth-0 checkouts were a live failure mode). Calibrate the preset you actually want, pin it, then enable the gate.

Metis says: an index you never refresh is worse than no index at all.

See the rest of the nyxCore ecosystem Talk to the team Wiki & integration guide