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단계 그래프 구축

  1. 파일 요약 – 각 소스 파일은 짧은 영어 설명을 생성하기 위해 LLM(선택 사항)에 한 번 전달됩니다.
  2. 노드 집계 – 요약본은 타입이 지정된 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
  • 프로젝트