← Back to list
⚡

understand

Analyze a codebase to produce an interactive knowledge graph for understanding architecture, comp…
⚡ Productivity skills By Egonex-AI Version v1.0.0 Added 2026-10-06 Updated 2026-10-06 Source ↗
8.7Overall rating
0Views
0Downloads
85.4kStars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "understand" skill by following the instructions at https://skill123.me/install/understand.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/understand.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 173 KB
📊 Static rating
8.7/10
Trigger
9.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
9.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Analyze a codebase to produce an interactive knowledge graph for understanding architecture, components, and relationships

/understand

Analyze the current codebase and produce a knowledge-graph.json file in the project's data directory (.ua/, or the legacy .understand-anything/ when it already exists). This file powers the interactive dashboard for exploring the project's architecture.

Documentation

Analyze a codebase to produce an interactive knowledge graph for understanding architecture, components, and relationships

/understand

Analyze the current codebase and produce a knowledge-graph.json file in the project's data directory (.ua/, or the legacy .understand-anything/ when it already exists). This file powers the interactive dashboard for exploring the project's architecture.

Options

  • $ARGUMENTS may contain:
  • --full — Force a full rebuild, ignoring any existing graph
  • --auto-update — Enable automatic graph updates on commit (writes autoUpdate: true to $UA_DIR/config.json)
  • --no-auto-update — Disable automatic graph updates (writes autoUpdate: false to $UA_DIR/config.json)
  • --review — Run full LLM graph-reviewer instead of inline deterministic validation
  • --language <lang> — Generate all textual content (summaries, descriptions, tags, titles, languageNotes, languageLesson) in the specified language. Accepts ISO 639-1 codes (zh, ja, ko, en, es, fr, de, etc.) or friendly names (chinese, japanese, korean, english, spanish, etc.). Locale variants supported: zh-TW, zh-HK, etc. Defaults to en (English). Stores preference in $UA_DIR/config.json for consistency across incremental updates.
  • --exclude <patterns> — Comma-separated glob patterns for additional files/directories to exclude from analysis (e.g., --exclude "tests/*,docs/*"). These patterns take highest priority over built-in defaults and .understandignore rules. Supports gitignore syntax including ! negation.
  • A directory path (e.g. /path/to/repo or ../other-project) — Analyze the given directory instead of the current working directory

---

Progress Reporting

Throughout execution, report progress to the user at each phase transition and during batch processing. This keeps users informed on large codebases where analysis can take a long time.

  • **Phase transitions:** At the start of each phase, print a status line:

> [Phase N/7] <phase name>...

>

> Example: [Phase 2/7] Analyzing files (12 batches)...

  • **Batch progress:** During Phase 2, report each batch with its index and total:

> Analyzing batch X/N (files: foo.ts, bar.ts, ...) (list up to 3 filenames, then ... if more)

  • **Phase completion:** When a phase finishes, briefly confirm:

> Phase N complete. <one-line summary of result>

>

> Example: Phase 1 complete. Found 247 files across 3 languages.

---

Phase 0 — Pre-flight

Determine whether to run a full analysis or incremental update.

View full documentation

1. **Resolve PROJECT_ROOT:**

  • Parse $ARGUMENTS for a non-flag token (any argument that does not start with --). If found, treat it as the target directory path.
  • If the path is relative, resolve it against the current working directory.
  • Verify the resolved path exists and is a directory (run test -d <path>). If it does not exist or is not a directory, report an error to the user and **STOP**.
  • Set PROJECT_ROOT to the resolved absolute path.
  • If no directory path argument is found, set PROJECT_ROOT to the current working directory.
  • **Worktree redirect.** If PROJECT_ROOT is inside a git worktree (not the main checkout), redirect output to the main repository root. Worktrees managed by Claude Code are ephemeral — the data directory (.ua/, or legacy .understand-anything/) written there is destroyed when the session ends, taking the knowledge graph with it (issue #133). Detect a worktree by comparing git rev-parse --git-dir against git rev-parse --git-common-dir; in a normal checkout or submodule they resolve to the same path, in a worktree they differ and the parent of --git-common-dir is the main repo root.

     COMMON_DIR=$(git -C "$PROJECT_ROOT" rev-parse --git-common-dir 2>/dev/null)
     GIT_DIR=$(git -C "$PROJECT_ROOT" rev-parse --git-dir 2>/dev/null)
     if [ -n "$COMMON_DIR" ] && [ -n "$GIT_DIR" ]; then
       COMMON_ABS=$(cd "$PROJECT_ROOT" && cd "$COMMON_DIR" 2>/dev/null && pwd -P)
       GIT_ABS=$(cd "$PROJECT_ROOT" && cd "$GIT_DIR" 2>/dev/null && pwd -P)
       if [ -n "$COMMON_ABS" ] && [ "$COMMON_ABS" != "$GIT_ABS" ]; then
         MAIN_ROOT=$(dirname "$COMMON_ABS")
         if [ -d "$MAIN_ROOT" ] && [ "${UNDERSTAND_NO_WORKTREE_REDIRECT:-0}" != "1" ]; then
           echo "[understand] Detected git worktree at $PROJECT_ROOT"
           echo "[understand] Redirecting output to main repo root: $MAIN_ROOT"
           echo "[understand] (Set UNDERSTAND_NO_WORKTREE_REDIRECT=1 to keep PROJECT_ROOT as the worktree.)"
           PROJECT_ROOT="$MAIN_ROOT"
         fi
       fi
     fi

Set UNDERSTAND_NO_WORKTREE_REDIRECT=1 if you intentionally want a per-worktree graph (rare — most users want the redirect).

1.5. **Ensure the plugin is built.** Later phases invoke Node scripts that import @understand-anything/core. On a fresh install packages/core/dist/ does not exist yet — build once.

**Important:** do **not** assume the plugin root is simply two directories above the skill path string. In many installations ~/.agents/skills/understand is a symlink into the real plugin checkout. Prefer runtime-provided plugin roots first (for Claude), then fall back to universal symlinks, skill symlink resolution, and common clone-based install paths.

Resolve the plugin root like this:


   SKILL_REAL=$(realpath ~/.agents/skills/understand 2>/dev/null || readlink -f ~/.agents/skills/understand 2>/dev/null || echo "")
   SELF_RELATIVE=$([ -n "$SKILL_REAL" ] && cd "$SKILL_REAL/../.." 2>/dev/null && pwd || echo "")
   COPILOT_SKILL_REAL=$(realpath ~/.copilot/skills/understand 2>/dev/null || readlink -f ~/.copilot/skills/understand 2>/dev/null || echo "")
   COPILOT_SELF_RELATIVE=$([ -n "$COPILOT_SKILL_REAL" ] && cd "$COPILOT_SKILL_REAL/../.." 2>/dev/null && pwd || echo "")

   PLUGIN_ROOT=""
   for candidate in \
     "${CLAUDE_PLUGIN_ROOT}" \
     "$HOME/.understand-anything-plugin" \
     "$SELF_RELATIVE" \
     "$COPILOT_SELF_RELATIVE" \
     "$HOME/.codex/understand-anything/understand-anything-plugin" \
     "$HOME/.opencode/understand-anything/understand-anything-plugin" \
     "$HOME/.pi/understand-anything/understand-anything-plugin" \
     "$HOME/understand-anything/understand-anything-plugin"; do
     if [ -n "$candidate" ] && [ -f "$candidate/package.json" ] && [ -f "$candidate/pnpm-workspace.yaml" ]; then
       PLUGIN_ROOT="$candidate"
       break
     fi
   done

   if [ -z "$PLUGIN_ROOT" ]; then
     echo "Error: Cannot find the understand-anything plugin root."
     echo "Checked:"
     echo "  - ${CLAUDE_PLUGIN_ROOT:-<unset CLAUDE_PLUGIN_ROOT>}"
     echo "  - $HOME/.understand-anything-plugin"
     echo "  - ${SELF_RELATIVE:-<unresolved path derived from ~/.agents/skills/understand>}"
     echo "  - ${COPILOT_SELF_RELATIVE:-<unresolved path derived from ~/.copilot/skills/understand>}"
     echo "  - $HOME/.codex/understand-anything/understand-anything-plugin"
     echo "  - $HOME/.opencode/understand-anything/understand-anything-plugin"
     echo "  - $HOME/.pi/understand-anything/understand-anything-plugin"
     echo "  - $HOME/understand-anything/understand-anything-plugin"
     echo "Make sure the plugin is installed correctly."
     exit 1
   fi

   if [ ! -f "$PLUGIN_ROOT/packages/core/dist/index.js" ]; then
     cd "$PLUGIN_ROOT" && (pnpm install --frozen-lockfile 2>/dev/null || pnpm install) && pnpm --filter @understand-anything/core build
   fi

If pnpm is missing, report to the user: "Install Node.js ≥ 22 and pnpm ≥ 10, then re-run /understand."

1.7. **Resolve the data directory $UA_DIR.** All Understand-Anything artifacts live in the project's data directory. Resolve it once, now that $PROJECT_ROOT is known, and reuse $UA_DIR for every read and write in later phases:


   UA_DIR="$PROJECT_ROOT/$([ -d "$PROJECT_ROOT/.understand-anything" ] && echo .understand-anything || echo .ua)"

This keeps the legacy .understand-anything/ directory when it already exists (existing projects kee

Score breakdown

Trigger
9.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
9.0