Graft
무엇인가
Graft는 코딩 에이전트에 코드베이스 맥락을 공급하는 CLI다. 에이전트가 세션마다 저장소를 처음부터 다시 탐색하는 비용을 없애기 위해, 코드 구조와 개념을 미리 문서화한 그래프를 저장소 안에 두고 프롬프트에 주입하거나 도구 호출로 읽게 한다. 코드 검색·인덱싱 계층에 해당하며 에이전트 자체를 대체하지 않는다.
어떻게 동작하나
`graft build`가 tree-sitter로 소스를 파싱해 시스템·API·개념 단위의 노드를 만들고, 노드끼리 링크로 연결한 마크다운 파일 묶음 `graft/`로 저장한다. 각 노드 본문은 해당 부분이 무엇을 하고 어떻게 연결되는지를 자연어로 쓴 설명이다. 임베딩이나 벡터 인덱스는 쓰지 않는다. 질의 시점마다 작업 트리를 기준으로 그래프를 먼저 재구성하며, 변경이 없으면 약 3ms에 끝난다. `graft check`가 그래프 신선도를 알려준다.
무엇과 다른가
벡터 유사도 검색 기반 RAG와 달리 상시 유지해야 할 검색 인덱스가 없다. 그래프는 에이전트가 다른 파일처럼 열고 grep하고 링크를 따라가는 평범한 파일 집합이다. `graft/`는 `.gitignore`에 자동 등록되는 로컬 캐시이고, 커밋되는 것은 `graft init`이 `.claude/`, `AGENTS.md`, MCP 설정에 남긴 배선뿐이다. 팀원은 각자 `graft build`로 자기 그래프를 생성한다.
어떻게 쓰나
`graft init`이 연동할 에이전트를 묻고 `graft/`를 만든 뒤 `.claude/`에 상태라인과 훅을 넣는다. `--dry-run`으로 건드릴 파일을 먼저 확인하고, `--agents claude`로 프롬프트를 건너뛴다. 전역 설치 없이 `npx @nanonets/graft init`도 동일하게 동작한다. MCP 서버로 노출되어 에이전트가 `graft_find_code`, `graft_file_api` 같은 도구를 호출할 수 있고, `graft ask --source`는 관련 노드를 묶어 프롬프트에 밀어 넣는다. CLI에는 `grep`, `map`, `callers`, `skeleton`, `viz`가 있다.
전제와 한계
노드 요약 생성에는 사용자 자신의 LLM 제공자 키가 필요하며 OpenAI, Anthropic, OpenRouter, Fireworks, Groq, OrcaRouter, LiteLLM 프록시, 로컬 모델 중에서 고른다. 구조 그래프 생성과 `check`는 결정적 tree-sitter 처리로 모델을 호출하지 않는다. 데몬·서버·데이터베이스는 없다. 지원 언어는 README의 Supported languages 절에 열거되어 있다.
유사 도구
- graphify코드베이스와 문서·SQL·PDF를 tree-sitter AST로 파싱해 질의 가능한 지식 그래프로 바꾸는 CLI다. 임베딩 없이 그래프를 순회하며 모든 엣지에 출처 태그를 붙인다.
- code-graph-ragTree-sitter로 모노레포를 파싱해 Memgraph 지식 그래프를 만들고, 자연어로 코드를 질의·편집·최적화하는 Python CLI다.
- Empryo코드베이스를 tree-sitter로 심볼 그래프로 파싱해 두고, 문자열 패치 대신 AST 연산으로 코드를 고치는 데스크톱 AI 코딩 에이전트다.
- byterover-cli프로젝트 지식을 컨텍스트 트리로 큐레이션해 AI 코딩 에이전트에 영구 기억으로 붙이는 TypeScript CLI다. git식 버전 관리와 클라우드 동기화를 쓴다.
- teamai-cli팀의 스킬·규칙·MCP 설정·지식을 하나의 git 저장소에 모아 Claude Code, Codex, Cursor 등 여러 AI 에이전트에 배포하고 회수하는 TypeScript CLI다.
- eko자연어 지시를 의존성 그래프로 계획해 브라우저와 Node.js에서 멀티 에이전트로 실행하는 TypeScript 프레임워크다. MCP 서버를 도구로 붙이고 실행을 일시정지·재개한다.