Aynı repo, aynı model (Claude Sonnet 4.6), aynı 20 prompt. GrapeRoot prompt başına ortalama $0.17, CodeGraphContext $0.27, vanilla Claude $0.25. MCP tool kullanan araç, araç kullanmayan Claude’dan pahalı çıkıyor. Sorun araçta değil, mimaride.
İki Farklı Mimari
AI coding agent’lar kod tabanını anlamak için context’e ihtiyaç duyar. Bu context’i sağlamanın iki temel stratejisi var:
Pre-injection: Model Başlamadan Önce
Graph lookup model çalışmaya başlamadan önce yapılır. İlgili dosyalar, fonksiyonlar ve bağımlılıklar context’e enjekte edilir. Model ilk turn’de zaten gerekli bilgiye sahiptir.
Sorgu -> Graph lookup -> İlgili dosyaları bul -> Context'e ekle -> Model reasoning başlasın
Model tool call yapmaz, dosya aramaz, keşif turu atmaz. Doğrudan cevaplamaya başlar.
MCP Tool Loop: Model Çalışırken
Model çalışmaya başlar, neye ihtiyacı olduğuna karar verir, MCP tool’u çağırır, sonucu okur, tekrar düşünür. Bu döngü birden fazla kez tekrarlanabilir.
Sorgu -> Model düşünür -> "Bunu bilmiyorum" -> Tool call -> Sonucu oku -> Tekrar düşün -> ...
Her tool call bir ek turn. Her turn ek token. Döngü, model cevabı bulana kadar devam eder.
Benchmark Verileri
GrapeRoot geliştiricisinin paylaştığı benchmark1 (mid-sized repo, 20 task):
| Metrik | Vanilla Claude | GrapeRoot | CodeGraphContext |
|---|---|---|---|
| Ort. maliyet/prompt | $0.25 | $0.17 | $0.27 |
| Maliyet kazanan | 3/20 | 16/20 | 1/20 |
| Kalite (regex) | 66.0 | 73.8 | 66.2 |
| Kalite (LLM judge) | 86.2 | 87.9 | 87.2 |
| Ort. turn sayısı | 10.6 | 8.9 | 11.7 |
Dikkat çeken noktalar:
CodeGraphContext, vanilla Claude’dan pahalı. MCP tool loop ek turn’ler eklediği için, araç kullanmak bazen araç kullanmamaktan daha maliyetli oluyor. Her tool call kararı, çağrısı ve sonuç okuması context’e ekleniyor.
GrapeRoot kalitede de önde. Sadece ucuz değil, hem regex doğrulama hem LLM judge skorlarında en yüksek. Daha az turn ile daha iyi sonuç.
Turn sayısı maliyet ile doğru orantılı. GrapeRoot 8.9, vanilla 10.6, CGC 11.7 turn. Sıralama maliyetle birebir örtüşüyor.
Uyarılar
Bu benchmark’ı körü körüne almamak lazım:
- GrapeRoot’un kendi benchmark’ı, kendi repo’şunda
- 20 task, mid-sized repo (büyük monorepo’da sonuçlar farklı olabilir)
- Bağımsız doğrulama yok
- Task dağılımı (symbol lookup, endpoint tracing, architecture reasoning) GrapeRoot’un güçlü olduğu alanları kapsıyor
Ama mimari argüman sağlam: daha az turn = daha az token. Bu, benchmark’tan bağımsız olarak doğru.
Akademik destek de var: Shahnovsky ve Dror (2026) LLM agent’ların planlama yaklaşımlarını klasik AI paradigmalarıyla eşleştirdi2. Step-by-step agent’lar (BFS, her adımda karar ver = MCP tool loop) %38.41 genel başarı oranı gösterirken, plan-ahead agent’lar (DFS, önceden planla = pre-injection benzeri) element accuracy’de %89’a ulaştı. Yani pre-injection sadece ucuz değil, potansiyel olarak daha doğru.
Üç Aracın Mimarisi
GrapeRoot: Dual Graph + Pre-injection
GrapeRoot iki ayrı graph tutuyor:
Code Graph (Information Graph): Dosyalar, fonksiyonlar ve bağımlılıklar. Projenin statik yapısı. Hangi dosyanın hangi dosyaya bağlı olduğu, fonksiyonların birbirini nasıl çağırdığı.
Session Graph (Action Graph): Modelin o session’da ne okuduğu ve ne düzenlediği. Bu graph session ilerledikçe büyür. İlk sorudan sonra model aynı dosyaları tekrar okumak yerine, session graph’tan yönlendirilir.
Session graph fikri güçlü: model bir dosyayı okuduğunda, graph bunu hatırlar. Basit bir versiyonunu biz PreCompact/SessionStart hook’larıyla çözüyoruz: session compact olmadan önce değişen dosyalar, branch ve git status kaydediliyor, yeni session başladığında otomatik restore ediliyor. GrapeRoot’un session graph’ı bunun çok daha sofistike hali: sadece dosya listesi değil, relevance x recency x edit weight ile ranking yapıyor. Sonraki soruda aynı dosya gerekirse, tekrar okuma yerine cache’den servir edilir. Bu, context window’un aynı bilgiyle tekrar tekrar dolmasını önler.
Entegrasyon: MCP protokolü üzerinden Claude Code ve Codex CLI ile çalışır. dgc /path/to/project komutuyla başlatılır, lokal MCP server ayağa kalkar.
CodeGraphContext: Graph DB + MCP Tool Loop
CodeGraphContext (CGC) klasik MCP tool yaklaşımını kullanıyor:
- Tree-sitter ile AST parse (14 dil)
- Graph DB’de depola (KuzuDB varsayılan, FalkorDB veya Neo4j opsiyonel)
- MCP server olarak AI’a sun
- Model neye ihtiyacı olduğuna kendisi karar versin
Güçlü yanı: Relationship query desteği (çaller/callee, class hierarchy, call chain). Model “bu fonksiyonu kim çağırıyor?” diye sorabilir ve graph’tan tam cevap alır.
Zayıf yanı: Her sorgu bir tool call. Model karar verir, çağırır, sonucu okur, düşünür. Bu döngü her turn’de context’e eklenir.
code-review-graph: Blast Radius + MCP
Üçüncü bir yaklaşım: code-review-graph Tree-sitter ile AST parse ediyor, lokal SQLite’da depoluyor ve “blast radius” analizi yapıyor.
Bir dosya değiştiğinde, o dosyayı çağıran, o dosyadan miras alan ve onu test eden tüm dosyaları buluyor. Code review’da model sadece etkilenen dosyaları okuyor.
Benchmark sonuçları etkileyici:
| Senaryo | Token azaltma |
|---|---|
| Code review (httpx) | 26.2x |
| Code review (FastAPI) | 8.1x |
| Next.js monorepo coding | 49.1x (739K -> 15K token) |
Bu da MCP tool loop kullanıyor ama odağı farklı: genel arama değil, değişiklik etkisi analizi.
Martin Fowler’ın Context Engineering Taksonomisi
Martin Fowler’ın context engineering makalesinde3 üç context yükleme stratejisi tanımlanıyor:
Pre-injection (Always Loaded)
CLAUDE.md dosyaları session başında deterministik olarak yüklenir. Her oturumda, her zaman. Projenin temel kuralları ve yapısı burada.
GrapeRoot’un yaptığı da bu, ama kod düzeyinde: sadece kuralları değil, ilgili dosyaları da session başında yüklüyor.
Reactive (On-Demand)
Skill’ler ve MCP server’lar modelin kararına göre yüklenir. Model “buna ihtiyacım var” dediğinde devreye girer.
CodeGraphContext ve dnomia-knowledge bu kategoride. Model tool call ile neye ihtiyacı olduğunu ifade eder, MCP server sonucu döner.
Agent-Triggered (Deterministic)
Hook’lar sabit yaşam döngüsü noktalarında çalışır. Modelin kararına bağlı değil, olay tetikler.
dnomia-knowledge’ın PostToolUse hook’u bu kategoride: her Read/Edit sonrası otomatik interaction logging. Model bunu talep etmez, hook tetiklenir.
Her Yaklaşımın Trade-off’ları
| Pre-injection | MCP Tool Loop | Hook-based | |
|---|---|---|---|
| Güçlü | Az turn, düşük maliyet | Esneklik, model karar verir | Deterministik, model bağımsız |
| Zayıf | Yanlış dosya seçim riski | Çok turn, yüksek maliyet | Pasif, sadece veri toplar |
| En iyi senaryo | Yapısal sorgular | Keşif gerektiren görevler | Uzun vadeli örüntü analizi |
| En kötü senaryo | Karmaşık, çok dosyalı görevler | Basit, tek dosyalı sorgular | Anlık karar gereken durumlar |
Pre-injection ne zaman kırılır: Sorgu 10 farklı dosyayı gerektiriyorsa ve graph sadece 3’ünü seçtiyse, model eksik bilgiyle reasoning yapar. Tool loop’ta model “daha fazla bilgi lazım” deyip ek çağrı yapabilir.
Tool loop ne zaman gereksiz: “Bu fonksiyonun parametreleri ne?” gibi basit yapısal sorgularda model zaten cevabı ilk tool call’da alır ama loop mekanizması yine de ekstra turn ekler (karar verme, çağırma, okuma).
Dördüncü Yol: Hybrid
En iyi strateji muhtemelen tek bir yaklaşım değil, ikisinin kombinasyonu:
- Session başı: Trace hot verisiyle en sık erişilen dosyaların yapısal özetini context’e enjekte et (pre-injection)
- Çalışma sırasında: MCP tool ile derinleşme, spesifik aramalar (reactive)
- Arka planda: Hook’larla etkileşim verisi topla, sonraki session’ların pre-injection kalitesini iyileştir (agent-triggered)
Bu döngüsel: hook’lar veri toplar, veri pre-injection’ı beşler, pre-injection turn sayısını düşürür, düşük turn sayısı daha iyi veri üretir.
dnomia-knowledge Nerede?
Şu an MCP tool loop kategorisinde. Ama birkaç özelliği hybrid’e yaklaştırıyor:
- Interaction boost: Sık erişilen dosyalar arama sonuçlarında yukarı çıkıyor. Bu, dolaylı olarak “geçmiş session’lardan öğrenme”.
- PreToolUse hook: Büyük dosya okumalarını engelleyip search’e yönlendiriyor. Bu, context window’u koruyan deterministik bir müdahale.
- Trace analytics: Hot files, gaps, decay verileri birikiyor. Bu veri, pre-injection için hazır kaynak.
Eksik olan parça kısmen çözüldü: court ve critique skill’lerine trace-informed review eklendi. Review başlamadan önce dnomia-knowledge trace hot ve trace gaps otomatik çağrılıyor, hot files yüksek riskli değişiklik alanları olarak, gaps ise dokümantasyon borcu olarak değerlendiriliyor. Tam pre-injection henüz yok ama trace verisi artık karar süreçlerine besleniyor.
Maliyet mi, Kalite mi?
Claude Code Max (aylık sabit ücret) kullanıyorsanız, token başına maliyet argümanı geçersiz. Ama turn sayısı hala önemli:
- Daha az turn = daha hızlı tamamlama. 9 turn vs 12 turn, toplam sürede belirgin fark.
- Daha az turn = daha az context tüketimi. Her turn context’e ekleniyor. Az turn, context window’u daha yavaş dolduruyor.
- Daha az context tüketimi = daha az compress. Context window dolunca conversation compress’e giriyor, önceki bilgi kayboluyor.
Yani maliyet hesabı doğrudan geçerli olmasa bile, pre-injection’ın sağladığı turn azaltma, deneyim kalitesini iyileştiriyor.
Sonuç
Context engineering, AI coding araçlarının bir sonraki rekabet alanı. Mevcut araçların çoğu MCP tool loop kullanıyor (CodeGraphContext, dnomia-knowledge, code-review-graph). GrapeRoot pre-injection ile farklı bir yol seçti ve benchmark’larda öne çıktı.
Ama “en iyi” tek bir yaklaşım yok. Görevin karmaşıklığına, kod tabanının boyutuna ve kullanım senaryosuna göre değişiyor. Muhtemelen gelecekte tüm araçlar hybrid yaklaşıma evrilecek: statik context pre-injection ile, dinamik derinleşme MCP ile, arka plan veri toplama hook’larla.
Kaynak kodları:
- dnomia-knowledge (hybrid search + interaction tracking)
- GrapeRoot (dual graph + pre-injection)
- CodeGraphContext (graph DB + MCP)
- code-review-graph (blast radius + MCP)
İlgili Yazılar
- AI Agent Protokolleri Rehberi: MCP’nin diğer 5 açık protokolle birlikte konumlandırılması
- Context Engineering Ekosistemi: MCP’nin dört katmanlı context mimarisindeki yeri
Footnotes
- GrapeRoot benchmark: Reddit post, benchmark repo. 20 task, Claude Sonnet 4.6, mid-sized repo. ↩
- Shahnovsky, O., Dror, R. (2026). AI Planning Framework for LLM-Based Web Agents. arXiv. Step-by-step (BFS) vs plan-ahead (DFS) agent karşılaştırması, 794 insan etiketli trajectory ile. ↩
- Martin Fowler, “Context Engineering for Coding Agents”: https://martinfowler.com/articles/exploring-gen-ai/context-engineering-coding-agents.html ↩
- 01 Pre-injection (GrapeRoot) ortalama %31, bazı task'larda %90 daha ucuz. Çünkü model tool call loop'una girmiyor, doğrudan reasoning'e başlıyor.
- 02 MCP tool loop (CodeGraphContext) vanilla Claude'dan bile pahalı çıkabiliyor. Her tool call ekstra turn, her turn ekstra token.
- 03 Session graph (modelin ne okuduğunu takip etmek) en ilginç fikir. Aynı dosyaları tekrar tekrar keşfetmeyi önlüyor.
- 04 Hybrid yaklaşım muhtemelen en iyisi: ilk context pre-injection ile, derinleşme MCP tool ile.
+ Pre-injection her zaman daha mı iyi?
Hayır. Yanlış dosya seçilirse boşa token harcanır. Pre-injection graph'ın ilk routing kalitesine bağlı. Karmaşık, çok dosyalı görevlerde MCP tool loop daha esnek çünkü model neye ihtiyacı olduğuna kendisi karar veriyor.
+ Bu benchmark'lar güvenilir mi?
GrapeRoot'un kendi benchmark'ı, kendi repo'şunda, 20 task ile. Bağımsız doğrulama yok. Ama mimari argüman (daha az turn = daha az token) mantıksal olarak tutarlı.
+ Claude Code Max kullanıyorsam maliyet önemli mi?
Token başına ödeme yapmıyorsanız maliyet argümanı geçersiz. Ama turn sayısı hala önemli: daha az turn = daha hızlı tamamlama, daha az context window tüketimi, daha az compress riski.
+ dnomia-knowledge hangi kategoriye giriyor?
MCP tool loop kategorisinde. Ama interaction boost ile session tracking'e yaklaşıyor. Pre-injection modu henüz yok ama trace hot verisiyle session başında context enjeksiyonu planlanıyor.