Test bench · 2026-05-20

token-savior (Mibayy)

Serveur MCP Python qui combine 3 axes : navigation structurelle code (tree-sitter), mémoire persistante cross-session, et compaction des outputs Bash. Bench public : 97.9% sur tsbench (188/192 tâches) à -80% tokens sur Claude Opus 4.7. Testé en sandbox venv sur maritime-atlas — zéro pollution ~/.claude/.

Pourquoi le tester

Le repo Mibayy/token-savior annonce des chiffres difficiles à ignorer : 188/192 sur tsbench (97.9%), -80% tokens, -83% wall time vs Claude Code "vanilla". Le repo expose tsbench (benchmark source + fixtures) — pas juste un README de promesses. Notre intérêt : voir si la couverture (tree-sitter nav + memory persistence + bash compaction) se télescope avec code-review-graph déjà adopté, ou si c'est complémentaire.

Ce qu'on a testé

  • Sandbox venv dans ~/projects/developpeur/token-savior-sandbox/.venv, install via pip install "token-savior-recall[mcp]". Snapshot md5 avant/après sur ~/.claude/.
  • ts init --agent claude --dry-run pour vérifier la truthfulness du flag sans risquer la mutation de settings.json.
  • CLI directe sur maritime-atlas : ts use, ts structure, ts git-status, ts find-dead-code — sans toucher à l'intégration MCP.
  • Wrapper ts avec garde-fou : refuse ts init sans --dry-run ou --i-know-what-i-am-doing.

Verdict

Ce qui fonctionne

  • • Index 0.22s sur maritime-atlas (196 files / 31363 lignes / 748 fns / 191 classes)
  • Zéro pollution ~/.claude/ sans ts init
  • ts structure file.ts = imports + classes + méthodes en 1 paragraphe (vs Read full file)
  • ts git-status JSON structuré (vs porcelain wall)
  • ts find-dead-code trouve 2 symboles non-référencés en Java sur maritime
  • ts init --dry-run truthful — md5 settings.json identique post-run
  • • Bench public reproductible (tsbench source + fixtures)
  • • License MIT, 891★, push fréquent

Caveats

  • ts init sans dry-run mute ~/.claude/settings.json — wrapper guard requis
  • • Profile par défaut full charge 52/69 tools, manifest verbeux. TOKEN_SAVIOR_PROFILE=optimized obligatoire
  • .token-savior-cache.json écrit dans le projet (1.3 MB sur maritime) — à .gitignore partout
  • • Bash compaction overlap potentiel avec RTK (PreToolUse hooks chaînés à tester)
  • • PostToolUse matcher large (Bash + Read + Grep + WebFetch + Playwright + own MCP) — overhead à mesurer

Décision

Adopt-conditional (venv-only, CLI seul pour l'instant). Le sandbox reste, le wrapper ts avec garde-fou expose la CLI safe. L'intégration MCP via ts init attend une fenêtre où on peut review le diff complet de settings.json + tester le chaînage avec le PreToolUse RTK existant. .token-savior-cache.json ajouté preemptively aux .gitignore des 7 repos perso.

Leçons à reprendre (5)

  1. 01

    Wrapper guard contre `ts init` aveugle

    Le binary du venv expose `ts init` qui mute `~/.claude/settings.json` (ajoute PostToolUse + PreToolUse hooks). Le wrapper `bin/ts` refuse `init` sans `--dry-run` ou `--i-know-what-i-am-doing`. Même pattern que pour code-review-graph (`crg` qui refuse `install --platform`). Pattern réutilisable.

  2. 02

    Tree-sitter parsing rapide multi-langage

    196 fichiers / 31363 lignes / 748 functions / 191 classes parsés en 0.22s sur maritime-atlas (Angular 19 + NestJS 11 + Python sidecars + Java GeoServer plugins + SQL migrations). Incremental update même vitesse. Permet d'avoir `ts structure` en routine sans douleur.

  3. 03

    `--dry-run` truthful

    `ts init --agent claude --dry-run` montre exactement le diff settings.json sans rien écrire. Vérifié post-coup : md5 settings.json identique. Pattern qu'on ne tient jamais pour acquis (cf claude-code-templates où `--dry-run --agent X --yes` écrit quand même).

  4. 04

    Profile `optimized` pour réduire le manifest

    Par défaut `ts` charge 52/69 tools = manifest verbeux. `TOKEN_SAVIOR_PROFILE=optimized` ship le subset Pareto-optimum benché sur tsbench. À set systématiquement avant intégration MCP.

  5. 05

    Stack complémentaire avec RTK + code-review-graph

    RTK = compaction bash. code-review-graph = blast-radius graph SQLite. token-savior = MCP navigation + memory + bash compaction overlap. Les trois coexistent sans collision (PreToolUse hooks chainables, scopes différents). 3 outils adoptés sans redondance = bench écosystème sain.

Test mené 2026-05-20 · version 4.3.2 · cible maritime-atlas (196 files / 31363 lignes / 0.22s index).