Skip to content

Analysis — Understand-Anything


Understand-Anything is a TypeScript/Node.js Claude Code skill (slash commands /understand and /understand-domain) that orchestrates a multi-agent pipeline to produce an interactive in-IDE knowledge graph dashboard from a codebase. Its core differentiator is a dual-graph view: a structural graph (files, functions, classes) and a domain graph (business flows, processes, steps) generated by a domain-analyzer agent. The tool targets developer comprehension and onboarding rather than agent token reduction — no token metrics are claimed. With 8,081 GitHub stars and MIT license it has significant community traction. Source review confirms the persistence model, pipeline structure, hybrid static+LLM analysis strategy, supported language breadth, and graph schema in detail.


What it does (from reference documentation)

Section titled “What it does (from reference documentation)”

Seven agents invoked via slash commands (verified against agent definition files):

AgentRole
project-scannerDiscover files, detect languages and frameworks
file-analyzerExtract functions, classes, imports; produce graph nodes and edges
architecture-analyzerIdentify architectural layers
tour-builderGenerate guided learning tours ordered by dependency
assemble-reviewerReview merge-script output for semantic issues the script cannot catch
graph-reviewerValidate graph completeness and referential integrity (opt-in via --review)
domain-analyzerExtract business domains, flows, and process steps (via /understand-domain)
article-analyzerExtract entities, claims, implicit relationships from wiki articles (via /understand-knowledge)

The triage listed 6 agents. Source confirms there are actually 8 agent definition files. The assemble-reviewer is a distinct agent (not the same as graph-reviewer) that runs inline after every batch merge. The article-analyzer supports the third slash command /understand-knowledge that was not documented in the original triage.

File analyzers run in parallel (up to 5 concurrent, 20–30 files/batch) (verified). The graph-reviewer runs inline by default; --review flag triggers full LLM-backed validation (verified).

  • Slash commands: /understand (structural + architectural analysis), /understand-domain (business domain extraction), /understand-knowledge (Karpathy-pattern wiki knowledge base analysis) — the third command was not in the triage
  • Secondary commands: /understand-chat, /understand-diff, /understand-explain, /understand-onboard, /understand-dashboard — all have separate skill definitions
  • Multi-platform installation: Claude Code, Codex, Cursor, VS Code + Copilot, Gemini CLI, OpenCode, Antigravity, Pi Agent, OpenClaw (10 platforms, verified against README compatibility table)
  • Output: interactive in-IDE dashboard (React + React Flow + Zustand + TailwindCSS v4) with structural graph, domain graph, fuzzy+semantic search, diff impact analysis, and guided tours

Only changed files since the last run are re-analyzed (verified via staleness.ts — uses git diff <lastCommitHash>..HEAD --name-only). Per-file content fingerprinting (fingerprints.json) tracks structural changes at function/class granularity. No latency or throughput benchmarks are provided.


The plugin is organized as a pnpm monorepo with two packages:

  • understand-anything-plugin/packages/core — shared analysis engine (@understand-anything/core): types, persistence, tree-sitter parsing, fuzzy/semantic search, schema validation, tour/layer generation, change classification, fingerprinting
  • understand-anything-plugin/packages/dashboard — React + TypeScript web dashboard
  • understand-anything-plugin/src/ — TypeScript skill implementations for secondary commands (/understand-chat, /understand-diff, /understand-explain, /understand-onboard)
  • understand-anything-plugin/skills/ — Skill definition markdown files (one directory per slash command)
  • understand-anything-plugin/agents/ — Agent definition markdown files (8 files)

The /understand SKILL.md defines a 7-phase pipeline:

PhaseNameWhat happens
0Pre-flightGit hash check; subdomain graph merge; incremental vs. full decision
0.5Ignore configGenerate/verify .understandignore (user confirms before proceeding)
1SCANproject-scanner agent discovers files, detects languages, resolves imports
2ANALYZEfile-analyzer subagents (up to 5 concurrent, 20–30 files/batch); results written to .understand-anything/intermediate/batch-N.json
3ASSEMBLE REVIEWassemble-reviewer agent reviews merge output; merge-batch-graphs.py Python script combines batches
4ARCHITECTUREarchitecture-analyzer agent identifies 3–10 architectural layers
5TOURtour-builder agent creates 5–15 guided learning steps
6REVIEWInline deterministic validation script OR full graph-reviewer (if --review); writes knowledge-graph.json then auto-launches /understand-dashboard

All intermediate files are written to disk at .understand-anything/intermediate/ (verified via persistence module and SKILL.md). They are cleaned up after graph assembly. This means agents write to disk rather than returning to context — a design decision that limits context growth for large codebases.

Defined in packages/core/src/types.ts and schema.ts:

  • 21 node types: 5 code (file, function, class, module, concept), 8 non-code (config, document, service, table, endpoint, pipeline, schema, resource), 3 domain (domain, flow, step), 5 knowledge (article, entity, topic, claim, source)
  • 35 edge types across 8 categories: Structural, Behavioral, Data flow, Dependencies, Semantic, Infrastructure, Domain, Knowledge
  • KnowledgeGraph root object: { version, kind?, project: ProjectMeta, nodes: GraphNode[], edges: GraphEdge[], layers: Layer[], tour: TourStep[] }
  • Persistence: knowledge-graph.json (structural) and domain-graph.json (domain) both live in .understand-anything/ in the analyzed project directory — they survive IDE restarts (verified via persistence/index.ts)

The triage claim that “dashboard persistence format is undocumented” is contradicted by source: the graph is persisted as JSON on disk and loaded on dashboard open. The format is fully typed and schema-validated via Zod.

File analysis: hybrid static + LLM (verified)

Section titled “File analysis: hybrid static + LLM (verified)”

The file-analyzer agent uses a two-phase approach:

  1. Phase 1 — deterministic structural extraction: the agent writes and executes a Node.js (or Python fallback) script that extracts functions, classes, imports, exports, and metrics via regex/AST pattern matching. For non-code files (YAML, SQL, Dockerfile, Terraform, etc.), specialized parsers run deterministically.
  2. Phase 2 — LLM semantic analysis: the agent uses LLM inference to produce summaries, tags, complexity ratings, and semantic edges based on the Phase 1 script output.

Additionally, packages/core includes a tree-sitter-plugin.ts using web-tree-sitter (WASM) for TypeScript/JavaScript — a real AST parser. The triage claim that the tool “relies on LLM-based file analysis rather than deterministic AST parsing” is partially wrong: static analysis and AST parsing handle structure; LLM inference handles semantics.

The tool has deterministic parsers for 13 non-code file types: Dockerfile, docker-compose YAML, .env, GraphQL, JSON, Makefile, Markdown, Protobuf, Shell, SQL, Terraform, TOML, YAML. The project-scanner assigns a fileCategory (code, config, docs, infra, data, script, markup) to every file. The architecture-analyzer, tour-builder, and all agents treat non-code files as first-class nodes.

39 built-in language configurations in packages/core/src/languages/configs/. Includes: TypeScript, JavaScript, Python, Go, Rust, Java, Kotlin, C++, C#, Ruby, PHP, Swift, CSS, HTML, SQL, GraphQL, Protobuf, Terraform, YAML, JSON, Markdown, Dockerfile, Shell, and more. The triage claim of “unsupported language list” is resolved: coverage is broad but relies on regex/AST for code structure and LLM for semantics.

Two search implementations in packages/core/src/:

  • search.ts: fuzzy search via Fuse.js (weighted across name, tags, summary, languageNotes)
  • embedding-search.ts: cosine similarity search using pre-computed embeddings (vector search for semantic queries)

All agent definition files set model: inherit — they inherit the model from the calling platform (Claude Code, Cursor, etc.). Each file-analyzer subagent performs LLM inference for summaries, tags, and semantic edge generation per batch. Architecture-analyzer, tour-builder, domain-analyzer, graph-reviewer, and assemble-reviewer also make LLM calls. The triage flag “LLM API calls during indexing are likely but undisclosed” is confirmed as accurate; the README still does not quantify per-run cost.

/understand-knowledge — third slash command (not in triage)

Section titled “/understand-knowledge — third slash command (not in triage)”

A third major capability absent from the triage: /understand-knowledge analyzes Karpathy-pattern LLM wiki knowledge bases (markdown files with [[wikilink]] syntax + index.md + optional raw/ sources). A deterministic Python parse script extracts wikilinks and categories; article-analyzer subagents then extract implicit entities, claims, and cross-article relationships. The output uses the same KnowledgeGraph schema with kind: "knowledge" and knowledge-specific node types (article, entity, topic, claim, source).

React + React Flow + Zustand + TailwindCSS v4. Dark luxury theme (#0a0a0a background, gold/amber accents). Graph-first layout: 75% graph + 360px right sidebar. No chat panel or code editor embedded. Sidebar transitions: ProjectOverview (default) → NodeInfo (node selected) → LearnPanel (Learn persona). The persona-adaptive UI is confirmed: a “Learn” persona mode exists as a sidebar panel. The claim that “12 programming patterns explained in context” (language lessons) is confirmed via language-lesson.ts in the core package.


Benchmark claims — verified vs as-reported

Section titled “Benchmark claims — verified vs as-reported”

No quantitative claims are made. The reference documentation explicitly notes: “No token reduction figures claimed; value proposition is developer onboarding and codebase comprehension.”

The README states incremental update capability (re-analyzes changed files only) — (verified): staleness.ts implements getChangedFiles() using git diff <hash>..HEAD --name-only; the SKILL.md uses this to select only changed files for re-analysis. No latency figures are provided.

There is no benchmark harness to reproduce. The only performance-related script is scripts/generate-large-graph.mjs, which generates a synthetic 3,000-node graph for dashboard rendering tests — this is explicitly “not part of the production pipeline” (CLAUDE.md).

Verdict: No metrics to verify. The tool’s value proposition is qualitative and cannot be assessed via token benchmarks. The incremental update mechanism is implemented and verified.


  1. Domain graph view. (verified) The domain-analyzer agent extracts a business domain ontology — domains, flows, steps — and maps code to them via a three-level hierarchy (Domain → Flow → Step). The domain-graph.json is a separate persisted file from knowledge-graph.json. No other tool in this survey offers a code-to-business-process graph.

  2. Knowledge base graph (/understand-knowledge). Not in the triage. The article-analyzer agent applies knowledge graph extraction to Karpathy-pattern LLM wikis — extracting implicit entities, claims, and cross-article relationships beyond explicit wikilinks. This is a third use case distinct from codebase and domain analysis.

  3. Hybrid static + LLM analysis. The two-phase file-analyzer (deterministic script first, LLM semantic layer second) is a principled design: structure is never delegated to LLM; only summaries, tags, and semantic edge inference are. The assemble-reviewer catches LLM hallucination at assembly time. This is more robust than pure LLM extraction.

  4. Dependency-ordered guided tours. (verified) The tour-builder agent runs a graph topology script (fan-in/fan-out ranking, entry-point detection, dependency chains) before designing tour steps — structurally grounded, not purely LLM-generated.

  5. Persona-adaptive UI. (partially verified) Confirmed as a “Learn” persona sidebar panel in the dashboard source. Full persona differentiation (junior dev, PM, power user) is described in README but the dashboard implementation shows a single “Learn” mode — the per-persona detail calibration may be less granular than the README implies.

  6. Multi-platform deployment via model: inherit. (verified) All agents use model: inherit for the LLM call, which means the skill runs identically on Claude Code, Cursor, Gemini CLI, and other platforms without modification.

  • LLM API calls during indexing are confirmed but unquantified. Every file batch, architecture pass, tour, and domain extraction involves LLM inference. Per-run cost scales with codebase size and is not disclosed.
  • graph-reviewer is opt-in for full validation. (verified) Default inline validation is a deterministic Node.js script (checks for missing IDs, dangling edges, duplicate nodes, layer coverage). The full LLM graph-reviewer runs only with --review. The inline script is well-specified in the SKILL.md but cannot catch semantic errors.
  • >100 files gate. (verified) The SKILL.md gates the analysis at >100 files and asks for user confirmation — implicit acknowledgment that large codebases may be slow or expensive.
  • Domain graph quality is LLM-dependent. Business domain extraction from code is a hard inference problem. The domain-analyzer agent has well-defined output constraints (2–6 domains, 2–5 flows per domain, 3–8 steps per flow) but no accuracy benchmark exists.
  • No benchmark against comprehension outcomes. The tool’s goal is developer understanding, but there is no study or metric measuring whether tours, domain graphs, or persona-adaptive UI actually reduce onboarding time or error rates.

Evaluate for onboarding and domain mapping use cases. If the primary need is helping a developer (or agent) understand what a codebase does in business terms — not just how it is structured — the domain-analyzer / /understand-domain path offers capability unavailable elsewhere in this survey.

Consider /understand-knowledge for LLM wiki graphs. If the team maintains a Karpathy-pattern knowledge base, this is the only tool surveyed that can generate an entity/claim/relationship graph from it.

Do not use as a substitute for structural graph queries. For call-path tracing, impact analysis, and token-efficient structural lookup, codebase-memory-mcp’s deterministic AST graph is more reliable and has lower per-query cost.

Clarify LLM API cost before adopting. The confirmed per-run API cost for large codebases is the most important operational unknown. Run /understand on a mid-sized project with API usage logging before committing to this tool in cost-sensitive agent workflows. The >100 file gate is the practical trip wire.

Treat domain graph output as a starting point. Business process extraction from code is inherently heuristic. Use the domain graph to orient, then verify key process claims against actual source.


DimensionUnderstand-Anything
ApproachMulti-agent LLM pipeline → interactive structural + domain + knowledge graph dashboard
Compression (vs grep)Not applicable — no token reduction claim or metric
Token budget modelNone — focus is developer comprehension, not agent token efficiency
Injection strategyIn-IDE dashboard; MCP tool for agent access
EvictionN/A — no context injection pipeline
Benchmark harnessNone (generate-large-graph.mjs is a rendering test fixture, not a pipeline benchmark)
LicenseMIT
Maturity8,081 stars; last commit 2026-04-10; TypeScript/Node.js; version 2.3.1