Skip to content
lexasubPublic

About

AST-RAG β€” Code Analysis & Navigation System

Resources

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

AST-RAG β€” Code Analysis & Navigation System

gitcgr

Context-aware code intelligence system for AI agents and developers. Provides semantic code search, definition lookup, call graph analysis, and codebase navigation powered by AST parsing (Tree-sitter), graph database (Neo4j), and vector embeddings (Qdrant).

AST-RAG parses code into AST (via Tree-sitter), builds a graph in Neo4j, and indexes semantic embeddings in Qdrant (bge-m3).

πŸš€ Features

Feature Description Example
πŸ” Semantic Search Search by natural language ast-rag query "batch upsert nodes"
πŸ“ Definition Lookup Jump to class/function by name ast-rag goto EmbeddingManager
πŸ“ž Call Graph Find callers/callees ast-rag callers build_embeddings --depth 2
πŸ“‹ Find References Find all symbol usages ast-rag refs UserService
🎯 Signature Search Search by function pattern ast-rag sig "process(int, String)"

🌐 Supported Languages

Language Extensions Depth Features
Java .java ⭐⭐⭐ Full Classes, interfaces, methods, DI, inheritance, overrides
C++ .cpp .cxx .cc .c .hpp .hxx .hh .h ⭐⭐⭐ Full Classes, templates, virtual calls, lambdas
Rust .rs ⭐⭐⭐ Full Structs, traits, impls, generics, macros
Python .py ⭐⭐ Good Classes, functions, imports, type hints
TypeScript .ts ⭐⭐ Good Classes, interfaces, functions, imports
TSX / JSX .tsx .jsx ⭐⭐ Good Classes, interfaces, functions, imports, JSX elements
Go .go ⭐⭐ Good Functions, methods, structs, interfaces, imports

Files with other extensions are skipped during indexing with a warning listing the supported languages.

πŸ“¦ Installation

# 1. Clone and install
git clone https://github.com/lexasub/raged && cd raged
python -m venv venv && source venv/bin/activate
pip install -e .

# 2. Start Neo4j and Qdrant
docker compose up -d

# 3. Index and query β€” no config file needed
ast-rag index-folder ./ast_rag
ast-rag query "batch upsert nodes"

The defaults point at the services docker compose up -d starts, so this works on a fresh clone with no configuration. To point elsewhere, set environment variables rather than editing a tracked file:

export AST_RAG_NEO4J_URI=bolt://myhost:7687
export AST_RAG_NEO4J_PASSWORD=secret
export AST_RAG_QDRANT_URL=http://myhost:6333

Or copy ast_rag_config.example.json to ast_rag_config.json and edit it (it is gitignored).

Optional extras

pip install -e . gives you the ast-rag CLI. The other two console scripts need extras:

pip install -e ".[mcp]"     # ast-rag-mcp (MCP server), ast-rag-watch (file watcher)
pip install -e ".[server]"  # embedding_server.py, for the GPU host
pip install -e ".[dev]"     # pytest, mypy, ruff

Without [mcp], ast-rag-mcp and ast-rag-watch are on PATH but fail with ModuleNotFoundError: No module named 'mcp' / 'watchdog'.

βš™οΈ Configuration

Create ast_rag_config.json in project root:

{
  "neo4j": {
    "uri": "bolt://localhost:7687",
    "user": "neo4j",
    "password": "your_password"
  },
  "qdrant": {
    "url": "http://localhost:6333",
    "collection_name": "ast_rag_nodes"
  },
  "embedding": {
    "model_name": "BAAI/bge-m3"
  }
}

Embeddings are computed locally by default. To offload them to a separate embedding server, add remote_url β€” and dimension with it, which is required whenever remote_url is set (docker compose up -d does not start such a server):

"embedding": {
  "model_name": "bge-m3",
  "remote_url": "http://localhost:1113/v1/embeddings",
  "dimension": 1024
}

🎯 Quick Start

# 1. Index project
ast-rag init /path/to/codebase

# 2. Find definition
ast-rag goto MyClass

# 3. Find callers
ast-rag callers my_function --depth 2

# 4. Semantic search
ast-rag query "API request handling"

# 5. Check quality
ast-rag evaluate --all

πŸ“š Documentation

Document Description
docs/QUICKSTART.md ⭐ Start here β€” detailed quick start
docs/configuration.md Configuration and troubleshooting
docs/IGNORE_FILES.md Excluding files from indexing (.cgrignore)
docs/python-api.md Python API for scripts
docs/graph-schema.md Neo4j graph schema
AGENTS.md Guide for AI agents
scripts/README.md Indexing utilities
tests/README.md Tests and benchmarks

πŸ› οΈ CLI Commands

ast-rag init <path>                    # Full indexing
ast-rag index-folder <path>            # Index a folder
ast-rag create-database <name>         # Create a Neo4j database
ast-rag update <path> --from-commit <a> --to-commit <b>
                                       # Update from git diff a..b
ast-rag workspace <path>               # Show workspace changes
ast-rag query "<text>"                 # Semantic search
ast-rag goto <name>                    # Find definition
ast-rag callers <name>                 # Find callers
ast-rag refs <name>                    # Find references
ast-rag call-graph <name>              # Callers/callees graph around a function
ast-rag symbol-impact <name>           # Definition + refs + callers + callees
ast-rag sig <pattern>                  # Signature search
ast-rag blocks <function>              # if/for/while/try/lambda/with blocks
ast-rag lambdas                        # List lambda/closure blocks
ast-rag summarize <name>               # LLM summary of a function/method/class
ast-rag analyze-stacktrace [file]      # Map a stack trace onto the graph
ast-rag stats                          # Statistics about the indexed codebase
ast-rag cache-stats                    # Parse cache statistics
ast-rag evaluate                       # Quality evaluation
ast-rag sandbox <lang> [workdir] --cmd "<command>"
                                       # Run in Docker sandbox

ast-rag <command> --help lists the flags for each.

πŸ“Š Quality

Phase 2 benchmark run, recorded 2026-02-26 and not re-measured since:

Metric Target Measured
Pass Rate >80% 100% βœ…
F1 Score >0.85 0.98 βœ…
Precision >0.85 0.98 βœ…
Recall >0.85 0.97 βœ…

The benchmarks in benchmarks/queries/ are ground-truthed against AST-RAG's own source, so they measure this repo rather than yours. To reproduce, index this repo with Neo4j and Qdrant running, then from the repo root:

ast-rag evaluate --all

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Input (codebase)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ParserManager (Tree-sitter)            β”‚
β”‚    └─ language_queries.py               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                 β”‚
        β–Ό                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Neo4j      β”‚  β”‚   Qdrant     β”‚
β”‚  (graph)     β”‚  β”‚  (vectors)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                 β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         ASTRagAPI (query layer)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                 β”‚
        β–Ό                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  CLI (Typer) β”‚  β”‚  MCP Server  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ For Developers

# Run tests
pytest tests/ -v

# Check quality
ast-rag evaluate --all

# Index a folder
ast-rag index-folder ./ast_rag --no-schema

# Update after changes
ast-rag workspace . --apply

Additionaly docs

Ask DeepWiki

🚧 Roadmap

Planned features and improvements:

Feature Status Description
Code Summaries βœ… Done ast-rag summarize β€” LLM summaries for functions/classes (docs)
Refactoring Hints πŸ”œ Planned Detect code smells and suggest improvements
More Languages πŸ”œ Planned C#, Kotlin with full AST support
IDE Integration πŸ”„ In Progress MCP, skills, CLI for OpenCode, Kilocode, Claude Code, Cursor
Incremental Indexing βœ… Done Git-based and filesystem watcher updates (improving for large codebases)
Rust Rewrite πŸ”œ Planned Full rewrite in Rust for performance, type safety, and easier integration
AST Patching πŸ”œ Future Project Separate project for generating code patches from AST
Multi-Project Support πŸ”œ Planned Work across multiple related projects (microservices, monorepos)
Vector DB Flexibility πŸ”œ Planned Support for alternative vector stores (Chroma, etc.) and distance metrics

πŸ“ License

LGPL v3

About

AST-RAG β€” Code Analysis & Navigation System

Resources

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages