AI 코딩 에이전트를 위한 코드베이스 인텔리전스 레이어
요약
TeaRAGs는 AI 코딩 에이전트가 로컬 코드베이스의 깊은 지식을 활용할 수 있도록 설계된 '코드베이스 인텔리전스 레이어'입니다. 이 시스템은 저장소를 다섯 가지 레이어로 색인화하여, 단순히 유사한 코드를 찾는 것을 넘어 연결성, 변경 이력, 배치 상태 등 다차원적인 컨텍스트를 제공합니다.
핵심 포인트
- AI 에이전트의 코드 검색 능력을 향상시키는 인텔리전스 레이어입니다.
- AST 기반 의미론적/하이브리드 검색을 통해 '무엇을 하는지' 파악합니다.
- 코드의 연결성, 변경 이력, 배치 상태 등 5가지 차원으로 정보를 색인화합니다.
- 위험도(dangerous) 프리셋 등을 활용하여 코드의 안전성과 중요도를 판단할 수 있습니다.
코드베이스 인텔리전스 레이어 for AI 코딩 에이전트
궤적 풍부화-인식 RAG (Trajectory Enrichment-Aware RAG) · MCP 위에서 서비스됨 · 100% 로컬
당신의 코딩 에이전트는 발견한 첫 번째 코드 조각을 복사할 뿐, 가장 적절한 것을 복사하지 못합니다.
TeaRAGs는 당신의 에이전트가 MCP 위에서 질의하는 코드베이스 인텔리전스 레이어입니다. 이 시스템은 당신의 로컬 머신에 있는 저장소(repository)를 다섯 개의 레이어로 색인화합니다. 세 개는 코드를 읽고, 두 개는 인터페이스를 판단합니다:
- 🔍 무엇을 하는가 (What it does) — AST(Abstract Syntax Tree)-인식 청크에 대한 의미론적 및 하이브리드 검색 - 🕸️
어떻게 연결되어 있는가 (How it is connected) — 호출자(callers), 피호출자(callees), 팬-인(fan-in), 전이적 영향(transitive impact) - 🧬
어떻게 살아왔는가 (How it has lived) — 변경 빈도(churn), 버그 수정률, 소유권(ownership), 연식(age) - 🏛️
제대로 배치되어 있는가 (Whether it is laid out right) — 의존성 방향(dependency direction), 누수되는 파사드(leaking facades), 경계 없이 함께 변경되는 파일들 - 🔤
프로젝트가 무엇을 부르는가 (What the project calls things) — 호출 그래프에서 추론된 명명 어휘(naming vocabulary)와 모든 새로운 이름에 대한 판정
첫 세 개의 레이어와 에이전트가 이들을 한 번에 모두 필요로 하는 이유에 대해서는 Codebase Intelligence для агента (Habr, 러시아어)를 참고하세요.
TeaRAGs는 또한 작업(task)이 어떤 레이어를 필요로 하는지 아는 에이전트 스킬을 제공합니다. 에이전트는 더 이상 어떤 코드가 안전한지, 무엇이 중요한지, 변경이 무엇을 망가뜨릴지 추측하는 것을 멈추고, 대신 보고서(dossier)를 읽습니다.
📖 문서화 (Documentation) · 🏁
15분 퀵스타트 (quickstart)
· 🧠 핵심 개념 (Core concepts)
에이전트가 코드를 건드리기 전에 던지는 세 가지 질문을 TeaRAGs가 자체 저장소에서 답변합니다. 아래의 모든 숫자는 실제 응답이며, 잘린 것입니다.
`semantic_search { query:
가장 유사한 일치 항목이 계속 수정됩니다. 에이전트는 조용한 도우미의 형태를 복사하거나, 첫 번째 것이 왜 고장 나는지 학습하여 실수를 반복하지 않습니다.
첫 번째 검색 결과 원본 (요약)
{
"symbolId": "OllamaEmbeddings#retryWithBackoff",
"relativePath": "src/core/adapters/embeddings/ollama.ts",
...
레이블은 **이 저장소 자체의 분위수(percentiles)**에서 계산되므로, 극단적이라는 것은 이 코드베이스에 대한 것이지, 어떤 글로벌 평균에 대한 것이 아닙니다.
semantic_search { query: "배치로 벡터 데이터베이스에 포인트를 작성하는 방법", rerank: "dangerous" }
유사도만으로 PointsAccumulator#flushBatch, QdrantPointStore#addPointsOptimized, 그리고 QdrantPointStore#addPoints가 먼저 순위가 매겨집니다.
dangerous 프리셋은 위험도를 기준으로 재정렬하고 그 이유를 설명합니다:
| # | 위험도별 순위 | 상승한 이유 |
|---|---|---|
| 1 | ChunkPipeline#createBatchHandler | 아웃고잉 호출 16개, 77줄, 커밋 5회 · 높음 |
| 2 | QdrantManager#addPointsWithSparseOptimized | 커밋 45회 파일, 상대적 변경률 8.09 · 🔴 높음, 작성자 4명 |
| 3 | PointsAccumulator#flushBatch | 라이브 라인의 100%를 한 작성자가 소유 · 🟠 깊은 사일로(deep-silo), 미터치 기간 158일 |
get_callers { symbolId: "QdrantManager#addPointsWithSparse" }
여덟 개의 파일에 걸친 열 개의 정확한 호출 지점 — 메서드 팬인(method fan-in) 10 · 중심적, 파일 간 전이 영향도(file transitive impact) 47 · 지역적:
ChunkPipeline#createBatchHandler ingest/pipeline/chunk-pipeline.ts
createQdrantPipeline ingest/pipeline/pipeline-manager.ts
storeIndexingMarker (2 sites) ingest/pipeline/indexing-marker.ts
...
진입점부터 이 호출까지 전체 체인이 필요한가요? trace_path는 모든 A→B 경로를 열거하고, 재정렬 프리셋을 사용하여 각 단계의 위험도에 따라 정렬합니다.
평범한 언어로 질문하세요. 플러그인이 모든 질문에 대해 스킬, 도구 및 재정렬 프리셋을 자동으로 선택합니다 — 의도를 올바른 호출로 매핑하는 결정표를 제공하므로 아무도 프리셋 이름을 알 필요가 없습니다. 다른 MCP 클라이언트들도 MCP 리소스(tea-rags://schema/search-guide)와 동일한 라우팅 가이드를 받습니다.
레이어별로 하나의 질문을 던지며, 가장 특징적인 것부터 시작합니다. 모든 숫자는 TeaRAGs 자체 저장소에서 나온 실제 응답입니다.
/tea-rags:architecture-diagnostics
→ get_architecture_report
네 개의 탐지기가 모듈 간의 경계를 판단하며, 이들을 건드리는 위험도를 측정하지는 않습니다. 각 위반 사항은 그것을 증명하는 파일 경계나 커밋을 담고 있으며, 근본 원인별로 그룹화되어 있습니다:
| Detector | What it found here |
|---|---|
| Stable Dependencies | api/public (instability 0.06, 33 dependents)가 api (0.89)에 의존하며 — 그리고 api는 다시 그것에 의존합니다 |
| Leaking abstraction | bootstrap/factory.ts가 bootstrap/config 파사드(facade)를 넘어 env-snapshot.ts의 3개 이름에 접근하는데, 이 파사드는 해당 이름을 외부에 노출하지 않습니다; 9개의 임포터 중 7개가 이 파사드를 거칩니다 |
| Silent coupling | Go와 Java 리졸버가 5세션 동안 함께 변경되었습니다 — 모든 Java 변경은 Go 변경을 동반했습니다 (lift 86.5) — 하지만 그들 사이에는 어떤 임포트나 호출도 없습니다: 언어 커널로 이동할 준비가 된 공유된 형태입니다 |
| Main sequence | language/kernel은 94개의 의존성을 가지고 있지만, 17개 타입 중 추상적인 것은 단지 6개에 불과합니다 — A + I = 1로부터 거리가 0.58로, 고통의 영역(zone of pain) 쪽으로 기울어져 있습니다 |
컴포넌트란 파사드를 가진 모듈이거나, 파사드가 없는 경우 일반 디렉터리를 의미합니다. 파사드 채택 및 결합 강도 임계값은 저장소 자체에서 도출됩니다 (Otsu). 따라서 동일한 보고서가 튜닝 없이 작은 라이브러리와 모놀리스(monolith)를 모두 읽어냅니다.
`review_changes { changes: { base:
테이블
| Draft | Verdict | Why |
|---|---|---|
const meta: GitFileSignals | MISFIT → fileSignals | 프로젝트는 이 타입의 값들을 assembleFileSignals 이후에 명명합니다. |
type EmbeddingBackend in adapters/embeddings/ | CONFORMS, alt. provider | 프로젝트에서 이 개념을 지칭하는 단어는 EmbeddingProvider입니다 (유사도 0.66). |
type SignalStatistics | NEW_TERM, alt. stats | 프로젝트의 stats와 같은 의미이며, 기회 보정된 하한선보다 높습니다. |
Verdict은 CONFORMS, MISFIT과 제안(suggestion), NEW_TERM과 프로젝트에서 가장 가까운 용어(project's closest terms), 그리고 이미 다른 곳에서 사용 중인 이름에 대한 COLLISION으로 나뉩니다. 규칙들은 프로젝트 자체의 이력에 대해 확인됩니다: 타입 이름을 변경한 커밋 메시지마다 도구는 플래그를 지정해야 하는 사례입니다. get_ontology_report은 전체 어휘 — 동의어, 동음이의어, 이상치(outliers) — 를 감사합니다.
semantic_search는 proven을 사용하여 — /tea-rags:data-driven-generation — 이를 템플릿 단계로 실행합니다. 유사도 검색은 네 가지 모두를 찾고; 이력이 결정합니다. proven은 장기간 존재하고, 버그 수정률이 낮으며, 여러 작성자가 참여한 코드를 우선순위로 지정하며, 모든 결과는 커밋, 버그 수정 공유, 연령, 소유자 — 이 저장소 자체의 백분위수와 비교하여 레이블링된 파일(dossier)을 가지고 있습니다. 텍스트로 가장 가까운 일치 항목은 종종 매 스프린트마다 수정되는 항목입니다. 실제 쌍은 See It → 1을 참조하십시오.
trace_path는 dangerous — get_callers를 사용하여 단일 호프(single hop)에 대해 실행합니다. 이름에서 추측하는 것이 아니라 호출 그래프로부터 해결된 두 심볼 사이의 모든 호출 경로이며, 각 단계는 건드리는 것이 얼마나 위험한지에 따라 순위가 매겨집니다. 모호한 호출은 모호하다고 보고되며, 절대 무작위로 선택되지 않습니다. 실제 쓰기 경로의 10개 호출 위치는 See It → 3을 참조하십시오.
hybrid_search — 의미를 위한 밀집 벡터(dense vectors), 정확한 이름을 위한 BM25
코드는 AST 경계에서 청크화되므로, 결과는 N줄의 창이 아니라 해당 클래스를 가진 전체 메서드입니다. 의미로 검색하는 것은 질문과 코드 사이의 어휘 격차를 건너뛰며; BM25는 질문이 이름을 지정할 때 여전히 정확한 식별자를 고정합니다.
답변할 수 있는 질문이 더 많아진다 — 이해하고, 재사용하고, 안전하게 변경하며, 문제를 찾고, 검토한다
오른쪽 열은 내부적으로 어떤 과정이 실행되는지 보여줍니다.
| 에이전트에게 요청하기 | 실행되는 내용 |
|---|---|
| "저장된 카드로 청구서를 결제할 때 어디서 비용을 청구하고, 무엇에 영향을 미치나요?" | blastRadius를 사용한 hybrid_search — 서비스, 주변 요소, 도달 범위 |
| "청구 시스템에 저를 온보딩해주세요 — 진입점은 어디인가요?" | /tea-rags:explore · onboarding, entryPoint, find_symbol을 통한 아웃라인 |
| "이 전체 앱은 어떤 모듈들을 중심으로 구축되었나요?" | architecturalHub · hotMethod · hubs 필터 |
| "티켓 #4521에서 무엇이 이루어졌었나요?" | taskId 필터 |
| 에이전트에게 요청하기 | 실행되는 내용 |
|---|---|
| "청구서 결제에 부분 결제를 추가해주세요 — 저희 스타일로, 중복 없이." | /tea-rags:data-driven-generation — 검증된 템플릿, 재사용 게이트, 배치, 호출자 |
| "결제 게이트웨이 재시도 로직이 네 개가 있어요. 어떤 것을 복사해야 할까요?" | proven — 장기적이고 안정적이며 버그가 적고 다수의 작성자가 참여한 · battleTested 필터 |
| "돈 금액을 반올림하는 헬퍼 함수가 이미 있나요?" | /tea-rags:pattern-search · find_similar |
| 에이전트에게 요청하기 | 실행되는 내용 |
|---|---|
| "이 작업에서 제가 건드리지 말아야 할 부분은 무엇이며, 병렬 구현을 안전하게 구축할 수 있는 곳은 어디인가요?" | criticalPath · blastRadius · godModule; /tea-rags:data-driven-generation는 대상 모듈이 과부하 상태일 때 별도의 홈(home)을 제안합니다. |
| "청구 결제는 누가 호출하며, 요청이 API에서 카드 청구까지 어떻게 전달되나요?" | get_callers · trace_path와 dangerous — 가장 위험한 단계부터 순서대로 |
| "여기 코드 중 두 번째 검토자 없이는 절대 변경해서는 안 되는 것은 무엇인가요?" | criticalPath · criticalMethod · panicZone, unstableCore, hubs 필터 |
| "제가 곧 변경하려는 동작을 커버하는 테스트는 무엇인가요?" | /tea-rags:tests-as-context |
| 에이전트에게 질문하기 | 실행되는 기능 |
|---|---|
| "결제 도메인에서 가장 위험한 모듈은 어디인가요?" | /tea-rags:risk-assessment — bugHunt, hotspots, techDebt, dangerous, criticalPath를 한 번에 분석하고, god module까지 포함합니다 |
| "재시도 후 청구서가 두 번 결제된 것으로 표시되었습니다. 무엇이 가장 원인일까요?" | /tea-rags:bug-hunt — 티켓 텍스트를 쿼리로 사용하며, bugHunt, 그리고 get_callers / trace_path를 실행합니다 |
| "청구서 발행의 기술 부채(tech debt)를 매핑해 주세요." | techDebt · refactoring · decomposition · godModule · godMethod |
| "이번 달에 이 도메인에서 가장 많이 변경된 파일은 무엇인가요?" | hotspots와 modifiedAfter 필터를 사용한 rank_chunks |
| "여기서 죽었거나 포기된 것은 무엇인가요?" | deadCandidates · abandonedHotspots 필터 |
| 에이전트에게 질문하기 | 실행되는 기능 |
|---|---|
| "이 머지 리퀘스트에서 가장 먼저 봐야 할 것은 무엇인가요?" | /tea-rags:mr-review — diff에 대한 위험 신호, 모든 변경 사항의 호출자(callers) |
| "누구의 코드이며, 버스 팩터(bus factor)가 낮은 곳은 어디인가요?" | ownership · fragileSilo 필터 |
| "어떤 오래된 보안 중요 코드가 감사(audit)를 받아야 할 시기인가요?" | securityAudit · securityPaths 필터 |
- 📈 Git 및 코드 그래프 기반 순위 지정(ranking) — 23가지 재순위 지정 프리셋이 변경 빈도(churn), 버그 수정률, 소유권, 그리고 연령을 fan-in, PageRank, 전이적 영향(
proven,hotspots,techDebt,blastRadius,criticalPath등)과 결합하여 분석하며, 12가지 필터 프리셋을 제공합니다 - 🕸️ 호출 그래프(Call graph) — TypeScript, JavaScript, Ruby, Swift, Python에 대해 호출자(callers), 피호출자(callees), 사이클 및 A→B 경로(get_callers,get_callees,find_cycles,trace_path)를 높은 수준에서 분석합니다 - 🏛️ 아키텍처 보고서(Architecture report) — 컴포넌트 레벨의 안정적인 의존성, 채택된 파사드(facade)를 지나 새는 임포트, 간 사이에 연결 고리가 없는 함께 변경되는 파일들, 그리고 메인 시퀀스로부터의 거리를 분석합니다 (get_architecture_report)
)- 🔎
변경 검토 (Change review) — 작업 트리 변경 사항 또는 브랜치에 대한 호출: 프로젝트 어휘에서 이름 추출, 변경이 건드리지 않은 공동 변경 파트너, 파일별 응집도(cohesion), 아키텍처 경계를 깨는 새로운 간선(edge) (review_changes)
)- 🔤
명명 검토 (Naming review) — 호출 그래프에서 추론한 프로젝트 어휘: 값 및 타입 이름에 대한 판결, 프로젝트 자체의 동의어 단어, diff가 선언하는 모든 이름에 대한 검토 (review_changes), 그리고 동의어(synonyms), 동음이의어(homonyms) 및 이상치(outliers)에 대한 전체 코드 감사 (get_ontology_report)
)- 🧠
에이전트 기능 (Agent skills) — 플러그인이 모든 질문을 올바른 도구와 자체 프리셋으로 라우팅합니다. 15가지 준비된 워크플로우 (explore, bug-hunt, risk-assessment, data-driven-generation, mr-review 등)와 dinopowers, 그리고 인덱스 신호를 superpowers에 공급하는 10개의 래퍼(wrappers)
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기