egonex-ai/understand-anything54 files

Understand

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

Specification
Skill ID
egonex-ai/understand-anything/understand
Publisher
egonex-ai
Repository
understand-anything
Installs
0
Files
54
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

egonex-ai/understand-anything/understandInstalls these files
  • SKILL.md
  • build-fingerprints.mjs
  • compute-batches.mjs
  • extract-import-map.mjs
  • extract-structure-result.mjs
  • extract-structure.mjs
  • finalize-incremental.mjs
  • frameworks/django.md
  • frameworks/express.md
  • frameworks/fastapi.md
  • frameworks/flask.md
  • frameworks/gin.md
  • frameworks/nextjs.md
  • frameworks/rails.md
  • frameworks/react.md
  • frameworks/spring.md
  • frameworks/vue.md
  • generate-ignore.mjs
  • languages/cpp.md
  • languages/csharp.md
  • languages/css.md
  • languages/dockerfile.md
  • languages/go.md
  • languages/graphql.md
  • languages/html.md
  • languages/java.md
  • languages/javascript.md
  • languages/json.md
  • languages/kotlin.md
  • languages/markdown.md
  • languages/php.md
  • languages/protobuf.md
  • languages/python.md
  • languages/ruby.md
  • languages/rust.md
  • languages/scala.md
  • languages/shell.md
  • languages/sql.md
  • languages/swift.md
  • languages/terraform.md
  • languages/typescript.md
  • languages/yaml.md
  • locales/en.md
  • locales/ja.md
  • locales/ko.md
  • locales/ru.md
  • locales/zh-TW.md
  • locales/zh.md
  • merge-batch-graphs.py
  • merge-subdomain-graphs.py
  • prepare-incremental.mjs
  • prepare-symbol-retry.mjs
  • scan-project.mjs
  • validate-incremental-symbols.mjs

What this skill tells the agent

/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.

  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)"

Use this skill in a project

Open any RiverX project, search the Skills panel for egonex-ai/understand-anything/understand, and install it in one click.

Use this skill