The Problem
Onboarding onto an unfamiliar codebase means reading thousands of files blind. You need to know which modules are load-bearing, how functions call each other, and where business logic lives, but static navigation tools only show you file trees. The result is hours of manual tracing before you can make a confident change.
What This Does
Understand Anything builds an interactive knowledge graph of your codebase. It analyzes files, functions, classes, and dependencies via a multi-agent pipeline, then renders the result in a dashboard you can search, pan, and query. The core logic lives in understand-anything-plugin/packages/core/, with language-specific extractors in src/plugins/extractors/ (C++, C#, Go, Java, PHP, Rust, Ruby, and more) and a React dashboard in understand-anything-plugin/packages/dashboard/.
It ships as a plugin for Claude Code, Codex, Cursor, Copilot, and Gemini CLI via the .claude-plugin/ and .copilot-plugin/ manifests. A marketing homepage in homepage/ (Astro) documents the project.
How It Is Wired
Execution starts in the dashboard's DashboardContent (packages/dashboard/src/App.tsx:220), which renders the React frontend. The core analysis pipeline begins with registerAllParsers (packages/core/src/plugins/parsers/index.ts:31), which registers 12 parser plugins. The init function in tree-sitter-plugin.ts:124 bootstraps the tree-sitter parser.
The graph builder (packages/core/src/analyzer/graph-builder.ts) is the central orchestrator. It calls detectLanguage, basename, addFile, and addFileWithAnalysis to construct nodes and edges. Persistence is handled by loadGraph and saveDomainGraph in packages/core/src/persistence/index.ts:85,152, which read and write graph files to diskāthe only external I/O besides file reads in the extractors.
The most-connected modules are the type definitions: languages/types.ts (58 modules depend on it) and types.ts (48). Both are stable hubs with zero outgoing dependencies. The highest-churn functions are findChild (called from 32 places), useI18n (23), and parse (18). The I18nContext.tsx file is the UI's central dependency, imported by 21 other files.
Two modules participate in a circular import cycle: packages/dashboard/src/utils/elk-layout.ts and layout.ts. This complicates refactoring of the layout code.
How To Use It
The repo provides install scripts for the plugin:
# For Claude Code
/plugin marketplace add https://github.com/moses-y/Understand-Anything
# Or run the install script
./install.sh
After installation, run the plugin's scan command in your project to generate the graph, then open the dashboard. The understand-anything-plugin/package.json defines the plugin's dependencies and scripts. No environment variables are documented in the repo.
Real-World Use
A developer joining a 200,000-line TypeScript monorepo runs the plugin once. The dashboard shows that findChild is called from 32 places, immediately flagging it as high-risk for changes. The domain view maps the payment module to the checkout flow, letting them trace a bug from UI to service layer without reading every file.
Code Health & Issues
Static analysis found 42 findings: 9 high, 33 medium, 0 low.
- High - Hub modules:
languages/types.tsandtypes.tseach have 50+ dependents. Changes ripple widely. - High - Oversized files:
dashboard/src/store.ts(642 lines) andGraphView.tsxare hard to navigate. - High - Import cycle:
elk-layout.tsandlayout.tsin the dashboard utils. - High - Duplicated code: 344 repeated 6-line blocks across 81 files.
- High - Deep nesting:
FilterPanel.tsx,ThemePicker.tsx,WarningBanner.tsxhit indentation depth 6. - Medium - High branching density in
base-extractor.ts,registry.ts,language-registry.ts.
The security audit found one high issue: third-party GitHub Actions pinned to tags (pnpm/action-setup@v4) instead of commit SHAs. Medium issues include missing least-privilege token permissions, no Dependabot, no dependency vulnerability scan in CI, and two 8-10MB GIFs committed to the repo.
The Bottom Line
A practical tool for codebase onboarding with solid multi-language support and a polished dashboard. The heavy use of tree-sitter extractors and the centralized type definitions make the core maintainable, but the dashboard's oversized files and import cycle need attention. Teams adopting Claude Code or similar agents will get the most value; standalone users may find the plugin setup overhead unnecessary.