최근 일주일 동안 graphify에 대한 글들이 제 타임라인을 가득 채웠습니다. GitHub 스타가 126k개를 넘어섰고, Y Combinator에 선정되었으며 Vercel Marketplace에도 등장했습니다. 핵심 아이디어는 간단합니다. Claude Code, Codex 또는 Cursor에서 /graphify를 입력하면, 에이전트가 파일을 하나씩 읽는 대신 코드의 그래프(graph)를 쿼리하게 됩니다.
'토큰을 절약한다'는 주장은 쉽게 할 수 있지만 검증하기는 어려운 주장입니다. 그래서 저는 일반 리눅스 박스에 설치해보고 실제 저장소(repo)를 연결해 보았습니다. 클라우드 체험판도, API 키도 사용하지 않았습니다. 실제로 어떤 일이 벌어졌는지 알려드리겠습니다.
graphify가 실제로 무엇인가요
graphify는 오픈 소스 (Apache-2.0) Python CLI와 에이전트 스킬로 구성되어 있습니다. 이 도구는 tree-sitter를 사용해 프로젝트를 파싱하고, graphify-out/ 폴더에 세 가지 파일을 작성합니다:
graph.html: 브라우저에서 열 수 있는 인터랙티브 포스 디렉티드 그래프(force-directed graph)
GRAPH_REPORT.md: 'god nodes', 커뮤니티, 그리고 흥미로운 연결 관계를 요약한 보고서
graph.json: 에이전트가 explain, path, query 등을 통해 쿼리할 수 있는 전체 그래프
코드 추출은 결정론적(deterministic)이며 로컬에서 이루어집니다. LLM(Large Language Model)은 문서(docs), PDF, 이미지, 비디오에 대해서만 관여하며, 커뮤니티 이름을 지정하는 경우에도 백엔드를 구성했을 때만 작동합니다.
설정 방법
제가 테스트한 박스는 Python 3이 설치된 Debian 13입니다. PyPI 패키지 이름에는 'y'가 두 개 들어갑니다:
python3 -m venv venv
venv/bin/pip install graphifyy # installed 0.9.92
git clone --depth 1 https://github.com/encode/httpx testbed/httpx
테스트용 저장소로는 httpx를 선택했습니다. 이는 약 17,750줄의 Python 코드와 문서 및 변경 로그가 있는 실제적이고 잘 알려진 Python HTTP 클라이언트입니다. 흥미로울 만큼 충분히 크고, 제가 대략적인 정답이 무엇인지 알 수 있을 만큼 작습니다.
그래프 구축: 2초 만에, 토큰 0개 소비
코드만으로 그래프를 구축할 때는 어시스턴트가 필요하지 않습니다. update 명령을 CLI에서 바로 실행하면 됩니다:
cd testbed/httpx
graphify update .
Re-extracting code files in . (no LLM needed)...
AST extraction: 101/101 uncached files (100%) [8 workers]
[graphify watch] Rebuilt: 2233 nodes, 4453 edges, 166 communities
새 빌드는 2.1초가 걸렸습니다. 파일을 하나 수정하자 증분 재빌드(incremental rebuild)는 해당 파일만 다시 구문 분석하여 1.6초가 걸렸습니다. 보고서 자체의 푸터에는 '토큰 비용: 입력 0 · 출력 0'라고 적혀 있습니다.
출력물이 작지 않습니다. graph.json은 1.7MB, graph.html은 1.9MB이고 GRAPH_REPORT.md는 24KB입니다. 마크다운 문서도 구조로 포함되었기 때문에 CHANGELOG.md와 docs/api.md가 노드(nodes)로 나타납니다.
graph.html for httpx
보고서가 잘한 점
'신(god) 노드' 목록은 새로운 기여자에게 정말 좋은 첫 페이지입니다:
1. Response - 170 edges
2. Request - 111 edges
3. Changelog - 79 edges
...
이것이 httpx의 실제 핵심입니다. 엣지(edges)의 88%는 EXTRACTED(소스에서 직접 읽음)였고, 12%는 INFERRED였으며, 평균 신뢰도는 0.91이었습니다. 모든 엣지에 이 태그가 붙어 있다는 점이 마음에 드는데, 어떤 것을 신뢰해야 하는지 알려주기 때문입니다.
'흥미로운 연결(Surprising connections)'은 그다지 유용하지 않았습니다. 모든 항목이 Client에 연결된 변경 로그나 문서 제목이었는데, 이는 사실이지만 놀랍지는 않았습니다.
쿼리: 토큰 절약이 발생하는 지점
이것이 에이전트가 실제로 실행하는 것입니다. 저는 tiktoken의 cl100k 인코딩을 사용하여 모든 출력을 계산했습니다:
graphify explain
- `explain`을 `Client`에 사용했을 때 628 토큰이 소모되었습니다. 이 명령어는 파일과 라인 번호를 포함하여 69개의 연결 관계를 나열했는데, 예시로 `--> HTTPTransport [사용함] [추론됨] httpx/_client.py:L731`와 같았습니다. 실제로 `_client.py` 파일을 읽는 것만으로도 13,659 토큰이 소모됩니다.
- `path`는 단일 라인에서 3단계(3-hop) 체인을 반환했습니다: `Client <-포함함- _client.py -가져옴--> _auth.py -포함함-> DigestAuth`.
- `query`에는 1,728 토큰이 소모되었습니다. 이 명령어는 BFS(Breadth-First Search)를 실행하여 536개의 노드를 찾았지만 82개만 보여주었고, 모든 내용을 보려면 `--budget`을 14720으로 높여야 한다는 명확한 `TRUNCATED` 경고 메시지를 출력했습니다.
[](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fscyi5wcg80tgcrziy138.png)
따라서
제 컴퓨터에서 1.7B 모델을 CPU로 사용했을 때, 이 과정은 끝나지 않고 11분 이상 걸렸고 결국 중단했습니다. 코드 그래프는 이 단계를 전혀 필요로 하지 않지만, 보기 좋은 레이블이 필요하다면 실제 모델이나 API 키를 제공해야 합니다. 저는 [Anatomy의 스킬을 1.7B 로컬 모델에서 실행했을 때](https://medium.com/@ishank.iandroid/i-ran-anatomys-anatomy-skill-on-a-1-7b-local-model-the-kit-passed-every-check-the-figure-was-738-8bdb8bd58cfd)를 실행했을 때도 비슷한 소형 모델 제한을 목격했습니다.
## 설치할 가치가 있는가?
코드의 경우, 그렇습니다. 무료이고 로컬에서 작동하며 빠르며, `explain`/`path`는 에이전트가 파일을 열기 전에 저렴한 지도를 제공합니다. 저는 `graphify update .`를 git hook에 추가하여 에이전트가 먼저 그래프를 사용하도록 할 것입니다.
제가 테스트하지 않은 것들: 유료 어시스턴트 내부의 `/graphify` 스킬, PDF 및 이미지에 대한 의미론적(semantic) 통과 과정, 그리고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18