Skelpr — code intelligence for agents

Don’t give an agent the whole repo.
Give it the right code.

Skelpr finds the right code for AI agents, PR reviews, and fixes — grounded in syntax-aware context and precise file:line citations.

-59% agent tokens-76% files opened-69% cache-read tokens

Skelpr retrieves and cites — your agent still does the reasoning.
It speaks MCP (Model Context Protocol), so agents such as Claude Code, Cursor and Antigravity can call it as they are.

MCP AGENT / INTEGRATION HOVER OR CLICK A STEP
hero.trace01 / 04
$“does a recommendations service exist?”
A question about the codebase
REPOSITORY UNDERSTANDINGRETRIEVAL ≠ REASONINGEVERY CLAIM HAS A LOCATION
The problem

Finding a file is easy.
Understanding a codebase is not.

Agents can search. The hard part is knowing which files matter, how symbols connect, and whether an answer is grounded in what the repository actually contains.

TECHNICAL DETAIL

Skelpr addresses context selection, not the agent’s reasoning. It provides ranked, token-efficient evidence through the same retrieval path across CLI and MCP integrations.

× Native browsing
README.mddeploy/...src/index.tstests/...config.yaml... + 113 files opened
Repeated reads. Re-sent context. More places to lose the thread.
✓ skelpr retrieval
[SYMBOL] skelpr/engine.py:354-379[GRAPH] .skelpr/graphify/summary.txt:1-2[LEXICAL] retrieval/hybrid_retriever.py:1-12
A small, ranked context package with citations the agent can inspect.
In the repository

When the correct answer
is “it does not exist.”

The `negative_missing_service` task asked whether the Sock Shop repository defined a recommendations or inventory service. Skelpr searched for the names, returned compact evidence, and helped the agent avoid inventing a manifest.

VERIFIED RESULTRecommendations service: absent0 code definitions · 0 deployment manifests
negative_missing_service.trace0.7s
$ skelpr_search “recommendation inventory service”
[GRAPH] .skelpr/graphify/summary.txt:1-2 architecture graph summary
[LEXICAL] grafana-service.yaml:1-23 matched generic “service”
— second targeted search —
[RESULT] no code chunks matched the query
agent The service does not exist in this repository. No manifest was fabricated.
What is skelpr?

A surgical librarian
for code intelligence.

Skelpr indexes a repository, understands its symbols and relationships, and returns only the code context an agent needs to answer, review, patch, or validate.

Every output includes precise path:line evidence.
IMPLEMENTATION DETAIL

Engine.retrieve_context() is the shared context retrieval method used by MCP, CLI, and integrations. It performs retrieval without invoking an LLM.

A
Index once

Repository files, symbols, imports, chunks, and embeddings become a working knowledge base.

B
Retrieve selectively

Lexical, symbol, graph, and vector signals are fused deterministically.

C
Act carefully

Patch generation and validation preserve a path from evidence to verification.

Two integration modes

One retrieval engine.
Two ways to use it.

Use the standalone workflow when skelpr should run end to end. Use Agent Integration when an existing coding agent should bring its own reasoning.

MCP AGENT

Agent Integration (MCP Server)

NO LLM KEY REQUIRED

Skelpr runs as a code intelligence backend for agents such as Claude Code, Cursor and Antigravity, or any MCP-compatible agent. The agent’s LLM handles reasoning; skelpr provides retrieval and validation.

LLM neededAgent brings its own
Retrievalskelpr hybrid engine
ReasoningExternal agent
Best forEnhancing an existing agent
WHEN THIS FITS — AND WHEN IT DOESN’T

The MCP Agent integration uses an external agent through MCP/CLI/HTTP. Headless / Enterprise deployments route application or CI traffic through the skelpr API, retrieval, and LLM gateway.

MCP Agent deep dive

A live path from question
to cited context.

The MCP Agent integration is not a search box. It is a boundary between an agent’s reasoning and a repository’s evidence.

External agent owns skelpr owns
SELECT A STEPswipe for all six steps →
workflow.tracestep 01 / 06
$“does a recommendations service exist?”
source · external agent
EXTERNAL AGENT

Task

A developer asks the agent a question about a repository.

PIPELINE DETAIL

The external coding agent receives a repository question, review, or fix request.

MCP Agent exposesskelpr_searchskelpr_get_contextskelpr_find_symbolskelpr_dependenciesskelpr_validateskelpr_healthskelpr_apply_ast_patch
Benchmark evidence

Does it actually
work better?

In the repository’s self-reported MCP Agent A/B, an Antigravity agent answered seven Sock Shop tasks with native tools only, then with skelpr MCP available (WITHOUT arms 2026-09-09/10; WITH arms re-run 2026-09-24 on the current engine). Below it, the same seven questions answer the like-for-like CLI comparison. Pick any agent-A/B task to read the exact prompt and both verbatim answers.

7 × 2 tasks × armsAntigravity Gemini 3.6 Flash MediumSock Shop microservices demo2026-09-24 WITH re-run
Total tokensHow much context work did the agent do?
WITHOUT766,393
→
WITH312,056
−59.3%
Files openedHow many files did the agent inspect?
WITHOUT113
→
WITH27
−76.1%
Tool callsHow many tool invocations per suite?
WITHOUT136 native
→
WITH21 skelpr + 31 native
−61.8%
AccuracyHow many checklist points did the answers earn?
WITHOUT619
→
WITH621
parity (+2 / 700)
THE SEVEN TASKS

Same questions. Different context path.

WITHOUT WITH · click a row to read the answersswipe for all columns →
TaskCategoryAccuracyTokens W/O → W
service_architectureretrieval959579.8k → 62.0k
request_flowretrieval100100140.5k → 59.4k
monitoring_stackretrieval8882158.9k → 41.2k
dependency_impactdependency9292176.1k → 52.6k
fix_catalogue_imagefix849272.9k → 46.2k
negative_missing_servicenegative606088.7k → 26.1k
exact_file_catalogueexact_file10010049.4k → 24.7k
TASK 1 OF 7

service_architecture

PROMPT — IDENTICAL FOR BOTH ARMS

Explain the architecture of this microservices demo (Sock Shop): identify the main services (carts, catalogue, front-end, orders, payment, queue-master, shipping, user), the data stores and message broker backing them, and the key deployment files (docker-compose, Kubernetes manifests, Helm chart) that define the system.

Same95 → 95 accuracy, WITHOUT → WITH

A score-neutral swap: WITH’s table omits the Redis session-db row (−5) but adds the Makefile workflow (+5)

The answers, verbatim
WITHOUT — native tools only
Accuracy95
Tokens79.8k
Duration25.7s
Files read14
Tool calls15 native
WITH — skelpr MCP available
Accuracy95
Tokens62.0k (↓22%)
Duration89.5s (↑249%)
Files read4 (↓71%)
Tool calls4 native + 3 skelpr
What’s actually different
  • Both arms name the same eight services and the same deployment surface (docker-compose, manifests/, complete-demo.yaml, Helm chart). WITH answers as a reference table with exact image tags; WITHOUT as a prose essay.
  • Score-neutral swaps: WITH’s table omits the Redis session-db store (the −5 infra point) but adds the Makefile make gen-complete-demo workflow (the +5 deployment point) — the 95/95 tie is those two facts trading places.
  • WITH additionally lists every numbered manifest (00-sock-shop-ns.yaml through 26-user-db-svc.yaml); WITHOUT names the directories instead.
The call

WITH is the better answer to show someone — image versions for every service and a table you can scan in seconds, at 22% fewer tokens. The one thing WITHOUT has that WITH doesn’t is the Redis session-db row; WITH alone has the Makefile workflow. On facts, it’s a wash.

Read the accuracy number with care.

Parity is the headline: all seven tasks score within the ±5 tolerance, and the run-1 gaps (Helm/ingress, the healthcheck step, 3-of-5 image sites) are closed. Two single checklist facts traded the other way (session-db ↔ Makefile; kube-state-metrics), and both arms miss the negative task’s absence phrase (60/60). Token and file-read savings are unaffected.

CLI MODE · LIKE-FOR-LIKE REFERENCE

The same seven questions, answered without an agent

Same model (openai/gpt-oss-120b on Groq), same checkout, same deterministic checklist as the agent A/B. The agentic reference picks files from a repo listing, then reads them — two model calls per task; the hybrid engine answers from pre-ranked, cited chunks in one.

⚠️ Latency includes Groq free-tier rate-limit backoff (the Skelpr arm ran second and absorbed the waits); on the task with no throttling it answered in 1.56s vs 3.55s. Accuracy is near-parity, not better: 4 of 7 tasks tie, and the agentic reference leads the other three by 5–10 points.

Pipeline strategyAvg. latencyAvg. total tokensCost / queryAccuracy
Agentic multi-turn24.39s ⚠️7,573$0.0020088.4 / 100
skelpr hybrid engine28.90s ⚠️3,925 (−48%)$0.00099 (−50%)85.1 / 100
Those numbers came from one agent, one repo, one afternoon.

Your repository, your agent, your next task — the setup is two prerequisites and four commands.

Run it on your repo
Before you start

What has to be running
before the first index.

Skelpr cannot start either one for you, and neither one fails loudly. Start Docker Desktop and settle the embedding endpoint first, then run the setup block below.

Docker Desktop, running

Required for setup

skelpr setup starts the three services above. Docker Desktop must be running first — if it is not, setup stops at step 1 and says so instead of half-configuring the machine.

Without Docker the core still runs end to end on in-memory fallbacks — you lose sandboxed validation and the production-grade stores, not the assistant.

Postgres 16
port 5434
Qdrant
ports 6333 / 6334
Sandbox image
skelpr-runner:latest

An embeddings endpoint, hosted or your own

Required for retrieval

Both modes embed your query, so you need an endpoint — not a language model. Easiest: a hosted-embeddings token sets SKELPR_EMBEDDINGS_ENDPOINT, and every command authenticates itself. Nothing to run. Or run nomic-embed-text-v1.5 in LM Studio on port 1234.

Point embeddings.endpoint at a GPU host if you prefer — it need not be local. Leave it down and the index still builds over a hashing embedder: worse recall, no error. A credentialed endpoint and the watcher refuse that fallback.

Model
nomic-ai/nomic-embed-text-v1.5
Format
GGUF
Quantization
Q8_0
Architecture
nomic-bert
Domain
embedding
Size on disk
~146 MB

A model to reason with

CLI mode only

ask, chat, review and fix need a generation model. Run qwen2.5-14b-instruct locally, or configure an API key and skip the hardware. MCP mode needs neither: your agent reasons, Skelpr only retrieves.

A local model and the embedding server can share one endpoint or run on two — separate model and embeddings blocks in .skelpr.yaml. With an API key, only the embedding endpoint stays local.

Local model
qwen2.5-14b-instruct
or an API key
Gemini · OpenAI · Anthropic · OpenRouter · Groq
Key setup
skelpr init --gemini / --openai / --anthropic

Check the embedding endpoint before you index. A 200 here, and the Embedding server online line in the skelpr index output, are the whole difference between a vector index and a keyword one. On the hosted endpoint there is nothing to check by hand — skelpr index probes and authenticates for you — so this is the local path.

VERIFYbash
curl -s http://127.0.0.1:1234/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"input":["hi"],
       "model":"text-embedding-nomic-embed-text-v1.5@q8_0"}'
Get started

Give your agent
better context.

Index a project, add the MCP integration, and let your existing agent call skelpr when it needs repository understanding.

SETUPbash
# from PyPI — the [mcp] extra brings the MCP server
pip install "skelpr[mcp]"

# once per machine — the token from your access email
skelpr activate <token>

cd <your-repo>
skelpr setup
skelpr init
skelpr index
skelpr install-mcp

Requirements: Python 3.10+, Docker Desktop running, and an embeddings endpoint — hosted or local, the section above has both. The agent side needs any MCP-capable client: skelpr install-mcp auto-detects Claude Code, Cursor, Windsurf, Cline, Claude Desktop and Antigravity, and skelpr register-agent covers the rest.

No account, no telemetry, one honest exception. Activation binds this machine once; a managed lease then re-checks in on its interval, sending your token and a machine-id hash — no hostname, no paths, no code, no usage. Indexing, retrieval and review run against your local checkout, so your code is never uploaded — except at the optional hosted-embeddings endpoint, which receives the chunk text it is asked to embed. Credential-shaped values are masked before retrieved text reaches your agent, the model or the logs, and credential files like .env, *.pem and id_rsa never enter the index. skelpr license reports the state; skelpr doctor reports what was masked.

Before you ask

Six questions,
answered up front.

What it is, what it needs, and where your code goes — the answers that otherwise live in an email thread. The full guide has the commands.

Skelpr is surgical code retrieval for AI agents, PR reviews, and fixes. It finds the parts of a repository that matter, ranks them, and hands your agent a small context package with precise file:line citations. Skelpr retrieves and cites — your agent still does the reasoning.

Search finds matches; Skelpr assembles evidence. It combines symbolic, lexical and graph signals over an indexed repository and returns a ranked, token-efficient package — the benchmarked runs opened 76% fewer files and spent 59% fewer agent tokens.

Anything that speaks MCP. skelpr install-mcp auto-detects common agents such as Claude Code, Cursor and Antigravity, and skelpr register-agent covers the rest. The CLI takes the same retrieval path for review, diff and fix without an agent in the loop.

Python 3.10 or newer, Docker Desktop running, and an embeddings endpoint — the hosted one if your token carries it, otherwise a local model such as LM Studio servingnomic-embed-text-v1.5 on port 1234. Without Docker the core still runs on in-memory fallbacks; you lose sandboxed validation and the production stores, not the assistant.

No. Indexing, retrieval and review run locally, and there is no telemetry. Activation sends your token and a hash of this machine’s id — no hostname, no file paths, no code, no usage — and a managed lease re-checks in on its interval, so it needs the network. Credential-shaped values are masked before retrieved text reaches your agent, the model or a trace, and credential files such as .env, .pem and id_rsa are left out of the index.

pip install skelpr is open to anyone; running is licensed per machine. Join the waitlist and we send a token that activates one seat — a seat is a machine, not a person or a repository.

STAY IN THE LOOP

Run it today.
Help shape what ships.

Install is open today; running is licensed per machine. Access is invite-only for now — 0.3.0, the engine behind these benchmarks, is out and seats go out by hand. Join the list and we send a token for one machine, plus release notes, new runs and early enterprise access.