Understand Anything answers the question every new team member has: where do I even start? Run one command inside your coding agent and a team of sub-agents reads your project, records every file, function, class and dependency, and saves a knowledge graph to a .ua folder. A second command opens an interactive dashboard where each piece is a clickable node with a plain-English summary, colour-coded by layer such as API, service, data or UI.
The graph is there to teach. Guided tours walk the architecture in dependency order, a domain view maps code to business processes, and commands answer questions about the code, show what your current changes affect and write an onboarding guide. It also reads Karpathy-style Markdown wikis and Figma files. The dashboard adjusts its detail for a junior developer, a product manager or a power user, and because the graph is plain JSON, one person can commit it and teammates skip the analysis.
It works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, Devin and more, is MIT-licensed, and has about 91,000 stars and 77 contributors since its March 2026 start. There is a live demo on the project's homepage if you want to try the dashboard first.
- Repository: github.com/Egonex-AI/Understand-Anything
- Licence: MIT (MIT License)
- Language: TypeScript. Stars: 91.2K. Forks: 7,785. Last push: Nov 7, 2026.
- Scan: safe, Nov 7, 2026, commit a6ea402
Who it is for
Developers joining an unfamiliar codebase, team leads writing onboarding material, product managers who want to see how a system fits together, and anyone inheriting a large project with thin documentation.
Getting started
1. In Claude Code, add the plugin's marketplace
/plugin marketplace add Egonex-AI/Understand-Anything2. Install the plugin
/plugin install understand-anything3. Analyze your project (the first run on a big project can use a lot of tokens)
/understand4. Open the dashboard
/understand-dashboardOther agents use install.sh or install.ps1 from the repo, and the README offers these as a one-line pipe to your shell. Download the script and read it first if you prefer. Later runs only re-read changed files.
Safety scan
We cloned Egonex-AI/Understand-Anything at commit a6ea402 on Nov 7, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.
- No secret hits in 528 files and about 128,000 lines, mostly TypeScript and Markdown. No binaries committed. The two pattern hits are the curl-to-bash usage lines in install.sh's comments. That script is 328 lines, uses no sudo and does not edit your shell profile: it clones the repo to ~/.understand-anything/repo and creates symlinks.
- Two lockfiles report 149 unique advisories: four critical, 67 high, 65 moderate, 13 low. All four criticals are outside what users run. Astro appears only in homepage/package.json, the project's marketing site. Vitest is a dev dependency and tinypool comes in through it; the Vitest flaw needs its UI server running, which nothing here starts. pnpm-lock.yaml has 780 packages and all four; the plugin's own lock has 487 packages and the three test-tool ones.
- Many highs are denial of service in build and lint tools. @modelcontextprotocol/sdk does ship, in the optional MCP server, but that server talks over stdio, so the advisories about HTTP servers do not reach it. Do not expose the dashboard: it binds to 127.0.0.1 and requires a one-time token in the URL.
- The prepare hook only compiles the core package with pnpm when a developer installs from the repo root; a plugin install does not need it. /understand-dashboard first runs a prebuilt viewer with npx, downloaded from the matching GitHub release. That bundle is built from this repo, but it was not itself part of this scan.
- The plugin registers two agent hooks in hooks.json, one after Bash commands and one at session start. Both exit quietly unless you turned on --auto-update, and neither calls the network. With it on, each commit tells your agent to refresh the graph without asking, which can spend tokens.
- Two workflows, no pull_request_target; two third-party action uses, none pinned to a commit. Extra skill pass: no hidden Unicode, no injection phrases, no credential paths and no usage reporting. Network hosts are GitHub, the project's site, and Figma's API for the optional Figma skill, which reads your token from the environment. A security policy and licence are present; no Dependabot.
What the scanner counted
| Check | Result |
|---|---|
| Secrets | None found. |
| Suspicious code | 2 pattern hits found and read; every one is listed under the raw findings. |
| Install-time code | 1 npm lifecycle script. 2 installer scripts |
| Committed binaries | None. |
| CI workflows | 2 workflows. None use pull_request_target. 2 of 2 third-party actions pinned to a tag rather than a commit. |
| Network hosts | 7 distinct hosts referenced from source; most often github.com, raw.githubusercontent.com, www.figma.com, example.test. No URLs to bare IP addresses. |
| Known vulnerabilities | 149 advisories across 839 pinned packages: 4 critical, 67 high, 65 moderate, 13 low. pnpm-lock.yaml: 780 packages, 121 advisories; understand-anything-plugin/pnpm-lock.yaml: 487 packages, 63 advisories. |
| Project hygiene | Has security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL. |
| OpenSSF Scorecard | Not scored: the project is not in Scorecard's weekly index. |
The raw findings
Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.
Pattern hits (2)
| Where | Rule | Match |
|---|---|---|
| install.sh:12 | download-piped-to-shell | # curl -fsSL https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.sh | bash |
| install.sh:13 | download-piped-to-shell | # curl -fsSL https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.sh | bash -s codex |
npm lifecycle scripts (1)
package.jsonprepare:pnpm --filter @understand-anything/core build
Installer scripts (2)
- install.ps1, 290 lines; talks to github.com
- install.sh, 328 lines; talks to github.com, raw.githubusercontent.com
Worst known vulnerabilities (24 of 149)
| Advisory | Severity | Package | Summary |
|---|---|---|---|
| GHSA-26w7-cxv4-gfx2 | critical | astro@6.3.7 | Astro: Remote code execution through AVIF image optimization |
| GHSA-5gmw-xhrv-c9v3 | critical | tinypool@1.1.1 | Tinypool: Prototype Pollution gadget in worker options leads to Remote Code Execution |
| GHSA-85c8-ppgw-ccpr | critical | tinypool@1.1.1 | Tinypool: Prototype Pollution Gadget to RCE in run() options |
| GHSA-5xrq-8626-4rwp | critical | vitest@3.2.4 | When Vitest UI server is listening, arbitrary file can be read and executed |
| GHSA-22jm-h49p-29qw | high | @modelcontextprotocol/sdk@1.29.0 | MCP TypeScript SDK: Experimental tasks were not tied to the session that created them |
| GHSA-46jr-4wx8-v453 | high | @modelcontextprotocol/sdk@1.29.0 | MCP TypeScript SDK: One HTTP request within the default size limit could exhaust server memory during validation |
| GHSA-6qxp-vccf-f47h | high | @modelcontextprotocol/sdk@1.29.0 | MCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server |
| GHSA-f897-62hf-6gxq | high | @modelcontextprotocol/sdk@1.29.0 | MCP TypeScript SDK: HTTP server transports and handlers did not limit request body size or JSON-RPC batch length |
| GHSA-2pvr-wf23-7pc7 | high | astro@6.3.7 | Astro: Host header SSRF in prerendered error page fetch |
| GHSA-27r3-jxmh-p828 | high | body-parser@2.3.0 | body-parser vulnerable to Denial of Service via trailing bytes after a compressed request body |
| GHSA-3jxr-9vmj-r5cp | high | brace-expansion@1.1.14 | brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups |
| GHSA-6j4f-fj2g-mc7p | high | brace-expansion@1.1.14 | brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion |
| GHSA-mh99-v99m-4gvg | high | brace-expansion@1.1.14 | brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash |
| GHSA-qhr7-859c-m2p7 | high | brace-expansion@1.1.14 | brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion |
| GHSA-rgw5-rvv9-x895 | high | brace-expansion@1.1.14 | brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation |
| GHSA-3jxr-9vmj-r5cp | high | brace-expansion@2.0.3 | brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups |
| GHSA-6j4f-fj2g-mc7p | high | brace-expansion@2.0.3 | brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion |
| GHSA-mh99-v99m-4gvg | high | brace-expansion@2.0.3 | brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash |
| GHSA-qhr7-859c-m2p7 | high | brace-expansion@2.0.3 | brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion |
| GHSA-rgw5-rvv9-x895 | high | brace-expansion@2.0.3 | brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation |
| GHSA-3jxr-9vmj-r5cp | high | brace-expansion@5.0.5 | brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups |
| GHSA-6j4f-fj2g-mc7p | high | brace-expansion@5.0.5 | brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion |
| GHSA-mh99-v99m-4gvg | high | brace-expansion@5.0.5 | brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash |
| GHSA-qhr7-859c-m2p7 | high | brace-expansion@5.0.5 | brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion |
By the numbers
| Stars | 91.2K |
|---|---|
| Forks | 7,785 |
| Contributors | 77 |
| Commits | 873 |
| Open issues | 129 |
| Open pull requests | 223 |
| Releases | 8 |
| Latest release | v2.9.0 |
| Licence | MIT |
| Main language | TypeScript |
| Project age | 7 months |
| Last push | Nov 7, 2026 |
| Tracked files | 528 |
| Lines of code | 128K |
| Checkout size | 33 MB |
Lines by language: TypeScript 48.7K, Markdown 43.7K, JavaScript 21.6K, JSON 7,412, Python 5,167, CSS 480.
Questions
Is Understand Anything free?
Yes, MIT-licensed with no paid tier. Your cost is the tokens your coding agent spends analyzing the project, which can be significant on a large codebase the first time. The project suggests a subscription plan or a local model for that first run.
Does my code leave my machine?
The graph and dashboard stay on your machine, and the plugin has no reporting of its own. The analysis is done by your coding agent, so your code goes wherever that agent's model runs. For private code, point your agent at a local model through something like Ollama.
Should I worry about the critical advisories?
Not as a user of the plugin. They are in the Vitest test runner and in Astro for the project's marketing site. They would matter to someone working on the project itself, or hosting that site, who should update them.
Can my whole team use one graph?
Yes. Commit the .ua folder, except intermediate/ and diff-overlay.json, and teammates can open the dashboard without running the analysis again.
This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.
