A Map for the Unfamiliar Codebase
Understand Anything is an open-source project for turning a codebase—and, in related modes, documentation, business processes, or design artifacts—into an interactive knowledge graph. This opening chapter focuses on the problem that makes such a tool necessary: how to build a trustworthy mental model of a system whose files, dependencies, and intentions are scattered across a large repository. The practical outcome is not a promise that software can be understood without reading it; it is a better way to decide what to read, in what order, and with what degree of confidence.
The real problem is not finding files
Imagine joining a team whose application has grown for years. The repository may contain an entry point, configuration, services, tests, documentation, deployment files, and several layers of shared utilities. An IDE can locate a symbol. A search box can find a filename. A dependency view can show that one module imports another. Yet those capabilities do not automatically answer the questions a newcomer actually has: Where does a user request begin? Which parts of the system carry the important decisions? Which configuration changes behavior? What can safely be ignored for now, and what will be affected if one file changes?
That gap is especially visible in the era of AI-assisted programming. A model can make it cheap to generate a function or modify a module, but generated code still becomes part of a system that somebody must maintain. The difficulty is not only syntax. It is reconstruction: connecting pieces of code to roles, flows, boundaries, and consequences. A list of imports is evidence of structure, but not an explanation of purpose. A paragraph produced by an AI may explain purpose, but it is not automatically evidence that the explanation is correct.
The project's design documents frame this as a comprehension problem for several kinds of people: developers entering an unfamiliar team, junior developers learning a codebase, PMs or designers who need a system-level view, and experienced engineers working in a language or architecture they did not choose. The README gives the deliberately intimidating example of a 200,000-line codebase and asks where a new team member should start. That example establishes the setting, not a measured claim that the tool reduces onboarding time. The project offers a mechanism for orientation; the effect still depends on the quality of the graph and the reader's judgment.
This distinction matters because “understanding” can mean two very different things. In a weak sense, it can mean producing a visually impressive picture with many nodes. In a stronger sense, it means helping a person form and test a model of how the system fits together. Understand Anything is aimed at the stronger version. Its own statement of purpose is that the graph should quietly teach how each piece fits, rather than merely display how complicated the repository is.
What Understand Anything actually builds
Understand Anything is easiest to misunderstand if it is treated as one command or one screen. It is a coordinated product with four parts. The plugin provides commands for analysis and follow-up work. A shared core defines the graph, parsing, persistence, search, and validation behavior. The analysis pipeline turns project material into graph data. The dashboard gives that data several ways to explore it.
The main /understand workflow begins with a project inventory. It records the files that are in scope, detects languages and file categories, applies ignore rules, counts lines, and prepares the internal relationships needed for later analysis. Structural tools then identify things such as files, functions, classes, imports, exports, calls, and—in non-code material—headings, schemas, services, endpoints, pipeline steps, or infrastructure resources. These observations become nodes and typed edges in a JSON graph.
The graph is not limited to a flat list of files. A node can represent a file, a function, a class, a configuration artifact, a document, a service, a schema, or another supported object. An edge says what kind of relationship exists: one file imports another, a file contains a function, a function calls another function, a document describes a component, or an infrastructure artifact deploys code. Architectural layers group related nodes. A guided tour gives selected nodes an order and an explanation. Summaries, tags, complexity labels, source locations, and optional language notes give a person a reason to care about a node before opening its contents.
That is the first important idea: the graph is an intermediate language between the repository and the reader. The repository is too detailed to be a good starting point, while a free-form explanation is too easy to detach from the source. The graph keeps names and relationships explicit, but also supplies enough semantic framing to make those relationships useful. It gives a reader somewhere to begin and a way to move outward from one relevant component.
The project also separates kinds of work inside the pipeline. Deterministic scanners and parsers are responsible for facts that can be extracted from files with repeatable rules. Language models contribute summaries, tags, architectural interpretations, business-domain descriptions, guided tours, and language lessons—things that require a judgment about purpose or meaning. The separation is not an implementation nicety. It is the condition for knowing which parts of the result should be stable and which parts should be checked.
A map that teaches—and a map that must be checked
The dashboard is where the graph becomes a learning surface. At the broadest level, a reader sees architectural layers rather than every individual implementation detail. Entering a layer reveals more of its nodes and relationships. Selecting a node opens a sidebar with its summary, tags, complexity, source location, contained symbols, and connections. When the source matters, the code viewer can show the relevant file and highlight the stored line range. The reader can therefore move from “this area seems important” to “this is the source span I should inspect.”
The interface offers different ways to narrow attention. Search looks across names, tags, summaries, and language notes. Focus isolates a node's one-hop neighborhood. Filters hide categories, complexity levels, layers, or edge groups. Diff mode marks changed and affected components. A guided tour highlights nodes in an intended learning order, while persona settings alter how much detail is foregrounded for an overview reader, a learner, or someone making a deeper technical investigation. These are not separate facts about the codebase. They are different routes through the same stored model.
That shared model also explains why a graph alone is insufficient. A graph can show that two nodes are connected, but a reader still needs to know whether the connection is an import, a call, a deployment relationship, a business-flow step, or an inferred semantic association. A graph can place a node in a layer, but that placement does not prove that the layer is the only correct architectural interpretation. A tour can propose a sensible reading order, but it is still a recommendation derived from available graph evidence.
Understand Anything therefore has several boundaries that should remain visible from the beginning. Structural extraction is not execution: it does not run the application or perform whole-program reasoning. Unsupported grammars and dynamic behavior can leave gaps in the structural picture. LLM-generated summaries and inferred relationships can be incomplete or wrong even when they are fluent. A graph can also become stale when the repository changes, which is why the project records Git-related metadata and exposes freshness states. Validation can catch malformed nodes, broken references, or symbol loss; it cannot turn an interpretation into a verified business fact.
There is a privacy boundary as well. The normal use of a host AI platform may involve sending source content to that platform, depending on the user's setup. The standalone viewer is a narrower local-serving path: it reads an already generated graph from disk, binds to localhost, requires an access token for protected data, and restricts source preview to files named by the graph. Figma analysis is different again because it requires a token and an outbound API request. “Local graph browsing” and “all analysis is local” are not interchangeable claims.
The most useful mental model is consequently neither “the AI understands the repository for me” nor “the graph is just a prettier import list.” Understand Anything builds a series of links between evidence and attention. It inventories what exists, extracts relationships that can be established from structure, asks a model to explain selected meanings, stores the result in a typed form, and gives a person tools to traverse and verify it. When that chain is intact, the graph can turn a frightening first encounter into a sequence of manageable questions. When one link is weak, the right response is not to hide the weakness behind visual polish, but to inspect the source, refresh the graph, or narrow the claim.
That is the standard for the rest of this series. The next question is deliberately narrower: before the project asks a model to explain what a codebase means, what can it establish from the files themselves? The answer begins with the structural layer—the inventory, parsers, identities, and relationships that give every later explanation something concrete to attach to.
References
- Understand Anything README
- Root package manifest
- Core graph types
- Original design and implementation plan
- Dashboard persona selector
- Understand skill pipeline
- Deterministic project scanner
- Structural extraction entry point
- Tree-sitter plugin
- LLM analyzer prompts and parsing
- Persistence layer
- Standalone viewer README
- Standalone viewer server
- Security policy
- Dashboard token gate
- Fingerprints
- Graph freshness
- Embedding search engine
- Dashboard store
- Unsupported-outcome benchmark design