tokensave
resmiTingkatkan Agen Anda dengan Kecerdasan Kode Semantik dan hemat ๐ฐ dalam prosesnya!
Apa yang bisa Anda lakukan dengan Tokensave MCP?
- Pencarian kode semantik โ Cari kode berdasarkan makna, bukan hanya teks: query
tokensave_searchuntuk "autentikasi" dan dapatkanlogin,validateToken, danAuthServicedalam satu panggilan. - Analisis dampak โ Lacak
tokensave_callersdantokensave_calleesuntuk melihat dengan tepat apa yang rusak sebelum mengubah simbol apa pun. - Pembangunan konteks โ Gunakan
tokensave_contextuntuk mengambil titik masuk, simbol terkait, dan cuplikan kode dalam satu panggilan alat, alih-alih memindai file. - Kueri lintas cabang โ Bandingkan grafik kode antar cabang dengan
tokensave_branch_diffatau cari simbol cabang lain melaluitokensave_branch_searchtanpa berpindah checkout. - Memori sesi โ Simpan keputusan desain dengan
tokensave_record_decisiondan ingat kembali nanti melaluitokensave_session_recallsehingga pilihan arsitektur tidak perlu dijelaskan ulang. - Edit atomik โ Terapkan
tokensave_str_replacedengan jangkar unik atau penulisan ulang AST tanpa risiko regex atau kutipan shell, dengan pengindeksan ulang otomatis setelah penulisan.
Dokumentasi
Kecerdasan Kode Semantik untuk Agen Pengkodean AI
Lebih sedikit token โข Lebih sedikit panggilan alat โข 100% lokal
Mengapa tokensave?
Agen pengkodean AI membuang-buang token untuk menjelajahi basis kode. Setiap grep, glob, dan pembacaan file membutuhkan biaya. Pada tugas yang kompleks, agen memunculkan beberapa sub-agen Explore yang memindai ratusan file hanya untuk membangun konteks.
tokensave memberi agen grafik pengetahuan semantik yang telah diindeks sebelumnya. Alih-alih memindai file, agen menanyakan grafik dan mendapatkan jawaban terstruktur secara instan -- simbol yang tepat, hubungannya, dan kode sumbernya, dalam satu panggilan.
Cara Kerjanya
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 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 โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Tanpa tokensave: Agen menggunakan grep, glob, dan Read untuk memindai file -- banyak panggilan API, penggunaan token yang tinggi.
Dengan tokensave: Agen menanyakan grafik melalui alat MCP -- hasil instan, pemrosesan lokal, lebih sedikit token.
Fitur Utama
| Pembangunan Konteks Cerdas | Pencarian Semantik | Analisis Dampak |
| Satu panggilan alat mengembalikan semua yang dibutuhkan agen -- titik masuk, simbol terkait, dan cuplikan kode. | Temukan kode berdasarkan makna, bukan hanya teks. Cari "autentikasi" dan temukan login, validateToken, AuthService. | Ketahui dengan pasti apa yang rusak sebelum Anda mengubahnya. Lacak pemanggil, yang dipanggil, dan radius dampak penuh dari simbol apa pun. |
| 80+ Alat MCP | 50+ Bahasa | 12+ Integrasi Agen |
| Dari penelusuran grafik panggilan hingga deteksi kode mati, primitif pengeditan atomik, metrik kesehatan kode, pemetaan pengujian, dan analisis kompleksitas. | Rust, Go, Java, Python, TypeScript, C, C++, Swift, Svelte, Astro, dan 43 lainnya termasuk shader WGSL/HLSL/Metal, CUDA/HIP, dan Markdown. Tiga tingkatan (lite/medium/full) mengontrol ukuran biner. | 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, OMP, Pi, Plank. |
| Pengindeksan Multi-Cabang (opsional) | 100% Lokal | Selalu Segar |
| Basis data per-cabang opsional. Diff dan pencarian lintas-cabang tanpa berpindah checkout Anda. | Tidak ada data yang meninggalkan mesin Anda. Tidak ada kunci API. Tidak ada layanan eksternal. Semuanya berjalan pada basis data libSQL lokal. | Pemeriksaan kebasian sesuai permintaan pada setiap panggilan MCP (cooldown 30 detik) plus sinkronisasi catch-up saat server terhubung. Pekerjaan multi-agen diharapkan menggunakan git worktrees -- setiap agen mendapatkan checkout sendiri dan perbedaan indeks digabungkan oleh git, bukan oleh pengamat file. |
| Ekstraksi Terisolasi Subproses | Analitik Kesehatan Kode | Primitif Pengeditan Atomik |
| Kerusakan asli pada tata bahasa tree-sitter apa pun (abort, segfault, apa pun) hanya mematikan pekerja; kumpulan memunculkannya kembali dan sinkronisasi berlanjut. Sinkronisasi tidak pernah mati pada file yang salah format. | Skor kesehatan gabungan (0-10000), ketimpangan Gini, kedalaman file-DAG, matriks struktur desain, celah pengujian berbobot risiko, dan delta sesi. | Edit file tanpa bahaya regex atau kutipan shell: jangkar unik str_replace, penggantian multi atomik, penulisan ulang AST, penyisipan berjangkar. Mengindeks ulang otomatis setelah penulisan. |
Memulai Cepat
1. Instalasi
Homebrew (macOS):
brew install aovestdipaperino/tap/tokensave
Scoop (Windows):
scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket
scoop install tokensave
Cargo / cargo-binstall (platform apa pun):
# Fast install prebuilt binary without compiling:
cargo binstall tokensave
# Or compile from source:
cargo install tokensave # full (50+ languages, default)
cargo install tokensave --features medium # medium tier
cargo install tokensave --no-default-features # lite (smallest binary)
Biner yang telah dikompilasi (Linux, Windows, macOS):
Unduh dari rilis terbaru dan letakkan biner di PATH Anda.
| Platform | Arsip |
|---|---|
| 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. Konfigurasikan agen Anda
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 omp # Oh My Pi (OMP)
tokensave install --agent opencode # OpenCode
tokensave install --agent pi # Pi (pi.dev)
tokensave install --agent plank # Plank (macOS only)
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)
tokensave githooks # show which global git hooks tokensave owns
tokensave githooks off # remove them, leaving any hook content you wrote
Setiap agen mendapatkan server MCP-nya terdaftar dalam format konfigurasi asli. Claude Code juga mendapatkan hook PreToolUse (memblokir agen Explore yang boros), hook UserPromptSubmit, hook Stop, aturan prompt di CLAUDE.md, dan izin alat yang diizinkan otomatis. Kiro mendapatkan konfigurasi MCP global, tokensave.md steering dimuat sebagai sumber daya, dan agen default yang dikelola tokensave dengan persetujuan alat bawaan/tokensave yang permisif, hook penjaga delegasi, dan sinkronisasi pasca-tulis; agen Kiro yang dikelola pengguna dipertahankan.
Instalasi OMP global menargetkan profil yang dilaporkan oleh omp config path telanjang, menulis <resolved-agent-dir>/mcp.json dan <resolved-agent-dir>/rules/tokensave.md. Ekspor OMP_PROFILE atau PI_PROFILE yang kompatibel dengan OMP saat menginstal ke profil bernama; resolver OMP juga menghormati PI_CONFIG_DIR dan PI_CODING_AGENT_DIR. Tokensave mempercayai resolver asli itu daripada menduplikasi logika profil OMP. Tokensave menginstal aturan MCP dan penasihat untuk OMP; itu tidak menginstal penegakan hook OMP.
Semua perubahan bersifat idempoten -- aman untuk dijalankan lagi setelah peningkatan. Setelah pengaturan agen, Anda akan ditawari hook git post-commit dan post-checkout global. tokensave uninstall menghapus hook tersebut bersama dengan integrasi agen; berikan --keep-git-hooks untuk membiarkannya, atau kelola sendiri dengan tokensave githooks.
Instalasi khusus proyek
Secara default tokensave install mendaftarkan server MCP di konfigurasi agen global Anda (mis. ~/.claude.json). Untuk mendaftarkan tokensave hanya untuk proyek saat ini, tambahkan --local:
tokensave install --local --agent claude
tokensave install --local --agent omp
Ini menulis konfigurasi khusus proyek yang dapat Anda komit dan bagikan dengan tim Anda. Untuk Claude itu ./.mcp.json, ./.claude/settings.json, dan ./CLAUDE.md; OMP menggunakan ./.omp/mcp.json dan ./.omp/rules/tokensave.md tanpa memanggil CLI OMP. Agen yang didukung: claude, cursor, droid, gemini, zed, opencode, roo-code, kiro, auggie, omp, plank (masing-masing menulis file proyeknya sendiri, mis. .cursor/mcp.json, .factory/mcp.json, .gemini/settings.json, .zed/settings.json, opencode.json, .roo/mcp.json, .kiro/settings/mcp.json, .augment/settings.json, .omp/mcp.json, .mcp.json untuk plank). Agen lain tidak memiliki konfigurasi khusus proyek dan melaporkan kesalahan dengan --local.
Hapus instalasi khusus proyek dengan tokensave uninstall --local.
3. Indeks proyek Anda
cd /path/to/your/project
tokensave init
Ini membuat direktori .tokensave/ dengan basis data grafik pengetahuan. Inisialisasi dan sinkronisasi adalah perintah terpisah: init adalah opt-in satu kali per proyek, sementara sync hanya memperbarui proyek yang sudah diinisialisasi. Ini mencegah hook git global membuat basis data secara diam-diam di repositori yang tidak pernah Anda maksudkan untuk diindeks. Setelah init, gunakan tokensave sync untuk memperbarui secara inkremental -- hanya file yang diubah yang diindeks ulang.
Apa yang ditulis instalasi untuk Claude Code
Server MCP
{
"mcpServers": {
"tokensave": {
"command": "/path/to/tokensave",
"args": ["serve"]
}
}
}
Hook PreToolUse
Hook menjalankan tokensave hook-pre-tool-use -- perintah Rust asli (tanpa bash atau jq yang diperlukan). Ini mencegat panggilan alat Agent, Grep, Glob, dan Bash: agen Explore diblokir sepenuhnya, invokasi grep/rg/ag berbentuk simbol (pengidentifikasi polos, alternasi, nama yang dibungkus \b) dialihkan ke alat MCP tokensave yang cocok, dan penemuan berbentuk jalur (Glob, find -name, fd --extension) atas ekstensi kode dialihkan ke tokensave_files. Pola regex, git grep, perintah pipa, ekstensi non-kode, akar pencarian di luar indeks, dan predikat find yang mengubah apa yang dilakukan perintah (-exec, -delete, -mtime) semuanya lolos tanpa disentuh; atur TOKENSAVE_DISABLE_GREP_HOOK=1 untuk memilih keluar per shell.
Filter dibaca paling-spesifik-pertama: type eksplisit bersifat otoritatif, lalu glob file eksplisit, lalu jalur pencarian. Pencarian dokumentasi seperti path: "." dengan glob: "**/*.md" karena itu lolos daripada diperlakukan sebagai pencarian kode pada jalur yang luas, sementara glob khusus kode (**/*.rs) masih dialihkan bahkan di bawah jalur non-kode. Glob campuran (**/*.{rs,md}) lolos, karena dapat mengembalikan dokumentasi.
Dispatch headless / sub-agen (claude -p). Proses anak yang dikirim oleh sesi orkestrator mewarisi ~/.claude/settings.json-nya, termasuk hook ini. Untuk membiarkan anak menjalankan pencarian mentah, atur TOKENSAVE_DISABLE_GREP_HOOK=1 di lingkungan anak -- biner asli menghormatinya dan melewatkan setiap jalur (Grep, Glob, Bash, Agent), sehingga tidak perlu --settings '{"hooks": {}}' tumpul yang menghapus semua hook. Penjaga itu tanpa status: ia tidak pernah berkonsultasi dengan riwayat kutipan, sehingga hanya mengalihkan pencarian berbentuk simbol yang dijelaskan di atas dan mengarahkan fan-out penelitian tanpa tipe; perintah biasa tidak terpengaruh apakah sesi interaktif atau headless.
Aturan CLAUDE.md
Menambahkan instruksi ke ~/.claude/CLAUDE.md yang memberi tahu Claude untuk menggunakan alat tokensave sebelum meraih agen Explore atau pembacaan file mentah.
Sinkronisasi Tahan Kerusakan
Tata bahasa Tree-sitter adalah kode C/C++ yang dikompilasi. Mereka kadang-kadang mencapai asersi internal atau mengakhiri proses dengan cara yang tidak dapat dicegat oleh penanganan panik Rust. Mulai v4.3.0, setiap file diurai di dalam subproses pekerja berumur pendek: jika tata bahasa segfault, memanggil abort(), atau mencapai stack overflow, hanya pekerja yang mati. Kumpulan memunculkannya kembali, file yang bermasalah dicatat dan dilewati, dan sync terus berjalan.
Pekerja adalah subperintah extract-worker tersembunyi yang diautentikasi terhadap induk melalui token per-spawn 256-bit, diperlukan baik sebagai variabel env TOKENSAVE_WORKER_TOKEN dan sebagai 32 byte pertama yang diterima di stdin. Invokasi langsung oleh pengguna gagal. Default ke available_parallelism() pekerja; pilih keluar dengan TOKENSAVE_DISABLE_SUBPROCESS=1.
Primitif pengeditan (tokensave_str_replace, tokensave_insert_at, dll.) masih berjalan dalam proses: mereka menargetkan satu file pada satu waktu di mana overhead subproses akan mendominasi, dan kerusakan ekstraktor di sana segera terlihat oleh agen.
Pengindeksan Multi-Cabang (Opsional)
tokensave dapat secara opsional memelihara grafik kode terpisah per cabang git. Saat diaktifkan, berpindah cabang tidak pernah memberi Anda hasil basi dan tidak pernah mengindeks ulang file yang sudah Anda parse di cabang lain. Pelacakan multi-cabang bersifat opt-in -- tanpanya, tokensave menggunakan satu basis data untuk semua cabang.
Cara kerjanya
Saat Anda melacak cabang, tokensave menyalin basis data leluhur terdekat dan menyinkronkan hanya file yang berbeda. Ini berarti melacak cabang fitur dari main hampir instan -- hanya mengurai file yang telah Anda ubah.
Perintah CLI
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
Alat MCP lintas-cabang
Tiga alat MCP memungkinkan kueri lintas-cabang tanpa berpindah checkout Anda:
tokensave_branch_search-- cari simbol di grafik cabang laintokensave_branch_diff-- bandingkan grafik kode antara dua cabang: simbol yang ditambahkan, dihapus, dan diubah (tanda tangan berbeda). Mendukung filter file dan jenis.tokensave_branch_list-- daftar cabang yang dilacak dengan ukuran basis data, cabang induk, dan waktu sinkronisasi
Fallback cabang
Saat server MCP tidak dapat menemukan basis data untuk cabang saat ini, ia melayani dari basis data cabang leluhur terdekat dan menyertakan peringatan di setiap respons alat yang menyarankan Anda menjalankan tokensave branch add.
Pelacakan cabang otomatis (v7.3.0)
Setelah mode multi-cabang di-bootstrap (tokensave branch add manual pertama membuat metadata cabang), cabang baru dapat dilacak secara otomatis alih-alih jatuh kembali ke basis data leluhur. Dua mekanisme independen mencakup ini; proyek dalam mode basis data tunggal tidak pernah terpengaruh, dan tidak ada mekanisme yang pernah menyentuh basis data cabang default.
Git hook (saat checkout cabang). Hook post-checkout yang disiapkan oleh tokensave install mengenali checkout cabang (berlawanan dengan checkout file) dan menjalankan tokensave branch add di latar belakang. Perintah tersebut tidak melakukan apa-apa ketika cabang sudah dilacak atau merupakan cabang default, jadi perpindahan biasa antar cabang yang dikenal tidak memakan biaya apa pun. Checkout awal dari git clone baru dan git worktree add baru juga merupakan checkout cabang, dan dapat mendarat di cabang yang bukan cabang default (git clone -b feature, git worktree add -b feature); di sana hook menjalankan tokensave init terlebih dahulu dan tokensave branch add setelahnya, sesuai urutan tersebut. Hook yang ditulis oleh versi sebelumnya mempertahankan isi yang dipasang saat itu โ penginstal tidak pernah menulis ulang hook yang sudah ada โ jadi pada instalasi tersebut, worktree baru masih memerlukan auto_track di bawah, atau tokensave branch add manual.
Pelacakan otomatis saat dibuka (opsional). Ketika TokenSave::open dijalankan โ perintah CLI atau server MCP dimulai โ dan cabang aktif tidak dilacak, tokensave dapat melacaknya saat itu juga dengan menyalin DB dari leluhur terdekat yang dilacak dan mencatatnya di metadata cabang. Ini dikendalikan oleh bidang konfigurasi auto_track (default false) atau variabel lingkungan TOKENSAVE_AUTO_TRACK, yang menimpa konfigurasi per proses (nilai apa pun mengaktifkannya kecuali 0, false, no, off, atau kosong). Salinan tersebut adalah salinan DB leluhur yang hampir instan seperti yang dilakukan oleh branch add manual; tidak ada sinkronisasi yang berjalan saat itu โ hook post-commit menjaga DB cabang baru tetap segar saat Anda melakukan commit, atau jalankan tokensave sync untuk menyegarkan segera. Pelacakan otomatis bersifat best-effort: kegagalan apa pun dilaporkan sebagai peringatan dan open() melanjutkan dengan fallback leluhur biasa, sehingga tidak akan pernah merusak panggilan alat.
Singkatnya: dengan hook terpasang, checkout cabang fitur baru โ termasuk cabang tempat clone atau worktree baru dimulai โ secara transparan memberinya grafik per-cabangnya sendiri; dengan auto_track diaktifkan, bahkan cabang yang dibuat di luar checkout akan terdeteksi saat pertama kali tokensave membuka proyek di cabang tersebut.
Lihat docs/BRANCHING-USER-GUIDE.md untuk panduan lengkap.
Memori Lintas Sesi
Tiga alat MCP menyimpan keputusan dan konteks area kode lintas sesi, disimpan di .tokensave/tokensave.db per proyek.
| Alat | Tujuan |
|---|---|
tokensave_record_decision | Menyimpan keputusan desain/arsitektur dengan alasan, file, dan tag opsional |
tokensave_record_code_area | Menandai jalur yang telah dikerjakan agen (penghitung sentuhan + last_touched_at) |
tokensave_session_recall | Kueri FTS5 atas keputusan yang disimpan; pasangkan dengan dua alat tulis |
Gunakan ini agar agen tidak perlu menjelaskan ulang pilihan arsitektur dari sesi ke sesi.
Buku Besar Penghematan
Setiap panggilan MCP menulis baris append-only ke ~/.tokensave/global.db (tabel savings_ledger). Periksa dengan tokensave gain:
tokensave gain # current project, last 30 days
tokensave gain --all # all projects
tokensave gain --history --range 7d
tokensave gain --json
Perkiraan dolar menggunakan modul penetapan harga yang ada (harga input Sonnet, disegarkan setiap hari melalui LiteLLM).
Benchmark yang Dapat Direproduksi
tokensave bench menjalankan kumpulan kueri tetap melalui tokensave_context dan melaporkan penghematan pengambilan dibandingkan baseline file penuh (mencerminkan metodologi CCE):
tokensave bench # ships with 10 default queries
tokensave bench --queries my-queries.toml --json
tokensave bench --max-nodes 5
Diukur terhadap repo ini (tokensave itu sendiri) menggunakan kumpulan kueri generik yang dikirim:
| # | Kueri | Baseline | Konteks | Penghematan | File | Node |
|---|---|---|---|---|---|---|
| 1 | Bagaimana konfigurasi dimuat saat startup? | 45.3k | 454 | 99% | 4 | 5 |
| 2 | Di mana argumen baris perintah diurai dan dikirim? | 948 | 402 | 58% | 3 | 3 |
| 3 | Bagaimana titik masuk utama diorganisir? | 6.1k | 251 | 96% | 3 | 8 |
| 4 | Bagaimana kesalahan didefinisikan, dibungkus, dan disebarkan? | 3.5k | 819 | 77% | 2 | 3 |
| 5 | Di mana output logging atau diagnostik dipancarkan? | 8.6k | 514 | 94% | 6 | 14 |
| 6 | Bagaimana pengujian diorganisir dan harness pengujian apa yang digunakan? | 3.5k | 818 | 77% | 2 | 3 |
| 7 | Bagaimana data dipersist ke disk atau ke database? | 11.9k | 330 | 97% | 3 | 6 |
| 8 | Bagaimana tugas async atau pekerjaan latar belakang dimunculkan? | 29.4k | 364 | 99% | 2 | 3 |
| 9 | Bagaimana build merangkai dependensi dan menginisialisasi status? | 10.9k | 1.4k | 88% | 4 | 5 |
| 10 | Bagaimana permukaan API publik diekspos (endpoint HTTP, ekspor pustaka, atau perintah CLI)? | 22.5k | 235 | 99% | 4 | 5 |
Agregat: 88% penghematan pengambilan rata-rata (142.8k โ 5.5k token di 10 kueri).
Kumpulan kueri default menargetkan pola yang ada di sebagian besar basis kode aplikasi (CLI, daemon, layanan). Jalankan di proyek Anda sendiri dengan tokensave bench untuk melihat angka Anda, atau tulis file kueri yang disesuaikan (--queries my.toml) untuk pengambilan yang lebih ketat.
Benchmark kriteria terhadap repo dunia nyata besar
benches/large_repos.rs adalah mikro-benchmark criterion yang menjalankan alat MCP end-to-end terhadap empat basis kode sumber terbuka besar yang dipatok pada ref konstan. Setiap alat didorong oleh setidaknya 5 kueri dengan argumen (id node, nama yang memenuhi syarat, glob file, โฆ) yang diambil dari grafik terindeks sekali per repo, sehingga waktu dapat direproduksi di seluruh proses.
Repo dan ref yang dipatok (didefinisikan di benches/repos.rs):
| Repo | 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 |
Setiap repo di-clone dangkal (git init + git fetch --progress --depth 1 origin <ref> + checkout FETCH_HEAD) pada penggunaan pertama dan di-cache secara lokal; proses berikutnya menggunakan kembali checkout. Output Git dialirkan ke terminal sehingga pengambilan multi-GB menunjukkan kemajuan waktu nyata.
Alat yang dicakup (5 kueri masing-masing). Alat baca โ 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. Alat tulis โ str_replace, multi_str_replace, insert_at, dan (jika ast-grep aktif di PATH) ast_grep_rewrite.
Sinkronisasi paksa di setiap proses. Sebelum benchmark apa pun dijalankan, harness menjalankan padanan tokensave sync --force di setiap repo (index_all() terlepas dari kesegaran .tokensave/) sehingga waktu selalu mencerminkan sumber yang dipatok.
Benchmark tulis dan pembersihan. Alat tulis mengubah file. Untuk menjaga prasyarat "cocok harus unik" tetap berlaku, harness menggunakan iter_batched dari criterion โ file goresan kecil di bawah <repo>/.tokensave-bench-scratch/ ditulis ulang dengan konten yang diketahui sebelum setiap iterasi berwaktu, lalu alat edit berjalan terhadapnya. Setelah semua benchmark selesai, harness menjalankan git stash --include-untracked && git stash drop di dalam setiap repo yang disiapkan sehingga pohon kerja kembali ke ref yang dipatok.
Konfigurasi criterion. Benchmark menimpa default criterion ke sample_size = 10 dan measurement_time = 30s (vs standar 100 / 5s), yang memberikan setiap waktu per-kueri ~30 detik pengukuran โ cukup sehingga alat lambat seperti tokensave_context di polkadot-sdk menghasilkan angka yang stabil.
Jalankan:
# Required: a writable cache directory for the cloned repos + their indexes.
<p align="center">
<a href="https://ai.enzolombardi.net/"><img src="https://img.shields.io/badge/built%20with-AI-D97757?style=flat-square&labelColor=101010&logo=anthropic&logoColor=white" alt="Built with AI โ part of Enzo Lombardi's AI portfolio"></a>
</p>
# 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
Jika TOKENSAVE_BENCH_REPOS_DIR tidak disetel, benchmark mencetak pemberitahuan dan mendaftarkan nol benchmark (sehingga cargo bench --all tetap murah di mesin kontributor).
Konfigurasi (semua opsional, melalui lingkungan):
| Variabel | Efek |
|---|---|
TOKENSAVE_BENCH_REPOS_DIR | Wajib. Direktori root tempat setiap repo di-clone ke $DIR/<repo-name>/. |
TOKENSAVE_BENCH_REPOS | Subset nama repo yang dipisahkan koma untuk di-benchmark, mis. TOKENSAVE_BENCH_REPOS=emacs,scipy. Default ke keempatnya. |
TOKENSAVE_BENCH_SKIP_CLONE | Jika disetel, benchmark gagal cepat untuk repo apa pun yang belum di ref yang dipatok alih-alih mengambil. Berguna di CI / proses offline. |
Memfilter benchmark menggunakan CLI criterion standar โ misalnya, hanya alat search di scipy:
cargo bench --bench large_repos -- 'scipy/tokensave_search'
Laporan (HTML + sampel mentah) berada di bawah target/criterion/.
Untuk mengubah ref yang dipatok (mis. ke rilis yang lebih baru atau SHA tertentu), edit REPOS di benches/repos.rs dan hapus penanda $TOKENSAVE_BENCH_REPOS_DIR/<repo>/.bench-ref yang sesuai sehingga proses berikutnya mengambil ulang. Jika Anda melewati pembersihan pasca-proses (mis. Anda Ctrl-C di tengah benchmark), jalankan git stash --include-untracked && git stash drop di dalam setiap direktori repo untuk memulihkannya secara manual.
Probe matriks pengujian MCP (scripts/mcp_probe)
scripts/mcp_probe/ adalah harness Python yang menggerakkan tokensave serve melalui stdio terhadap serangkaian repo nyata yang dapat dikonfigurasi dan menjalankan setiap alat MCP hanya-baca dengan 5 varian kueri per bahasa, menghasilkan tabel status per-alat / per-repo. Harness yang sama melayani dua tujuan:
- Sapuan regresi. Dukungan bahasa baru, alat baru, atau refactor โ jalankan ulang matriks dan sel mana pun yang baru error, timeout, atau mengembalikan hasil kosong menonjol sebagai ๐ฉ.
- Probe kinerja. Waktu per-panggilan dicatat dalam TSV; korpus repo tetap yang sama berfungsi ganda sebagai perbandingan lintas versi kasar. Bug siklus
tokensave_inheritance_depthsaat ini ditemukan oleh harness ini ketika satu alat di polkadot-sdk timeout di >60 s.
Tata letak โ probe.py adalah pengemudi (JSON-RPC yang cocok dengan id sehingga alat lambat tidak dapat meracuni panggilan berikutnya), isolated.py menjalankan ulang satu alat dengan server baru per panggilan (melarikan diri dari antrian server), build_matrix.py membaca TSV dan mengeluarkan markdown, modul tools/<lang>.py menyumbangkan kumpulan kueri per bahasa (Rust dikirim; tambahkan Python/Go/โฆ dengan menjatuhkan modul baru), repos.toml mencantumkan repo target (timpa melalui $TOKENSAVE_PROBE_REPOS).
Jalankan cepat:
cargo build --release --bin tokensave
python3 scripts/mcp_probe/probe.py
python3 scripts/mcp_probe/build_matrix.py > matrix.md
Sel output adalah โ 5/5 (bersih), ๐ e/N (kesalahan), โฑ N/N (timeout), โ
E/N (kosong), ๐ข ok/slow (panggilan >10 s). Sel mana pun yang membawa kesalahan atau timeout mendapat ๐ฉ di kolom paling kanan. Detail per-panggilan dengan 100 karakter pertama dari setiap kesalahan masuk ke log TSV untuk tindak lanjut.
Berbeda dari benchmark criterion di atas: criterion mengukur latensi per-iterasi untuk kumpulan alat yang terfokus pada ref yang dipatok dan menghasilkan laporan statistik di bawah target/criterion/; mcp_probe menjalankan setiap alat dengan kumpulan kueri yang lebih luas di repo mana pun yang Anda arahkan, mengoptimalkan cakupan luas daripada presisi pengukuran.
80+ Alat MCP
Server mengekspos lebih dari 80 alat (satu lebih sedikit ketika biner opsional ast-grep tidak ada di PATH); tabel di bawah mengelompokkan alat yang paling umum digunakan berdasarkan kategori. Sebagian besar hanya-baca, aman dipanggil secara paralel, dan dianotasi dengan readOnlyHint. Primitif edit dibatasi pada file tunggal dan mengindeks ulang di tempat; alat baseline sesi dan perekaman memori juga mengubah status .tokensave lokal dan dianotasi sebagai non-hanya-baca. Tiga alat inti (tokensave_context, tokensave_search, tokensave_status) ditandai anthropic/alwaysLoad sehingga mereka melewati perjalanan pulang-pergi pencarian alat klien.
Kueri proyek lain yang diinisialisasi
Alat baca semantik dapat mengkueri grafik lokal yang dipilih secara eksplisit tanpa memulai ulang server MCP:
{
"query": "screenGate",
"graph_root": "/absolute/path/to/typewhisper"
}
Hasil yang dipilih menyertakan provenans root/cabang kanonik. ID node dinamai sesuai grafik tersebut, dan pemilih yang cocok harus diulang pada panggilan lanjutan. Misalnya, tindak lanjut ke kueri yang dipilih cabang menyertakan kedua nilai:
{
"node_id": "graph:<fingerprint>:function:<raw-id>",
"graph_root": "/absolute/path/to/typewhisper",
"graph_branch": "feature/auth"
}
graph_root harus menjadi root absolut yang tepat dari proyek yang sudah diinisialisasi.
graph_branch opsional dan, saat disediakan, harus menamai cabang yang dilacak.
Pembukaan yang dipilih hanya-baca: mereka tidak pernah menginisialisasi, menyinkronkan, memigrasikan, melacak otomatis,
atau menulis data grafik/sumber. Mereka juga tidak berkontribusi pada akuntansi penghematan.
Panggilan tanpa pemilih berperilaku persis seperti sebelumnya.
graph_root hanya berguna jika Anda tahu proyek lain tersebut ada, jadi server
memberi tahu Anda: proyek yang sudah diinisialisasi yang berada tepat di samping root yang dilayani
disebutkan dalam MCP instructions, di tokensave_status, dan dalam hasil
tokensave_search / tokensave_context yang kosong โ titik di mana sesi
biasanya akan menyimpulkan bahwa simbol tidak ada daripada melihat ke sebelah
(#375). Hanya saudara langsung yang ditawarkan, paling banyak lima, dan tidak ada yang dibuka
atau diindeks atas nama mereka; menanyakan salah satunya tetap memerlukan graph_root yang eksplisit.
Selektor sengaja tidak tersedia pada alat yang menulis, menjalankan perintah eksternal, atau
bergantung pada checkout saat ini: primitif edit, alat VCS dan cabang,
diagnostik dan eksekusi tes, introspeksi dependensi dan runtime, alat alur kerja
dan memori sesi, alat cache persisten (tokensave_redundancy),
dan administrasi server. Alat-alat tersebut menolak selektor alih-alih diam-diam
mengabaikannya.
Penemuan
| Alat | Tujuan |
|---|---|
tokensave_context | Dapatkan konteks kode yang relevan untuk suatu tugas -- titik masuk, simbol terkait, cuplikan kode |
tokensave_search | Temukan simbol berdasarkan nama (fungsi, kelas, tipe) |
tokensave_node | Dapatkan detail + kode sumber untuk simbol tertentu |
tokensave_files | Daftar file proyek yang diindeks (sumber dan artefak yang dilacak) dengan pemfilteran |
tokensave_module_api | Permukaan API publik dari file atau direktori |
tokensave_similar | Temukan simbol dengan nama yang mirip |
tokensave_annotations | Introspeksi atribut/annotasi/dekorator -- histogram semua anotasi atau daftar per-situs dengan filter target |
tokensave_doc | Dokumentasi Markdown pendamping untuk file sumber -- konten dokumen, file yang dicakupnya, dan sinyal kebasahan |
tokensave_dependencies | Introspeksi manifes paket di 17 ekosistem -- ringkasan workspace, pencarian per-paket, permukaan lisensi, penyimpangan versi |
tokensave_status | Status indeks, statistik, token yang dihemat |
Artefak non-kode
tokensave_files mencakup lebih dari sekadar sumber. File yang ekstensinya terdaftar di
artifact_extensions (.feature, .json, .yaml, .yml, .sql, .toml,
.proto, .graphql, .md secara default) dilacak berdasarkan jalur sehingga pertanyaan seperti
"di mana file .feature untuk alur login?" memiliki jawaban grafik daripada
find yang terblokir (#323). File-file tersebut tidak pernah diurai dan tidak menyumbang simbol;
kind: "artifact" dan kind: "code" memfilter di antara keduanya, dan analisis yang
berarti "kode" mengecualikannya. Ekstensi yang sudah ditangani oleh ekstraktor bahasa
diabaikan dalam daftar ini, sehingga tidak dapat digunakan untuk menghentikan bahasa diurai.
Daftar ini juga menentukan apa yang dapat dilihat oleh pencarian literal (#442). Pencarian
literal (literal: true) atas tokensave_search membaca byte daripada
simbol, jadi tidak memerlukan parser -- tetapi ia mengulangi file yang diindeks, jadi ia hanya
dapat menjangkau file yang memiliki baris di indeks. Template .html atau
stylesheet .css yang dilacak tidak memiliki ekstraktor maupun entri artefak default, jadi
kecocokannya hilang; tambahkan ekstensi di sini dan jalankan tokensave sync -f dan
baris-barisnya dicari seperti lainnya, dilaporkan dengan enclosing: null karena
tidak ada konteks simbol. Respons literal yang tidak dapat menjangkau setiap file
yang dilacak menyatakannya dalam blok unscanned yang menyebutkan jumlah dan ekstensi, sehingga
jawaban parsial tidak pernah disajikan sebagai jawaban lengkap.
Grafik Panggilan & Dampak
| Alat | Tujuan |
|---|---|
tokensave_callers | Temukan apa yang memanggil suatu fungsi |
tokensave_callees | Temukan apa yang dipanggil oleh suatu fungsi |
tokensave_impact | Lihat apa yang terpengaruh oleh perubahan simbol |
tokensave_affected | Temukan file tes yang terpengaruh oleh perubahan sumber |
tokensave_rename_preview | Semua referensi ke suatu simbol (pratinjau dampak rename) |
tokensave_hotspots | Simbol paling terhubung (jumlah panggilan tertinggi) |
Kualitas Kode
| Alat | Tujuan |
|---|---|
tokensave_complexity | Peringkat fungsi berdasarkan kompleksitas sikomatik & kognitif, kedalaman sarang, metrik Halstead, indeks keterpeliharaan, CRAP, dan metrik keamanan |
tokensave_dead_code | Temukan simbol yang tidak dapat dijangkau (tidak ada tepi masuk; simbol yang dinamai sebagai kandidat ambiguitas dikecualikan) |
tokensave_ambiguous_calls | Situs panggilan yang tidak dapat dipatok oleh resolver ke satu target, dengan setiap kandidat yang terikat |
tokensave_god_class | Temukan kelas dengan terlalu banyak anggota |
tokensave_coupling | Peringkat file berdasarkan fan-in/fan-out |
tokensave_inheritance_depth | Temukan hierarki pewarisan terdalam |
tokensave_circular | Deteksi dependensi file melingkar |
tokensave_imports | Dependensi impor tingkat modul, siklus, dan simulasi pemotongan |
tokensave_recursion | Deteksi siklus panggilan rekursif/saling-rekursif |
tokensave_unused_imports | Pernyataan impor yang tidak pernah direferensikan |
tokensave_doc_coverage | Simbol publik yang tidak memiliki dokumentasi |
tokensave_simplify_scan | Analisis kualitas file yang diubah (duplikasi, kode mati, kompleksitas) |
Analitik Kesehatan Kode
Lima alat menampilkan sinyal kualitas struktural dari grafik yang ada. Skor gabungan menggunakan rata-rata geometris atas dimensi independen sehingga tidak ada satu pun yang dapat dimanipulasi.
| Alat | Tujuan |
|---|---|
tokensave_health | Sinyal kualitas gabungan (0-10000) dari asiklisitas, kedalaman, kesetaraan, redundansi, dan modularitas |
tokensave_gini | Koefisien ketimpangan Gini untuk metrik apa pun (kompleksitas, baris, fan-in/out, anggota) -- menemukan file raksasa dan distribusi tidak merata |
tokensave_dependency_depth | Rantai dependensi tingkat file terpanjang (levelisasi Lakos) dengan rekonstruksi rantai penuh setelah pemutusan siklus SCC Tarjan |
tokensave_dsm | Matriks Struktur Desain dalam bentuk stats, clusters, atau matrix -- mengungkap pelanggaran lapisan dan kopling tersembunyi |
tokensave_test_risk | Analisis celah tes berbobot risiko yang menggabungkan kompleksitas, fan-in, cakupan, dan churn git 90 hari menjadi satu skor |
Sesi
Ambil snapshot metrik kesehatan di awal sesi pengkodean AI, lalu bandingkan di akhir untuk melihat apa yang membaik atau menurun.
| Alat | Tujuan |
|---|---|
tokensave_session_start | Simpan metrik kesehatan saat ini sebagai baseline JSON untuk perbandingan nanti |
tokensave_session_end | Hitung ulang dan bandingkan dengan baseline -- delta per-dimensi, lulus/gagal, pembersihan otomatis |
Primitif Edit
Empat alat penulis yang memungkinkan agen memodifikasi file tanpa bahaya regex atau kutipan shell. Masing-masing file tunggal, berlabuh, dan memicu pengindeksan ulang di tempat setelah menulis sehingga grafik tidak pernah basi.
| Alat | Tujuan |
|---|---|
tokensave_str_replace | Ganti old_str unik dengan new_str; gagal jika 0 atau >1 kecocokan (melindungi dari bug multi-edit) |
tokensave_multi_str_replace | Terapkan N penggantian (old, new) secara atomik -- transaksi semua-atau-tidak sama sekali |
tokensave_insert_at | Sisipkan konten sebelum atau setelah string jangkar unik atau nomor baris |
tokensave_ast_grep_rewrite | Penulisan ulang kode struktural melalui CLI ast-grep dalam mode --rewrite |
Git & Alur Kerja
| Alat | Tujuan |
|---|---|
tokensave_diff_context | Konteks semantik untuk file yang diubah -- simbol yang dimodifikasi, dependensi, tes yang terpengaruh |
tokensave_commit_context | Ringkasan semantik perubahan yang belum dikomit untuk penyusunan pesan commit |
tokensave_pr_context | Diff semantik antara ref git untuk deskripsi pull request |
tokensave_changelog | Diff semantik antara dua ref git |
tokensave_test_map | Pemetaan sumber-ke-tes di tingkat simbol, dengan deteksi simbol yang tidak tercakup |
tokensave_test_coverage | Rollup cakupan per-file/simbol/fungsi-tes dengan ekspansi tepi panggilan transitif |
Sistem Tipe
| Alat | Tujuan |
|---|---|
tokensave_type_hierarchy | Pohon hierarki tipe rekursif untuk trait, antarmuka, dan kelas |
tokensave_rank | Peringkat node berdasarkan jumlah hubungan (antarmuka paling banyak diimplementasikan, kelas paling banyak diperluas) |
tokensave_distribution | Rincian jenis node per file atau direktori |
tokensave_largest | Peringkat node berdasarkan ukuran -- kelas terbesar, metode terpanjang |
Porting
| Alat | Tujuan |
|---|---|
tokensave_port_status | Bandingkan simbol antara direktori sumber/target untuk melacak kemajuan porting |
tokensave_port_order | Urutan topologis simbol untuk porting -- port daun terlebih dahulu, lalu dependen |
Multi-Cabang
| Alat | Tujuan |
|---|---|
tokensave_branch_search | Cari simbol dalam grafik cabang lain |
tokensave_branch_diff | Bandingkan simbol antara cabang (ditambahkan/dihapus/diubah) |
tokensave_branch_list | Daftar cabang yang dilacak dengan ukuran DB dan waktu sinkronisasi |
Sumber Daya MCP
Empat sumber daya diekspos melalui resources/list dan resources/read:
tokensave://status-- statistik grafik sebagai JSONtokensave://files-- pohon file yang diindeks dikelompokkan berdasarkan direktoritokensave://overview-- ringkasan proyek dengan distribusi bahasa dan jenis simboltokensave://branches-- cabang yang dilacak dengan ukuran DB dan info induk
Pelacakan Token
tokensave mengukur token yang dihematnya pada setiap panggilan alat MCP. Setiap respons alat menyertakan baris tokensave_metrics: before=N after=M yang menunjukkan berapa banyak token file mentah yang dihindari oleh panggilan tertentu tersebut.
Mematikan pelaporan. Baris metrik, bersama dengan kalimat dalam MCP instructions, meminta agen untuk melaporkan penghematan kepada Anda โ yang berarti model menghabiskan token output untuk menceritakan penghematan yang dibuat tokensave pada token input. Token output adalah jenis yang lebih mahal, jadi jika agen Anda menyebutkan tokensave di hampir setiap giliran, narasi itu dapat mengimbangi kemenangan (#356). Setel report_savings ke false di .tokensave/config.json, atau variabel lingkungan TOKENSAVE_REPORT_SAVINGS untuk menimpanya per-jalankan (nilai apa pun mengaktifkannya kecuali 0, false, no, off, atau kosong). Baik baris metrik maupun instruksi hilang; tokensave install juga berhenti menulis aturan pelaporan ke file prompt agen. Pengukuran tidak tersentuh dalam kedua kasus โ setiap panggilan tetap masuk ke buku besar penghematan, sehingga tokensave gain, tokensave list, status dan monitor terus melaporkan persis seperti sebelumnya. Default tetap true.
Visibilitas biaya
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
Mengurai transkrip sesi Claude Code (~/.claude/projects/**/*.jsonl), mengklasifikasikan setiap giliran API ke dalam salah satu dari 13 kategori tugas, menghitung biaya dolar menggunakan harga model, dan menyimpan hasil di ~/.tokensave/global.db untuk kueri agregat yang cepat. Harga disegarkan dari LiteLLM setiap 24 jam dan kembali ke tabel tertanam saat offline.
Header tokensave status menyertakan baris biaya yang menunjukkan pengeluaran hari ini, total 7 hari, dan rasio efisiensi (token dihemat / total token). TUI tokensave monitor menampilkan panel biaya langsung di samping umpan penghematan. Di akhir setiap sesi Claude Code, handler hook_stop mencetak tanda terima satu baris ke terminal.
Kategori klasifikasi tugas: Coding, Debugging, Feature Dev, Refactoring, Testing, Exploration, Planning, Delegation, Git Ops, Build/Deploy, Brainstorming, Conversation, General. Klasifikasi bersifat deterministik (pencocokan pola pada nama alat dan perintah Bash), tidak memerlukan panggilan LLM, dan diadaptasi dari AgentSeal/codeburn.
Monitor langsung
tokensave monitor
TUI global yang menampilkan panggilan alat MCP dari semua proyek secara real time, melalui buffer cincin yang dipetakan memori bersama di ~/.tokensave/monitor.mmap. Setiap entri menunjukkan nama proyek, nama alat, dan delta token. Panel biaya di bagian atas menunjukkan pengeluaran hari ini, penghematan, efisiensi, dan model teratas (disegarkan setiap 30 detik).
Diagnostik memori
tokensave memory [--clean]
Laporan memori tingkat mesin untuk setiap proses tokensave (server MCP, sinkronisasi, proses indeks), melalui tabel yang dipetakan memori bersama di ~/.tokensave/memory.mmap. Setiap instance mengambil sampel RSS-nya sendiri secara best-effort saat startup, pada setiap panggilan alat MCP, dan di sekitar fase sinkronisasi/resolusi, sehingga laporan menunjukkan RSS saat ini dan puncak dengan fase yang menghasilkan puncak โ data yang diperlukan untuk mengaitkan penggunaan memori tinggi (lihat #253). Baris ditandai alive, dead (proses yang dibunuh OOM meninggalkan puncak/fasenya sebagai catatan forensik), atau orphan (masih berjalan tetapi di-orangtua-kan ke init). --clean membersihkan slot yang mati.
PEAK PHASE menamai sampel tertinggi, jadi hanya sepresisi sampel itu sendiri. Sinkronisasi inkremental mencatat, secara berurutan: sync:extract, sync:resolve:load_nodes, sync:resolve:build_caches, sync:resolve:refs, sync:variants, sync:done. Indeks penuh mencatat index:extract, index:resolve:build_caches, index:resolve:refs, index:resolve:done, index:insert, index:done.
Setiap sampel dicatat setelah pekerjaan yang dinamainya. Sebelumnya dicatat sebelum pekerjaan, sehingga setiap sampel melaporkan RSS langkah sebelumnya di bawah label langkah berikutnya โ yang mengaitkan 73 MiB ke pemuatan node yang sebenarnya milik pemuatan referensi yang belum terselesaikan, sebuah langkah tanpa sampel sama sekali, dan mengarahkan investigasi memori ke subsistem yang salah selama berbulan-bulan (#409). Jika Anda menambahkan fase, ambil sampel setelah pekerjaan, bukan sebelumnya, dan tambahkan satu untuk setiap langkah yang cukup besar untuk menahan puncak.
Penghitung sesi dan seumur hidup
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 merender statistik indeks proyek, rincian bahasa, baris biaya (hari ini / 7 hari / efisiensi), dan total seumur hidup proyek + seluruh dunia:
Penghitung seluruh dunia
Semua pengguna tokensave berkontribusi pada penghitung agregat anonim. tokensave status menampilkan total proyek Anda dan total seluruh dunia. Unggahan hanya mengirim satu angka (mis. 4823) tanpa informasi identitas. Menyisih dengan tokensave disable-upload-counter.
Kesegaran Indeks
tokensave menjaga grafik tetap mutakhir tanpa daemon latar belakang atau pengamat file tingkat OS.
Pemeriksaan basi sesuai permintaan. Setiap panggilan alat MCP memeriksa apakah ada file yang diindeks yang dimodifikasi sejak sinkronisasi terakhir. Jika file basi ditemukan, file tersebut diekstrak ulang sebelum respons alat dikembalikan. Masa tenang 30 detik mencegah panggilan berturut-turut menelusuri ulang pohon pada setiap penekanan tombol.
Sinkronisasi kejar pada koneksi. Saat server MCP dimulai, ia segera menjalankan sinkronisasi kejar non-blocking yang mengambil perubahan apa pun yang dibuat saat tidak ada agen yang terpasang โ git pull, edit IDE, langkah build โ sehingga panggilan alat pertama sesi melihat indeks segar.
Pekerjaan multi-agen dan worktree git. Saat beberapa agen bekerja pada proyek yang sama secara bersamaan, asumsi kuatnya adalah setiap agen beroperasi di worktree git-nya sendiri. Worktree adalah checkout sistem file independen dari repositori yang sama: agen A dan agen B masing-masing memiliki salinan setiap file, sehingga mereka tidak pernah menimpa edit yang sedang berlangsung satu sama lain. tokensave secara otomatis mendeteksi saat kueri berasal dari worktree yang bersarang di dalam checkout utama dan menyajikan hasil dari grafik cabang yang benar. Perubahan terakumulasi secara independen dan akhirnya direkonsiliasi melalui git merge atau rebase โ proses yang sama digunakan untuk pengembangan paralel lainnya. Desain ini menghindari kompleksitas dan mode kegagalan penguncian lintas-agen atas direktori mutable bersama.
Alur kerja khusus CLI. Jika Anda menjalankan perintah tokensave tanpa agen terpasang (tanpa server MCP), pemeriksaan basi tidak berjalan di antara perintah. Pasang git hooks untuk menjaga indeks tetap segar secara otomatis setelah setiap commit atau clone:
cp scripts/post-commit scripts/post-checkout .git/hooks/
chmod +x .git/hooks/post-commit .git/hooks/post-checkout
Memutakhirkan dari 5.x
Perintah tokensave daemon mandiri dan autostart launchd/systemd/Windows Service-nya dihapus di 6.0.0. Pengamat file tingkat OS tertanam yang menggantikan daemon itu sendiri dihapus di 6.1.1 (menyebabkan CPU dan memori tak terkendali pada monorepo besar dengan pohon node_modules atau target yang dalam). Model basi sesuai permintaan di atas adalah desain saat ini.
Jika Anda masih memiliki autostart daemon dari 5.x, hapus:
- 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(dari terminal yang ditinggikan)
Jika Anda tidak ingat nama persisnya: launchctl list | grep tokensave / systemctl --user list-units | grep tokensave / sc.exe query state= all | findstr -i tokensave.
Pemutakhiran Mandiri
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 mengunduh biner platform yang benar dari rilis GitHub dan mengganti biner yang berjalan di tempatnya. Mendukung saluran stabil dan beta secara independen.
Versi & pemutakhiran
Nomor versi tokensave terlihat seperti SemVer tetapi tidak mengikutinya: komponen yang berubah mengkodekan pemeliharaan yang diperlukan pembaruan, yang dilakukan tokensave secara otomatis pada peluncuran berikutnya โ Anda tidak pernah menjalankan instal ulang atau indeks ulang secara manual.
| Bump | Contoh | Pembaruan memerlukan | Tindakan otomatis |
|---|---|---|---|
Patch (x.y.Z) | 7.2.0 โ 7.2.1 | Tidak ada | Tidak ada โ tanpa instal ulang, tanpa indeks ulang |
Minor (x.Y.0) | 7.2.0 โ 7.3.0 | Instal ulang (harness baru, alat baru, konfigurasi baru) | Instal ulang global dari setiap integrasi agen yang terpasang (menyegarkan izin, hooks, dan konfigurasi MCP) |
Mayor (X.0.0) | 7.2.0 โ 8.0.0 | Instal ulang + sinkronisasi ulang penuh | Instal ulang global dan indeks ulang paksa per proyek (setara sync -f) |
Instal ulang global. Pada peluncuran pertama build minor atau mayor baru, tokensave secara diam-diam menjalankan ulang install untuk setiap agen yang telah didaftarkan, sehingga konfigurasi agen selalu menunjuk ke biner saat ini dan mengekspos kumpulan alat saat ini. Bump patch melewati ini โ penanda versi yang berjalan hanya dimajukan.
Instal ulang benar-benar diam: output pengaturan per-agen yang Anda lihat dari tokensave install eksplisit ditekan di sini, sehingga tidak pernah muncul di depan tokensave init atau tokensave sync biasa. Jika konfigurasi agen tidak dapat disegarkan โ aplikasi tidak terpasang, atau konfigurasinya berada di tempat yang hanya-baca โ Anda mendapatkan satu baris yang menamai agen yang gagal:
warning: could not refresh tokensave config for: copilot.
Run tokensave install to see the error.
Jalankan tokensave install untuk melihat kesalahan yang mendasarinya. Penanda versi maju bagaimanapun, sehingga jalur konfigurasi yang tidak pernah dapat ditulis dilaporkan sekali per pemutakhiran daripada dicoba ulang pada setiap perintah berikutnya.
Indeks ulang paksa per proyek (hanya mayor). Bump mayor berarti indeks proyek harus dibangun ulang. tokensave melakukan ini secara malas dan per proyek: pada panggilan alat MCP pertama di proyek setelah pemutakhiran mayor, ia memunculkan indeks ulang penuh latar belakang (setara tokensave sync --force) yang tidak pernah memblokir respons alat.
Fallback Brew / cargo. Pemutakhiran eksternal yang mengganti biner di luar tokensave upgrade โ brew upgrade tokensave atau cargo install tokensave โ dideteksi dengan cara yang sama: jika versi yang berjalan lebih baru dari versi terakhir yang melakukan instal, instal ulang berjalan pada peluncuran berikutnya seperti setelah pemutakhiran mandiri.
Lihat TOKENSAVE-VERSIONING.md untuk alasan tokensave menyimpang dari SemVer (mengkodekan pemeliharaan dalam versi adalah yang memungkinkan pemutakhiran tanpa sentuhan), mekanika penanda, versi skema basis data independen, dan aturan pemelihara untuk merilis.
Referensi CLI
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 [--idle-timeout-secs N] # Start MCP server (N: exit after N idle seconds)
tokensave servers [--json] # List running servers and the index each one holds
tokensave monitor # Live TUI showing MCP calls across all projects
tokensave memory [--clean] # Per-instance RSS report for all tokensave processes
tokensave upgrade # Self-update to latest version
tokensave channel [stable|beta] # Show or switch update channel
tokensave doctor [--agent NAME] # Check installation health
tokensave githooks [on|off] [--local] # Manage git hooks (--local: this repo only, no core.hooksPath)
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
Jalankan pemeriksaan kesehatan komprehensif instalasi tokensave Anda:
tokensave doctor
Pemeriksaan: lokasi biner, indeks proyek, DB global, konfigurasi pengguna, integrasi agen (server MCP, hooks, izin, aturan prompt), dan konektivitas jaringan. Jika ada izin alat yang hilang setelah pemutakhiran, ia memberi tahu Anda untuk menjalankan tokensave install. Gunakan --agent untuk memeriksa agen tertentu saja.
Doctor juga memvalidasi bahwa setiap hook yang terpasang menggunakan subperintah tokensave yang benar dan memperbaiki otomatis hook yang rusak.
Cara Kerjanya dengan Claude Code
Setelah dikonfigurasi, Claude Code secara otomatis menggunakan tokensave alih-alih membaca file mentah saat perlu memahami basis kode Anda. Tiga lapisan saling memperkuat:
| Lapisan | Apa yang dilakukannya | Mengapa penting |
|---|---|---|
| Server MCP | Mengekspos 80+ alat tokensave_* ke Claude | Claude dapat menanyakan grafik secara langsung |
| Aturan CLAUDE.md | Memberi tahu Claude untuk memilih tokensave daripada agen/pembacaan file | Mencegah model kembali ke pola mahal |
| Hook PreToolUse | Hook Rust asli memblokir agen Explore | Menangkap kasus di mana model mengabaikan aturan CLAUDE.md |
| Hook UserPromptSubmit | Berjalan saat prompt dikirim | Pelacakan siklus hidup untuk akuntansi token |
| Hook Stop | Berjalan saat sesi berakhir | Membuang penghitung token |
Hasilnya: Claude mendapatkan pemahaman kode yang sama dengan token jauh lebih sedikit. Agen Explore tipikal membaca 20-50 file; tokensave mengembalikan simbol, hubungan, dan cuplikan kode yang relevan dari indeks yang telah dibangun sebelumnya.
Panggilan Jaringan & Privasi
Fungsionalitas inti tokensave (pengindeksan, pencarian, kueri grafik, server MCP) 100% lokal โ kode Anda tidak pernah meninggalkan mesin Anda.
| Panggilan | Data yang dikirim | Kapan | Menyisih |
|---|---|---|---|
| Unggahan penghitung seluruh dunia | Jumlah token (angka) + negara (dari IP) | sinkronisasi, status, sesi MCP | tokensave disable-upload-counter |
| Pembacaan penghitung seluruh dunia | Tidak ada (permintaan GET) | status | N/A (hanya-baca, batas waktu 1 detik) |
| Pemeriksaan versi | Tidak ada (permintaan GET) | status (cache 5 menit), sinkronisasi (paralel) | N/A (batas waktu 1 detik, tanpa operasi saat gagal) |
| Penyegaran harga model | Tidak ada (permintaan GET) | tokensave cost (cache 24 jam) | N/A (batas waktu 5 detik, jatuh ke harga tertanam) |
Unggahan penghitung seluruh dunia mengirim satu POST HTTP dengan badan JSON seperti {"amount": 4823}. Tanpa cookie, tanpa pelacakan, tanpa ID pengguna. Worker Cloudflare mencatat negara alamat IP Anda (diturunkan dari header permintaan) untuk statistik geografis agregat โ alamat IP aktual Anda tidak disimpan.
Penyegaran harga model mengambil file JSON publik dari GitHub (raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json) untuk menjaga harga model Claude tetap mutakhir untuk tokensave cost. Tidak ada data yang dikirim โ ini adalah GET HTTPS biasa. Respons di-cache di ~/.tokensave/pricing.json selama 24 jam. Jika pengambilan gagal, tokensave menggunakan tabel harga yang dikompilasi.
50+ Bahasa
tokensave mendukung lebih dari 50 bahasa pemrograman yang diorganisir ke dalam tiga tingkat yang dikendalikan oleh flag fitur Cargo. Setiap tingkat mencakup semua bahasa dari tingkat di bawahnya. Header Markdown diekstrak sebagai node Module dengan tepi Contains hierarkis sehingga struktur dokumen berpartisipasi dalam kueri grafik bersama kode sumber.
Lite -- --no-default-features
Selalu dikompilasi. Biner terkecil untuk bahasa paling populer, plus Svelte dan Astro (ekstraksi blok skrip melalui ekstraktor TypeScript, tanpa dependensi tata bahasa tambahan).
| Bahasa | Ekstensi |
|---|---|
| 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 lagi) -- --features medium
| Bahasa | Ekstensi | Feature flag |
|---|---|---|
| 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 |
Lengkap (Medium + semua lainnya) -- default
| Bahasa | Ekstensi | Feature flag |
|---|---|---|
| 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 |
| Godot Shader | .gdshader, .gdshaderinc | lang-glsl |
| Minecraft Function | .mcfunction | lang-mcfunction |
| WGSL | .wgsl | lang-wgsl |
| HLSL | .hlsl, .fx | lang-hlsl |
| Verilog / SystemVerilog | .v, .vh, .sv, .svh | lang-systemverilog |
| Metal | .metal | lang-metal |
| CUDA / HIP | .cu, .cuh | lang-cuda |
| 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 |
| Terraform | .tf, .tfvars | lang-terraform |
| TOML | .toml | lang-toml |
| Lean | .lean | lang-lean |
Bahasa individual juga dapat dipilih secara terpisah tanpa tingkatan penuh:
cargo install tokensave --no-default-features --features lang-nix,lang-bash
Semua ekstraktor berbagi kedalaman yang sama: fungsi, kelas, metode, field, impor, grafik panggilan, rantai pewarisan, docstring, metrik kompleksitas, ekstraksi dekorator/annotasi, dan pelacakan dependensi lintas file.
tokensave vs CodeGraph
tokensave adalah penulisan ulang Rust dari awal CodeGraph (Node.js/TypeScript). Keduanya membangun grafik kode semantik untuk agen coding AI, tetapi keduanya berbeda secara signifikan dalam cakupan dan kemampuan.
| tokensave | CodeGraph | |
|---|---|---|
| Runtime | Biner asli (Rust) | Node.js 18+ |
| Instalasi | brew install, cargo install, scoop install | npx @colbymchenry/codegraph |
| Bahasa | 50+ (3 tingkatan: lite/medium/full) | 19+ |
| Alat MCP | 80+ | 9 |
| Integrasi agen | 12+ (Claude, Codex, Gemini, Qwen, OpenCode, Cursor, Cline, Copilot, Roo Code, Zed, Antigravity, Kilo, Kiro, Kimi, Vibe, Grok, OMP, Pi, Plank, Factory Droid) | 1 (Claude Code) |
| Kesegaran indeks | Pemeriksaan kedaluwarsa on-demand pada setiap panggilan MCP; sinkronisasi catch-up saat terhubung; kerja multi-agen diharapkan menggunakan git worktrees | Pengamat file asli tingkat OS (FSEvents/inotify/ReadDirectoryChangesW, debounce 2 detik); sinkronisasi catch-up saat terhubung |
| Indeks multi-cabang | Ya, opt-in (DB per-cabang, diff/pencarian lintas cabang) | Tidak |
| Metrik kompleksitas | Diekstrak dari AST (cabang, loop, kedalaman nesting, kompleksitas sikomatik & kognitif, Halstead, indeks maintainability, CRAP) | Tidak |
| Alat porting | Ya (port_status, port_order) | Tidak |
| Visualisasi grafik | Dihapus (v4.0.1) | Ya |
| Pencarian semantik | Ekspansi kata kunci yang digerakkan agen (biaya nol) | Embedding lokal (nomic-embed-text-v1.5 via ONNX) |
| Sumber daya MCP | 4 (status, file, ringkasan, cabang) | Tidak |
| Anotasi MCP | Ya (readOnlyHint, alwaysLoad) | Tidak |
| Deteksi kode mati | Ya | Tidak |
| Deteksi dependensi sirkular | Ya | Tidak |
| Hierarki tipe | Ya | Tidak |
| Analisis god class / coupling | Ya | Tidak |
| Konteks commit / PR | Ya | Tidak |
| Pemetaan tes | Ya | Tidak |
| Pratinjau rename | Ya | Tidak |
| Pelacakan token | Metrik per-panggilan, monitor TUI langsung, penghitung sesi + seumur hidup | Tidak |
| Analitik kesehatan kode | Skor gabungan, Gini, kedalaman dependensi, DSM, celah tes berbobot risiko, delta sesi | Tidak |
| Primitif edit | 4 penulis atomik (str_replace, multi_str_replace, insert_at, ast_grep_rewrite) dengan pengindeksan ulang otomatis | Tidak |
| Ketahanan crash | Ekstraksi terisolasi subproses; pembatalan grammar asli melewati file, sinkronisasi berlanjut | Tidak |
| Pembaruan mandiri | tokensave upgrade dengan saluran stable/beta | npm update |
| Mesin DB | libsql (fork SQLite, WAL, async) | better-sqlite3 / wa-sqlite (WASM) |
| Kecepatan pengindeksan | ~1,2 detik untuk 1.782 file | ~4 detik untuk 1.782 file |
| Ukuran biner | ~25 MB (semua grammar digabung) | ~80 MB (node_modules + WASM) |
CodeGraph memelopori pendekatan ini dan tetap menjadi pilihan yang solid jika Anda lebih suka alat npm dan hanya membutuhkan integrasi Claude Code. tokensave memperluas konsep ini dengan analisis yang lebih dalam, lebih banyak agen, dukungan multi-cabang, dan biner asli tanpa dependensi runtime.
Untuk perbandingan terperinci terhadap CodeGraph, Dual-Graph (GrapeRoot), code-review-graph, dan OpenWolf, lihat docs/COMPARABLE-TOOLS.md.
Mengapa tokensave Lebih Baik dari Alternatif
Beberapa alat mengurangi penggunaan token untuk agen coding AI. Inilah mengapa tokensave menonjol.
Satu biner asli, nol dependensi
Setiap alternatif memerlukan runtime: Python, Node.js, atau keduanya. tokensave dikirim sebagai satu biner Rust ~25 MB dengan semua 50+ grammar tree-sitter yang digabung. Tidak ada yang perlu diinstal lainnya.
Intelijen kode terdalam
tokensave bekerja pada tingkat simbol: fungsi, struct, field, tepi panggilan, hierarki tipe, metrik kompleksitas. Alternatif seperti Dual-Graph (GrapeRoot) bekerja pada tingkat file -- mereka tahu file mana yang ada tetapi tidak dapat menjawab "siapa yang memanggil fungsi ini?" atau "apa yang rusak jika saya mengubah struct ini?" 80+ alat MCP khusus tokensave mencakup traversal grafik panggilan, analisis dampak, deteksi kode mati, pemetaan tes, pratinjau rename, hierarki tipe, deteksi dependensi sirkular, peringkat kompleksitas, analitik kesehatan kode (Gini, DSM, kedalaman dependensi, celah tes berbobot risiko), primitif edit atomik, dan banyak lagi. Pesaing terdekat (code-review-graph) memiliki 22 alat; yang lain memiliki 5-9.
Dukungan agen terluas
Lebih dari selusin integrasi agen coding AI dengan format konfigurasi asli per-agen. Tidak ada alat lain yang mencakup sebanyak itu agen dengan integrasi sedalam ini. Claude Code mendapatkan hooks, aturan prompt, dan izin alat yang diizinkan otomatis. Kiro mendapatkan konfigurasi MCP global, tokensave.md steering dimuat sebagai sumber daya, agen terkelola dengan persetujuan alat bawaan/tokensave yang permisif, dan hooks untuk penjaga delegasi plus sinkronisasi pasca-tulis. Agen lain mendapatkan pendaftaran server MCP dalam format konfigurasi asli mereka.
Indeks multi-cabang
Satu-satunya alat di ruang ini dengan basis data grafik per-cabang opsional dan diff serta pencarian lintas cabang. Saat diaktifkan, berpindah cabang bersifat instan -- tanpa pengindeksan ulang yang diperlukan.
Pelacakan token per-panggilan
Satu-satunya alat yang melaporkan dengan tepat berapa banyak token yang dihemat oleh setiap panggilan alat MCP individual, plus monitor TUI langsung di semua proyek dan penghitung seumur hidup.
Sepenuhnya open source
Rust berlisensi MIT, dapat diaudit dari ujung ke ujung. Mesin inti Dual-Graph (graperoot di PyPI) bersifat proprietary -- Anda tidak dapat melihat apa yang dilakukannya dengan grafik kode Anda. OpenWolf adalah AGPL-3.0, yang mengharuskan karya turunan untuk di-open-source.
Kinerja
Benchmark indeks penuh pada basis kode campuran Rust/Java/Scala dengan 1.782 file (57K node, 103K tepi):
| Alat | Waktu | Percepatan |
|---|---|---|
| CodeGraph (TypeScript) | 31,2 detik | 1x |
| tokensave (Rust) | 1,2 detik | 26x |
Pemecahan Masalah
"tokensave tidak diinisialisasi"
Direktori .tokensave/ tidak ada di proyek Anda.
tokensave init
Server MCP tidak terhubung
Agen AI tidak melihat alat tokensave.
- Pastikan konfigurasi agen menyertakan server MCP tokensave (jalankan
tokensave doctor) - Mulai ulang agen sepenuhnya
- Periksa bahwa
tokensaveada di PATH Anda:which tokensave
Simbol hilang dalam pencarian
- Jalankan
tokensave syncuntuk memperbarui indeks - Periksa bahwa bahasa didukung (lihat tabel di atas)
- Verifikasi bahwa file tidak dikecualikan oleh
.gitignore
Pengindeksan lambat
Proyek besar membutuhkan waktu lebih lama pada indeks penuh pertama.
- Proses berikutnya menggunakan sinkronisasi inkremental dan jauh lebih cepat
- Gunakan
tokensave sync(bukan--force) untuk pembaruan sehari-hari - Kedaluwarsa diperiksa secara otomatis pada setiap panggilan alat MCP saat agen terhubung
Menonaktifkan tokensave untuk proyek tertentu
Jika proyek terlalu besar dan tokensave menggunakan terlalu banyak RAM, Anda dapat menonaktifkan server MCP per-proyek dengan mengatur TOKENSAVE_DISABLE_SERVER=true di lingkungannya. Server keluar dengan bersih tanpa inisialisasi.
Claude Code โ tambahkan ke .claude/settings.json proyek Anda:
{
"mcpServers": {
"tokensave": {
"command": "tokensave",
"args": ["serve"],
"env": {
"TOKENSAVE_DISABLE_SERVER": "true"
}
}
}
}
Agen lain โ atur variabel lingkungan di konfigurasi apa pun yang digunakan agen Anda untuk meluncurkan server MCP.
Anda juga dapat mengaturnya secara global melalui shell (TOKENSAVE_DISABLE_SERVER=true claude), tetapi ini menonaktifkan server MCP tokensave untuk setiap proyek dalam sesi tersebut.
DISABLE_TOKENSAVE=true tetap didukung sebagai alias kompatibilitas yang tidak digunakan lagi untuk konfigurasi yang dibuat sebelum variabel ini diberi namespace.
Asal
Proyek ini adalah port Rust dari implementasi TypeScript CodeGraph asli oleh @colbymchenry. Port ini mempertahankan arsitektur dan antarmuka alat MCP yang sama sambil memanfaatkan Rust untuk kinerja dan binding tree-sitter asli.
Membangun
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
Riwayat Bintang
Sponsor
|
| Penandatanganan kode gratis di Windows disediakan oleh SignPath.io, sertifikat oleh SignPath Foundation |
Lisensi
Lisensi MIT -- lihat LICENSE untuk detail.