elara-labs/code-context-engine
요약
elara-labs의 Code Context Engine(CCE)은 코드베이스를 인덱싱하여 AI 에이전트가 파일을 직접 읽는 대신 검색을 통해 컨텍스트를 파악하도록 돕는 도구입니다. 이를 통해 Claude Code 사용 시 입력 토큰을 최대 94% 절감하며, 로컬 처리를 통해 보안을 유지하고 멀티 에디터 환경에서 일관된 인덱스를 제공합니다.
핵심 포인트
- Claude Code 등 AI 에이전트의 입력 토큰 사용량을 최대 94% 절감하여 비용 효율성 증대
- 모든 인덱싱 프로세스가 로컬에서 수행되어 코드 보안 및 프라이버시 보장
- Cursor, VS Code, Gemini CLI 등 다양한 에디터와 에이전트 간 공유 가능한 단일 인덱스 지원
- Ollama를 활용한 로컬 임베딩 지원 및 세션 간 컨텍스트 유지 기능 제공
코드베이스를 인덱싱하세요. 파일을 다시 읽는 대신 AI가 검색합니다. 94%의 토큰 (token) 절감, 재현 가능한 벤치마크 (benchmark) 완료.
웹사이트 · 가이드 · 벤치마크 · GitHub
Python 3.11+ · macOS · Linux · Windows
단 한 번의 명령. 에디터 자동 감지. 클라우드 없음, 설정 불필요.
| 사용 사례 | CCE의 도움 | |
|---|---||
| 💰 | Claude Code 비용 절감 | 세션당 입력 토큰 (input tokens) 94% 감소 |
| 🔒 | 코드 보안 유지 | 모든 것이 로컬 (local)에서 처리되며, 클라우드 인덱싱 없음 |
| 🔄 | 멀티 에디터 팀 | Claude Code, Cursor, VS Code, Gemini CLI 전반에 걸쳐 하나의 인덱스 사용 |
| 🧠 | 세션 간 메모리 (memory) | 결정 사항과 컨텍스트 (context)가 재시작 후에도 유지됨 |
| ⚡ | 더 빠른 응답 | 컨텍스트 (context) 감소 = 더 빠른 Claude 답변 |
| 📊 | 실제 절감액 추적 | 추정치가 아닌 실제 달러 금액 |
uv tool install "code-context-engine[local]" # 또는: pipx install "code-context-engine[local]"
cd /path/to/your/project
cce init # 또는: cce init --agent all
끝입니다. 이제 당신의 AI 코딩 에이전트 (AI coding agent)는 전체 파일을 읽는 대신 인덱스 (index)를 검색합니다.
이미 Ollama를 사용 중인가요? [local]을 건너뛰고 대신 uv tool install code-context-engine을 사용할 수 있습니다. CCE는 localhost:11434에서 Ollama를 자동으로 감지하고 nomic-embed-text를 사용합니다.
- Python 3.11+ (3.11, 3.12, 3.13에서 테스트됨)
- C 컴파일러 (C compiler) 및
cmake(tree-sitter 문법 빌드에 필요)
| 플랫폼 | 설정 |
|---|---|
| macOS | xcode-select --install (컴파일러 및 cmake 제공) |
| Ubuntu/Debian | sudo apt install build-essential cmake |
| Fedora/RHEL | sudo dnf install gcc gcc-c++ cmake |
| Windows | Visual Studio Build Tools (C++ 워크로드) 및 CMake 설치 |
CI(macOS, Linux, Windows × Python 3.11/3.12/3.13)를 통해 세 플랫폼 모두에서 테스트되었습니다.
코드를 인덱싱하려면 임베딩 백엔드 (embedding backend)가 필요합니다. 하나를 선택하세요:
| 옵션 | 설치 명령 | 크기 | 요구 사항 |
|---|---|---|---|
| 로컬 (권장) | uv tool install "code-context-engine[local]" | +60 MB | 추가 사항 없음 |
| Ollama | uv tool install code-context-engine | 코어 전용 | Ollama 실행 중 + nomic-embed-text 다운로드 완료 |
그 다음:
cd /path/to/your/project
cce init # 인덱스(index) 생성, 훅(hooks) 설치, MCP 서버 등록
에디터를 재시작하세요. 완료되었습니다. 이제 모든 질문은 파일을 다시 읽는 대신 인덱스(index)를 참조합니다.
cce init은 에디터를 자동 감지하여 적절한 설정(config)을 작성합니다. 특정 에이전트(agent)를 대상으로 하려면 --agent claude, --agent codex, --agent copilot 또는 --agent all을 사용하세요.
| 에디터 (Editor) | 작성된 설정 (Config written) | 지침 (Instructions) |
|---|---|---|
| Claude Code | .mcp.json | CLAUDE.md |
| VS Code / Copilot | .vscode/mcp.json | .github/copilot-instructions.md |
| Cursor | .cursor/mcp.json | .cursorrules |
| Gemini CLI | .gemini/settings.json | GEMINI.md |
| OpenAI Codex | ~/.codex/config.toml (사용자 전역, 프로젝트별 섹션) | AGENTS.md |
| OpenCode | opencode.json | |
| Tabnine | .tabnine/agent/settings.json | TABNINE.md |
동일한 프로젝트에 여러 에디터를 사용하시나요? 한 번의 명령으로 모두 설정됩니다.
Codex 참고 사항: Codex CLI는 ~/.codex/config.toml에서만 MCP 서버를 읽습니다. 즉, 프로젝트별 설정이 없습니다. cce init은 프로젝트마다 하나의 [mcp_servers.cce-<project>-<hash>] 섹션을 추가하여 여러 프로젝트가 공존할 수 있게 하며, cce uninstall은 현재 프로젝트에 해당하는 섹션만 제거합니다.
my-project · 38 queries
⛁ ⛁ ⛁ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ 94% tokens saved
Without CCE 48.0k tokens $0.14
...
입력 토큰(Input tokens)은 Claude Code 비용의 85-95%를 차지합니다. CCE는 이를 94% 절감합니다 (FastAPI 기준 벤치마크).
Without CCE: Claude가 payments.py + shipping.py를 읽음 = 45,000 tokens
With CCE: context_search "payment flow" = 800 tokens
| CCE 미사용 (Without CCE) | CCE 사용 (With CCE) |
|---|---|
| 세션 시작 시 (Session startup) | 매번 파일을 다시 읽음 |
| ... | ... |
우리는 20개의 실제 코딩 질문을 사용하여 FastAPI(소스 파일 53개, 180K 토큰)를 대상으로 CCE를 벤치마크했습니다. 유리한 데이터만 선택(cherry-picking)하거나 합성된 쿼리(synthetic queries)를 사용하지 않았습니다.
방법론 (Methodology): 각 쿼리에 대해, "CCE 미사용"은 쿼리가 접촉하는 모든 파일의 전체 내용을 읽는 것을 의미합니다. "CCE 사용"은 압축 후의 관련 청크(chunks)를 사용하는 것을 의미합니다.
중요한 베이스라인 참고 사항: 94%라는 수치는 Claude Code가 실제로 수행하는 방식이 아니라, 전체 파일 읽기 (full-file reads)를 기준으로 측정되었습니다. 실제로 Claude Code는 이미 grep, 부분 파일 읽기 (partial file reads), 그리고 타겟팅된 도구들을 사용하고 있으므로, 일반적인 Claude Code 동작과 비교했을 때의 실제 절감률은 94%보다 낮을 것입니다. 전체 파일 읽기를 베이스라인으로 사용하는 이유는 그것이 재현 가능하고 결정론적(deterministic)이기 때문입니다 (에이전트 동작의 가변성이 없음). 이 벤치마크는 Claude Code의 내장 탐색 기능과의 직접적인 비교가 아니라, CCE의 검색 효율성 (retrieval efficiency)을 측정합니다.
| 지표 (Metric) | 결과 (Result) |
|---|---|
| 검색 절감률 (Retrieval savings) | 94% (83,681 → 4,927 tokens/query) |
| 압축 (추가적, 검색된 청크에 적용) | 89% (4,927 → 523 tokens/query) |
| Recall@10 (올바른 파일을 찾음) | 0.90 |
| 지연 시간 (Latency) p50 | 0.4ms |
| 테스트된 쿼리 수 (Queries tested) | 20 |
| 계층 (Layer) | 역할 (What it does) | 절감률 (Savings) | 방법 (Method) |
|---|---|---|---|
| 검색 (Retrieval) | 전체 파일 → 관련 코드 청크 (relevant code chunks) | 94% | 측정됨 (measured) |
| 청크 압축 (Chunk Compression) | 원시 청크 (Raw chunks) → 시그니처 + 독스트링 (signatures + docstrings) | 89% | 측정됨 (measured) |
| 문법 (Grammar) | 메모리 텍스트에서 관사/불필요한 단어 제거 | 13% | 측정됨 (measured) |
출력 압축 (Claude의 답변 길이를 줄임)은 추가적인 절감 효과(약 65% 추정)를 제공하지만, 위의 헤드라인 수치에는 포함되지 않았습니다.
| 리포지토리 (Repo) | 언어 (Language) | 파일 수 (Files) | 검색 절감률 (Retrieval savings) | Recall@10 |
|---|---|---|---|---|
| FastAPI | Python | 53 | 94% | 0.90 |
| chi | Go | 94 | 76% | 0.67 |
| fiber | Go (monorepo) | 396 | 93% | 0.07 |
Go의 짧은 파일들은 검색 여유 공간(retrieval headroom, 더 작은 베이스라인)을 줄입니다. 모노레포(Monorepos)는 top-10에서의 재현율(recall)을 희석시킵니다 (fiber). 파일당 하나의 기능이 있는 미들웨어 쿼리는 일관되게 R=1.00을 기록합니다.
직접 재현해 보세요:
pip install code-context-engine
python benchmarks/run_benchmark.py --repo https://github.com/fastapi/fastapi.git --source-dir fastapi
python benchmarks/run_benchmark.py --repo https://github.com/go-chi/chi.git --source-dir .
전체 결과는 benchmarks/results/에서 확인할 수 있습니다.
쿼리 및 방법론은 benchmarks/에 있습니다.
Claude가 자동으로 사용하는 9개의 MCP 도구:
| 도구 (Tool) | 기능 |
|---|---|
context_search | 그래프 확장 (graph expansion)을 포함한 하이브리드 벡터 (Hybrid vector) + BM25 검색 |
expand_chunk | 압축된 결과에 대한 전체 소스 제공 |
related_context | 그래프 엣지 (calls, imports)를 통해 코드 탐색 |
session_recall | 이전 세션의 결정 사항 회상 |
record_decision | 향후 세션을 위해 결정 사항 저장 |
record_code_area | 작업한 파일 기록 |
index_status | 인덱스 최신 상태 확인 |
reindex | 파일 또는 전체 프로젝트 재인덱싱 |
set_output_compression | 응답의 상세도 조절 (off / lite / standard / max) |
도넛 차트, 파일 상태, 세션 기록을 포함한 라이브 대시보드 (Live dashboard):
cce dashboard
Anthropic의 실시간 가격 책정에서 가져온 예상 비용 (Dollar estimates):
cce savings --all # 모든 프로젝트에 걸친 절감액 확인
CCE는 에디터에 구애받지 않고 (editor-agnostic), 로컬 우선 (local-first) 방식을 따르며, 측정 가능한 토큰 절감 효과를 제공합니다. 코드는 절대 사용자의 기기를 떠나지 않습니다. 내장된 인덱싱 방식 (Cursor, Continue)과 달리, CCE는 단일 인덱스로 Claude Code, VS Code, Cursor, Gemini CLI, Codex 전반에서 작동합니다. 클라우드 도구 (Greptile)와 달리 무료이며 프라이버시가 보장됩니다.
트레이드오프 (trade-offs)를 정직하게 살펴보기 위해 대안들과의 전체 비교를 확인하세요.
인덱스 (Index): Tree-sitter가 코드를 의미론적 청크 (semantic chunks: 함수, 클래스, 모듈)로 파싱합니다. 벡터 임베딩 (vector embeddings) 형태로 로컬에 저장됩니다. 검색 (Search): Claude가 context_search를 호출합니다. 하이브리드 벡터 + BM25 검색을 통해 적절한 청크를 찾아냅니다. 코드 그래프 (Code graph)가 관련 파일을 자동으로 추가합니다. 압축 (Compress): 청크는 시그니처 + 독스트링 (signatures + docstrings)으로 잘립니다 (Ollama가 실행 중인 경우 LLM이 요약합니다). 기억 (Remember): 결정 사항과 코드 영역은 session_recall을 통해 세션 간에 유지됩니다. 추적 (Track): 모든 쿼리는 로그로 기록됩니다. cce savings는 정확히 얼마를 절약했는지 보여줍니다.
수정 후 재인덱싱은 1초 미만이 소요됩니다 (임베딩 캐시 히트율 96%). Git hooks를 통해 인덱스가 자동으로 최신 상태로 유지됩니다.
출력 압축 도구 (Caveman 등)는 출력 토큰을 20-75% 절감합니다. 출력은 전체 비용의 5-15%를 차지합니다. 순 절감액: 약 11%입니다.
CCE는 입력 (input) 토큰을 절감합니다 (FastAPI에서 94%의 검색 절감 효과를 확인했으며, 재현 가능한 벤치마크를 거쳤습니다). 입력은 청구 비용의 85-95%를 차지합니다.
단순한 텍스트 검색이 아닙니다. Tree-sitter AST 파싱을 통해 의미론적 청크 (semantic chunks)를 생성합니다. 하이브리드 검색 (Hybrid retrieval)은 상호 순위 결합 (Reciprocal Rank Fusion, RRF)을 통해 벡터 유사도 (vector similarity)와 BM25 키워드 매칭을 병합합니다. 신뢰도 점수 산출기 (confidence scorer)는 유사도 (50%), 키워드 매칭 (30%), 최신성 (20%)을 혼합합니다. 그래프 확장 (Graph expansion)은 CALLS/IMPORTS 엣지 (edges)를 따라 탐색하여 관련 코드를 가져옵니다.
record_decision("use JWT for auth", reason="session tokens flagged by legal")
이 기록은 SQLite에 저장되며, 다음 세션에서 session_recall을 통해 나타납니다. 당신의 아키텍처를 다시 설명할 필요가 없습니다.
추정치가 아닙니다. 전체 파일 기준선 (full-file baseline) 대비 실제 제공된 토큰을 버킷별 (검색, 압축, 출력, 메모리, 문법)로 분류하여 보여줍니다. 달러 비용은 Anthropic의 가격 페이지에서 가져옵니다. 절감 요약은 매 세션 시작 시 표시됩니다.
비밀 파일 (.env, *.pem, credentials.json)은 절대 인덱싱되지 않습니다. 콘텐츠는 AWS 키, GitHub 토큰, Slack 토큰, Stripe 키, JWT 및 일반 자격 증명을 스캔합니다. 개인정보 (PII: 이메일, IP, SSN, 신용카드)는 메모리 쓰기 단계에서 제거(scrubbed)됩니다. 모든 MCP 파일 경로는 경로 탐색 (path traversal) 공격에 대해 검증됩니다.
콘텐츠 해시 임베딩 캐시 (Content-Hash Embedding Cache)
모델 이름과 솔트 (salted) 처리된 청크당 SHA-256 지문 (fingerprint)을 생성합니다. 재인덱싱 (Re-index) 시 변경되지 않은 코드는 건너뜁니다. 이진 float32 저장 방식을 사용하여 JSON보다 10배 작습니다. 일반적인 재인덱싱 시 캐시 적중률 (cache hit)은 96%이며, 1초 미만이 소요됩니다.
sqlite-vec: 217 MB 대신 2 MB
LanceDB를 sqlite-vec으로 교체했습니다. 코사인 유사도 (cosine-distance) 품질은 동일하면서 설치 크기는 99% 더 작습니다. WAL 모드와 PRAGMA NORMAL을 적용하여 쓰기 속도를 80% 향상시켰습니다. 벡터, FTS5, 코드 그래프 및 압축 캐시가 모두 세 개의 SQLite 파일에 담깁니다.
결정론적 문법 압축 (Deterministic Grammar Compression)
LLM 호출 없이 메모리 항목을 압축합니다. 관사, 채움말 (fillers), 대명사를 제거합니다. 세 가지 수준 (lite/full/ultra, 20-60% 절감)이 있습니다. 코드, 경로, URL은 바이트 단위로 그대로 보존됩니다. 동일한 입력은 항상 동일한 출력을 생성합니다.
실패 시 차단 방식의 훅 설계 (Fail-Closed Hook Design)
5개의 Claude Code 라이프사이클 훅 (lifecycle hooks)이 세션 컨텍스트 (session context)를 캡처합니다. 모든 훅은 curl ... || true를 실행하므로, 서버가 충돌하더라도 사용자를 차단하지 않습니다. SessionStart는 부트스트랩 컨텍스트 (bootstrap context)를 주입하며, 나머지 훅들은 조용히 컨텍스트를 캡처합니다.
동적 가격 책정 (Dynamic Pricing)
cce savings의 달러 추정치는 Anthropic의 실시간 가격 정보를 기반으로 합니다 (HTML 테이블을 파싱하여 7일간 캐싱하며, 오프라인 시 폴백 (fallback) 적용). 요율이 변경되어도 수동 업데이트가 필요 없습니다.
추가 전용 절약 장부 (Append-Only Savings Ledger)
7개의 버킷 (buckets)이 절약된 모든 토큰을 추적합니다: 검색 (retrieval), 청크 압축 (chunk compression), 출력 압축 (output compression), 메모리 회상 (memory recall), 문법 (grammar), 턴 요약 (turn summarization), 점진적 공개 (progressive disclosure). 재시작 후에도 데이터가 유지됩니다. CLI 및 대시보드 분석의 기반이 됩니다.
cce init # 인덱싱 + 훅 설치 + MCP 등록
cce # 상태 배너
cce savings # 달러 추정치가 포함된 토큰 절약량
...
전체 명령 참조를 보려면 cce list를 실행하세요.
기본적으로 설정이 필요 없는 제로 컨피그 (Zero-config) 방식입니다. 필요한 경우 ~/.cce/config.yaml 또는 .context-engine.yaml에서 설정을 재정의할 수 있습니다:
compression:
level: standard # minimal | standard | full
output: standard # off | lite | standard | max
...
원격 Ollama (Remote Ollama): 네트워크 내의 다른 머신에서 Ollama를 실행하는 경우, compression.ollama_url (예: http://nas.local:11434)을 설정하거나 CCE_OLLAMA_URL 환경 변수를 내보내세요. 환경 변수가 우선순위를 갖습니다. CCE는 엔드포인트 (endpoint)를 조사하며, 연결할 수 없는 경우 절단 전용 압축 (truncation-only compression)으로 폴백하므로 불안정한 연결로 인해 인덱싱이 중단되지 않습니다.
CCE는 또한 Claude의 응답을 압축합니다 (Caveman과 동일한 개념):
| 레벨 (Level) | 스타일 (Style) | 절약량 (Savings) |
|---|---|---|
off | 전체 출력 (Full output) | 0% |
lite | 불필요한 말이나 완곡한 표현 제거 (No filler or hedging) | ~30% |
standard | 파편화, 관사 생략 (Fragments, drop articles) | ~65% |
max | 전보식 (Telegraphic) | ~75% |
Claude에게 "switch to max compression" 또는 "turn off compression"이라고 말하세요. 코드 블록 (code blocks)과 명령어는 절대 압축되지 않습니다.
| 구성 요소 (Component) | 크기 (Size) |
|---|---|
| 핵심 설치 (Ollama 백엔드) | ~17 MB |
[local] 추가 기능 포함 (fastembed + ONNX) | ~189 MB |
| 임베딩 모델 (Embedding model, 1회 다운로드) | ~60 MB (fastembed) 또는 Ollama에서 관리 |
| 프로젝트당 인덱스 (소/중/대형) | 5-60 MB |
GPU가 필요하지 않습니다. Ollama를 사용하면 임베딩 (embeddings)은 Ollama 서버에서 처리됩니다. [local] 옵션을 추가하면 임베딩 모델은 ONNX Runtime을 통해 CPU에서 실행됩니다.
AST 인식 청킹 (AST-aware chunking, tree-sitter 파싱, 10개 확장자 지원):
| 언어 | 확장자 |
|---|---|
| Python | .py |
| ... |
언어 인식 폴백 청킹 (Language-aware fallback chunking, 40개 이상의 확장자 지원):
| 카테고리 | 언어 |
|---|---|
| Web | HTML, CSS, SCSS, LESS, Vue, Svelte |
| ... |
그 외 모든 텍스트 파일은 줄 범위 (line range) 단위로 청킹됩니다. 바이너리 (Binary) 파일은 건너뜁니다.
| 페이지 | 내용 |
|---|---|
| CCE란 무엇인가? (전체 가이드) | 설정, 도구, 작동 방식, FAQ |
| ... |
아니요. 품질은 동일하게 유지되거나 약간 향상됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기