Graft: 오픈 소스 컨텍스트 레이어가 Claude Code의 토큰 사용량을 42% 절감하고 SWE-bench 정확도를 높이다
TL;DR
Graft는 에이전트가 저장소를 반복적으로 grep하는 대신 쿼리할 수 있는 지속적인 마크다운 기반 코드 그래프를 구축합니다. 이를 통해 Claude Code의 토큰 사용량을 42% 절감하고, 도구 호출을 46% 줄이며, 실행 속도를 60% 향상시키고, SWE-bench 정확도를 54%에서 66%로 높입니다.
Graft의 주장
- 효율성 향상 – 통제된 162회 실행 벤치마크에서 Graft는 매 작업마다 저장소를 다시 탐색하는 "cold" Claude Code 세션과 비교했을 때 토큰 42%, 도구 호출 46%, 지연 시간 60%를 절감했습니다.
- 정확도 개선 – 업계 표준인 SWE-bench Verified 세트(50개의 실제 GitHub 이슈)에서 Graft는 베이스라인의 27건 대비 33건을 해결하여 12포인트 상승했습니다.
- 비용 절감 – 동일한 벤치마크에서 실제 소요 시간(wall-clock time)이 32% 감소하고 금전적 비용이 19% 절감됨을 보여줍니다.
- 언어 지원 – TypeScript/JavaScript, Python, Go, Java에 대한 고정밀 파싱을 지원하며, 20개 이상의 추가 언어에 대해 더 넓은 tree-sitter 지원을 제공합니다. Rust, C/C++ 등을 위한 선택적 LSP 기반 에지는 별도로 제공됩니다.
- 런타임 오버헤드 제로 – 구조적 그래프(
graft build)는 API 키 없이 로컬에서 실행됩니다. 선택 사항인 LLM 요약(--deep)만 제공업체와 통신합니다.
Graft의 작동 원리
2단계 그래프 구축
- 파일 요약 – 각 소스 파일은 짧은 영어 설명을 생성하기 위해 LLM(선택 사항)에 한 번 전달됩니다.
- 노드 집계 – 요약본은 타입이 지정된 wikilinks(
[[node]])를 가진 정제된 마크다운 노드 세트(서브 시스템, 주요 파일, 개념)로 그룹화됩니다.
결과물인 graft/ 디렉토리는 코드와 함께 존재하며 Git에 커밋할 수 있는 일반 파일 캐시입니다.
노드 콘텐츠
| 부분 | 설명 |
|---|---|
| Summary | LLM에 의해 생성되고 캐시된, 코드의 목적에 대한 한 문장 영어 설명. |
| Crux | 핵심 로직을 구현하는 최소한의 소스 라인 세트, 원문 그대로 저장됨. |
| Sources | 노드를 뒷받침하는 파일 경로 및 콘텐츠 해시로, 정확한 stale-check 탐지를 가능하게 함. |
| Links | [[wikilinks]]로 표현된 타입화된 관계(depends_on, part_of, uses 등). |
| Notes | 재생성 시에도 유지되는 사용자 작성 자유 텍스트. |
증분 새로고침
- 그래프 재구축은 콘텐츠 해시에 의해 캐시됩니다. 변경된 파일만 LLM 호출을 트리거합니다.
- 가벼운
$0구조적 새로고침이 모든graft ask/grep/callers명령 전에 실행되어, 네트워크 호출 없이 그래프가 커밋되지 않은 편집 사항을 반영하도록 보장합니다.
코딩 에이전트와의 통합
- **
graft init**는 지원되는 에이전트(Claude Code, Cursor, Gemini, Codex, Copilot 등)를 감지하고 필요한 지침 또는 스킬 파일을 작성합니다. Claude Code는 라이브 상태 라인, 자동 동기화 훅, 일치하는 노드의 세션별 임포트를 받습니다. - MCP 서버 – 에이전트가 직접 호출할 수 있는 6개의 도구 엔드포인트(
graft_find_code,graft_file_api,graft_trace_calls,graft_find_all,graft_repo_map,graft_check_freshness)를 등록합니다. - 데몬 없음 – 그래프는 일반 파일로 존재합니다. 사용자가 선택적으로 MCP 서버를 사용하지 않는 한 백그라운드 서비스가 필요하지 않습니다.
벤치마크
통제된 162회 실행 스윕
| 지표 | Cold Claude Code | Claude Code + Graft |
|---|---|---|
| 비용 절감 ($) | 0.0429 | 0.0292 (+32%) |
| 토큰 절감 | 8,070 | 4,650 (+42%) |
| 도구 호출 절감 | 4.2 | 2.3 (+46%) |
| 지연 시간 (s) | 39.8 | 15.8 (+60%) |
| 정확도 | 93% | 93% |
"pull" 방식(필요할 때 graft 도구 사용)은 가장 높은 정확도(98%)를 달성했지만 속도 이점의 대부분을 희생했습니다.
SWE-bench Verified (50개 실제 이슈)
| 지표 | Cold Claude Code | Claude Code + Graft |
|---|---|---|
| 정확도 | 27/50 (54%) | 33/50 (66%) |
| 토큰 절감 | 142 M | 109.4 M (+23%) |
| 비용 절감 | $52.34 | $42.43 (+19%) |
| 도구 호출 절감 | 1,370 | 1,031 (+25%) |
| 실제 소요 시간 | 13,094 s | 8,922 s (+32%) |
정확도 향상은 더 나은 파일 간 추론에서 비롯됩니다. 베이스라인은 종종 단일 파일만 패치하고 의존성 파일을 놓쳤습니다.
Hacker News의 커뮤니티 피드백
@seizethecheese – “The benchmark section reads like it was written by Claude/Codex; the 50‑task SWE‑bench sample is small and the p‑value (0.22) is weak. It’s easy to cherry‑pick tasks.”
이 댓글은 게시된 결과가 제한된 샘플과 단일 실행을 기반으로 하고 있어 통계적 신뢰도가 낮음을 지적합니다.
@icodestuff – “I worry about stale graphs over long sessions. Incremental refreshes may drift silently, and merge conflicts in
graft/could be painful.”
이는 실질적인 위험을 지적합니다. 장기간 실행되는 세션은 오래된 요약에 의존할 수 있으며, 여러 개발자가 동일한 개념을 편집할 때 버전 관리 충돌이 발생할 수 있습니다.
@xhrpost – “Does Claude’s LSP integration already reduce grep usage? Is Graft solving a duplicate problem?”
이 질문은 Graft의 가치 제안이 독특함을 명확히 합니다. Graft는 일회성 LSP 기반 심볼 조회가 아닌, 지속적이고 사람이 읽을 수 있는 지식 그래프를 제공합니다.
@gabosarmiento – “What’s the benchmark against Graphify?”
저장소에 직접적인 비교는 제공되지 않았으며, 해당 주장은 검증되지 않은 상태로 남아 있습니다.
전반적으로 댓글 작성자들은 아이디어는 좋게 평가하지만, 더 엄격하고 대규모인 평가와 충돌 해결을 위한 도구를 요구하고 있습니다.
실질적 사용법
빠른 시작 (npm)
npm install -g @nanonets/graft # CLI 설치
graft init # 에이전트 선택, `graft/` 구축, Claude Code 연결
graft init --dry-run은 작성될 파일을 보여줍니다.graft build는 LLM 호출 없이 그래프를 생성합니다;graft build --deep은 LLM 생성 요약을 추가합니다 (API 키 필요).
핵심 CLI 명령
| 명령 | 목적 |
|---|---|
graft ask "<task>" |
자연어 쿼리에 답하는 노드 순위 지정 (LLM 불필요). |
graft grep "<regex>" |
포함된 심볼별로 그룹화된 철저한 regex 검색. |
graft map |
토큰 예산이 할당된 저장소 오리엔테이션 (디렉토리 클러스터, 허브, 핫스팟). |
graft callers <symbol> |
심볼에 대한 인바운드/아웃바운드 호출 그래프 표시. |
graft viz |
마크다운 및 코드 그래프의 대화형 웹 뷰어 실행. |
모든 명령은 자동 구조 업데이트를 건너뛰기 위해 --no-refresh를 허용하며, 환경 변수 GRAFT_NO_REFRESH=1으로 전역적으로 비활성화할 수 있습니다.
한계 및 미해결 과제
- 통계적 견고성 – 벤치마크는 162회 실행 및 50개의 SWE-bench 인스턴스를 기반으로 합니다. 더 큰 규모의 다중 시드 연구가 주장을 강화할 수 있을 것입니다.
- 그래프 노후화 – 증분 새로고침은 구조적이기만 합니다. 재구축 없이 소스 코드가 변경되면 LLM 생성 요약이 최신 상태를 유지하지 못할 수 있습니다.
- 병합 충돌 –
graft/는 저장소 내에 존재합니다. 동일한 노드에 대한 동시 편집은 수동 해결이 필요한 Git 충돌을 일으킬 수 있습니다. - 비교 베이스라인 – 다른 코드 그래프 도구(예: Graphify, Repowise)와의 공개적인 비교는 제공되지 않았습니다.
결론
Graft는 결정론적이고 마크다운 기반인 코드 그래프가 SWE-bench에서의 실제 정확도를 향상시키면서 LLM 기반 코딩 에이전트의 토큰 및 도구 호출 오버헤드를 획기적으로 줄일 수 있음을 보여줍니다. 이 접근 방식은 데몬이 필요 없고, 모든 LLM 제공업체와 작동하며, 단순한 CLI를 통해 여러 에이전트와 통합될 수 있다는 점에서 매력적입니다. 하지만 현재의 증거는 적절한 규모의 벤치마크에 기반하고 있으며, 생성된 지식 그래프의 장기적인 안정성은 여전히 해결해야 할 과제로 남아 있습니다.
Sources
관련
- 프로젝트
- Dispatch
- 프로젝트
- Dispatch
- 프로젝트