tokensave
resmiAjanınızı Anlamsal Kod Zekası ile güçlendirin ve bu süreçte 💰 tasarruf edin!
Tokensave MCP ile neler yapabilirsiniz?
- Find symbols by name or meaning — Use
tokensave_searchto locate functions, classes, or types across the indexed codebase. - Get task-relevant code context in one call — Ask
tokensave_contextfor entry points, related symbols, and code snippets for a given task. - Trace callers and callees of a function — Use
tokensave_callersandtokensave_calleesto navigate the call graph. - Analyze the impact of changing a symbol — Use
tokensave_impactto see all code affected by a modification. - Identify code quality issues — Use
tokensave_dead_code,tokensave_complexity, ortokensave_circularto find unreachable symbols, complex functions, or circular dependencies. - Persist decisions across sessions — Use
tokensave_record_decisionandtokensave_session_recallto save and retrieve design choices.
Dokümantasyon
Yapay Zeka Kodlama Aracıları için Semantik Kod Zekası
Daha az token • Daha az araç çağrısı • %100 yerel
Neden tokensave?
Yapay zeka kodlama aracıları, kod tabanlarını keşfederken token israf eder. Her grep, glob ve dosya okuması maliyetlidir. Karmaşık görevlerde, aracılar sadece bağlam oluşturmak için yüzlerce dosyayı tarayan birden fazla Keşif alt aracısı başlatır.
tokensave, aracılara önceden indekslenmiş bir semantik bilgi grafiği sunar. Aracı, dosyaları taramak yerine grafiği sorgular ve anında, yapılandırılmış yanıtlar alır -- doğru semboller, ilişkileri ve kaynak kodu, tek bir çağrıda.
Nasıl Çalışır
┌──────────────────────────────────────────────────────────────┐
│ AI Coding Agent (Claude Code, Codex, Gemini, Cursor, ...) │
│ │
│ "Implement user authentication" │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Sub-agent │ ───── │ Sub-agent │ │
│ └────────┬────────┘ └─────────┬───────┘ │
└───────────┼──────────────────────────┼───────────────────────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────────────┐
│ tokensave MCP Server │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Search │ │ Callers │ │ Context │ │
│ │ "auth" │ │ "login()" │ │ for task │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌───────────────────────┐ │
│ │ libSQL Graph DB │ │
│ │ • Instant lookups │ │
│ │ • FTS5 search │ │
│ └───────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
tokensave olmadan: Aracılar dosyaları taramak için grep, glob ve Read kullanır -- çok sayıda API çağrısı, yüksek token kullanımı.
tokensave ile: Aracılar MCP araçları aracılığıyla grafiği sorgular -- anında sonuçlar, yerel işleme, daha az token.
Temel Özellikler
| Akıllı Bağlam Oluşturma | Semantik Arama | Etki Analizi |
| Tek bir araç çağrısı, aracının ihtiyaç duyduğu her şeyi döndürür -- giriş noktaları, ilgili semboller ve kod parçacıkları. | Kodu metne göre değil, anlama göre bulun. "kimlik doğrulama"yı arayın ve login, validateToken, AuthService'ı bulun. | Değiştirmeden önce neyin kırılacağını tam olarak bilin. Çağıranları, çağrılanları ve herhangi bir sembolün tam etki yarıçapını izleyin. |
| 80+ MCP Aracı | 50+ Dil | 12+ Aracı Entegrasyonu |
| Çağrı grafiği gezintisinden ölü kod tespitine, atomik düzenleme ilkellerine, kod sağlığı metriklerine, test eşleştirmeye ve karmaşıklık analizine kadar. | Rust, Go, Java, Python, TypeScript, C, C++, Swift, Svelte, Astro ve WGSL/HLSL/Metal gölgelendiriciler ve Markdown dahil 42 dil daha. Üç kademe (lite/medium/full) ikili boyutu kontrol eder. | Claude Code, Codex CLI, Gemini CLI, Qwen Code, Kiro, Cursor, OpenCode, Copilot, Cline, Roo Code, Zed, Antigravity, Kilo CLI, Kimi CLI, Mistral Vibe, Grok Build, Factory Droid. |
| Çoklu Dal İndeksleme (isteğe bağlı) | %100 Yerel | Her Zaman Güncel |
| Dal başına isteğe bağlı veritabanları. Checkout'unuzu değiştirmeden dallar arası fark ve arama. | Verileriniz makinenizden ayrılmaz. API anahtarı yok. Harici servis yok. Her şey yerel bir libSQL veritabanında çalışır. | Her MCP çağrısında isteğe bağlı güncellik kontrolü (30 sn bekleme süresi) ve sunucu bağlandığında yakalama senkronizasyonu. Çoklu aracı çalışmasının git worktree'leri kullanması beklenir — her aracı kendi checkout'unu alır ve indeks farklılıkları bir dosya izleyici tarafından değil, git tarafından birleştirilir. |
| Alt Süreçle İzole Edilmiş Çıkarma | Kod Sağlığı Analitiği | Atomik Düzenleme İlkelleri |
| Herhangi bir tree-sitter dilbilgisindeki yerel bir çökme (abort, segfault, herhangi bir şey) yalnızca çalışanı öldürür; havuz onu yeniden başlatır ve senkronizasyon devam eder. Senkronizasyon, hatalı biçimlendirilmiş bir dosyada asla ölmez. | Bileşik sağlık puanı (0-10000), Gini eşitsizliği, dosya-DAG derinliği, tasarım-yapı matrisi, risk ağırlıklı test boşlukları ve oturum deltaları. | Dosyaları regex veya kabuk alıntılama tehlikeleri olmadan düzenleyin: benzersiz bağlantı str_replace, atomik çoklu değiştirme, AST-yeniden yazma, bağlantılı ekleme. Yazmalardan sonra otomatik olarak yeniden indeksler. |
Hızlı Başlangıç
1. Kurulum
Homebrew (macOS):
brew install aovestdipaperino/tap/tokensave
Scoop (Windows):
scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket
scoop install tokensave
Cargo (herhangi bir platform):
cargo install tokensave # full (50+ languages, default)
cargo install tokensave --features medium # medium tier
cargo install tokensave --no-default-features # lite (smallest binary)
Önceden derlenmiş ikili dosyalar (Linux, Windows, macOS):
En son sürümden indirin ve ikili dosyayı PATH dizininize yerleştirin.
| Platform | Arşiv |
|---|---|
| macOS (Apple Silicon) | tokensave-vX.Y.Z-aarch64-macos.tar.gz |
| Linux (x86_64) | tokensave-vX.Y.Z-x86_64-linux.tar.gz |
| Linux (ARM64) | tokensave-vX.Y.Z-aarch64-linux.tar.gz |
| Windows (x86_64) | tokensave-vX.Y.Z-x86_64-windows.zip |
2. Aracınızı yapılandırın
tokensave install # auto-detects installed agents
tokensave install --agent antigravity # Google Antigravity (formerly Windsurf)
tokensave install --agent auggie # AugmentCode
tokensave install --agent claude # Claude Code
tokensave install --agent cline # Cline
tokensave install --agent codex # OpenAI Codex CLI
tokensave install --agent copilot # GitHub Copilot
tokensave install --agent cursor # Cursor
tokensave install --agent droid # Factory Droid
tokensave install --agent gemini # Gemini CLI
tokensave install --agent kilo # Kilo CLI
tokensave install --agent kiro # AWS Kiro
tokensave install --agent kimi # Moonshot Kimi CLI
tokensave install --agent opencode # OpenCode
tokensave install --agent pi # Pi (pi.dev)
tokensave install --agent qwen # Qwen Code
tokensave install --agent roo-code # Roo Code
tokensave install --agent vibe # Mistral Vibe
tokensave install --agent zed # Zed
tokensave install --agent grok # Grok Build (xAI)
tokensave install --git-hook yes # auto-install the global post-commit and post-checkout hooks (no prompt)
tokensave install --git-hook no # skip the post-commit and post-checkout hooks (no prompt)
Her aracı, MCP sunucusunu yerel yapılandırma formatında kaydeder. Claude Code ayrıca bir PreToolUse kancası (israf eden Keşif aracılarını engeller), bir UserPromptSubmit kancası, bir Stop kancası, CLAUDE.md'de istem kuralları ve otomatik olarak izin verilen araç izinleri alır. Kiro, genel MCP yapılandırması, kaynak olarak yüklenen tokensave.md yönlendirmesi ve izin verilen yerleşik/tokensave araç onayı, yetkilendirme koruma kancaları ve yazma sonrası senkronizasyon içeren tokensave tarafından yönetilen bir varsayılan aracı alır; kullanıcı tarafından yönetilen Kiro aracıları korunur.
Tüm değişiklikler idempotenttir -- yükseltmeden sonra tekrar çalıştırmak güvenlidir. Aracı kurulumundan sonra, size genel git commit sonrası ve checkout sonrası kancaları sunulacaktır.
Proje-yerel kurulum
Varsayılan olarak tokensave install, MCP sunucusunu genel aracı yapılandırmanıza (örn. ~/.claude.json) kaydeder. tokensave'i yalnızca mevcut proje için kaydetmek üzere --local ekleyin:
tokensave install --local --agent claude
Bu, ekibinizle paylaşabileceğiniz ve commit'leyebileceğiniz proje kapsamlı yapılandırma yazar. Claude için bu ./.mcp.json, ./.claude/settings.json ve ./CLAUDE.md'tir. Desteklenen aracılar: claude, cursor, droid, gemini, zed, opencode, roo-code, kiro, auggie (her biri kendi proje dosyasını yazar, örn. .cursor/mcp.json, .factory/mcp.json, .gemini/settings.json, .zed/settings.json, opencode.json, .roo/mcp.json, .kiro/settings/mcp.json, .augment/settings.json). Diğer aracıların proje kapsamlı yapılandırması yoktur ve --local ile bir hata bildirir.
tokensave uninstall --local ile proje-yerel bir kurulumu kaldırın.
3. Projenizi indeksleyin
cd /path/to/your/project
tokensave init
Bu, bilgi grafiği veritabanıyla bir .tokensave/ dizini oluşturur. Başlatma ve senkronizasyon ayrı komutlardır: init proje başına bir kerelik bir katılımdır, sync ise yalnızca önceden başlatılmış projeleri günceller. Bu, genel git kancalarının asla indekslemeyi düşünmediğiniz depolarda sessizce veritabanları oluşturmasını önler. init'dan sonra, artımlı olarak güncellemek için tokensave sync kullanın -- yalnızca değişen dosyalar yeniden indekslenir.
Kurulumun Claude Code için yazdıkları
MCP sunucusu
{
"mcpServers": {
"tokensave": {
"command": "/path/to/tokensave",
"args": ["serve"]
}
}
}
PreToolUse kancası
Kanca, tokensave hook-pre-tool-use'i çalıştırır -- yerel bir Rust komutu (bash veya jq gerekmez). Agent, Grep ve Bash araç çağrılarını yakalar: Keşif aracıları tamamen engellenir ve sembol şeklindeki grep/rg/ag çağrıları (düz tanımlayıcılar, alternasyonlar, \b ile sarılmış adlar) eşleşen tokensave MCP aracına yönlendirilir. Regex desenleri, dosya keşif modları, git grep ve borulu komutlar olduğu gibi geçer; kabuk başına devre dışı bırakmak için TOKENSAVE_DISABLE_GREP_HOOK=1 ayarlayın.
Başsız / alt aracı dağıtımı (claude -p). Bir düzenleme oturumu tarafından dağıtılan alt süreçler, bu kanca dahil olmak üzere ~/.claude/settings.json'ını miras alır. Bir alt öğenin ham aramalar yapmasına izin vermek için, alt öğenin ortamında TOKENSAVE_DISABLE_GREP_HOOK=1 ayarlayın -- yerel ikili bunu onurlandırır ve her yolu (Grep, Bash, Agent) olduğu gibi geçirir, böylece tüm kancaları kaldıran kaba --settings '{"hooks": {}}''a gerek kalmaz. Koruma durumsuzdur: asla alıntı geçmişine danışmaz, bu nedenle yalnızca yukarıda açıklanan sembol şeklindeki aramaları yönlendirir ve yazılmamış araştırma yayılımını yönlendirir; oturum ister etkileşimli ister başsız olsun, sıradan komutlar etkilenmez.
CLAUDE.md kuralları
Claude'a, Keşif aracılarına veya ham dosya okumalarına başvurmadan önce tokensave araçlarını kullanmasını söyleyen talimatları ~/.claude/CLAUDE.md'a ekler.
Çökmeye Dayanıklı Senkronizasyon
Tree-sitter dilbilgileri derlenmiş C/C++ kodudur. Bazen dahili bir iddiaya takılırlar veya Rust panik işlemenin yakalayamayacağı yollarla süreci sonlandırırlar. v4.3.0 itibarıyla, her dosya kısa ömürlü bir çalışan alt süreci içinde ayrıştırılır: bir dilbilgisi segfault yaparsa, abort()'ı çağırırsa veya yığın taşmasına uğrarsa, yalnızca çalışan ölür. Havuz onu yeniden başlatır, sorunlu dosya günlüğe kaydedilir ve atlanır ve sync devam eder.
Çalışan, her oluşturmada 256 bitlik bir belirteçle üst öğeye karşı kimlik doğrulaması yapılan gizli bir extract-worker alt komutudur; hem bir TOKENSAVE_WORKER_TOKEN ortam değişkeni hem de stdin'de alınan ilk 32 bayt olarak gereklidir. Kullanıcılar tarafından doğrudan çağrılması başarısız olur. Varsayılan olarak available_parallelism() çalışandır; TOKENSAVE_DISABLE_SUBPROCESS=1 ile devre dışı bırakın.
Düzenleme ilkelleri (tokensave_str_replace, tokensave_insert_at, vb.) hala süreç içinde çalışır: alt süreç ek yükünün baskın olacağı, her seferinde bir dosyayı hedeflerler ve oradaki bir çıkarıcı çökmesi aracı tarafından hemen görülür.
Çoklu Dal İndeksleme (İsteğe Bağlı)
tokensave, isteğe bağlı olarak git dalı başına ayrı bir kod grafiği tutabilir. Etkinleştirildiğinde, dal değiştirmek size asla güncel olmayan sonuçlar vermez ve başka bir dalda zaten ayrıştırdığınız dosyaları asla yeniden indekslemez. Çoklu dal takibi isteğe bağlıdır -- onsuz, tokensave tüm dallar için tek bir veritabanı kullanır.
Nasıl çalışır
Bir dalı takip ettiğinizde, tokensave en yakın ata veritabanını kopyalar ve yalnızca farklı olan dosyaları senkronize eder. Bu, main'dan ayrılan bir özellik dalını takip etmenin neredeyse anında olduğu anlamına gelir -- yalnızca değiştirdiğiniz dosyaları ayrıştırır.
CLI komutları
tokensave branch add # track the current branch
tokensave branch list # see tracked branches and DB sizes
tokensave branch remove <name> # stop tracking a branch
tokensave branch removeall # remove all tracked branches except default
tokensave branch gc # clean up branches deleted from git
Dallar arası MCP araçları
Üç MCP aracı, checkout'unuzu değiştirmeden dallar arası sorgulamalar sağlar:
tokensave_branch_search-- başka bir dalın grafiğinde sembolleri aratokensave_branch_diff-- iki dal arasındaki kod grafiklerini karşılaştır: eklenen, kaldırılan ve değişen semboller (imza farklıysa). Dosya ve tür filtrelerini destekler.tokensave_branch_list-- veritabanı boyutları, üst dal ve senkronizasyon zamanlarıyla takip edilen dalları listele
Dal geri dönüşü
MCP sunucusu mevcut dal için bir veritabanı bulamadığında, en yakın ata dalın veritabanından hizmet verir ve her araç yanıtında tokensave branch add'ı çalıştırmanızı öneren bir uyarı içerir.
Otomatik dal takibi (v7.3.0)
Çoklu dal modu başlatıldıktan sonra (ilk manuel tokensave branch add dal meta verisini oluşturdu), yeni dallar ata veritabanına geri dönmek yerine otomatik olarak takip edilebilir. Bunu iki bağımsız mekanizma kapsar; tek veritabanı modundaki projeler asla etkilenmez ve hiçbir mekanizma varsayılan dalın veritabanına asla dokunmaz.
Git kancası (dal checkout'unda). tokensave install'in kurduğu post-checkout kancası, bir dal checkout'unu (bir dosya checkout'unun aksine) tanır ve arka planda tokensave branch add'ı çalıştırır. Bu komut, dal zaten takip ediliyorsa veya varsayılan dal ise hiçbir şey yapmaz, bu nedenle bilinen dallar arasında sıradan geçiş yapmanın hiçbir maliyeti yoktur.
Açılışta otomatik takip (isteğe bağlı). TokenSave::open çalıştığında — CLI komutu veya MCP sunucusu başlangıcı — ve aktif dal takip edilmiyorsa, tokensave en yakın takip edilen atanın veritabanını kopyalayarak ve dal meta verisine kaydederek onu anında takip edebilir. Bu, auto_track yapılandırma alanı (varsayılan false) veya çalıştırma başına yapılandırmayı geçersiz kılan TOKENSAVE_AUTO_TRACK ortam değişkeni tarafından kontrol edilir (0, false, no, off veya boş hariç herhangi bir değer etkinleştirir). Kopya, manuel bir branch add'in gerçekleştirdiği aynı neredeyse anlık ata-veritabanı kopyasıdır; o anda hiçbir senkronizasyon çalışmaz — post-commit kancası, siz commit yaptıkça yeni dal veritabanını güncel tutar veya hemen yenilemek için tokensave sync'ı çalıştırın. Otomatik takip kesinlikle en iyi çabadır: herhangi bir başarısızlık bir uyarı olarak bildirilir ve open() olağan ata geri dönüşüyle devam eder, böylece bir araç çağrısını asla bozamaz.
Kısacası: kanca kurulu olduğunda, yeni bir özellik dalına geçiş yapmak, ona şeffaf bir şekilde kendi dal başına grafiğini verir; auto_track etkin olduğunda, bir checkout dışında oluşturulan bir dal bile (örneğin, yeni bir worktree'de) tokensave projeyi ilk kez açtığında alınır.
Tam kılavuz için docs/BRANCHING-USER-GUIDE.md dosyasına bakın.
Oturumlar Arası Bellek
Üç MCP aracı, kararları ve kod alanı bağlamını oturumlar arasında kalıcı kılar ve proje başına .tokensave/tokensave.db içinde saklanır.
| Araç | Amaç |
|---|---|
tokensave_record_decision | İsteğe bağlı neden, dosyalar ve etiketlerle bir tasarım/mimari kararını kaydet |
tokensave_record_code_area | Ajanın üzerinde çalıştığı bir yolu işaretle (dokunma sayacı + last_touched_at) |
tokensave_session_recall | Kaydedilmiş kararlar üzerinde FTS5 sorgusu; iki yazma aracıyla eşleştirin |
Ajanın mimari seçimleri oturumdan oturuma yeniden açıklamak zorunda kalmaması için bunları kullanın.
Tasarruf Defteri
Her MCP çağrısı, ~/.tokensave/global.db (savings_ledger tablosu) dosyasına yalnızca ekleme yapılabilir bir satır yazar. tokensave gain ile inceleyin:
tokensave gain # current project, last 30 days
tokensave gain --all # all projects
tokensave gain --history --range 7d
tokensave gain --json
Dolar tahminleri mevcut fiyatlandırma modülünü kullanır (Sonnet girdi fiyatlandırması, LiteLLM aracılığıyla günlük olarak yenilenir).
Tekrarlanabilir Kıyaslama
tokensave bench, tokensave_context üzerinden sabit bir sorgu kümesi çalıştırır ve tam dosya taban çizgisine karşı elde edilen getiri tasarruflarını raporlar (CCE metodolojisini yansıtır):
tokensave bench # ships with 10 default queries
tokensave bench --queries my-queries.toml --json
tokensave bench --max-nodes 5
Bu depoya (tokensave kendisi) karşı, birlikte verilen genel sorgu kümesi kullanılarak ölçülmüştür:
| # | Sorgu | Taban Çizgisi | Bağlam | Tasarruf | Dosyalar | Düğümler |
|---|---|---|---|---|---|---|
| 1 | Yapılandırma başlangıçta nasıl yükleniyor? | 45.3k | 454 | %99 | 4 | 5 |
| 2 | Komut satırı argümanları nerede ayrıştırılıp dağıtılıyor? | 948 | 402 | %58 | 3 | 3 |
| 3 | Ana giriş noktası nasıl organize edilmiş? | 6.1k | 251 | %96 | 3 | 8 |
| 4 | Hatalar nasıl tanımlanıyor, sarılıyor ve yayılıyor? | 3.5k | 819 | %77 | 2 | 3 |
| 5 | Günlükleme veya tanılama çıktısı nerede yayılıyor? | 8.6k | 514 | %94 | 6 | 14 |
| 6 | Testler nasıl organize edilmiş ve hangi test çerçevesi kullanılıyor? | 3.5k | 818 | %77 | 2 | 3 |
| 7 | Veriler diske veya bir veritabanına nasıl kalıcı hale getiriliyor? | 11.9k | 330 | %97 | 3 | 6 |
| 8 | Eşzamansız görevler veya arka plan işleri nasıl başlatılıyor? | 29.4k | 364 | %99 | 2 | 3 |
| 9 | Derleme, bağımlılıkları nasıl bağlıyor ve durumu nasıl başlatıyor? | 10.9k | 1.4k | %88 | 4 | 5 |
| 10 | Genel API yüzeyleri nasıl açığa çıkarılıyor (HTTP uç noktaları, kütüphane dışa aktarımları veya CLI komutları)? | 22.5k | 235 | %99 | 4 | 5 |
Toplam: %88 ortalama getiri tasarrufu (10 sorguda 142.8k → 5.5k token).
Varsayılan sorgu kümesi, çoğu uygulama kod tabanında (CLI'lar, arka plan programları, servisler) bulunan desenleri hedefler. Kendi numaralarınızı görmek için tokensave bench ile kendi projenizde çalıştırın veya daha sıkı geri çağırma için özel bir sorgu dosyası (--queries my.toml) yazın.
Büyük gerçek dünya depolarına karşı Criterion kıyaslaması
benches/large_repos.rs, MCP araçlarını sabit referanslarda sabitlenmiş dört büyük açık kaynak kod tabanına karşı uçtan uca çalıştıran bir criterion mikro kıyaslamasıdır. Her araç, depo başına bir kez indekslenmiş grafikten örneklenen argümanlarla (düğüm kimlikleri, nitelikli adlar, dosya globları, …) en az 5 sorgu tarafından yönlendirilir, böylece zamanlamalar çalıştırmalar arasında tekrarlanabilir.
Depolar ve sabitlenmiş referanslar (benches/repos.rs içinde tanımlanmıştır):
| Depo | URL | Ref |
|---|---|---|
| polkadot-sdk | https://github.com/paritytech/polkadot-sdk | polkadot-stable2412 |
| emacs | https://github.com/emacs-mirror/emacs | emacs-30.1 |
| scipy | https://github.com/scipy/scipy | v1.14.1 |
| node | https://github.com/nodejs/node | v22.11.0 |
Her depo ilk kullanımda sığ klonlanır (git init + git fetch --progress --depth 1 origin <ref> + checkout FETCH_HEAD) ve yerel olarak önbelleğe alınır; sonraki çalıştırmalar ödemeyi yeniden kullanır. Git çıktısı terminale akıtılır, böylece çoklu GB getirme gerçek zamanlı ilerleme gösterir.
Kapsanan araçlar (her biri 5 sorgu). Okuma araçları — search, context, callers, callees, node, by_qualified_name, signature, impact, body, files, complexity, doc_coverage, largest, hotspots, god_class, module_api, derives, dead_code, rank, coupling, circular. Yazma araçları — str_replace, multi_str_replace, insert_at ve (eğer ast-grep, PATH üzerindeyse) ast_grep_rewrite.
Her çalıştırmada zorla senkronizasyon. Herhangi bir kıyaslama başlamadan önce, çalıştırma düzeneği her depoda tokensave sync --force eşdeğerini çalıştırır (.tokensave/ güncelliğine bakılmaksızın index_all()), böylece zamanlamalar her zaman sabitlenmiş kaynağı yansıtır.
Yazma kıyaslamaları ve temizlik. Yazma araçları dosyaları değiştirir. "Eşleşme benzersiz olmalı" ön koşulunun korunması için, çalıştırma düzeneği criterion'un iter_batched özelliğini kullanır — <repo>/.tokensave-bench-scratch/ altındaki küçük bir karalama dosyası her zamanlanmış yinelemeden önce bilinen içerikle yeniden yazılır, ardından düzenleme aracı ona karşı çalışır. Tüm kıyaslamalar tamamlandıktan sonra, çalıştırma düzeneği hazırlanan her depo içinde git stash --include-untracked && git stash drop çalıştırır, böylece çalışma ağacı sabitlenmiş referansa geri döner.
Criterion yapılandırması. Kıyaslama, criterion'un varsayılanlarını sample_size = 10 ve measurement_time = 30s olarak geçersiz kılar (stok 100 / 5s'ye karşı), bu da sorgu başına zamanlamaya ~30 saniye ölçüm verir — polkadot-sdk üzerindeki tokensave_context gibi yavaş araçların kararlı sayılar üretmesi için yeterlidir.
Çalıştırın:
# Required: a writable cache directory for the cloned repos + their indexes.
# Expect several GB of disk and a long first run (shallow clone + full index of each repo).
export TOKENSAVE_BENCH_REPOS_DIR=~/tokensave-bench-cache
cargo bench --bench large_repos
Eğer TOKENSAVE_BENCH_REPOS_DIR ayarlanmamışsa, kıyaslama bir uyarı yazdırır ve sıfır kıyaslama kaydeder (böylece cargo bench --all katkıda bulunanların makinelerinde ucuz kalır).
Yapılandırma (tümü isteğe bağlı, ortam aracılığıyla):
| Değişken | Etki |
|---|---|
TOKENSAVE_BENCH_REPOS_DIR | Gerekli. Her deponun $DIR/<repo-name>/ dizinine klonlandığı kök dizin. |
TOKENSAVE_BENCH_REPOS | Kıyaslanacak depo adlarının virgülle ayrılmış alt kümesi, örn. TOKENSAVE_BENCH_REPOS=emacs,scipy. Varsayılan olarak dördü de. |
TOKENSAVE_BENCH_SKIP_CLONE | Ayarlanırsa, kıyaslama, getirme yerine zaten sabitlenmiş referansında olmayan herhangi bir depo için hızlıca başarısız olur. CI / çevrimdışı çalıştırmalarda kullanışlıdır. |
Kıyaslamaları filtreleme standart criterion CLI'sini kullanır — örneğin, yalnızca scipy üzerindeki search aracı:
cargo bench --bench large_repos -- 'scipy/tokensave_search'
Raporlar (HTML + ham örnekler) target/criterion/ altına iner.
Sabitlenmiş referansları değiştirmek için (örneğin daha yeni bir sürüme veya belirli bir SHA'ya), benches/repos.rs içindeki REPOS düzenleyin ve bir sonraki çalıştırmanın yeniden getirmesi için ilgili $TOKENSAVE_BENCH_REPOS_DIR/<repo>/.bench-ref işaretçisini silin. Çalıştırma sonrası temizliği atlarsanız (örneğin kıyaslama ortasında Ctrl-C yaparsanız), her depo dizini içinde git stash --include-untracked && git stash drop çalıştırmak onu manuel olarak geri yükler.
MCP test matrisi sondası (scripts/mcp_probe)
scripts/mcp_probe/, tokensave serve'ü stdio üzerinden yapılandırılabilir bir gerçek depo kümesine karşı çalıştıran ve dil başına 5 sorgu varyantı ile her salt okunur MCP aracını çalıştıran, araç başına / depo başına bir durum tablosu üreten bir Python çalıştırma düzeneğidir. Aynı düzenek iki amaca hizmet eder:
- Regresyon taraması. Yeni dil desteği, yeni araç veya bir yeniden düzenleme — matrisi yeniden çalıştırın ve yeni hata veren, zaman aşımına uğrayan veya boş sonuç döndüren herhangi bir hücre 🚩 olarak öne çıkar.
- Performans sondası. Çağrı başına zamanlamalar TSV olarak günlüğe kaydedilir; aynı sabit depo külliyatı, kaba bir çapraz sürüm karşılaştırması olarak ikiye katlanır. Mevcut
tokensave_inheritance_depthdöngü hatası, polkadot-sdk üzerindeki tek bir araç >60 s'de zaman aşımına uğradığında bu düzenek tarafından bulunmuştur.
Düzen — probe.py sürücüdür (kimlik eşlemeli JSON-RPC, böylece yavaş bir araç sonraki çağrıları zehirleyemez), isolated.py çağrı başına yeni bir sunucu ile tek bir aracı yeniden çalıştırır (sunucu kuyruklamasından kaçar), build_matrix.py TSV'yi okur ve markdown yayar, tools/<lang>.py modülleri dil başına sorgu kümelerine katkıda bulunur (Rust birlikte verilir; yeni bir modül bırakarak Python/Go/… ekleyin), repos.toml hedef depoları listeler ($TOKENSAVE_PROBE_REPOS aracılığıyla geçersiz kılın).
Hızlı çalıştırma:
cargo build --release --bin tokensave
python3 scripts/mcp_probe/probe.py
python3 scripts/mcp_probe/build_matrix.py > matrix.md
Çıktı hücreleri ✓ 5/5 (temiz), 🐛 e/N (hatalar), ⏱ N/N (zaman aşımları), ∅ E/N (boş), 🐢 ok/slow (>10 s çağrılar) şeklindedir. Hata veya zaman aşımı taşıyan herhangi bir hücre, en sağdaki sütunda bir 🚩 kazanır. Her hatanın ilk 100 karakterini içeren çağrı başına ayrıntı, takip için TSV günlüğüne iner.
Yukarıdaki criterion kıyaslamasından farklıdır: criterion, sabitlenmiş referanslarda odaklanmış bir araç kümesi için yineleme başına gecikmeyi ölçer ve target/criterion/ altında istatistiksel raporlar üretir; mcp_probe, işaret ettiğiniz herhangi bir depoda daha geniş bir sorgu kümesiyle her aracı çalıştırır, ölçüm hassasiyetinden ziyade kapsam genişliği için optimize eder.
80'den Fazla MCP Aracı
Sunucu 80'den fazla araç sunar (isteğe bağlı ast-grep ikili dosyası PATH üzerinde olmadığında bir eksik); aşağıdaki tablolar en yaygın kullanılanları kategoriye göre gruplandırır. Çoğu salt okunurdur, paralel olarak çağrılması güvenlidir ve readOnlyHint ile açıklanmıştır. Düzenleme temelleri tek dosyalarla sınırlıdır ve yerinde yeniden indekslenir; oturum taban çizgisi ve bellek kaydetme araçları da yerel .tokensave durumunu değiştirir ve salt okunur değil olarak açıklanmıştır. Üç temel araç (tokensave_context, tokensave_search, tokensave_status) anthropic/alwaysLoad olarak işaretlenmiştir, böylece istemcinin araç arama gidiş-dönüşünü atlarlar.
Keşif
| Araç | Amaç |
|---|---|
tokensave_context | Bir görev için ilgili kod bağlamını al -- giriş noktaları, ilgili semboller, kod parçacıkları |
tokensave_search | İsme göre sembolleri bul (fonksiyonlar, sınıflar, türler) |
tokensave_node | Belirli bir sembol için ayrıntıları + kaynak kodunu al |
tokensave_files | Filtreleme ile indekslenmiş proje dosyalarını listele |
tokensave_module_api | Bir dosya veya dizinin genel API yüzeyi |
tokensave_similar | Benzer adlara sahip sembolleri bul |
tokensave_annotations | Öznitelik/ek açıklama/dekoratör iç gözlemi -- tüm ek açıklamaların histogramı veya hedef filtreleriyle site başına listeler |
tokensave_dependencies | 17 ekosistemde paket manifestosu iç gözlemi -- çalışma alanı özeti, paket başına arama, lisans yüzeyi, sürüm kayması |
tokensave_status | İndeks durumu, istatistikler, kaydedilen tokenlar |
Çağrı Grafiği ve Etki
| Araç | Amaç |
|---|---|
tokensave_callers | Bir fonksiyonu neyin çağırdığını bul |
tokensave_callees | Bir fonksiyonun neyi çağırdığını bul |
tokensave_impact | Bir sembolü değiştirmekten neyin etkilendiğini gör |
tokensave_affected | Kaynak değişikliklerinden etkilenen test dosyalarını bul |
tokensave_rename_preview | Bir sembole tüm referanslar (yeniden adlandırma etkisini önizle) |
tokensave_hotspots | En bağlantılı semboller (en yüksek çağrı sayısı) |
Kod Kalitesi
| Araç | Amaç |
|---|---|
tokensave_complexity | Fonksiyonları döngüsel ve bilişsel karmaşıklık, yuvalama derinliği, Halstead metrikleri, sürdürülebilirlik endeksi, CRAP ve güvenlik metriklerine göre sırala |
tokensave_dead_code | Ulaşılamaz sembolleri bul (gelen kenar yok) |
tokensave_god_class | Çok fazla üyesi olan sınıfları bul |
tokensave_coupling | Dosyaları fan-in/fan-out'a göre sırala |
tokensave_inheritance_depth | En derin kalıtım hiyerarşilerini bul |
tokensave_circular | Dairesel dosya bağımlılıklarını tespit et |
tokensave_recursion | Özyinelemeli/karşılıklı özyinelemeli çağrı döngülerini tespit et |
tokensave_unused_imports | Hiç referans verilmeyen içe aktarma ifadeleri |
tokensave_doc_coverage | Belgeleri eksik genel semboller |
tokensave_simplify_scan | Değiştirilen dosyaların kalite analizi (çoğaltmalar, ölü kod, karmaşıklık) |
Kod Sağlığı Analitiği
Beş araç, mevcut grafikten yapısal kalite sinyallerini yüzeye çıkarır. Bileşik puan, hiçbir tek boyutun oyuna getirilememesi için bağımsız boyutlar üzerinde geometrik bir ortalama kullanır.
| Araç | Amaç |
|---|---|
tokensave_health | Döngüsüzlük, derinlik, eşitlik, fazlalık ve modülerlikten bileşik kalite sinyali (0-10000) |
tokensave_gini | Herhangi bir metrik için Gini eşitsizlik katsayısı (karmaşıklık, satırlar, fan-in/out, üyeler) -- tanrı dosyalarını ve eşit olmayan dağılımı bulur |
tokensave_dependency_depth | Tarjan SCC döngü kırmadan sonra tam zincir yeniden yapılandırması ile en uzun dosya düzeyinde bağımlılık zincirleri (Lakos seviyelendirmesi) |
tokensave_dsm | stats, clusters veya matrix biçiminde Tasarım Yapı Matrisi -- katmanlama ihlallerini ve gizli bağlantıyı ortaya çıkarır |
tokensave_test_risk | Karmaşıklığı, fan-in'i, kapsamı ve 90 günlük git dalgalanmasını tek bir puanda birleştiren risk ağırlıklı test açığı analizi |
Oturumlar
Bir AI kodlama oturumunun başlangıcında sağlık metriklerinin anlık görüntüsünü alın, ardından neyin iyileştiğini veya gerilediğini görmek için sonunda farkı alın.
| Araç | Amaç |
|---|---|
tokensave_session_start | Mevcut sağlık metriklerini daha sonra karşılaştırmak üzere bir JSON temel çizgisi olarak kaydet |
tokensave_session_end | Temel çizgiye karşı yeniden hesapla ve farkı al -- boyut başına deltalar, geçti/kaldı, otomatik temizlik |
Düzenleme Temelleri
Ajanların regex veya kabuk alıntılama tehlikeleri olmadan dosyaları değiştirmesine izin veren dört yazıcı araç. Her biri tek dosyalı, sabitlenmiş ve yazma işleminden sonra yerinde bir yeniden indeksleme tetikler, böylece grafik asla güncelliğini yitirmez.
| Araç | Amaç |
|---|---|
tokensave_str_replace | Benzersiz bir old_str öğesini new_str ile değiştir; 0 veya >1 eşleşme varsa başarısız olur (çoklu düzenleme hatalarına karşı korur) |
tokensave_multi_str_replace | N adet (old, new) değişimini atomik olarak uygula -- ya hep ya hiç işlemi |
tokensave_insert_at | Benzersiz bir sabitleyici dize veya satır numarasından önce veya sonra içerik ekle |
tokensave_ast_grep_rewrite | --rewrite modunda ast-grep CLI aracılığıyla yapısal kod yeniden yazımı |
Git & İş Akışı
| Araç | Amaç |
|---|---|
tokensave_diff_context | Değişen dosyalar için anlamsal bağlam -- değiştirilen semboller, bağımlılıklar, etkilenen testler |
tokensave_commit_context | Commit mesajı taslağı için commit edilmemiş değişikliklerin anlamsal özeti |
tokensave_pr_context | Pull request açıklamaları için git referansları arasındaki anlamsal fark |
tokensave_changelog | İki git referansı arasındaki anlamsal fark |
tokensave_test_map | Sembol seviyesinde kaynak-test eşlemesi, kapsanmayan sembol tespiti ile |
tokensave_test_coverage | Geçişli çağrı kenarı genişletmesi ile dosya/sembol/test-fonksiyonu başına kapsam toplamı |
Tip Sistemi
| Araç | Amaç |
|---|---|
tokensave_type_hierarchy | Trait'ler, arayüzler ve sınıflar için özyinelemeli tip hiyerarşi ağacı |
tokensave_rank | İlişki sayısına göre düğümleri sırala (en çok uygulanan arayüz, en çok genişletilen sınıf) |
tokensave_distribution | Dosya veya dizin başına düğüm türü dağılımı |
tokensave_largest | Boyuta göre düğümleri sırala -- en büyük sınıflar, en uzun metotlar |
Taşıma
| Araç | Amaç |
|---|---|
tokensave_port_status | Taşıma ilerlemesini izlemek için kaynak/hedef dizinler arasındaki sembolleri karşılaştır |
tokensave_port_order | Taşıma için sembollerin topolojik sıralaması -- önce yaprakları, sonra bağımlı olanları taşı |
Çoklu Dal
| Araç | Amaç |
|---|---|
tokensave_branch_search | Başka bir dalın grafiğinde sembol ara |
tokensave_branch_diff | Dallar arasındaki sembolleri karşılaştır (eklenen/kaldırılan/değişen) |
tokensave_branch_list | VT boyutları ve senkronizasyon zamanları ile izlenen dalları listele |
MCP Kaynakları
resources/list ve resources/read aracılığıyla dört kaynak sunulur:
tokensave://status-- JSON olarak grafik istatistikleritokensave://files-- dizine göre gruplandırılmış indekslenmiş dosya ağacıtokensave://overview-- dil dağılımı ve sembol türleri ile proje özetitokensave://branches-- VT boyutları ve üst öğe bilgisi ile izlenen dallar
Token Takibi
tokensave, her MCP araç çağrısında tasarruf ettiği token'ları ölçer. Her araç yanıtı, o belirli çağrı tarafından kaç tane ham dosya token'ından kaçınıldığını gösteren bir tokensave_metrics: before=N after=M satırı içerir.
Maliyet gözlemlenebilirliği
tokensave cost # 7-day cost summary (default)
tokensave cost today # today only
tokensave cost --by-model # breakdown by Claude model
tokensave cost --by-task # breakdown by task category (coding, debugging, exploration, ...)
tokensave cost --export json # JSON export to stdout
tokensave cost --export csv # CSV export to stdout
Claude Code oturum transkriptlerini (~/.claude/projects/**/*.jsonl) ayrıştırır, her API dönüşünü 13 görev kategorisinden birine sınıflandırır, model fiyatlandırmasını kullanarak dolar maliyetini hesaplar ve hızlı toplu sorgular için sonuçları ~/.tokensave/global.db içinde saklar. Fiyatlandırma her 24 saatte bir LiteLLM adresinden yenilenir ve çevrimdışıyken gömülü bir tabloya geri döner.
tokensave status başlığı, bugünkü harcamayı, 7 günlük toplamı ve verimlilik oranını (tasarruf edilen token'lar / toplam token'lar) gösteren bir maliyet satırı içerir. tokensave monitor TUI, tasarruf akışının yanında canlı bir maliyet paneli gösterir. Her Claude Code oturumunun sonunda, hook_stop işleyicisi terminale tek satırlık bir makbuz yazdırır.
Görev sınıflandırma kategorileri: Kodlama, Hata Ayıklama, Özellik Geliştirme, Yeniden Düzenleme, Test, Keşif, Planlama, Yetkilendirme, Git İşlemleri, Derleme/Dağıtım, Beyin Fırtınası, Sohbet, Genel. Sınıflandırma deterministiktir (araç adları ve Bash komutları üzerinde desen eşleştirme), LLM çağrısı gerektirmez ve AgentSeal/codeburn adresinden uyarlanmıştır.
Canlı izleyici
tokensave monitor
~/.tokensave/monitor.mmap adresindeki paylaşılan bir bellek eşlemeli halka arabellek aracılığıyla tüm projelerden MCP araç çağrılarını gerçek zamanlı olarak gösteren küresel bir TUI. Her giriş proje adını, araç adını ve token deltasını gösterir. Üst kısımdaki bir maliyet paneli bugünkü harcamayı, tasarrufu, verimliliği ve en çok kullanılan modeli gösterir (her 30 saniyede bir yenilenir).
Oturum ve ömür boyu sayaçlar
tokensave current-counter # show per-project session counter
tokensave reset-counter # reset the session counter
tokensave status # shows project + global lifetime totals + cost
tokensave status proje indeks istatistiklerini, dil dağılımını, maliyet satırını (bugün / 7g / verimlilik) ve proje + dünya çapında ömür boyu toplamları gösterir:
Dünya çapında sayaç
Tüm tokensave kullanıcıları anonim bir toplu sayaca katkıda bulunur. tokensave status hem proje toplamınızı hem de dünya çapındaki toplamı gösterir. Yükleme, tanımlayıcı bilgi olmadan yalnızca tek bir sayı (örn. 4823) gönderir. tokensave disable-upload-counter ile devre dışı bırakabilirsiniz.
İndeks Güncelliği
tokensave, arka plan servisi veya işletim sistemi seviyesinde bir dosya izleyicisi olmadan grafiği güncel tutar.
İsteğe bağlı güncellik kontrolü. Her MCP araç çağrısı, son senkronizasyondan bu yana herhangi bir indekslenmiş dosyanın değiştirilip değiştirilmediğini kontrol eder. Güncel olmayan dosyalar bulunursa, araç yanıtı döndürülmeden önce yeniden çıkarılırlar. 30 saniyelik bir bekleme süresi, arka arkaya yapılan çağrıların her tuş vuruşunda ağacı yeniden taramasını engeller.
Bağlantıda yakalama senkronizasyonu. MCP sunucusu başladığında, hiçbir ajan bağlı değilken yapılan değişiklikleri (bir git pull, bir IDE düzenlemesi, bir derleme adımı) alan, engellemeyen bir yakalama senkronizasyonu hemen çalıştırır -- böylece bir oturumun ilk araç çağrısı güncel bir indeks görür.
Çoklu ajan çalışması ve git çalışma ağaçları. Birden fazla ajan aynı proje üzerinde eşzamanlı çalıştığında, güçlü varsayım her ajanın kendi git çalışma ağacında çalıştığıdır. Çalışma ağaçları, aynı deponun bağımsız dosya sistemi kopyalarıdır: ajan A ve ajan B'nin her birinin kendi dosya kopyası vardır, bu nedenle birbirlerinin uçuş halindeki düzenlemelerinin üzerine asla yazmazlar. tokensave, bir sorgunun ana checkout içinde yuvalanmış bir çalışma ağacından geldiğini otomatik olarak algılar ve sonuçları doğru dal grafiğinden sunar. Değişiklikler bağımsız olarak birikir ve sonunda git merge veya rebase yoluyla uzlaştırılır -- diğer herhangi bir paralel geliştirme için kullanılan süreçle aynı. Bu tasarım, paylaşılan değişken bir dizin üzerinde çapraz ajan kilitlemenin karmaşıklığından ve başarısızlık modlarından kaçınır.
Yalnızca CLI iş akışları. Bağlı bir ajan olmadan (MCP sunucusu yok) tokensave komutlarını çalıştırırsanız, güncellik kontrolü komutlar arasında çalışmaz. Her commit veya clone işleminden sonra indeksi otomatik olarak güncel tutmak için git kancaları yükleyin:
cp scripts/post-commit scripts/post-checkout .git/hooks/
chmod +x .git/hooks/post-commit .git/hooks/post-checkout
5.x'ten Yükseltme
Bağımsız tokensave daemon komutu ve onun launchd/systemd/Windows Hizmeti otomatik başlatması 6.0.0'da kaldırıldı. Servisin yerini alan gömülü işletim sistemi seviyesindeki dosya izleyicisi 6.1.0'da kaldırıldı (derin node_modules veya target ağaçlarına sahip büyük monorepo'larda aşırı CPU ve bellek kullanımına neden oldu). Yukarıdaki isteğe bağlı güncellik modeli mevcut tasarımdır.
Hala 5.x'ten kalma bir servis otomatik başlatmanız varsa, onu kaldırın:
- macOS:
launchctl unload ~/Library/LaunchAgents/com.tokensave.daemon.plist && rm ~/Library/LaunchAgents/com.tokensave.daemon.plist - Linux:
systemctl --user disable --now tokensave-daemon && rm ~/.config/systemd/user/tokensave-daemon.service - Windows:
sc.exe delete tokensave-daemon(yönetici yetkili bir terminalden)
Tam adı hatırlamıyorsanız: launchctl list | grep tokensave / systemctl --user list-units | grep tokensave / sc.exe query state= all | findstr -i tokensave.
Kendi Kendine Yükseltme
tokensave upgrade # upgrade to latest in current channel
tokensave channel # show current channel (stable/beta)
tokensave channel beta # switch to beta channel
tokensave channel stable # switch back to stable
tokensave upgrade GitHub sürümlerinden doğru platform ikili dosyasını indirir ve çalışan ikili dosyayı yerinde değiştirir. Kararlı ve beta kanallarını bağımsız olarak destekler.
Sürümleme & yükseltmeler
tokensave sürüm numaraları SemVer gibi görünür ancak onu takip etmez: değişen bileşen, güncellemenin gerektirdiği bakımı kodlar ve tokensave bunu bir sonraki başlatmada otomatik olarak gerçekleştirir -- asla elle yeniden yükleme veya yeniden indeksleme yapmazsınız.
| Artış | Örnek | Güncelleme gerektirir | Otomatik eylem |
|---|---|---|---|
Yama (x.y.Z) | 7.2.0 → 7.2.1 | Hiçbir şey | Yok -- yeniden yükleme yok, yeniden indeksleme yok |
Küçük (x.Y.0) | 7.2.0 → 7.3.0 | Yeniden yükleme (yeni koşum takımları, yeni araçlar, yeni yapılandırma) | Yüklü her ajan entegrasyonunun küresel yeniden yüklemesi (izinleri, kancaları ve MCP yapılandırmasını yeniler) |
Büyük (X.0.0) | 7.2.0 → 8.0.0 | Yeniden yükleme + tam yeniden senkronizasyon | Küresel yeniden yükleme ve proje başına zorunlu yeniden indeksleme (sync -f eşdeğeri) |
Küresel yeniden yükleme. Yeni bir küçük veya büyük derlemenin ilk çalıştırmasında, tokensave kaydettiği her ajan için sessizce install komutunu yeniden çalıştırır, böylece ajan yapılandırması her zaman mevcut ikili dosyayı işaret eder ve mevcut araç setini sunar. Yama artışları bunu atlar -- çalışan sürüm işaretçisi basitçe ilerletilir.
Proje başına zorunlu yeniden indeksleme (yalnızca büyük). Büyük bir artış, proje indekslerinin yeniden oluşturulması gerektiği anlamına gelir. tokensave bunu tembelce ve proje başına yapar: büyük bir yükseltmeden sonra bir projedeki ilk MCP araç çağrısında, araç yanıtını asla engellemeyen bir arka plan tam yeniden indeksleme (tokensave sync --force eşdeğeri) başlatır.
Brew / cargo geri dönüşü. tokensave upgrade dışında ikili dosyayı değiştiren harici yükseltmeler -- brew upgrade tokensave veya cargo install tokensave -- aynı şekilde algılanır: çalışan sürüm, bir yükleme gerçekleştiren son sürümden daha yeniyse, yeniden yükleme, tıpkı bir kendi kendine yükseltmeden sonra olduğu gibi bir sonraki başlatmada çalışır.
tokensave'in SemVer'den neden ayrıldığı (bakımı sürüme kodlamak, sıfır dokunuşlu yükseltmeleri mümkün kılan şeydir), işaretçi mekaniği, bağımsız veritabanı şema sürümü ve sürüm çıkarmak için bakımcı kuralları için TOKENSAVE-VERSIONING.md dosyasına bakın.
CLI Referansı
tokensave init [path] # Initialize a new project (full index)
tokensave sync [path] # Incremental sync (must be initialized first)
tokensave sync --force [path] # Force a full re-index
tokensave sync --doctor [path] # Sync and list added/modified/removed files
tokensave status [path] # Show statistics + cost summary
tokensave status [path] --json # Show statistics (JSON output)
tokensave status --details # Include node-kind breakdown
tokensave cost [range] # Token cost summary (default: 7d)
tokensave cost --by-model # Cost grouped by model
tokensave cost --by-task # Cost grouped by task category
tokensave cost --export json|csv # Export cost data
tokensave query <search> [path] # Search symbols
tokensave files [--filter dir] [--pattern glob] [--json] # List indexed files
tokensave affected <files...> [--stdin] [--depth N] # Find affected test files
tokensave install [--agent NAME] # Configure agent integration
tokensave reinstall # Refresh settings for all installed agents
tokensave uninstall [--agent NAME] # Remove agent integration
tokensave serve # Start MCP server
tokensave monitor # Live TUI showing MCP calls across all projects
tokensave upgrade # Self-update to latest version
tokensave channel [stable|beta] # Show or switch update channel
tokensave doctor [--agent NAME] # Check installation health
tokensave branch add|list|remove|removeall|gc # Multi-branch management
tokensave current-counter # Show per-project token counter
tokensave reset-counter # Reset per-project token counter
tokensave disable-upload-counter # Opt out of worldwide counter uploads
tokensave enable-upload-counter # Re-enable worldwide counter uploads
tokensave doctor
tokensave kurulumunuzun kapsamlı bir sağlık kontrolünü çalıştırın:
tokensave doctor
Kontroller: ikili dosya konumu, proje indeksi, küresel VT, kullanıcı yapılandırması, ajan entegrasyonu (MCP sunucusu, kancalar, izinler, istem kuralları) ve ağ bağlantısı. Bir yükseltmeden sonra herhangi bir araç izni eksikse, size tokensave install komutunu çalıştırmanızı söyler. Yalnızca belirli bir ajanı kontrol etmek için --agent kullanın.
Doctor ayrıca yüklü her kancanın doğru tokensave alt komutunu kullandığını doğrular ve bozuk kancaları otomatik olarak onarır.
Claude Code ile Nasıl Çalışır
Yapılandırıldıktan sonra, Claude Code kod tabanınızı anlaması gerektiğinde ham dosyaları okumak yerine otomatik olarak tokensave kullanır. Üç katman birbirini güçlendirir:
| Katman | Ne yapar | Neden önemli |
|---|---|---|
| MCP sunucusu | Claude'a 80'den fazla tokensave_* aracı sunar | Claude grafiği doğrudan sorgulayabilir |
| CLAUDE.md kuralları | Claude'a ajanlar/dosya okumaları yerine tokensave'i tercih etmesini söyler | Modelin pahalı desenlere geri dönmesini engeller |
| PreToolUse kancası | Yerel Rust kancası Keşif ajanlarını engeller | Modelin CLAUDE.md kurallarını yok saydığı durumları yakalar |
| UserPromptSubmit kancası | İstem gönderiminde çalışır | Token muhasebesi için yaşam döngüsü takibi |
| Stop kancası | Oturum sona erdiğinde çalışır | Token sayaçlarını temizler |
Sonuç: Claude aynı kod anlayışını çok daha az token ile elde eder. Tipik bir Keşif ajanı 20-50 dosya okur; tokensave ilgili sembolleri, ilişkileri ve kod parçacıklarını önceden oluşturulmuş indeksinden döndürür.
Ağ Çağrıları ve Gizlilik
tokensave'in temel işlevselliği (indeksleme, arama, grafik sorguları, MCP sunucusu) %100 yereldir -- kodunuz makinenizden asla ayrılmaz.
| Çağrı | Gönderilen veri | Ne zaman | Devre dışı bırakma |
|---|---|---|---|
| Dünya çapında sayaç yükleme | Token sayısı (bir sayı) + ülke (IP'den) | sync, status, MCP oturumları | tokensave disable-upload-counter |
| Dünya çapında sayaç okuma | Hiçbir şey (GET isteği) | status | Yok (salt okunur, 1sn zaman aşımı) |
| Sürüm kontrolü | Hiçbir şey (GET isteği) | status (5dk önbellek), sync (paralel) | Yok (1sn zaman aşımı, başarısızlıkta işlem yapılmaz) |
| Model fiyatlandırma yenileme | Hiçbir şey (GET isteği) | tokensave cost (24s önbellek) | Yok (5sn zaman aşımı, gömülü fiyatlandırmaya geri döner) |
Dünya çapında sayaç yükleme, {"amount": 4823} gibi bir JSON gövdesiyle tek bir HTTP POST gönderir. Çerez yok, izleme yok, kullanıcı kimliği yok. Cloudflare Worker, toplu coğrafi istatistikler için IP adresinizin ülkesini (istek başlıklarından türetilir) günlüğe kaydeder -- gerçek IP adresiniz saklanmaz.
Model fiyatlandırma yenileme, tokensave cost için Claude model fiyatlandırmasını güncel tutmak amacıyla GitHub'dan (raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json) genel bir JSON dosyası alır. Hiçbir veri gönderilmez -- düz bir HTTPS GET isteğidir. Yanıt ~/.tokensave/pricing.json adresinde 24 saat boyunca önbelleğe alınır. Getirme başarısız olursa, tokensave derlenmiş fiyatlandırma tablosunu kullanır.
50'den Fazla Dil
tokensave, Cargo özellik bayraklarıyla kontrol edilen üç kademede düzenlenmiş 50'den fazla programlama dilini destekler. Her kademe, altındaki kademedeki tüm dilleri içerir. Markdown başlıkları, belge yapısının kaynak koduyla birlikte graf sorgularına katılması için hiyerarşik Contains kenarlarına sahip Module düğümleri olarak çıkarılır.
Lite -- --no-default-features
Her zaman derlenir. En popüler diller için en küçük ikili dosya, ayrıca Svelte ve Astro (TypeScript çıkarıcı aracılığıyla betik bloğu çıkarma, ek dil bilgisi bağımlılığı yok).
| Dil | Uzantılar |
|---|---|
| Rust | .rs |
| Go | .go |
| Java | .java |
| Scala | .scala, .sc |
| TypeScript | .ts, .tsx |
| JavaScript | .js, .jsx |
| Python | .py |
| C | .c, .h |
| C++ | .cpp, .hpp, .cc, .cxx, .hh |
| Kotlin | .kt, .kts |
| C# | .cs |
| Swift | .swift |
| Svelte | .svelte |
| Astro | .astro |
Medium (Lite + 9 tane daha) -- --features medium
| Dil | Uzantılar | Özellik bayrağı |
|---|---|---|
| Dart | .dart | lang-dart |
| Pascal | .pas, .pp, .dpr | lang-pascal |
| PHP | .php | lang-php |
| Ruby | .rb | lang-ruby |
| Bash | .sh, .bash | lang-bash |
| Protobuf | .proto | lang-protobuf |
| PowerShell | .ps1, .psm1 | lang-powershell |
| Nix | .nix | lang-nix |
| VB.NET | .vb | lang-vbnet |
Full (Medium + diğer her şey) -- varsayılan
| Dil | Uzantılar | Özellik bayrağı |
|---|---|---|
| ActionScript | .as | lang-actionscript |
| Lua | .lua | lang-lua |
| Zig | .zig | lang-zig |
| Objective-C | .m, .mm | lang-objc |
| Perl | .pl, .pm | lang-perl |
| Batch/CMD | .bat, .cmd | lang-batch |
| Fortran | .f90, .f95, .f03, .f08, .f18, .f, .for | lang-fortran |
| COBOL | .cob, .cbl, .cpy | lang-cobol |
| MS BASIC 2.0 | .bas | lang-msbasic2 |
| GW-BASIC | .gw | lang-gwbasic |
| QBasic | .qb | lang-qbasic |
| QuickBASIC 4.5 | .bi, .bm | lang-qbasic |
| Dockerfile | Dockerfile, .dockerfile | lang-dockerfile |
| GLSL | .glsl, .vert, .frag, .comp | lang-glsl |
| WGSL | .wgsl | lang-wgsl |
| HLSL | .hlsl, .fx | lang-hlsl |
| Metal | .metal | lang-metal |
| Markdown | .md, .markdown | lang-markdown |
| R | .r, .R | lang-r |
| SQL | .sql | lang-sql |
| Julia | .jl | lang-julia |
| Haskell | .hs, .lhs | lang-haskell |
| OCaml | .ml, .mli | lang-ocaml |
| Clojure | .clj, .cljs, .cljc | lang-clojure |
| Erlang | .erl, .hrl | lang-erlang |
| Elixir | .ex, .exs | lang-elixir |
| F# | .fs, .fsi, .fsx | lang-fsharp |
| F* | .fst, .fsti | lang-fstar |
| Quint | .qnt | lang-quint |
| TOML | .toml | lang-toml |
| Lean | .lean | lang-lean |
Bireysel diller, tam bir kademe olmadan da seçilebilir:
cargo install tokensave --no-default-features --features lang-nix,lang-bash
Tüm çıkarıcılar aynı derinliği paylaşır: fonksiyonlar, sınıflar, metotlar, alanlar, içe aktarmalar, çağrı grafları, kalıtım zincirleri, docstring'ler, karmaşıklık metrikleri, dekoratör/ek açıklama çıkarma ve dosyalar arası bağımlılık takibi.
tokensave vs CodeGraph
tokensave, CodeGraph (Node.js/TypeScript) aracının sıfırdan Rust ile yeniden yazılmış halidir. Her ikisi de AI kodlama ajanları için anlamsal kod grafları oluşturur, ancak kapsam ve yetenekler açısından önemli ölçüde farklılaşırlar.
| tokensave | CodeGraph | |
|---|---|---|
| Çalışma Zamanı | Yerel ikili dosya (Rust) | Node.js 18+ |
| Kurulum | brew install, cargo install, scoop install | npx @colbymchenry/codegraph |
| Diller | 50+ (3 kademe: lite/medium/full) | 19+ |
| MCP araçları | 80+ | 9 |
| Ajan entegrasyonları | 12+ (Claude, Codex, Gemini, Qwen, OpenCode, Cursor, Cline, Copilot, Roo Code, Zed, Antigravity, Kilo, Kiro, Kimi, Vibe, Grok, Factory Droid) | 1 (Claude Code) |
| Dizin tazeliği | Her MCP çağrısında isteğe bağlı güncellik kontrolü; bağlantıda yakalama senkronizasyonu; çok ajanlı çalışmanın git worktree'leri kullanması beklenir | Yerel işletim sistemi düzeyinde dosya izleyici (FSEvents/inotify/ReadDirectoryChangesW, 2 sn gecikme); bağlantıda yakalama senkronizasyonu |
| Çok dallı indeksleme | Evet, isteğe bağlı (dal başına VT, dallar arası diff/arama) | Hayır |
| Karmaşıklık metrikleri | AST'den çıkarılan (dallar, döngüler, yuvalama derinliği, döngüsel & bilişsel karmaşıklık, Halstead, sürdürülebilirlik endeksi, CRAP) | Hayır |
| Taşıma araçları | Evet (port_status, port_order) | Hayır |
| Graf görselleştirici | Kaldırıldı (v4.0.1) | Evet |
| Anlamsal arama | Ajan güdümlü anahtar kelime genişletme (sıfır maliyet) | Yerel gömme vektörleri (ONNX aracılığıyla nomic-embed-text-v1.5) |
| MCP kaynakları | 4 (status, files, overview, branches) | Hayır |
| MCP ek açıklamaları | Evet (readOnlyHint, alwaysLoad) | Hayır |
| Ölü kod tespiti | Evet | Hayır |
| Döngüsel bağımlılık tespiti | Evet | Hayır |
| Tür hiyerarşisi | Evet | Hayır |
| Tanrı sınıfı / bağlaşıklık analizi | Evet | Hayır |
| Commit / PR bağlamı | Evet | Hayır |
| Test eşleme | Evet | Hayır |
| Yeniden adlandırma önizleme | Evet | Hayır |
| Token takibi | Çağrı başına metrikler, canlı TUI monitörü, oturum + ömür boyu sayaçlar | Hayır |
| Kod sağlığı analitiği | Bileşik puan, Gini, bağımlılık derinliği, DSM, risk ağırlıklı test boşlukları, oturum deltaları | Hayır |
| Düzenleme temelleri | Otomatik yeniden indekslemeli 4 atomik yazıcı (str_replace, multi_str_replace, insert_at, ast_grep_rewrite) | Hayır |
| Çökme dayanıklılığı | Alt süreç izole çıkarma; yerel dil bilgisi iptalleri dosyayı atlar, senkronizasyon devam eder | Hayır |
| Kendi kendine yükseltme | Kararlı/beta kanallarıyla tokensave upgrade | npm update |
| VT motoru | libsql (SQLite çatalı, WAL, asenkron) | better-sqlite3 / wa-sqlite (WASM) |
| İndeksleme hızı | 1.782 dosya için ~1.2sn | 1.782 dosya için ~4sn |
| İkili dosya boyutu | ~25 MB (tüm dil bilgileri paketlenmiş) | ~80 MB (node_modules + WASM) |
CodeGraph bu yaklaşımın öncüsüdür ve npm araçlarını tercih ediyorsanız ve yalnızca Claude Code entegrasyonuna ihtiyacınız varsa sağlam bir seçim olmaya devam eder. tokensave, daha derin analiz, daha fazla ajan, çok dallı destek ve çalışma zamanı bağımlılığı olmayan yerel bir ikili dosya ile konsepti genişletir.
CodeGraph, Dual-Graph (GrapeRoot), code-review-graph ve OpenWolf ile ayrıntılı karşılaştırmalar için docs/COMPARABLE-TOOLS.md adresine bakın.
Alternatifler Karşısında Neden tokensave
Birçok araç, AI kodlama ajanları için token kullanımını azaltır. İşte tokensave'in neden öne çıktığı.
Tek yerel ikili dosya, sıfır bağımlılık
Her alternatif bir çalışma zamanı gerektirir: Python, Node.js veya her ikisi. tokensave, tüm 50'den fazla tree-sitter dil bilgisi paketlenmiş olarak ~25 MB'lık tek bir Rust ikili dosyası olarak gelir. Kurulacak başka bir şey yok.
En derin kod zekası
tokensave sembol düzeyinde çalışır: fonksiyonlar, yapılar, alanlar, çağrı kenarları, tür hiyerarşileri, karmaşıklık metrikleri. Dual-Graph (GrapeRoot) gibi alternatifler dosya düzeyinde çalışır -- hangi dosyaların var olduğunu bilirler ancak "bu fonksiyonu kim çağırıyor?" veya "bu yapıyı değiştirirsem ne bozulur?" sorularına cevap veremezler. tokensave'in 80'den fazla özel MCP aracı; çağrı grafı gezinimi, etki analizi, ölü kod tespiti, test eşleme, yeniden adlandırma önizleme, tür hiyerarşileri, döngüsel bağımlılık tespiti, karmaşıklık sıralaması, kod sağlığı analitiği (Gini, DSM, bağımlılık derinliği, risk ağırlıklı test boşlukları), atomik düzenleme temelleri ve daha fazlasını kapsar. En yakın rakip (code-review-graph) 22 araca sahiptir; diğerleri 5-9 arasındadır.
En geniş ajan desteği
Ajan başına yerel yapılandırma formatlarıyla bir düzineden fazla AI kodlama ajanı entegrasyonu. Başka hiçbir araç bu kadar çok ajanı bu kadar derin bir entegrasyonla kapsamaz. Claude Code; kancalar, istem kuralları ve otomatik izin verilen araç izinleri alır. Kiro; genel MCP yapılandırması, kaynak olarak yüklenen tokensave.md yönlendirmesi, izin verilen yerleşik/tokensave araç onayına sahip yönetilen bir ajan ve yetki devri korumaları ile yazma sonrası senkronizasyon için kancalar alır. Diğer ajanlar, kendi yerel yapılandırma formatlarında MCP sunucu kaydı alır.
Çok dallı indeksleme
İsteğe bağlı dal başına graf veritabanları ve dallar arası diff ve arama özelliğine sahip bu alandaki tek araç. Etkinleştirildiğinde, dallar arasında geçiş anında gerçekleşir -- yeniden indeksleme gerekmez.
Çağrı başına token takibi
Her bir MCP araç çağrısının tam olarak kaç token tasarrufu sağladığını, ayrıca tüm projeler genelinde canlı bir TUI monitörü ve ömür boyu sayaçları raporlayan tek araç.
Tamamen açık kaynak
MIT lisanslı Rust, uçtan uca denetlenebilir. Dual-Graph'ın çekirdek motoru (PyPI'da graperoot) özeldir -- kod grafiğinizle ne yaptığını göremezsiniz. OpenWolf AGPL-3.0'dır, bu da türev çalışmaların açık kaynak olmasını gerektirir.
Performans
1.782 dosyalık karma Rust/Java/Scala kod tabanında (57K düğüm, 103K kenar) tam indeks kıyaslaması:
| Araç | Süre | Hızlanma |
|---|---|---|
| CodeGraph (TypeScript) | 31.2sn | 1x |
| tokensave (Rust) | 1.2sn | 26x |
Sorun Giderme
"tokensave başlatılmadı"
Projenizde .tokensave/ dizini mevcut değil.
tokensave init
MCP sunucusu bağlanmıyor
AI ajanı tokensave araçlarını görmüyor.
- Ajan yapılandırmasının tokensave MCP sunucusunu içerdiğinden emin olun (
tokensave doctorkomutunu çalıştırın) - Ajanı tamamen yeniden başlatın
tokensavedosyasının PATH'inizde olduğunu kontrol edin:which tokensave
Aramada eksik semboller
- Dizini güncellemek için
tokensave synckomutunu çalıştırın - Dilin desteklendiğini kontrol edin (yukarıdaki tabloya bakın)
- Dosyanın
.gitignoretarafından hariç tutulmadığını doğrulayın
İndeksleme yavaş
Büyük projeler ilk tam indekslemede daha uzun sürer.
- Sonraki çalıştırmalar artımlı senkronizasyon kullanır ve çok daha hızlıdır
- Günlük güncellemeler için
tokensave synckullanın (--forcedeğil) - Bir ajan bağlıyken her MCP araç çağrısında güncellik otomatik olarak kontrol edilir
Belirli projeler için tokensave'i devre dışı bırakma
Bir proje çok büyükse ve tokensave çok fazla RAM kullanıyorsa, MCP sunucu ortamında DISABLE_TOKENSAVE=true ayarlayarak proje bazında devre dışı bırakabilirsiniz. Sunucu başlatma yapmadan temiz bir şekilde çıkar.
Claude Code — projenizin .claude/settings.json dosyasına ekleyin:
{
"mcpServers": {
"tokensave": {
"command": "tokensave",
"args": ["serve"],
"env": {
"DISABLE_TOKENSAVE": "true"
}
}
}
}
Diğer ajanlar — ajanınızın MCP sunucularını başlatmak için kullandığı yapılandırmada ortam değişkenini ayarlayın.
Ayrıca kabuk üzerinden global olarak da ayarlayabilirsiniz (DISABLE_TOKENSAVE=true claude), ancak bu oturumdaki tüm projeler için tokensave'i devre dışı bırakır.
Köken
Bu proje, @colbymchenry tarafından geliştirilen orijinal CodeGraph TypeScript uygulamasının bir Rust portudur. Port, performans ve yerel tree-sitter bağlamaları için Rust'tan yararlanırken aynı mimariyi ve MCP araç arayüzünü korur.
Derleme
cargo build --release # full (50+ languages, default)
cargo build --release --features medium # medium tier
cargo build --release --no-default-features # lite (smallest binary)
cargo test # run all tests (requires full)
cargo check --no-default-features # verify lite compiles
cargo clippy --all
Yıldız Geçmişi
Sponsorlar
|
| Windows'ta ücretsiz kod imzalama SignPath.io tarafından sağlanmaktadır, sertifika SignPath Foundation tarafından verilmiştir |
Lisans
MIT Lisansı -- ayrıntılar için LICENSE dosyasına bakın.