# graphify ๐Ÿ‡บ๐Ÿ‡ธ [English](../../README.md) | ๐Ÿ‡จ๐Ÿ‡ณ [็ฎ€ไฝ“ไธญๆ–‡](README.zh-CN.md) | ๐Ÿ‡ฏ๐Ÿ‡ต [ๆ—ฅๆœฌ่ชž](README.ja-JP.md) | ๐Ÿ‡ฐ๐Ÿ‡ท [ํ•œ๊ตญ์–ด](README.ko-KR.md) | ๐Ÿ‡ฉ๐Ÿ‡ช [Deutsch](README.de-DE.md) | ๐Ÿ‡ซ๐Ÿ‡ท [Franรงais](README.fr-FR.md) | ๐Ÿ‡ช๐Ÿ‡ธ [Espaรฑol](README.es-ES.md) | ๐Ÿ‡ฎ๐Ÿ‡ณ [เคนเคฟเคจเฅเคฆเฅ€](README.hi-IN.md) | ๐Ÿ‡ง๐Ÿ‡ท [Portuguรชs](README.pt-BR.md) | ๐Ÿ‡ท๐Ÿ‡บ [ะ ัƒััะบะธะน](README.ru-RU.md) | ๐Ÿ‡ธ๐Ÿ‡ฆ [ุงู„ุนุฑุจูŠุฉ](README.ar-SA.md) | ๐Ÿ‡ฎ๐Ÿ‡น [Italiano](README.it-IT.md) | ๐Ÿ‡ต๐Ÿ‡ฑ [Polski](README.pl-PL.md) | ๐Ÿ‡ณ๐Ÿ‡ฑ [Nederlands](README.nl-NL.md) | ๐Ÿ‡น๐Ÿ‡ท [Tรผrkรงe](README.tr-TR.md) | ๐Ÿ‡บ๐Ÿ‡ฆ [ะฃะบั€ะฐั—ะฝััŒะบะฐ](README.uk-UA.md) | ๐Ÿ‡ป๐Ÿ‡ณ [Tiแบฟng Viแป‡t](README.vi-VN.md) | ๐Ÿ‡ฎ๐Ÿ‡ฉ [Bahasa Indonesia](README.id-ID.md) | ๐Ÿ‡ธ๐Ÿ‡ช [Svenska](README.sv-SE.md) | ๐Ÿ‡ฌ๐Ÿ‡ท [ฮ•ฮปฮปฮทฮฝฮนฮบฮฌ](README.el-GR.md) | ๐Ÿ‡ท๐Ÿ‡ด [Romรขnฤƒ](README.ro-RO.md) | ๐Ÿ‡จ๐Ÿ‡ฟ [ฤŒeลกtina](README.cs-CZ.md) | ๐Ÿ‡ซ๐Ÿ‡ฎ [Suomi](README.fi-FI.md) | ๐Ÿ‡ฉ๐Ÿ‡ฐ [Dansk](README.da-DK.md) | ๐Ÿ‡ณ๐Ÿ‡ด [Norsk](README.no-NO.md) | ๐Ÿ‡ญ๐Ÿ‡บ [Magyar](README.hu-HU.md) | ๐Ÿ‡น๐Ÿ‡ญ [เธ เธฒเธฉเธฒเน„เธ—เธข](README.th-TH.md) | ๐Ÿ‡น๐Ÿ‡ผ [็น้ซ”ไธญๆ–‡](README.zh-TW.md) [![CI](https://github.com/safishamsi/graphify/actions/workflows/ci.yml/badge.svg?branch=v3)](https://github.com/safishamsi/graphify/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/graphifyy)](https://pypi.org/project/graphifyy/) [![Sponsor](https://img.shields.io/badge/sponsor-safishamsi-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/safishamsi) **AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ์œ„ํ•œ ์Šคํ‚ฌ.** Claude Code, Codex, OpenCode, OpenClaw, Factory Droid, ๋˜๋Š” Trae์—์„œ `/graphify`๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํŒŒ์ผ์„ ์ฝ๊ณ  ์ง€์‹ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ, ๋ฏธ์ฒ˜ ๋ชฐ๋ž๋˜ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ , ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์˜ "์ด์œ "๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”. ์™„์ „ํ•œ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ง€์›. ์ฝ”๋“œ, PDF, ๋งˆํฌ๋‹ค์šด, ์Šคํฌ๋ฆฐ์ƒท, ๋‹ค์ด์–ด๊ทธ๋žจ, ํ™”์ดํŠธ๋ณด๋“œ ์‚ฌ์ง„, ์‹ฌ์ง€์–ด ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋œ ์ด๋ฏธ์ง€๊นŒ์ง€ โ€” graphify๋Š” Claude Vision์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ชจ๋“  ๊ฒƒ์—์„œ ๊ฐœ๋…๊ณผ ๊ด€๊ณ„๋ฅผ ์ถ”์ถœํ•˜๊ณ  ํ•˜๋‚˜์˜ ๊ทธ๋ž˜ํ”„๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. tree-sitter AST๋ฅผ ํ†ตํ•ด 20๊ฐœ ์–ธ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(Python, JS, TS, Go, Rust, Java, C, C++, Ruby, C#, Kotlin, Scala, PHP, Swift, Lua, Zig, PowerShell, Elixir, Objective-C, Julia). > Andrej Karpathy๋Š” ๋…ผ๋ฌธ, ํŠธ์œ—, ์Šคํฌ๋ฆฐ์ƒท, ๋ฉ”๋ชจ๋ฅผ ๋ชจ์•„๋‘๋Š” `/raw` ํด๋”๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. graphify๋Š” ๋ฐ”๋กœ ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต์ž…๋‹ˆ๋‹ค โ€” ์›๋ณธ ํŒŒ์ผ์„ ์ง์ ‘ ์ฝ๋Š” ๊ฒƒ ๋Œ€๋น„ ์ฟผ๋ฆฌ๋‹น ํ† ํฐ ์†Œ๋น„๊ฐ€ 71.5๋ฐฐ ์ ๊ณ , ์„ธ์…˜ ๊ฐ„์— ์˜์†์ ์ด๋ฉฐ, ๋ฐœ๊ฒฌํ•œ ๊ฒƒ๊ณผ ์ถ”์ธกํ•œ ๊ฒƒ์„ ์ •์งํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ``` /graphify . # ์–ด๋–ค ํด๋”๋“  ๋™์ž‘ - ์ฝ”๋“œ๋ฒ ์ด์Šค, ๋…ธํŠธ, ๋…ผ๋ฌธ, ๋ฌด์—‡์ด๋“  ``` ``` graphify-out/ โ”œโ”€โ”€ graph.html ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„ - ๋…ธ๋“œ ํด๋ฆญ, ๊ฒ€์ƒ‰, ์ปค๋ฎค๋‹ˆํ‹ฐ๋ณ„ ํ•„ํ„ฐ โ”œโ”€โ”€ GRAPH_REPORT.md ๊ฐ“ ๋…ธ๋“œ, ์˜์™ธ์˜ ์—ฐ๊ฒฐ, ์ถ”์ฒœ ์งˆ๋ฌธ โ”œโ”€โ”€ graph.json ์˜์† ๊ทธ๋ž˜ํ”„ - ๋ช‡ ์ฃผ ํ›„์—๋„ ์žฌ์ฝ๊ธฐ ์—†์ด ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ โ””โ”€โ”€ cache/ SHA256 ์บ์‹œ - ์žฌ์‹คํ–‰ ์‹œ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ์ฒ˜๋ฆฌ ``` ๊ทธ๋ž˜ํ”„์— ํฌํ•จํ•˜์ง€ ์•Š์„ ํด๋”๋ฅผ ์ œ์™ธํ•˜๋ ค๋ฉด `.graphifyignore` ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”: ``` # .graphifyignore vendor/ node_modules/ dist/ *.generated.py ``` `.gitignore`์™€ ๋™์ผํ•œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ํŒจํ„ด์€ graphify๋ฅผ ์‹คํ–‰ํ•œ ํด๋” ๊ธฐ์ค€์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋งค์นญ๋ฉ๋‹ˆ๋‹ค. ## ๋™์ž‘ ์›๋ฆฌ graphify๋Š” ๋‘ ๋ฒˆ์˜ ํŒจ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๊ฒฐ์ •๋ก ์  AST ํŒจ์Šค๋กœ, ์ฝ”๋“œ ํŒŒ์ผ์—์„œ ๊ตฌ์กฐ(ํด๋ž˜์Šค, ํ•จ์ˆ˜, ์ž„ํฌํŠธ, ์ฝœ ๊ทธ๋ž˜ํ”„, docstring, ๊ทผ๊ฑฐ ์ฃผ์„)๋ฅผ LLM ์—†์ด ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” Claude ์„œ๋ธŒ์—์ด์ „ํŠธ๊ฐ€ ๋ฌธ์„œ, ๋…ผ๋ฌธ, ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์–ด ๊ฐœ๋…, ๊ด€๊ณ„, ์„ค๊ณ„ ๊ทผ๊ฑฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” NetworkX ๊ทธ๋ž˜ํ”„๋กœ ๋ณ‘ํ•ฉ๋˜๊ณ , Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง๋˜๋ฉฐ, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ HTML, ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ JSON, ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ์–ธ์–ด ๊ฐ์‚ฌ ๋ณด๊ณ ์„œ๋กœ ๋‚ด๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค. **ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ ๊ทธ๋ž˜ํ”„ ํ† ํด๋กœ์ง€ ๊ธฐ๋ฐ˜ โ€” ์ž„๋ฒ ๋”ฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.** Leiden์€ ์—ฃ์ง€ ๋ฐ€๋„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. Claude๊ฐ€ ์ถ”์ถœํ•˜๋Š” ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ ์—ฃ์ง€(`semantically_similar_to`, INFERRED๋กœ ํ‘œ์‹œ)๋Š” ์ด๋ฏธ ๊ทธ๋ž˜ํ”„์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์œ ์‚ฌ์„ฑ ์‹ ํ˜ธ์ด๋ฉฐ โ€” ๋ณ„๋„์˜ ์ž„๋ฒ ๋”ฉ ๋‹จ๊ณ„๋‚˜ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ด€๊ณ„๋Š” `EXTRACTED`(์†Œ์Šค์—์„œ ์ง์ ‘ ๋ฐœ๊ฒฌ), `INFERRED`(ํ•ฉ๋ฆฌ์  ์ถ”๋ก , ์‹ ๋ขฐ๋„ ์ ์ˆ˜ ํฌํ•จ), `AMBIGUOUS`(๋ฆฌ๋ทฐ ํ•„์š” ํ‘œ์‹œ) ์ค‘ ํ•˜๋‚˜๋กœ ํƒœ๊น…๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์ด ๋ฐœ๊ฒฌ๋œ ๊ฒƒ์ด๊ณ  ๋ฌด์—‡์ด ์ถ”์ธก๋œ ๊ฒƒ์ธ์ง€ ํ•ญ์ƒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ์„ค์น˜ **ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ:** Python 3.10+ ๋ฐ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜: [Claude Code](https://claude.ai/code), [Codex](https://openai.com/codex), [OpenCode](https://opencode.ai), [OpenClaw](https://openclaw.ai), [Factory Droid](https://factory.ai), ๋˜๋Š” [Trae](https://trae.ai) ```bash pip install graphifyy && graphify install ``` > PyPI ํŒจํ‚ค์ง€๋Š” `graphify` ์ด๋ฆ„์„ ๋˜์ฐพ๋Š” ๋™์•ˆ ์ž„์‹œ๋กœ `graphifyy`๋กœ ๋ช…๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CLI์™€ ์Šคํ‚ฌ ๋ช…๋ น์€ ์—ฌ์ „ํžˆ `graphify`์ž…๋‹ˆ๋‹ค. ### ํ”Œ๋žซํผ ์ง€์› | ํ”Œ๋žซํผ | ์„ค์น˜ ๋ช…๋ น | |--------|-----------| | Claude Code (Linux/Mac) | `graphify install` | | Claude Code (Windows) | `graphify install` (์ž๋™ ๊ฐ์ง€) ๋˜๋Š” `graphify install --platform windows` | | Codex | `graphify install --platform codex` | | OpenCode | `graphify install --platform opencode` | | OpenClaw | `graphify install --platform claw` | | Factory Droid | `graphify install --platform droid` | | Trae | `graphify install --platform trae` | | Trae CN | `graphify install --platform trae-cn` | Codex ์‚ฌ์šฉ์ž๋Š” ๋ณ‘๋ ฌ ์ถ”์ถœ์„ ์œ„ํ•ด `~/.codex/config.toml`์˜ `[features]` ์•„๋ž˜์— `multi_agent = true`๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Factory Droid๋Š” ๋ณ‘๋ ฌ ์„œ๋ธŒ์—์ด์ „ํŠธ ๋””์ŠคํŒจ์น˜์— `Task` ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. OpenClaw๋Š” ์ˆœ์ฐจ ์ถ”์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(ํ•ด๋‹น ํ”Œ๋žซํผ์˜ ๋ณ‘๋ ฌ ์—์ด์ „ํŠธ ์ง€์›์€ ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค). Trae๋Š” ๋ณ‘๋ ฌ ์„œ๋ธŒ์—์ด์ „ํŠธ ๋””์ŠคํŒจ์น˜์— Agent ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ PreToolUse ํ›…์„ **์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** โ€” AGENTS.md๊ฐ€ ์ƒ์‹œ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ์—ด๊ณ  ์ž…๋ ฅํ•˜์„ธ์š”: ``` /graphify . ``` ์ฐธ๊ณ : Codex๋Š” ์Šคํ‚ฌ ํ˜ธ์ถœ์— `/` ๋Œ€์‹  `$`๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ `$graphify .`๋ผ๊ณ  ์ž…๋ ฅํ•˜์„ธ์š”. ### ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ํ•ญ์ƒ ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ • (๊ถŒ์žฅ) ๊ทธ๋ž˜ํ”„๋ฅผ ๋นŒ๋“œํ•œ ํ›„, ํ”„๋กœ์ ํŠธ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜์„ธ์š”: | ํ”Œ๋žซํผ | ๋ช…๋ น | |--------|------| | Claude Code | `graphify claude install` | | Codex | `graphify codex install` | | OpenCode | `graphify opencode install` | | OpenClaw | `graphify claw install` | | Factory Droid | `graphify droid install` | | Trae | `graphify trae install` | | Trae CN | `graphify trae-cn install` | **Claude Code**๋Š” ๋‘ ๊ฐ€์ง€๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค: ์•„ํ‚คํ…์ฒ˜ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์ „์— `graphify-out/GRAPH_REPORT.md`๋ฅผ ์ฝ๋„๋ก Claude์—๊ฒŒ ์ง€์‹œํ•˜๋Š” `CLAUDE.md` ์„น์…˜์„ ์ž‘์„ฑํ•˜๊ณ , ๋ชจ๋“  Glob ๋ฐ Grep ํ˜ธ์ถœ ์ „์— ์‹คํ–‰๋˜๋Š” **PreToolUse ํ›…**(`settings.json`)์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€์‹ ๊ทธ๋ž˜ํ”„๊ฐ€ ์กด์žฌํ•˜๋ฉด Claude๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค: _"graphify: Knowledge graph exists. Read GRAPH_REPORT.md for god nodes and community structure before searching raw files."_ โ€” ์ด๋ฅผ ํ†ตํ•ด Claude๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ grepํ•˜๋Š” ๋Œ€์‹  ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. **Codex**๋Š” `AGENTS.md`์— ์ž‘์„ฑํ•˜๊ณ  Bash ๋„๊ตฌ ํ˜ธ์ถœ ์ „์— ์‹คํ–‰๋˜๋Š” **PreToolUse ํ›…**์„ `.codex/hooks.json`์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค โ€” Claude Code์™€ ๋™์ผํ•œ ์ƒ์‹œ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. **OpenCode, OpenClaw, Factory Droid, Trae**๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `AGENTS.md`์— ๋™์ผํ•œ ๊ทœ์น™์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋žซํผ๋“ค์€ PreToolUse ํ›…์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ AGENTS.md๊ฐ€ ์ƒ์‹œ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋Š” ๋Œ€์‘ํ•˜๋Š” uninstall ๋ช…๋ น์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: `graphify claude uninstall`). **์ƒ์‹œ ์ž‘๋™ vs ๋ช…์‹œ์  ํŠธ๋ฆฌ๊ฑฐ โ€” ์ฐจ์ด์ ์€?** ์ƒ์‹œ ์ž‘๋™ ํ›…์€ `GRAPH_REPORT.md`๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค โ€” ๊ฐ“ ๋…ธ๋“œ, ์ปค๋ฎค๋‹ˆํ‹ฐ, ์˜์™ธ์˜ ์—ฐ๊ฒฐ์„ ํ•œ ํŽ˜์ด์ง€๋กœ ์š”์•ฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์‹œ์Šคํ„ดํŠธ๋Š” ํŒŒ์ผ ๊ฒ€์ƒ‰ ์ „์— ์ด๊ฒƒ์„ ์ฝ์œผ๋ฏ€๋กœ ํ‚ค์›Œ๋“œ ๋งค์นญ์ด ์•„๋‹Œ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋งŒ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ผ์ƒ์ ์ธ ์งˆ๋ฌธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `/graphify query`, `/graphify path`, `/graphify explain`์€ ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค: ์›์‹œ `graph.json`์„ ํ™‰ ๋‹จ์œ„๋กœ ์ˆœํšŒํ•˜๊ณ , ๋…ธ๋“œ ๊ฐ„์˜ ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•˜๋ฉฐ, ์—ฃ์ง€ ์ˆ˜์ค€์˜ ์„ธ๋ถ€ ์ •๋ณด(๊ด€๊ณ„ ์œ ํ˜•, ์‹ ๋ขฐ๋„ ์ ์ˆ˜, ์†Œ์Šค ์œ„์น˜)๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜์ด ์•„๋‹Œ ๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค: ์ƒ์‹œ ์ž‘๋™ ํ›…์€ ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ ์ง€๋„๋ฅผ ์ฃผ๊ณ , `/graphify` ๋ช…๋ น์€ ๊ทธ ์ง€๋„๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ## `graph.json`์„ LLM๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ `graph.json`์€ ํ”„๋กฌํ”„ํŠธ์— ํ•œ ๋ฒˆ์— ์ „๋ถ€ ๋ถ™์—ฌ๋„ฃ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์œ ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: 1. `graphify-out/GRAPH_REPORT.md`๋กœ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฐœ์š”๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. 2. `graphify query`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ตํ•˜๋ ค๋Š” ํŠน์ • ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋” ์ž‘์€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. 3. ์ „์ฒด ์›์‹œ ์ฝ”ํผ์Šค ๋Œ€์‹  ๊ทธ ์ง‘์ค‘๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ์—์„œ graphify๋ฅผ ์‹คํ–‰ํ•œ ํ›„: ```bash graphify query "show the auth flow" --graph graphify-out/graph.json graphify query "what connects DigestAuth to Response?" --graph graphify-out/graph.json ``` ์ถœ๋ ฅ์—๋Š” ๋…ธ๋“œ ๋ ˆ์ด๋ธ”, ์—ฃ์ง€ ์œ ํ˜•, ์‹ ๋ขฐ๋„ ํƒœ๊ทธ, ์†Œ์Šค ํŒŒ์ผ, ์†Œ์Šค ์œ„์น˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” LLM์„ ์œ„ํ•œ ์ข‹์€ ์ค‘๊ฐ„ ์ปจํ…์ŠคํŠธ ๋ธ”๋ก์ด ๋ฉ๋‹ˆ๋‹ค: ```text ์ด ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์งˆ๋ฌธ์— ๋‹ตํ•˜์„ธ์š”. ์ถ”์ธก๋ณด๋‹ค ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์šฐ์„ ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์†Œ์Šค ํŒŒ์ผ์„ ์ธ์šฉํ•˜์„ธ์š”. ``` ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ๋„๊ตฌ ํ˜ธ์ถœ์ด๋‚˜ MCP๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ๋„ฃ๋Š” ๋Œ€์‹  ๊ทธ๋ž˜ํ”„๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์„ธ์š”. graphify๋Š” `graph.json`์„ MCP ์„œ๋ฒ„๋กœ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```bash python -m graphify.serve graphify-out/graph.json ``` ์ด๋ฅผ ํ†ตํ•ด ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ `query_graph`, `get_node`, `get_neighbors`, `shortest_path` ๊ฐ™์€ ๋ฐ˜๋ณต ์ฟผ๋ฆฌ์— ๊ตฌ์กฐํ™”๋œ ๊ทธ๋ž˜ํ”„ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜๋™ ์„ค์น˜ (curl) ```bash mkdir -p ~/.claude/skills/graphify curl -fsSL https://raw.githubusercontent.com/safishamsi/graphify/v3/graphify/skill.md \ > ~/.claude/skills/graphify/SKILL.md ``` `~/.claude/CLAUDE.md`์— ์ถ”๊ฐ€: ``` - **graphify** (`~/.claude/skills/graphify/SKILL.md`) - any input to knowledge graph. Trigger: `/graphify` When the user types `/graphify`, invoke the Skill tool with `skill: "graphify"` before doing anything else. ```
## ์‚ฌ์šฉ๋ฒ• ``` /graphify # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰ /graphify ./raw # ํŠน์ • ํด๋”์—์„œ ์‹คํ–‰ /graphify ./raw --mode deep # ๋” ์ ๊ทน์ ์ธ INFERRED ์—ฃ์ง€ ์ถ”์ถœ /graphify ./raw --update # ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ์žฌ์ถ”์ถœํ•˜์—ฌ ๊ธฐ์กด ๊ทธ๋ž˜ํ”„์— ๋ณ‘ํ•ฉ /graphify ./raw --cluster-only # ๊ธฐ์กด ๊ทธ๋ž˜ํ”„์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง๋งŒ ์žฌ์‹คํ–‰, ์žฌ์ถ”์ถœ ์—†์Œ /graphify ./raw --no-viz # HTML ๊ฑด๋„ˆ๋›ฐ๊ธฐ, ๋ณด๊ณ ์„œ + JSON๋งŒ ์ƒ์„ฑ /graphify ./raw --obsidian # Obsidian ๋ณผํŠธ๋„ ์ƒ์„ฑ (์˜ตํŠธ์ธ) /graphify ./raw --obsidian --obsidian-dir ~/vaults/myproject # ๋ณผํŠธ๋ฅผ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ /graphify add https://arxiv.org/abs/1706.03762 # ๋…ผ๋ฌธ ๊ฐ€์ ธ์˜ค๊ธฐ, ์ €์žฅ, ๊ทธ๋ž˜ํ”„ ์—…๋ฐ์ดํŠธ /graphify add https://x.com/karpathy/status/... # ํŠธ์œ— ๊ฐ€์ ธ์˜ค๊ธฐ /graphify add https://... --author "Name" # ์›์ €์ž ํƒœ๊ทธ /graphify add https://... --contributor "Name" # ์ฝ”ํผ์Šค์— ์ถ”๊ฐ€ํ•œ ์‚ฌ๋žŒ ํƒœ๊ทธ /graphify query "์–ดํ…์…˜๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€?" /graphify query "์–ดํ…์…˜๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€?" --dfs # ํŠน์ • ๊ฒฝ๋กœ ์ถ”์  /graphify query "์–ดํ…์…˜๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€?" --budget 1500 # N ํ† ํฐ์œผ๋กœ ์ œํ•œ /graphify path "DigestAuth" "Response" /graphify explain "SwinTransformer" /graphify ./raw --watch # ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ๊ทธ๋ž˜ํ”„ ์ž๋™ ๋™๊ธฐํ™” (์ฝ”๋“œ: ์ฆ‰์‹œ, ๋ฌธ์„œ: ์•Œ๋ฆผ) /graphify ./raw --wiki # ์—์ด์ „ํŠธ๊ฐ€ ํฌ๋กค ๊ฐ€๋Šฅํ•œ ์œ„ํ‚ค ๋นŒ๋“œ (index.md + ์ปค๋ฎค๋‹ˆํ‹ฐ๋ณ„ ๋ฌธ์„œ) /graphify ./raw --svg # graph.svg ๋‚ด๋ณด๋‚ด๊ธฐ /graphify ./raw --graphml # graph.graphml ๋‚ด๋ณด๋‚ด๊ธฐ (Gephi, yEd) /graphify ./raw --neo4j # Neo4j์šฉ cypher.txt ์ƒ์„ฑ /graphify ./raw --neo4j-push bolt://localhost:7687 # ์‹คํ–‰ ์ค‘์ธ Neo4j ์ธ์Šคํ„ด์Šค์— ์ง์ ‘ ํ‘ธ์‹œ /graphify ./raw --mcp # MCP stdio ์„œ๋ฒ„ ์‹œ์ž‘ # git ํ›… - ํ”Œ๋žซํผ ๋ฌด๊ด€, ์ปค๋ฐ‹ ๋ฐ ๋ธŒ๋žœ์น˜ ์ „ํ™˜ ์‹œ ๊ทธ๋ž˜ํ”„ ์žฌ๋นŒ๋“œ graphify hook install graphify hook uninstall graphify hook status # ์ƒ์‹œ ์ž‘๋™ ์–ด์‹œ์Šคํ„ดํŠธ ์ง€์‹œ - ํ”Œ๋žซํผ๋ณ„ graphify claude install # CLAUDE.md + PreToolUse ํ›… (Claude Code) graphify claude uninstall graphify codex install # AGENTS.md (Codex) graphify opencode install # AGENTS.md (OpenCode) graphify claw install # AGENTS.md (OpenClaw) graphify droid install # AGENTS.md (Factory Droid) graphify trae install # AGENTS.md (Trae) graphify trae uninstall graphify trae-cn install # AGENTS.md (Trae CN) graphify trae-cn uninstall # ํ„ฐ๋ฏธ๋„์—์„œ ์ง์ ‘ ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ (AI ์–ด์‹œ์Šคํ„ดํŠธ ๋ถˆํ•„์š”) graphify query "์–ดํ…์…˜๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€?" graphify query "์ธ์ฆ ํ๋ฆ„ ๋ณด๊ธฐ" --dfs graphify query "CfgNode์ด ๋ญ์ง€?" --budget 500 graphify query "..." --graph path/to/graph.json ``` ๋‹ค์–‘ํ•œ ํŒŒ์ผ ์œ ํ˜•์˜ ์กฐํ•ฉ๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค: | ์œ ํ˜• | ํ™•์žฅ์ž | ์ถ”์ถœ ๋ฐฉ์‹ | |------|--------|-----------| | ์ฝ”๋“œ | `.py .ts .js .jsx .tsx .go .rs .java .c .cpp .rb .cs .kt .scala .php .swift .lua .zig .ps1 .ex .exs .m .mm .jl` | tree-sitter AST + ์ฝœ ๊ทธ๋ž˜ํ”„ + docstring/์ฃผ์„ ๊ทผ๊ฑฐ | | ๋ฌธ์„œ | `.md .txt .rst` | Claude๋ฅผ ํ†ตํ•œ ๊ฐœ๋… + ๊ด€๊ณ„ + ์„ค๊ณ„ ๊ทผ๊ฑฐ | | ์˜คํ”ผ์Šค | `.docx .xlsx` | ๋งˆํฌ๋‹ค์šด์œผ๋กœ ๋ณ€ํ™˜ ํ›„ Claude๋ฅผ ํ†ตํ•ด ์ถ”์ถœ (`pip install graphifyy[office]` ํ•„์š”) | | ๋…ผ๋ฌธ | `.pdf` | ์ธ์šฉ ๋งˆ์ด๋‹ + ๊ฐœ๋… ์ถ”์ถœ | | ์ด๋ฏธ์ง€ | `.png .jpg .webp .gif` | Claude Vision - ์Šคํฌ๋ฆฐ์ƒท, ๋‹ค์ด์–ด๊ทธ๋žจ, ๋ชจ๋“  ์–ธ์–ด | ## ๊ฒฐ๊ณผ๋ฌผ **๊ฐ“ ๋…ธ๋“œ** - ์ตœ๊ณ  ์ฐจ์ˆ˜์˜ ๊ฐœ๋… (๋ชจ๋“  ๊ฒƒ์ด ์—ฐ๊ฒฐ๋˜๋Š” ํ—ˆ๋ธŒ) **์˜์™ธ์˜ ์—ฐ๊ฒฐ** - ๋ณตํ•ฉ ์ ์ˆ˜๋กœ ์ˆœ์œ„ ์ง€์ •. ์ฝ”๋“œ-๋…ผ๋ฌธ ์—ฃ์ง€๋Š” ์ฝ”๋“œ-์ฝ”๋“œ๋ณด๋‹ค ๋†’๊ฒŒ ์ˆœ์œ„๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฒฐ๊ณผ์—๋Š” ์‰ฌ์šด ์„ค๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. **์ถ”์ฒœ ์งˆ๋ฌธ** - ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ณ ์œ ํ•˜๊ฒŒ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” 4~5๊ฐœ์˜ ์งˆ๋ฌธ **"์ด์œ "** - docstring, ์ธ๋ผ์ธ ์ฃผ์„(`# NOTE:`, `# IMPORTANT:`, `# HACK:`, `# WHY:`), ๋ฌธ์„œ์˜ ์„ค๊ณ„ ๊ทผ๊ฑฐ๊ฐ€ `rationale_for` ๋…ธ๋“œ๋กœ ์ถ”์ถœ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ โ€” ์™œ ๊ทธ๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€. **์‹ ๋ขฐ๋„ ์ ์ˆ˜** - ๋ชจ๋“  INFERRED ์—ฃ์ง€์—๋Š” `confidence_score`(0.0~1.0)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ด ์ถ”์ธก๋˜์—ˆ๋Š”์ง€๋ฟ ์•„๋‹ˆ๋ผ ๋ชจ๋ธ์ด ์–ผ๋งˆ๋‚˜ ํ™•์‹ ํ–ˆ๋Š”์ง€๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EXTRACTED ์—ฃ์ง€๋Š” ํ•ญ์ƒ 1.0์ž…๋‹ˆ๋‹ค. **์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ ์—ฃ์ง€** - ๊ตฌ์กฐ์  ์—ฐ๊ฒฐ ์—†๋Š” ํŒŒ์ผ ๊ฐ„ ๊ฐœ๋… ๋งํฌ. ์„œ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‘ ํ•จ์ˆ˜, ์ฝ”๋“œ์˜ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•˜๋Š” ๋…ผ๋ฌธ์˜ ๊ฐœ๋… ๋“ฑ. **ํ•˜์ดํผ์—ฃ์ง€** - ์Œ๋ณ„ ์—ฃ์ง€๋กœ๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” 3๊ฐœ ์ด์ƒ ๋…ธ๋“œ์˜ ๊ทธ๋ฃน ๊ด€๊ณ„. ๊ณต์œ  ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค, ์ธ์ฆ ํ๋ฆ„์˜ ๋ชจ๋“  ํ•จ์ˆ˜, ๋…ผ๋ฌธ ์„น์…˜์—์„œ ํ•˜๋‚˜์˜ ์•„์ด๋””์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋… ๋“ฑ. **ํ† ํฐ ๋ฒค์น˜๋งˆํฌ** - ๋งค ์‹คํ–‰ ํ›„ ์ž๋™์œผ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ˜ผํ•ฉ ์ฝ”ํผ์Šค(Karpathy ๋ฆฌํฌ์ง€ํ† ๋ฆฌ + ๋…ผ๋ฌธ + ์ด๋ฏธ์ง€)์—์„œ: ์›๋ณธ ํŒŒ์ผ ๋Œ€๋น„ ์ฟผ๋ฆฌ๋‹น **71.5๋ฐฐ** ์ ์€ ํ† ํฐ. ์ฒซ ์‹คํ–‰์€ ์ถ”์ถœ๊ณผ ๊ทธ๋ž˜ํ”„ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(ํ† ํฐ์ด ์†Œ๋น„๋ฉ๋‹ˆ๋‹ค). ์ดํ›„ ๋ชจ๋“  ์ฟผ๋ฆฌ๋Š” ์›๋ณธ ํŒŒ์ผ ๋Œ€์‹  ์••์ถ•๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค โ€” ์—ฌ๊ธฐ์„œ ์ ˆ์•ฝ์ด ๋ณต๋ฆฌ๋กœ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค. SHA256 ์บ์‹œ๋กœ ์žฌ์‹คํ–‰ ์‹œ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ์žฌ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. **์ž๋™ ๋™๊ธฐํ™”** (`--watch`) - ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŒŒ์ผ ์ €์žฅ ์‹œ ์ฆ‰์‹œ ์žฌ๋นŒ๋“œ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค(AST๋งŒ, LLM ์—†์Œ). ๋ฌธ์„œ/์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ์‹œ์—๋Š” LLM ์žฌ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด `--update` ์‹คํ–‰์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. **Git ํ›…** (`graphify hook install`) - post-commit ๋ฐ post-checkout ํ›…์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ปค๋ฐ‹๊ณผ ๋ธŒ๋žœ์น˜ ์ „ํ™˜ ํ›„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์žฌ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ํ›…์ด 0์ด ์•„๋‹Œ ์ฝ”๋“œ๋กœ ์ข…๋ฃŒํ•˜์—ฌ git์ด ์—๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์กฐ์šฉํžˆ ๊ณ„์† ์ง„ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. **์œ„ํ‚ค** (`--wiki`) - ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ๊ฐ“ ๋…ธ๋“œ๋ณ„ ์œ„ํ‚คํ”ผ๋””์•„ ์Šคํƒ€์ผ ๋งˆํฌ๋‹ค์šด ๋ฌธ์„œ์™€ `index.md` ์ง„์ž…์ . ์–ด๋–ค ์—์ด์ „ํŠธ๋“  `index.md`๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด JSON์„ ํŒŒ์‹ฑํ•˜๋Š” ๋Œ€์‹  ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ์‹ค์ „ ์˜ˆ์ œ | ์ฝ”ํผ์Šค | ํŒŒ์ผ ์ˆ˜ | ์ถ•์†Œ์œจ | ๊ฒฐ๊ณผ | |--------|---------|--------|------| | Karpathy ๋ฆฌํฌ์ง€ํ† ๋ฆฌ + ๋…ผ๋ฌธ 5ํŽธ + ์ด๋ฏธ์ง€ 4์žฅ | 52 | **71.5x** | [`worked/karpathy-repos/`](worked/karpathy-repos/) | | graphify ์†Œ์Šค + Transformer ๋…ผ๋ฌธ | 4 | **5.4x** | [`worked/mixed-corpus/`](worked/mixed-corpus/) | | httpx (ํ•ฉ์„ฑ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) | 6 | ~1x | [`worked/httpx/`](worked/httpx/) | ํ† ํฐ ์ถ•์†Œ๋Š” ์ฝ”ํผ์Šค ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. 6๊ฐœ ํŒŒ์ผ์€ ์–ด์ฐจํ”ผ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ๊ทธ๋ž˜ํ”„์˜ ๊ฐ€์น˜๋Š” ์••์ถ•์ด ์•„๋‹Œ ๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ์— ์žˆ์Šต๋‹ˆ๋‹ค. 52๊ฐœ ํŒŒ์ผ(์ฝ”๋“œ + ๋…ผ๋ฌธ + ์ด๋ฏธ์ง€)์—์„œ๋Š” 71๋ฐฐ ์ด์ƒ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ `worked/` ํด๋”์—๋Š” ์›๋ณธ ์ž…๋ ฅ ํŒŒ์ผ๊ณผ ์‹ค์ œ ์ถœ๋ ฅ(`GRAPH_REPORT.md`, `graph.json`)์ด ์žˆ์–ด ์ง์ ‘ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜์น˜๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ graphify๋Š” ๋ฌธ์„œ, ๋…ผ๋ฌธ, ์ด๋ฏธ์ง€์˜ ์˜๋ฏธ์  ์ถ”์ถœ์„ ์œ„ํ•ด ํŒŒ์ผ ๋‚ด์šฉ์„ AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ์˜ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ API๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค โ€” Anthropic(Claude Code), OpenAI(Codex), ๋˜๋Š” ์‚ฌ์šฉ ์ค‘์ธ ํ”Œ๋žซํผ์˜ ์ œ๊ณต์ž. ์ฝ”๋“œ ํŒŒ์ผ์€ tree-sitter AST๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค โ€” ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ๋‚ด์šฉ์ด ์‚ฌ์šฉ์ž์˜ ๋จธ์‹ ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ, ์‚ฌ์šฉ ์ถ”์ , ๋ถ„์„๋„ ์—†์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์€ ์ถ”์ถœ ์ค‘ ํ”Œ๋žซํผ ๋ชจ๋ธ API์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ฉฐ, ์‚ฌ์šฉ์ž ๋ณธ์ธ์˜ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ## ๊ธฐ์ˆ  ์Šคํƒ NetworkX + Leiden (graspologic) + tree-sitter + vis.js. ์˜๋ฏธ์  ์ถ”์ถœ์€ Claude(Claude Code), GPT-4(Codex), ๋˜๋Š” ํ”Œ๋žซํผ์ด ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋ธ์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Neo4j ๋ถˆํ•„์š”, ์„œ๋ฒ„ ๋ถˆํ•„์š”, ์™„์ „ํžˆ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ## ๋‹ค์Œ ๊ณ„ํš graphify๋Š” ๊ทธ๋ž˜ํ”„ ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ ์œ„์— [Penpax](https://safishamsi.github.io/penpax.ai)๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค โ€” ํšŒ์˜, ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก, ํŒŒ์ผ, ์ด๋ฉ”์ผ, ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์ง€์‹ ๊ทธ๋ž˜ํ”„๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์˜จ๋””๋ฐ”์ด์Šค ๋””์ง€ํ„ธ ํŠธ์œˆ์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์—†์Œ, ๋ฐ์ดํ„ฐ ํ•™์Šต ์—†์Œ. [๋Œ€๊ธฐ ๋ชฉ๋ก์— ๋“ฑ๋กํ•˜์„ธ์š”.](https://safishamsi.github.io/penpax.ai) ## ์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ [![Star History Chart](https://starchart.cc/safishamsi/graphify.svg)](https://starchart.cc/safishamsi/graphify)
๊ธฐ์—ฌํ•˜๊ธฐ **์‹ค์ „ ์˜ˆ์ œ**๋Š” ๊ฐ€์žฅ ์‹ ๋ขฐ๋ฅผ ์Œ“๋Š” ๊ธฐ์—ฌ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์ฝ”ํผ์Šค์—์„œ `/graphify`๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ `worked/{slug}/`์— ์ €์žฅํ•˜๊ณ , ๊ทธ๋ž˜ํ”„๊ฐ€ ๋งž๊ฒŒ ํŒŒ์•…ํ•œ ๊ฒƒ๊ณผ ํ‹€๋ฆฐ ๊ฒƒ์„ ํ‰๊ฐ€ํ•˜๋Š” ์†”์งํ•œ `review.md`๋ฅผ ์ž‘์„ฑํ•˜์—ฌ PR์„ ์ œ์ถœํ•˜์„ธ์š”. **์ถ”์ถœ ๋ฒ„๊ทธ** - ์ž…๋ ฅ ํŒŒ์ผ, ์บ์‹œ ์—”ํŠธ๋ฆฌ(`graphify-out/cache/`), ๊ทธ๋ฆฌ๊ณ  ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ๋‚ ์กฐ๋œ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ์ด์Šˆ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”. ๋ชจ๋“ˆ ์ฑ…์ž„๊ณผ ์–ธ์–ด ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์€ [ARCHITECTURE.md](ARCHITECTURE.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.