코드, 설정, 문서를 분석해 구성 요소와 의존 관계를 대화형으로 탐색하는 그래프를 만듭니다. 일본어 설명 생성과 변경 내용에 따른 갱신도 지원합니다.
- 처음 접하는 프로젝트 구조 파악
- 구성 요소 사이의 의존 관계 확인
- 설계 설명을 일본어로 생성
코드에서 업무 영역과 흐름, 개별 단계를 추출해 조작 가능한 가로형 흐름도로 보여 줍니다. 기존 지식 그래프를 활용하거나 가볍게 코드를 스캔합니다.
Extract business domain knowledge from a codebase and generate an interactive domain flow graph. Works standalone (lightweight scan) or derives from an existing /understand knowledge graph.
understand-domain은 코드에서 업무 영역, 처리 흐름, 개별 단계를 추출해 대시보드에서 조작할 수 있는 가로형 흐름도로 만듭니다. 기존 지식 그래프가 있으면 구성 요소와 관계를 바탕으로 업무 지식을 도출합니다. 그래프가 없으면 파일 구조, 처리 진입점, 일부 코드를 가볍게 스캔해 분석 자료를 모읍니다.
프로젝트에 구현된 업무 흐름을 파악하거나 코드 구조를 업무 관점에서 정리할 때 유용합니다. 업무 영역과 단계의 연결을 그림으로 확인하고, 기존 지식 그래프를 다른 관점에서 살펴볼 수 있습니다.
/understand-domain --full로 새로 스캔해 주세요.”관련 플러그인과 분석 에이전트가 필요하며, 가벼운 스캔에는 Python을 사용합니다. --full은 기존 그래프가 있어도 다시 스캔합니다. 결과는 domain-graph.json에 저장하고 /understand-dashboard를 실행합니다. Git worktree에서는 기본적으로 주 저장소에 출력합니다. 기존 그래프에 반영되지 않은 변경이 있으면 경고합니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.
총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 21일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Extracts business domain knowledge — domains, business flows, and process steps — from a codebase and produces an interactive horizontal flow graph in the dashboard.
.ua/knowledge-graph.json, or the legacy .understand-anything/knowledge-graph.json when that directory is present), derives domain knowledge from it (cheap, no file scanning)--full flag to force a fresh scan even if a knowledge graph existsPROJECT_ROOTSet 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 domain 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-domain] Detected git worktree at $PROJECT_ROOT"
echo "[understand-domain] Redirecting output to main repo root: $MAIN_ROOT"
echo "[understand-domain] (Set UNDERSTAND_NO_WORKTREE_REDIRECT=1 to keep PROJECT_ROOT as the worktree.)"
PROJECT_ROOT="$MAIN_ROOT"
fi
fi
fi
Use $PROJECT_ROOT (not the bare CWD) for every reference to "the current project" / <project-root> in subsequent phases.
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 keep working with no migration) and uses the new .ua/ otherwise. Because each phase may run in a fresh shell, carry $UA_DIR forward like $PROJECT_ROOT, re-resolving it with the line above if a later command block needs it.
Important: do not assume the plugin root is simply two directories above the skill path string. In many installations ~/.agents/skills/understand-domain 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-domain 2>/dev/null || readlink -f ~/.agents/skills/understand-domain 2>/dev/null || echo "")
SELF_RELATIVE=$([ -n "$SKILL_REAL" ] && cd "$SKILL_REAL/../.." 2>/dev/null && pwd || echo "")
COPILOT_SKILL_REAL=$(realpath ~/.copilot/skills/understand-domain 2>/dev/null || readlink -f ~/.copilot/skills/understand-domain 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-domain>}"
echo " - ${COPILOT_SELF_RELATIVE:-<unresolved path derived from ~/.copilot/skills/understand-domain>}"
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
Use $PLUGIN_ROOT for every reference to agent definitions in subsequent phases.
$UA_DIR/knowledge-graph.json exists--full was NOT passed, check freshness before deriving from it:
project.gitCommitHash from the graph metadata as GRAPH_COMMIT_RAW. Change to $PROJECT_ROOT, resolve it as a commit before using it in any Git diff, compare the resolved commit with git rev-parse HEAD, and inspect project-scoped committed and working-tree changes:
GRAPH_COMMIT=$(git rev-parse --verify --end-of-options "${GRAPH_COMMIT_RAW}^{commit}" 2>/dev/null)
git rev-parse HEAD
git diff --name-only "$GRAPH_COMMIT" HEAD -- .
git diff --cached --name-only -- .
git diff --name-only -- .
git ls-files --others --exclude-standard -- .
-- . pathspec is required: commits that only touch a sibling monorepo project must not make this graph stale. A hash mismatch alone is not stale when the project diff is empty..ua/ or legacy .understand-anything/) in every command's output because it contains generated graph artifacts, not project source drift./understand to refresh the knowledge graph.GRAPH_COMMIT_RAW resolves successfully. If the graph commit or Git metadata is missing, invalid, or unavailable, give a brief best-effort warning and continue instead of blocking.--full is used, skip this preflight because the command performs a fresh scan instead of consuming the existing graph.The preprocessing script does NOT produce a domain graph — it produces raw material (file tree, entry points, exports/imports) so the domain-analyzer agent can focus on the actual domain analysis instead of spending dozens of tool calls exploring the codebase. Think of it as a cheat sheet: cheap Python preprocessing → expensive LLM gets a clean, small input → better results for less cost.
$PROJECT_ROOT from Phase 0:
python ./extract-domain-context.py "$PROJECT_ROOT"
This outputs $UA_DIR/intermediate/domain-context.json containing:
.gitignore)domain-context.json as context for Phase 4$UA_DIR/knowledge-graph.jsoncalls, imports, contains)$PLUGIN_ROOT/agents/domain-analyzer.md$UA_DIR/intermediate/domain-analysis.json$UA_DIR/domain-graph.json$UA_DIR/intermediate/domain-analysis.json and $UA_DIR/intermediate/domain-context.json/understand-dashboard to visualize the domain graphdomain-graph.json and show the domain view by default아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
코드, 설정, 문서를 분석해 구성 요소와 의존 관계를 대화형으로 탐색하는 그래프를 만듭니다. 일본어 설명 생성과 변경 내용에 따른 갱신도 지원합니다.
코드 구성 요소와 관계를 기록한 지식 그래프로 질문에 답합니다. 관련 파일, 함수, 호출 및 의존 관계를 따라 프로젝트의 작동 방식과 설계 계층을 설명합니다.
분석된 코드베이스의 구조와 관계를 그림으로 살펴보는 대화형 웹 대시보드를 실행합니다. 현재 작업 위치나 지정한 프로젝트의 데이터를 표시합니다.
Git 변경이나 풀 리퀘스트를 지식 그래프와 대조합니다. 변경 지점과 주변 영향, 설계 계층 간 관계, 검토 시 주의할 위험을 정리하고 시각화 데이터를 저장합니다.
기존 지식 그래프와 실제 코드를 대조해 특정 파일, 함수, 모듈의 설계상 역할과 호출 관계, 의존성, 입출력 흐름을 자세히 설명합니다.
Figma 파일을 분석해 페이지, 화면, 컴포넌트와 공통 디자인 값의 관계를 그래프로 정리합니다. 대화형 대시보드에서 디자인 구조를 확인할 수 있습니다.