tokensave

resmi

Tingkatkan 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_search untuk "autentikasi" dan dapatkan login, validateToken, dan AuthService dalam satu panggilan.
  • Analisis dampak โ€” Lacak tokensave_callers dan tokensave_callees untuk melihat dengan tepat apa yang rusak sebelum mengubah simbol apa pun.
  • Pembangunan konteks โ€” Gunakan tokensave_context untuk 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_diff atau cari simbol cabang lain melalui tokensave_branch_search tanpa berpindah checkout.
  • Memori sesi โ€” Simpan keputusan desain dengan tokensave_record_decision dan ingat kembali nanti melalui tokensave_session_recall sehingga pilihan arsitektur tidak perlu dijelaskan ulang.
  • Edit atomik โ€” Terapkan tokensave_str_replace dengan jangkar unik atau penulisan ulang AST tanpa risiko regex atau kutipan shell, dengan pengindeksan ulang otomatis setelah penulisan.

Dokumentasi

MCP Toplist

TokenSave

Kecerdasan Kode Semantik untuk Agen Pengkodean AI

Lebih sedikit token โ€ข Lebih sedikit panggilan alat โ€ข 100% lokal

GitHub stars crates.io License: MIT Rust Built with AI โ€” part of Enzo Lombardi's AI portfolio

macOS Linux Windows Hypercommit Listed in the Lulu MCP marketplace


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 CerdasPencarian SemantikAnalisis 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 MCP50+ Bahasa12+ 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% LokalSelalu 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 SubprosesAnalitik Kesehatan KodePrimitif 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.

PlatformArsip
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 lain
  • tokensave_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.

AlatTujuan
tokensave_record_decisionMenyimpan keputusan desain/arsitektur dengan alasan, file, dan tag opsional
tokensave_record_code_areaMenandai jalur yang telah dikerjakan agen (penghitung sentuhan + last_touched_at)
tokensave_session_recallKueri 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).

tokensave gain history output


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

tokensave bench output

Diukur terhadap repo ini (tokensave itu sendiri) menggunakan kumpulan kueri generik yang dikirim:

#KueriBaselineKonteksPenghematanFileNode
1Bagaimana konfigurasi dimuat saat startup?45.3k45499%45
2Di mana argumen baris perintah diurai dan dikirim?94840258%33
3Bagaimana titik masuk utama diorganisir?6.1k25196%38
4Bagaimana kesalahan didefinisikan, dibungkus, dan disebarkan?3.5k81977%23
5Di mana output logging atau diagnostik dipancarkan?8.6k51494%614
6Bagaimana pengujian diorganisir dan harness pengujian apa yang digunakan?3.5k81877%23
7Bagaimana data dipersist ke disk atau ke database?11.9k33097%36
8Bagaimana tugas async atau pekerjaan latar belakang dimunculkan?29.4k36499%23
9Bagaimana build merangkai dependensi dan menginisialisasi status?10.9k1.4k88%45
10Bagaimana permukaan API publik diekspos (endpoint HTTP, ekspor pustaka, atau perintah CLI)?22.5k23599%45

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):

RepoURLRef
polkadot-sdkhttps://github.com/paritytech/polkadot-sdkpolkadot-stable2412
emacshttps://github.com/emacs-mirror/emacsemacs-30.1
scipyhttps://github.com/scipy/scipyv1.14.1
nodehttps://github.com/nodejs/nodev22.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):

VariabelEfek
TOKENSAVE_BENCH_REPOS_DIRWajib. Direktori root tempat setiap repo di-clone ke $DIR/<repo-name>/.
TOKENSAVE_BENCH_REPOSSubset nama repo yang dipisahkan koma untuk di-benchmark, mis. TOKENSAVE_BENCH_REPOS=emacs,scipy. Default ke keempatnya.
TOKENSAVE_BENCH_SKIP_CLONEJika 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_depth saat 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

AlatTujuan
tokensave_contextDapatkan konteks kode yang relevan untuk suatu tugas -- titik masuk, simbol terkait, cuplikan kode
tokensave_searchTemukan simbol berdasarkan nama (fungsi, kelas, tipe)
tokensave_nodeDapatkan detail + kode sumber untuk simbol tertentu
tokensave_filesDaftar file proyek yang diindeks (sumber dan artefak yang dilacak) dengan pemfilteran
tokensave_module_apiPermukaan API publik dari file atau direktori
tokensave_similarTemukan simbol dengan nama yang mirip
tokensave_annotationsIntrospeksi atribut/annotasi/dekorator -- histogram semua anotasi atau daftar per-situs dengan filter target
tokensave_docDokumentasi Markdown pendamping untuk file sumber -- konten dokumen, file yang dicakupnya, dan sinyal kebasahan
tokensave_dependenciesIntrospeksi manifes paket di 17 ekosistem -- ringkasan workspace, pencarian per-paket, permukaan lisensi, penyimpangan versi
tokensave_statusStatus 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

AlatTujuan
tokensave_callersTemukan apa yang memanggil suatu fungsi
tokensave_calleesTemukan apa yang dipanggil oleh suatu fungsi
tokensave_impactLihat apa yang terpengaruh oleh perubahan simbol
tokensave_affectedTemukan file tes yang terpengaruh oleh perubahan sumber
tokensave_rename_previewSemua referensi ke suatu simbol (pratinjau dampak rename)
tokensave_hotspotsSimbol paling terhubung (jumlah panggilan tertinggi)

Kualitas Kode

AlatTujuan
tokensave_complexityPeringkat fungsi berdasarkan kompleksitas sikomatik & kognitif, kedalaman sarang, metrik Halstead, indeks keterpeliharaan, CRAP, dan metrik keamanan
tokensave_dead_codeTemukan simbol yang tidak dapat dijangkau (tidak ada tepi masuk; simbol yang dinamai sebagai kandidat ambiguitas dikecualikan)
tokensave_ambiguous_callsSitus panggilan yang tidak dapat dipatok oleh resolver ke satu target, dengan setiap kandidat yang terikat
tokensave_god_classTemukan kelas dengan terlalu banyak anggota
tokensave_couplingPeringkat file berdasarkan fan-in/fan-out
tokensave_inheritance_depthTemukan hierarki pewarisan terdalam
tokensave_circularDeteksi dependensi file melingkar
tokensave_importsDependensi impor tingkat modul, siklus, dan simulasi pemotongan
tokensave_recursionDeteksi siklus panggilan rekursif/saling-rekursif
tokensave_unused_importsPernyataan impor yang tidak pernah direferensikan
tokensave_doc_coverageSimbol publik yang tidak memiliki dokumentasi
tokensave_simplify_scanAnalisis 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.

AlatTujuan
tokensave_healthSinyal kualitas gabungan (0-10000) dari asiklisitas, kedalaman, kesetaraan, redundansi, dan modularitas
tokensave_giniKoefisien ketimpangan Gini untuk metrik apa pun (kompleksitas, baris, fan-in/out, anggota) -- menemukan file raksasa dan distribusi tidak merata
tokensave_dependency_depthRantai dependensi tingkat file terpanjang (levelisasi Lakos) dengan rekonstruksi rantai penuh setelah pemutusan siklus SCC Tarjan
tokensave_dsmMatriks Struktur Desain dalam bentuk stats, clusters, atau matrix -- mengungkap pelanggaran lapisan dan kopling tersembunyi
tokensave_test_riskAnalisis 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.

AlatTujuan
tokensave_session_startSimpan metrik kesehatan saat ini sebagai baseline JSON untuk perbandingan nanti
tokensave_session_endHitung 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.

AlatTujuan
tokensave_str_replaceGanti old_str unik dengan new_str; gagal jika 0 atau >1 kecocokan (melindungi dari bug multi-edit)
tokensave_multi_str_replaceTerapkan N penggantian (old, new) secara atomik -- transaksi semua-atau-tidak sama sekali
tokensave_insert_atSisipkan konten sebelum atau setelah string jangkar unik atau nomor baris
tokensave_ast_grep_rewritePenulisan ulang kode struktural melalui CLI ast-grep dalam mode --rewrite

Git & Alur Kerja

AlatTujuan
tokensave_diff_contextKonteks semantik untuk file yang diubah -- simbol yang dimodifikasi, dependensi, tes yang terpengaruh
tokensave_commit_contextRingkasan semantik perubahan yang belum dikomit untuk penyusunan pesan commit
tokensave_pr_contextDiff semantik antara ref git untuk deskripsi pull request
tokensave_changelogDiff semantik antara dua ref git
tokensave_test_mapPemetaan sumber-ke-tes di tingkat simbol, dengan deteksi simbol yang tidak tercakup
tokensave_test_coverageRollup cakupan per-file/simbol/fungsi-tes dengan ekspansi tepi panggilan transitif

Sistem Tipe

AlatTujuan
tokensave_type_hierarchyPohon hierarki tipe rekursif untuk trait, antarmuka, dan kelas
tokensave_rankPeringkat node berdasarkan jumlah hubungan (antarmuka paling banyak diimplementasikan, kelas paling banyak diperluas)
tokensave_distributionRincian jenis node per file atau direktori
tokensave_largestPeringkat node berdasarkan ukuran -- kelas terbesar, metode terpanjang

Porting

AlatTujuan
tokensave_port_statusBandingkan simbol antara direktori sumber/target untuk melacak kemajuan porting
tokensave_port_orderUrutan topologis simbol untuk porting -- port daun terlebih dahulu, lalu dependen

Multi-Cabang

AlatTujuan
tokensave_branch_searchCari simbol dalam grafik cabang lain
tokensave_branch_diffBandingkan simbol antara cabang (ditambahkan/dihapus/diubah)
tokensave_branch_listDaftar 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 JSON
  • tokensave://files -- pohon file yang diindeks dikelompokkan berdasarkan direktori
  • tokensave://overview -- ringkasan proyek dengan distribusi bahasa dan jenis simbol
  • tokensave://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).

tokensave monitor TUI

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:

tokensave status output

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.

BumpContohPembaruan memerlukanTindakan otomatis
Patch (x.y.Z)7.2.0 โ†’ 7.2.1Tidak adaTidak ada โ€” tanpa instal ulang, tanpa indeks ulang
Minor (x.Y.0)7.2.0 โ†’ 7.3.0Instal 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.0Instal ulang + sinkronisasi ulang penuhInstal 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:

LapisanApa yang dilakukannyaMengapa penting
Server MCPMengekspos 80+ alat tokensave_* ke ClaudeClaude dapat menanyakan grafik secara langsung
Aturan CLAUDE.mdMemberi tahu Claude untuk memilih tokensave daripada agen/pembacaan fileMencegah model kembali ke pola mahal
Hook PreToolUseHook Rust asli memblokir agen ExploreMenangkap kasus di mana model mengabaikan aturan CLAUDE.md
Hook UserPromptSubmitBerjalan saat prompt dikirimPelacakan siklus hidup untuk akuntansi token
Hook StopBerjalan saat sesi berakhirMembuang 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.

PanggilanData yang dikirimKapanMenyisih
Unggahan penghitung seluruh duniaJumlah token (angka) + negara (dari IP)sinkronisasi, status, sesi MCPtokensave disable-upload-counter
Pembacaan penghitung seluruh duniaTidak ada (permintaan GET)statusN/A (hanya-baca, batas waktu 1 detik)
Pemeriksaan versiTidak ada (permintaan GET)status (cache 5 menit), sinkronisasi (paralel)N/A (batas waktu 1 detik, tanpa operasi saat gagal)
Penyegaran harga modelTidak 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).

BahasaEkstensi
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

BahasaEkstensiFeature flag
Dart.dartlang-dart
Pascal.pas, .pp, .dprlang-pascal
PHP.phplang-php
Ruby.rblang-ruby
Bash.sh, .bashlang-bash
Protobuf.protolang-protobuf
PowerShell.ps1, .psm1lang-powershell
Nix.nixlang-nix
VB.NET.vblang-vbnet

Lengkap (Medium + semua lainnya) -- default

BahasaEkstensiFeature flag
ActionScript.aslang-actionscript
Lua.lualang-lua
Zig.ziglang-zig
Objective-C.m, .mmlang-objc
Perl.pl, .pmlang-perl
Batch/CMD.bat, .cmdlang-batch
Fortran.f90, .f95, .f03, .f08, .f18, .f, .forlang-fortran
COBOL.cob, .cbl, .cpylang-cobol
MS BASIC 2.0.baslang-msbasic2
GW-BASIC.gwlang-gwbasic
QBasic.qblang-qbasic
QuickBASIC 4.5.bi, .bmlang-qbasic
DockerfileDockerfile, .dockerfilelang-dockerfile
GLSL.glsl, .vert, .frag, .complang-glsl
Godot Shader.gdshader, .gdshaderinclang-glsl
Minecraft Function.mcfunctionlang-mcfunction
WGSL.wgsllang-wgsl
HLSL.hlsl, .fxlang-hlsl
Verilog / SystemVerilog.v, .vh, .sv, .svhlang-systemverilog
Metal.metallang-metal
CUDA / HIP.cu, .cuhlang-cuda
Markdown.md, .markdownlang-markdown
R.r, .Rlang-r
SQL.sqllang-sql
Julia.jllang-julia
Haskell.hs, .lhslang-haskell
OCaml.ml, .mlilang-ocaml
Clojure.clj, .cljs, .cljclang-clojure
Erlang.erl, .hrllang-erlang
Elixir.ex, .exslang-elixir
F#.fs, .fsi, .fsxlang-fsharp
F*.fst, .fstilang-fstar
Quint.qntlang-quint
Terraform.tf, .tfvarslang-terraform
TOML.tomllang-toml
Lean.leanlang-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.

tokensaveCodeGraph
RuntimeBiner asli (Rust)Node.js 18+
Instalasibrew install, cargo install, scoop installnpx @colbymchenry/codegraph
Bahasa50+ (3 tingkatan: lite/medium/full)19+
Alat MCP80+9
Integrasi agen12+ (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 indeksPemeriksaan kedaluwarsa on-demand pada setiap panggilan MCP; sinkronisasi catch-up saat terhubung; kerja multi-agen diharapkan menggunakan git worktreesPengamat file asli tingkat OS (FSEvents/inotify/ReadDirectoryChangesW, debounce 2 detik); sinkronisasi catch-up saat terhubung
Indeks multi-cabangYa, opt-in (DB per-cabang, diff/pencarian lintas cabang)Tidak
Metrik kompleksitasDiekstrak dari AST (cabang, loop, kedalaman nesting, kompleksitas sikomatik & kognitif, Halstead, indeks maintainability, CRAP)Tidak
Alat portingYa (port_status, port_order)Tidak
Visualisasi grafikDihapus (v4.0.1)Ya
Pencarian semantikEkspansi kata kunci yang digerakkan agen (biaya nol)Embedding lokal (nomic-embed-text-v1.5 via ONNX)
Sumber daya MCP4 (status, file, ringkasan, cabang)Tidak
Anotasi MCPYa (readOnlyHint, alwaysLoad)Tidak
Deteksi kode matiYaTidak
Deteksi dependensi sirkularYaTidak
Hierarki tipeYaTidak
Analisis god class / couplingYaTidak
Konteks commit / PRYaTidak
Pemetaan tesYaTidak
Pratinjau renameYaTidak
Pelacakan tokenMetrik per-panggilan, monitor TUI langsung, penghitung sesi + seumur hidupTidak
Analitik kesehatan kodeSkor gabungan, Gini, kedalaman dependensi, DSM, celah tes berbobot risiko, delta sesiTidak
Primitif edit4 penulis atomik (str_replace, multi_str_replace, insert_at, ast_grep_rewrite) dengan pengindeksan ulang otomatisTidak
Ketahanan crashEkstraksi terisolasi subproses; pembatalan grammar asli melewati file, sinkronisasi berlanjutTidak
Pembaruan mandiritokensave upgrade dengan saluran stable/betanpm update
Mesin DBlibsql (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):

AlatWaktuPercepatan
CodeGraph (TypeScript)31,2 detik1x
tokensave (Rust)1,2 detik26x

Pemecahan Masalah

"tokensave tidak diinisialisasi"

Direktori .tokensave/ tidak ada di proyek Anda.

tokensave init

Server MCP tidak terhubung

Agen AI tidak melihat alat tokensave.

  1. Pastikan konfigurasi agen menyertakan server MCP tokensave (jalankan tokensave doctor)
  2. Mulai ulang agen sepenuhnya
  3. Periksa bahwa tokensave ada di PATH Anda: which tokensave

Simbol hilang dalam pencarian

  • Jalankan tokensave sync untuk 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

Star history

Sponsor

SignPath Penandatanganan kode gratis di Windows disediakan oleh SignPath.io, sertifikat oleh SignPath Foundation

Lisensi

Lisensi MIT -- lihat LICENSE untuk detail.

tokensave.dev