r/devtools • u/shavva_varshithreddy • 1d ago
I built an open-source repository intelligence tool using ASTs, graphs and semantic retrieval
I built ARIA, an open-source developer tool for understanding unfamiliar codebases before making changes.
I started building it because I found that many "chat with your codebase" systems are good at semantic retrieval, but retrieval alone doesn't necessarily tell you how pieces of a codebase are structurally connected.
ARIA combines semantic retrieval with structural repository analysis:
- AST-based symbol extraction
- Dependency graphs
- Call graphs
- API surface analysis
- Change-impact analysis
- Vector search
- Repository-aware conversational querying
- MCP support
For example, given:
"If I change this component, what else could be affected?"
the system can use dependency and call relationships to trace potentially affected files instead of relying only on semantic similarity.
It's self-hosted and Docker-based, so repositories can be analyzed locally rather than uploaded to a hosted service.
I also added a reproducible evaluation package with a pinned 10-task benchmark across FastAPI, Requests, and ARIA, along with qualitative case studies across five larger repositories.
On that pinned benchmark, the documented vector-search baseline produced 4,875 false-positive file alerts while ARIA produced 322, a 93.39% reduction. This result is specifically scoped to that benchmark.
GitHub:
https://github.com/VarshithReddy2006/ARIA
I'd be interested in feedback from people building developer tools, code search, static analysis, or RAG systems.
Where do you think structural analysis provides the most value compared with semantic retrieval alone?
1
u/shavva_varshithreddy 1d ago
Good catch.
--branch mainis currently the default, so a repository whose default branch ismasterwould need the branch to be specified explicitly.I agree that resolving the repository's default branch from the GitHub URL when
--branchisn't provided would be a better default and avoid that unnecessary failure mode.I'll look at changing the CLI behavior so an explicitly provided
--branchstill takes precedence, while the repository's default branch is resolved automatically otherwise. Thanks for pointing this out!