The problem we started with
Ask an AI coding agent who calls a function and it reaches for text: grep for exact matches, embeddings for fuzzy ones. Both answer a question about strings. The question you asked was about symbols. So the agent gets an unrelated helper with the same name, misses the real call site behind an interface, and fills the gap from training data instead of from your repository.
Source code is not unstructured text. It is a deterministic graph: calls, imports, types, definitions, references. Compilers have traversed that graph for decades. Travsr records the relationships its analyzers can resolve, updates them as you work, and hands it to your agent over MCP so the agent walks real edges instead of guessing from chunks.
Useful navigation starts with a map. For a codebase, that map is the set of relationships already present in the source.
How it works
Tree-sitter builds structural nodes and edges for supported programming languages. Language analyzers add semantic relationships, with coverage varying by language. Configuration and Markdown files are also indexed. Each symbol carries a Kythe VName scoped by repository, path, language, and signature. Renaming or moving it can change that identity.
Graph traversal follows recorded connections. Ranking finds relevant context, and token-budget selection keeps the response focused. Optional local embeddings can broaden natural-language discovery without deciding which relationships exist.
What is shipped today
- Programming languages and supporting files indexed locally, with semantic call edges built in for TypeScript/JavaScript, Rust and Python and installable per language for other programming languages.
- The MCP server, with tools for dependencies, callers, references, blast radius, execution paths, repo maps, snippets and index health.
- The CLI and daemon:
travsr initindexes a repo, installs Git hooks, and detects coding tools. Project MCP settings are configured where supported; other clients receive setup instructions. - A VS Code extension with callers, blast radius, Context Explorer, and context copying for chat, available on the Marketplace and Open VSX.
- Multiple registered repositories accessible through one global MCP server, with queries scoped to each repo.
- Optional local semantic search configured with
travsr embed init.
Hosted cloud indexing and team repositories are in progress. The public roadmap tracks what is shipped, what is being built, and what is still just a plan.
What we hold to
Algorithms first, LLM last
Parsers and language analyzers record relationships. Graph algorithms retrieve them; language models do not decide which edges exist.
Always fresh
The running daemon watches saved files. Git hooks reconcile commits, merges, and checkouts, and indexing status makes background analysis visible.
Local first
The graph is a SQLite file in your repo. Indexing, retrieval and the MCP server all run on your machine, and you can query the graph without a hosted service.
MCP is the interface
No REST API to wrap, no plugin per editor. Travsr speaks the Model Context Protocol, so any MCP client (Claude, Copilot, Cursor) queries the same graph.
Open source
Travsr is Apache-2.0 licensed and developed in the open at github.com/Travsr-com/travsr. Issues, discussions and pull requests are all welcome, and the architecture docs describe the indexer, store, retrieval and MCP layers in the same terms the code uses.
Questions, feedback, or something that should work and does not? Get in touch.