BETAER_
← Work
2026
RustTree-sitterSQLitefastembed

amdb

로컬 코드베이스를 스캔해 LLM용 압축 컨텍스트 마크다운을 생성하는 고성능 CLI. 임베딩까지 완전 로컬로 처리해 코드가 단 한 줄도 외부로 나가지 않는다.

amdb 썸네일

문제

Cursor, Claude 같은 AI 코딩 어시스턴트는 지금 열려 있는 파일만 본다. 코드베이스 전체 구조 — 어떤 심볼이 어디서 정의되고 누가 그것을 호출하는지 — 를 모른 채 답을 만든다. 이를 해결하는 기존 대안들은 코드베이스를 클라우드로 전송해 인덱싱한다. 클라우드 인덱싱이 금지된 보안 민감 환경에서는 선택지가 아니다.

amdb는 이 전제를 뒤집는다. 스캔, 심볼 추출, 벡터 임베딩까지 전 과정이 로컬 머신에서 끝난다.

설계

파이프라인은 init 한 번, generate 반복이다.

  • amdb init: 코드베이스를 스캔해 Tree-sitter로 AST를 파싱하고 심볼을 추출한다. 지원 언어는 Rust, Python, JavaScript, TypeScript, C, C++, C#, Go, Java, Ruby, PHP, HTML, CSS, JSON, Bash 16종. 추출된 심볼과 관계는 SQLite(rusqlite)에 저장하고, fastembed로 로컬 벡터 임베딩을 만들어 벡터 DB를 구축한다. 파일 단위 작업은 rayon으로 병렬화했다.
  • amdb generate: 저장된 심볼·관계·벡터를 조합해 LLM에 붙여넣을 압축 컨텍스트 마크다운을 생성한다.
  • amdb daemon: 파일 변경을 실시간 감시해 DB를 증분 업데이트한다. 저장할 때마다 다시 init을 돌릴 필요가 없다.

설치는 crates.io 한 줄이면 된다. GitHub Releases 바이너리와 Docker 이미지(ghcr.io)로도 배포한다.

cargo install amdb

핵심 구현

focus 모드 — 하이브리드 검색

--focus에 자연어 질의를 주면 관련 심볼만 골라 컨텍스트를 좁힌다. 검색은 두 단계다: 심볼 이름 exact match를 먼저 시도하고, 없으면 fastembed 벡터 유사도 검색으로 넘어간다. 식별자를 정확히 알면 정확하게, 개념만 알면 의미로 찾는다.

amdb generate --focus "login authentication jwt"

call graph depth 제어

focus로 잡은 심볼에서 호출 그래프를 몇 단계까지 따라갈지 --depth로 제어한다. --depth 0은 매칭된 심볼 자체만, 값을 올리면 호출하고 호출되는 이웃 심볼까지 컨텍스트에 포함한다.

amdb generate --focus "authenticate" --depth 0
amdb generate --focus "authenticate" --depth 1
amdb generate --focus "authenticate" --depth 2

daemon — 증분 업데이트

amdb daemon

tokio 기반 데몬이 파일 시스템 이벤트를 감시하다가 변경된 파일만 다시 파싱해 SQLite와 벡터 인덱스를 갱신한다.

결과

v0.3.0 기준, amdb 자신의 Rust 모듈 30개를 대상으로 한 자기분석 벤치마크(tiktoken cl100k_base 토크나이저):

  • 컨텍스트 토큰 91.5% 절감
  • 핵심 파일 94.2% 압축 (11~18배)
  • 파일 검색 정밀도 96.7%
  • LLM API 토큰 비용 약 12배 절감

현재 버전은 0.7.0, 라이선스는 MIT다.