code-kb
Interactive Showcase & Benchmarks: https://anortham.github.io/code-kb/
code-kb is a fast, lightweight code-intelligence engine and Model Context Protocol (MCP) server designed specifically for AI coding agents.
Backed by the rich AST fact tables produced by julie-extractors, code-kb provides progressive disclosure, semantic symbol navigation, and surgical context slicing—enabling agents to navigate, understand, and edit codebases with 80–90% fewer tokens without burning context on full file reads or noisy text grep.
Why code-kb?
Traditional AI coding agents burn massive amounts of context loading entire source files into their prompt windows just to inspect a single type signature or implementation detail.
code-kb solves this with a progressive disclosure architecture:
- Repository Orientation (
codebase_outline): Understand directory structures and key exports in ~200 tokens. - File Skeletons (
file_skeleton): Inspect function signatures, types, traits, and docstrings with implementation bodies stripped. - Symbol Lookup & Discovery (
lookup_symbol/search_symbols): Instant exact/prefix identifier lookups and conceptual FTS5 search across all symbols. - Surgical Symbol Context (
get_symbol_context): In a single turn, fetch a target function's body along with its callee signatures, parameter types, and associated unit tests. - Atomic AST Edits (
replace_symbol_body): Replace symbol implementations atomically with pre-flight syntax validation byjulie-extractfor every language it parses, then re-index immediately.
Key Principles
- Sub-15MB Retained Memory: Written in Rust, zero heavy runtimes (no web dashboard, no GPU models), retained process memory stays below 15 MB. The plugin launcher is a small Node script that starts the native binary and then only waits on it.
- Sub-5ms Query Latency: Direct SQLite queries in WAL mode with zero in-memory heap bloat.
- Zero Workspace Parameters: Pure semantic tool calling (
lookup_symbol(query="...")). The agent is never burdened withworkspace_id,repo_path, or path confusion. - CLI-First Parity: Every MCP tool has an exact 1:1 CLI command for instantaneous terminal verification and dogfooding.
- Continuous 3-Tier Sync: Tool-driven updates, JIT staleness guards before reads, and a debounced background watcher with a Git storm circuit breaker.
Install
Install the plugin for your agent. The plugin ships a small Node.js launcher. On the first
run it downloads the matching code-kb release archive for your platform, verifies its
SHA-256, and unpacks code-kb and julie-extract into ~/.code-kb/dist/<version>/. Later
runs start instantly. Nothing else to download or put on PATH.
Requirements:
- Node.js 18 or newer on
PATH(the launcher is a Node script; the server itself is a native binary). - Windows 10 build 17063 or newer (the launcher unpacks with the built-in
tar.exe).
Claude Code
/plugin marketplace add anortham/code-kb
/plugin install code-kb@code-kb
(Send as two separate prompts.) The plugin registers the MCP server, the progressive
disclosure skill, a /code-kb:telemetry command for usage and token-savings reports, and
SessionStart and SubagentStart hooks that inject routing instructions.
Codex
Run codex, open /hooks, and trust the two code-kb hooks.
To update, refresh the marketplace snapshot first. codex plugin remove followed by
codex plugin add reinstalls the version already in the snapshot:
Antigravity CLI (AGY)
The plugin registers the MCP server and a PreInvocation hook. Antigravity has no
SessionStart hook, so routing directives arrive per turn through injectSteps.
Grok CLI
First Run & Automatic Indexing
You do not need to run code-kb scan by hand. The first code-kb tool call or CLI command in
a repository creates <workspace>/.code-kb/artifact.db and runs the initial scan. A git
worktree copies its parent repository's index instead of scanning again. Files that changed
while no session ran, for example after a branch switch, are reconciled before the first
answer. Pre-index a large repository before a session with:
Launcher environment variables:
| Variable | Effect |
|---|---|
CODE_KB_HOME |
Directory that holds dist/ (default ~/.code-kb). |
CODE_KB_VERSION |
Release version to fetch instead of the plugin's own version. |
CODE_KB_BIN |
Run this binary and skip the download entirely (local builds). |
Two overrides need no environment variable, which matters in harnesses that do not pass the environment to MCP servers (Codex):
- A binary or symlink at
~/.code-kb/bin/code-kb(code-kb.exeon Windows) runs instead of any download, in every harness. For development:ln -s /path/to/code-kb/target/release/code-kb ~/.code-kb/bin/code-kb. - A plugin installed from a source checkout runs that checkout's
target/release/code-kbwhen it exists.
With either in place, cargo build --release plus a session restart is the whole development loop.
Uninstall
| Harness | Command / Action |
|---|---|
| Claude Code | /plugin remove code-kb |
| Codex | codex plugin remove code-kb@code-kb |
| Antigravity (AGY) | agy plugin uninstall code-kb |
| Grok CLI | grok plugin uninstall code-kb |
Delete ~/.code-kb/dist to remove the downloaded binaries. Each workspace keeps its index
in <workspace>/.code-kb/; delete that directory to remove the index.
Manual Configuration
Use this path for harnesses without a plugin manager, or when you would rather manage the binary yourself.
Step 1: Get the Binaries
-
GitHub Releases: download the archive for your platform from GitHub Releases:
- Linux x86_64 (
.tar.gz) - macOS Apple Silicon (
.tar.gz) - macOS Intel (
.tar.gz) - Windows x86_64 (
.zip)
Unpack it and put both binaries on your
PATH(for example~/.local/bin,/usr/local/bin, orC:\tools).code-kbandjulie-extractare packaged side by side, andcode-kbfindsjulie-extractnext to its own executable. - Linux x86_64 (
-
Cargo:
# orCargo installs
code-kbonly. Download the pinnedjulie-extractfrom the julie-extractors releases (version inscripts/julie-pins.json) and put it on yourPATHor setJULIE_EXTRACT_BIN. -
Verify:
Step 2: Register the MCP Server
Every harness runs the same command: code-kb serve. Hooks run code-kb hook <Event>.
How code-kb Finds Your Workspace
Tools never take a workspace parameter. The server binds a workspace in three steps, and each later step replaces the earlier one:
- At start:
--root <path>on theservecommand, or, without it, the directory the process starts in, searched upward for.gitor a project marker. - At handshake: the roots the host sends in the MCP
initializerequest, if any. - At each tool call: an absolute path inside a repository in any
file_pathorpathargument.
Terminal harnesses (Claude Code, Codex, AGY, Grok CLI, Copilot CLI, Pi, Swival, Zed) start the
server in the project directory, so code-kb serve alone is enough.
GUI apps (Cursor, Windsurf, the Antigravity IDE, Visual Studio, VS Code, Claude Desktop) start
the server from their own install directory, not from your project. For these apps, put the MCP
config inside the project and pass --root with the absolute path of the project:
"args":
Without --root, the first tool call in a GUI app fails with
Database artifact not found ... configure code-kb with '--root <repo-path>'. That error is the
signal to add the flag. A tool call with an absolute path inside a repository also binds the
server, so a session can recover, but --root removes the guesswork.
Claude Code (without the plugin)
Codex (without the plugin)
In ~/.codex/config.toml:
[]
= "code-kb"
= ["serve"]
Antigravity CLI (without the plugin)
Global config (~/.gemini/config/mcp_config.json) with "eager": true. The AGY CLI starts the
server in the project directory. The Antigravity IDE starts it from its own install directory,
so add --root when you use the IDE:
Lifecycle hook configuration (~/.gemini/config/hooks.json):
Progressive disclosure skill linking:
Grok CLI (without the plugin)
Project-level .mcp.json:
Cursor
In .cursor/mcp.json at the repository root. Cursor is a GUI app, so pass --root:
OpenCode
Add to opencode.json in the project:
Claude Desktop
Claude Desktop has one global config and no project directory, so --root pins one project.
Add to claude_desktop_config.json (%APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Other GUI Apps (Windsurf, Visual Studio, VS Code)
Use the app's project-level MCP config file and the same arguments:
["serve", "--root", "/absolute/path/to/project"]. On Windows write the path with forward
slashes, for example C:/source/project.
GitHub Copilot CLI & Terminal Agents
Terminal harnesses (Copilot CLI, Pi, Swival, Zed) start the server in the project directory:
configure the MCP server to run code-kb serve with no --root.
To remove a manual configuration, delete the code-kb entry from the harness config
(claude mcp remove code-kb, agy mcp remove code-kb, or edit the file) and delete the
binaries from your PATH.
MCP Tool Catalog
| Tool | Purpose | Key Parameters | Aliases |
|---|---|---|---|
codebase_outline |
High-level architectural orientation of directory layout & symbols. | path (opt), depth (opt, default 2) |
dir, subpath |
file_skeleton |
File outline with function & method bodies stripped (80–90% token savings); a directory returns its outline. | file_path (req) |
file, path |
lookup_symbol |
Fast identifier lookup (exact name or prefix) across repo or scoped path. | query (req), path (opt), kind (opt), is_test (opt), limit (opt) |
name, q |
search_symbols |
Conceptual BM25 full-text search over symbol signatures & docstrings. | query (req), path (opt), kind (opt), limit (opt) |
name, q |
get_symbol_body |
Slices the exact implementation body of a symbol from disk. | symbol_name (req), file_path (opt) |
symbol, name, path |
get_symbol_context |
Surgical bundle: target body + callee signatures + parameter types + tests. | symbol_name (req), file_path (opt), include_external (opt, def: false) |
symbol, name, path |
find_references |
Callers or callees of a symbol, matched by name from AST call sites and ranked by same file, same directory, then receiver type; callers also include type usages and member accesses (filters external stdlib noise; qualify overloaded names). | symbol_name (req), file_path (opt), direction ("callers" | "callees", def: callers), include_external (opt, def: false) |
symbol, name, file, path |
blast_radius |
Multi-hop reverse reachability (CTEs) & targeted test prediction. | symbol (opt), file (opt), depth (opt, def: 2), limit (opt) |
name, path, impact |
find_structural_facts |
Queries framework facts (routes, SQL queries, config keys, tables). Lists all categories when omitted. | category (opt), path (opt), limit (opt) |
cat, kind, type, file, file_path |
replace_symbol_body |
Atomically replaces a symbol's implementation; julie-extract check validates the syntax for every language it parses (about 40), other paths report validation skipped. |
symbol_name (req), file_path (req), new_body (req), expected_body_hash (opt) |
symbol, file, body, code |
telemetry_summary |
Token savings, call counts, and error rates from ~/.code-kb/telemetry.db, across all workspaces or scoped to the current one. |
time_window (opt, def: all), workspace_only (opt, def: false), json (opt) |
since, window |
CLI Commands (Direct Terminal Usage)
Every MCP capability can be executed directly from your terminal with 1:1 parity:
# Architectural outline of current repo (depth 2)
# Skeleton of a specific file (implementation bodies stripped)
# Lookup symbols by exact name or prefix (alias: code-kb symbol)
# Conceptual BM25 full-text search across docstrings and signatures
# Retrieve exact implementation body of a symbol
# Get surgical context bundle: body + callees + types + tests (alias: code-kb slice)
# Find callers or callees of a function (language-agnostically filters stdlib noise)
# View callees including external standard library tokens
# Predict blast radius and targeted tests to run for a symbol or file
# Zero-argument blast radius: auto-discovers uncommitted git working-tree changes
# (alias: code-kb impact)
# Query framework structural facts (or omit category to list all detected categories)
# Atomically edit a symbol body with pre-flight syntax validation by julie-extract
# View active log file and recent diagnostic messages
# Token savings, call counts, and error rates (alias: code-kb telemetry)
# Self-contained diagnostic bundle with a pre-filled GitHub issue link
# Output agent lifecycle hook payload (SessionStart / SubagentStart / PreInvocation)
Development
For contributors building code-kb from source:
Prerequisites
- Rust (1.95+ / Edition 2024)
- Extractor binary: Run
./scripts/restore-julie-extract.shto download the pinnedjulie-extractbinary
Build and Install Locally
# Restore pinned julie-extract binary
# Install code-kb binary from local checkout
Running Tests & Verification
# Run test suite
# Run the plugin launcher and manifest tests
# Run release pre-flight verification
To run the Claude Code plugin from this checkout, build and load it. The launcher runs
target/release/code-kb when it exists, so no download happens:
Architecture & Engineering Plans
code-kb was designed based on extensive benchmarking and retrospectives from earlier code intelligence engines:
- 001: Architecture & Service Model — Multi-project workstation scope, Git worktree deduplication, and RAG vs. AST evaluation.
- 002: Workspace Scoping & MCP — 1:1 session binding, eliminating workspace registries and
workspace_idfriction. - 003: Tool Catalog & Schema — The core read tools, token-minimized output formats, and
replace_symbol_body. - 004: File Synchronization & Watchers — 3-tier sync: tool-driven updates, JIT staleness guards, and debounced background watching.
- 005: Cold-Start Reconciliation — Detecting and reconciling offline edits in under 50ms on startup.
- 006: Retrospective Lessons from Miller — Analysis of calibration data, performance ledgers, and traps to avoid.
- 010: Master Implementation Plan — The phased engineering roadmap from workspace scaffolding to release.
- ADR 001: Zero Workspace Parameters — Decision record strictly forbidding workspace parameters in tool schemas.
- AGENTS.md Guidelines — Strict architectural invariants and rules for AI coding assistants working in this repository.
License
Dual-licensed under MIT or Apache-2.0.