> understand
Analyze a codebase to produce an interactive knowledge graph for understanding architecture, components, and relationships
curl "https://skillshub.wtf/Lum1104/Understand-Anything/understand?format=md"/understand
Analyze the current codebase and produce a knowledge-graph.json file in .understand-anything/. This file powers the interactive dashboard for exploring the project's architecture.
Options
$ARGUMENTSmay contain:--full— Force a full rebuild, ignoring any existing graph- A directory path — Scope analysis to a specific subdirectory
Phase 0 — Pre-flight
Determine whether to run a full analysis or incremental update.
-
Set
PROJECT_ROOTto the current working directory. -
Get the current git commit hash:
git rev-parse HEAD -
Create the intermediate output directory:
mkdir -p $PROJECT_ROOT/.understand-anything/intermediate -
Check if
$PROJECT_ROOT/.understand-anything/knowledge-graph.jsonexists. If it does, read it. -
Check if
$PROJECT_ROOT/.understand-anything/meta.jsonexists. If it does, read it to getgitCommitHash. -
Decision logic:
Condition Action --fullflag in$ARGUMENTSFull analysis (all phases) No existing graph or meta Full analysis (all phases) Existing graph + unchanged commit hash Report "Graph is up to date" and STOP Existing graph + changed files Incremental update (re-analyze changed files only) For incremental updates, get the changed file list:
git diff <lastCommitHash>..HEAD --name-onlyIf this returns no files, report "Graph is up to date" and STOP.
Phase 1 — SCAN (Full analysis only)
Dispatch the project-scanner agent with this prompt:
Scan this project directory to discover all source files, detect languages and frameworks. Project root:
$PROJECT_ROOTWrite output to:$PROJECT_ROOT/.understand-anything/intermediate/scan-result.json
After the agent completes, read $PROJECT_ROOT/.understand-anything/intermediate/scan-result.json to get:
- Project name, description
- Languages, frameworks
- File list with line counts
- Complexity estimate
Gate check: If >200 files, inform the user and suggest scoping with a subdirectory argument. Proceed only if user confirms or add guidance that this may take a while.
Phase 2 — ANALYZE
Full analysis path
Batch the file list from Phase 1 into groups of 5-10 files each (aim for balanced batch sizes).
For each batch, dispatch a file-analyzer agent. Run up to 3 agents concurrently using parallel dispatch. Each agent gets this prompt:
Analyze these source files and produce GraphNode and GraphEdge objects. Project root:
$PROJECT_ROOTProject:<projectName>Languages:<languages>Batch index:<batchIndex>Write output to:$PROJECT_ROOT/.understand-anything/intermediate/batch-<batchIndex>.jsonAll project files (for import resolution):
<full file path list from scan>Files to analyze in this batch:
<path>(<sizeLines> lines)<path>(<sizeLines> lines) ...
After ALL batches complete, read each batch-<N>.json file and merge:
- Combine all
nodesarrays. If duplicate node IDs exist, keep the later occurrence. - Combine all
edgesarrays. Deduplicate by the composite keysource + target + type.
Incremental update path
Use the changed files list from Phase 0. Batch and dispatch file-analyzer agents using the same process as above, but only for changed files.
After batches complete, merge with the existing graph:
- Remove old nodes whose
filePathmatches any changed file - Remove old edges whose
sourceortargetreferences a removed node - Add new nodes and edges from the fresh analysis
Phase 3 — ASSEMBLE
Merge all file-analyzer results into a single set of nodes and edges. Then perform basic integrity cleanup:
- Remove any edge whose
sourceortargetreferences a node ID that does not exist in the merged node set - Remove duplicate node IDs (keep the last occurrence)
- Log any removed edges or nodes for the final summary
Phase 4 — ARCHITECTURE
Dispatch the architecture-analyzer agent with this prompt:
Analyze this codebase's structure to identify architectural layers. Project root:
$PROJECT_ROOTWrite output to:$PROJECT_ROOT/.understand-anything/intermediate/layers.jsonProject:<projectName>—<projectDescription>File nodes:
[list of {id, name, filePath, summary, tags} for all file-type nodes]Import edges:
[list of edges with type "imports"]
After the agent completes, read $PROJECT_ROOT/.understand-anything/intermediate/layers.json to get the layer assignments.
For incremental updates: Always re-run architecture analysis on the full merged node set, since layer assignments may shift when files change.
Phase 5 — TOUR
Dispatch the tour-builder agent with this prompt:
Create a guided learning tour for this codebase. Project root:
$PROJECT_ROOTWrite output to:$PROJECT_ROOT/.understand-anything/intermediate/tour.jsonProject:<projectName>—<projectDescription>Languages:<languages>Nodes (summarized):
[list of {id, name, filePath, summary, type} for key nodes]Layers:
[layers from Phase 4]Key edges:
[imports and calls edges]
After the agent completes, read $PROJECT_ROOT/.understand-anything/intermediate/tour.json to get the tour steps.
Phase 6 — REVIEW
Assemble the full KnowledgeGraph JSON object:
{
"version": "1.0.0",
"project": {
"name": "<projectName>",
"languages": ["<languages>"],
"frameworks": ["<frameworks>"],
"description": "<projectDescription>",
"analyzedAt": "<ISO 8601 timestamp>",
"gitCommitHash": "<commit hash from Phase 0>"
},
"nodes": [<all merged nodes from Phase 3>],
"edges": [<all merged edges from Phase 3>],
"layers": [<layers from Phase 4>],
"tour": [<steps from Phase 5>]
}
-
Write the assembled graph to
$PROJECT_ROOT/.understand-anything/intermediate/assembled-graph.json. -
Dispatch the graph-reviewer agent with this prompt:
Validate the knowledge graph at
$PROJECT_ROOT/.understand-anything/intermediate/assembled-graph.json. Project root:$PROJECT_ROOTRead the file and validate it for completeness and correctness. Write output to:$PROJECT_ROOT/.understand-anything/intermediate/review.json -
After the agent completes, read
$PROJECT_ROOT/.understand-anything/intermediate/review.json. -
If
approved: false:- Review the
issueslist - Apply automated fixes where possible:
- Remove edges with dangling references
- Fill missing required fields with sensible defaults (e.g., empty
tags->["untagged"], emptysummary->"No summary available") - Remove nodes with invalid types
- If critical issues remain after one fix attempt, save the graph anyway but include the warnings in the final report
- Review the
-
If
approved: true: Proceed to Phase 7.
Phase 7 — SAVE
-
Write the final knowledge graph to
$PROJECT_ROOT/.understand-anything/knowledge-graph.json. -
Write metadata to
$PROJECT_ROOT/.understand-anything/meta.json:{ "lastAnalyzedAt": "<ISO 8601 timestamp>", "gitCommitHash": "<commit hash>", "version": "1.0.0", "analyzedFiles": <number of files analyzed> } -
Clean up intermediate files:
rm -rf $PROJECT_ROOT/.understand-anything/intermediate -
Report a summary to the user containing:
- Project name and description
- Files analyzed / total files
- Nodes created (broken down by type: file, function, class)
- Edges created (broken down by type)
- Layers identified (with names)
- Tour steps generated (count)
- Any warnings from the reviewer
- Path to the output file:
$PROJECT_ROOT/.understand-anything/knowledge-graph.json
-
Automatically launch the dashboard by invoking the
/understand-dashboardskill.
Error Handling
- If any agent dispatch fails, retry once with the same prompt plus additional context about the failure.
- If it fails a second time, skip that phase and continue with partial results.
- ALWAYS save partial results — a partial graph is better than no graph.
- Report any skipped phases or errors in the final summary so the user knows what happened.
- NEVER silently drop errors. Every failure must be visible in the final report.
Reference: KnowledgeGraph Schema
Node Types
| Type | Description | ID Convention |
|---|---|---|
file | Source file | file:<relative-path> |
function | Function or method | func:<relative-path>:<name> |
class | Class, interface, or type | class:<relative-path>:<name> |
module | Logical module or package | module:<name> |
concept | Abstract concept or pattern | concept:<name> |
Edge Types (18 total)
| Category | Types |
|---|---|
| Structural | imports, exports, contains, inherits, implements |
| Behavioral | calls, subscribes, publishes, middleware |
| Data flow | reads_from, writes_to, transforms, validates |
| Dependencies | depends_on, tested_by, configures |
| Semantic | related, similar_to |
Edge Weight Conventions
| Edge Type | Weight |
|---|---|
contains | 1.0 |
inherits, implements | 0.9 |
calls, exports | 0.8 |
imports | 0.7 |
depends_on | 0.6 |
tested_by | 0.5 |
| All others | 0.5 (default) |
> related_skills --same-repo
> understand-onboard
Use when you need to generate an onboarding guide for new team members joining a project
> understand-explain
Use when you need a deep-dive explanation of a specific file, function, or module in the codebase
> understand-diff
Use when you need to analyze git diffs or pull requests to understand what changed, affected components, and risks
> understand-dashboard
Launch the interactive web dashboard to visualize a codebase's knowledge graph