La sortie de Claude est pleine de bruit inutile.
ContextZip la compresse de 60-90%. npx contextzip → 5 secondes (le premier lancement télécharge le binaire).
Installer • Before/After • Benchmark • English • 한국어 • 日本語 • 中文 • Español • Português • हिन्दी • Français • Deutsch • Русский • Türkçe • Tiếng Việt
30 lignes de stacktrace node_modules → 3 lignes
150 lignes d'avertissements npm deprecated → 3 lignes
50 lignes de hash Docker build → 1 ligne
Couleurs ANSI, spinners, barres de progrès → supprimésnpx contextzipRedémarrez Claude Code. Chaque commande est compressée automatiquement. Zéro config.
macOS · Linux · Windows
Autres méthodes d'installation
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/jee599/contextzip/main/install.sh | bash
brew install jee599/tap/contextzip
# Windows (PowerShell)
npx contextzip
# Développeurs Rust
cargo install --git https://github.com/jee599/contextzip|
❌ Before TypeError: Cannot read properties
of undefined (reading 'id')
at getUserProfile (users.ts:47)
at processAuth (auth.ts:12)
at Layer.handle (node_modules/
express/lib/router/layer.js:95)
at next (node_modules/express/
lib/router/route.js:144)
at Route.dispatch (node_modules/
express/lib/router/route.js:114)
... 25 more node_modules lines |
✅ After TypeError: Cannot read properties
of undefined (reading 'id')
→ users.ts:47 getUserProfile()
→ auth.ts:12 processAuth()
(+ 27 framework frames hidden)
💾 saved 92% |
|
❌ Before npm warn deprecated inflight@1.0.6
npm warn deprecated rimraf@3.0.2
npm warn deprecated glob@7.2.3
npm warn deprecated bcrypt@3.0.0:
security vulnerability CVE-2023-31484
... 45 more deprecated warnings
added 847 packages, audited 848
143 packages looking for funding
run `npm fund` for details
8 vulnerabilities (2 moderate, 6 high)
To address issues: npm audit fix
... 20 more lines |
✅ After ✓ 847 packages (32s)
⚠ 8 vulnerabilities (6 high, 2 mod)
⚠ bcrypt@3.0.0: CVE-2023-31484
Sécurité conservée. Bruit supprimé.
💾 saved 95% |
|
❌ Before Step 1/12 : FROM node:20-alpine
---> abc123def456
Step 2/12 : WORKDIR /app
---> Using cache
---> 789ghi012jkl
Step 3/12 : COPY package*.json ./
---> Using cache
... 8 more steps with hashes
Removing intermediate container xyz
Successfully built abc123final
Successfully tagged my-app:latest |
✅ After ✓ built my-app:latest (12 steps, 8 cached)
Sécurité conservée. Bruit supprimé.
💾 saved 96% |
|
❌ Before Traceback (most recent call last):
File "/app/main.py", line 10,
in handler
process(data)
File "/usr/lib/python3.11/
importlib/__init__.py", line 126
File "/app/venv/lib/site-packages/
flask/app.py", line 1498
File "/app/venv/lib/site-packages/
flask/app.py", line 1476
ValueError: invalid literal for int() |
✅ After Traceback (most recent call last):
→ /app/main.py:10 process(data)
(+ 3 framework frames hidden)
ValueError: invalid literal for int()
💾 saved 72% |
|
❌ Before thread 'main' panicked at
'index out of bounds',
src/handler.rs:42:5
stack backtrace:
0: std::panicking::begin_panic
1: core::panicking::panic_fmt
2: myapp::handler::process
at ./src/handler.rs:42:5
3: myapp::main
at ./src/main.rs:15:3
4: std::rt::lang_start
5: tokio::runtime::enter |
✅ After thread 'main' panicked at
'index out of bounds',
src/handler.rs:42:5
(+ 2 framework frames hidden)
→ handler.rs:42 process()
→ main.rs:15 main()
(+ 2 framework frames hidden)
💾 saved 2-7% (filtre err; format Rust panic pas encore optimisé) |
|
❌ Before src/api/users.ts:47:5 - error TS2322:
Type 'string' not assignable to 'number'
src/api/users.ts:83:5 - error TS2322:
Type 'string' not assignable to 'number'
src/api/orders.ts:12:5 - error TS2322:
Type 'string' not assignable to 'number'
src/api/orders.ts:45:5 - error TS2322:
Type 'string' not assignable to 'number'
... 36 more identical errors
Found 40 errors in 8 files. |
✅ After TS2322: Type 'string' not assignable
to type 'number' (×40)
src/api/users.ts :47, :83
src/api/orders.ts :12, :45, :67
src/api/products.ts :23, :89
src/lib/helpers.ts :156
... +4 files (28 occurrences)
All line numbers preserved.
💾 saved 81% |
|
❌ Before (sortie curl) [Skip to content]
[Nav: Products, Pricing, Docs, Blog]
[Sidebar: Getting Started, Auth,
Database, Storage, Functions]
# Email/Password Authentication
Use supabase.auth.signInWithPassword
to sign in users...
[code example]
[code example]
[Footer: © 2026 Supabase Inc]
[Terms | Privacy | Status]
[Newsletter: Subscribe for updates]
[Social: Twitter GitHub Discord] |
✅ After # Email/Password Authentication
Use supabase.auth.signInWithPassword
to sign in users...
[code example]
[code example]
Nav, footer, sidebar, newsletter,
liens sociaux — tout supprimé.
💾 saved 73% |
|
❌ Before (raw terminal) \033[32m✓ Success\033[0m
\033[31m✗ Error\033[0m
⠋ Installing dependencies...
⠙ Installing dependencies...
⠹ Installing dependencies...
⠸ Installing dependencies...
████░░░░░░ 40%
████████░░ 80%
██████████ 100%
═══════════════════════
Done. |
✅ After ✓ Success
✗ Error
██████████ 100%
Done.
Seuls les états finaux sont conservés.
💾 saved 83% |
🐳 Échec Docker — contexte préservé
✗ Docker build failed at step 7/12
Step 5/12 : COPY package*.json ./ (cached ✓)
Step 6/12 : RUN npm install (cached ✓)
Step 7/12 : RUN npm run build ← FAILED
error: Module not found: 'react-dom/client'
Exit code: 1Étape en échec + 2 étapes précédentes + message d'erreur + code de sortie. Toujours.
☕ Java / 🐹 Go stacktraces
Java — supprime java.lang.reflect, sun.reflect, org.springframework, org.apache, jdk.internal :
- java.lang.NullPointerException: Cannot invoke method on null
- at com.myapp.UserService.getUser(UserService.java:42)
- at com.myapp.Controller.handle(Controller.java:15)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(...)
- at org.springframework.web.servlet.FrameworkServlet.service(...)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(...)
+ java.lang.NullPointerException: Cannot invoke method on null
+ at com.myapp.UserService.getUser(UserService.java:42)
+ at com.myapp.Controller.handle(Controller.java:15)
+ (+ 4 framework frames hidden)Go — supprime runtime/, runtime.gopanic, runtime.main :
- goroutine 1 [running]:
- runtime/debug.Stack()
- /usr/local/go/src/runtime/debug/stack.go:24
- runtime.gopanic({0x1234, 0x5678})
- /usr/local/go/src/runtime/panic.go:884
- main.handler()
- /app/handler.go:42 +0x1a4
- main.main()
- /app/main.go:15 +0x58
+ goroutine 1 [running]:
+ (+ 2 framework frames hidden)
+ → main.handler() /app/handler.go:42
+ → main.main() /app/main.go:15
+ (+ 1 framework frames hidden)102 tests réels. Pas de cherry-picking.
| Catégorie | Tests | Économie Moyenne | 🏆 Meilleur | 💀 Pire |
|---|---|---|---|---|
| 🐳 Docker build | 10 | 88% | 97% | 77% |
| 🎨 ANSI/spinners | 15 | 83% | 98% | 0% |
| 💥 Error traces | 20 | 59% | 97% | -12% |
| 🔨 Build errors | 15 | 56% | 90% | -10% |
| 🌐 Pages web | 15 | 43% | 64% | 5% |
| 💻 Commandes CLI | 12 | 42% | 99% | -56% |
| 📦 Installation de paquets | 15 | 39% | 99% | 2% |
Total pondéré : 61% d'économie → 326K chars in, 127K chars out
Note
Négatif = la sortie a grandi. Arrive sur les entrées minuscules. Les pires chiffres sont dans le tableau parce que les cacher serait malhonnête. Benchmark complet →
┌─────────────────────────────────────────────┐
│ Claude Code runs: git status │
│ ↓ │
│ Hook rewrites → contextzip git status │
│ ↓ │
│ ┌──────────────────────────────────────┐ │
│ │ [1] ANSI preprocessor strip junk │ │
│ │ [2] Command router 40+ filters │ │
│ │ [3] Error post-proc compress stack │ │
│ │ [4] SQLite tracker record savings │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ Compressed output → Claude's context │
│ 💾 contextzip: 200 → 40 tokens (80%) │
└─────────────────────────────────────────────┘Basé sur RTK (28k⭐). Les 34 commandes RTK incluses. En plus :
| RTK | ContextZip | |
|---|---|---|
| Compression CLI (git, test, ls) | ✅ | ✅ |
| Stacktraces d'erreurs (Node/Python/Rust/Go/Java) | ❌ | ✅ |
| Extraction de contenu web | ❌ | ✅ |
| Suppression ANSI / spinners / décoration | 🟡 | ✅ |
| Groupement d'erreurs de build (tsc/eslint/cargo) | 🟡 | ✅ |
| Bruit d'installation de paquets (npm/pip/cargo) | ❌ | ✅ |
| Compression Docker build | 🟡 | ✅ |
| Économie par commande | ❌ | ✅ |
$ contextzip gain
📊 ContextZip Token Savings
════════════════════════════════════════
Total commands: 2,927
Tokens saved: 10.3M (89.2%)
Efficiency meter: █████████████████████░░░ 89%
$ contextzip gain --by-feature
Feature Commands Saved Avg%
cli (RTK) 2,100 6.8M 78%
error 89 1.2M 93%
web 43 0.9M 73%
build 112 0.4M 81%
pkg 34 0.3M 95%
docker 22 0.2M 85%
--graph graphique quotidien • --history commandes récentes
| 🔴 Messages d'erreur | TOUJOURS préservés |
| 📍 Fichier:ligne dans les erreurs de build | JAMAIS supprimés |
| 🔒 Alertes de sécurité (CVE, GHSA) | TOUJOURS conservées |
| 🐳 Contexte d'échec Docker | TOUJOURS préservé |
| ⏎ Codes de sortie | TOUJOURS propagés |
Important
ContextZip ne supprime que le bruit confirmé. En cas de doute → passthrough.
# Automatique (le hook transforme — pas de préfixe) :
git status npm install cargo test
docker build . pip install flask go test ./...
# Manuel :
contextzip web https://docs.example.com # page → contenu uniquement
contextzip err node server.js # sortie centrée erreurs
# Analytique :
contextzip gain # tableau de bord
contextzip gain --by-feature # stats par filtre
contextzip gain --graph # graphique quotidien
contextzip gain --history # commandes récentes
# Gestion :
contextzip init --show # vérifier la configuration
contextzip update # mise à jour automatique
contextzip uninstall # désinstallation propregit clone https://github.com/jee599/contextzip.git && cd contextzip
cargo test # 1,056 tests
cargo clippy # lintContextZip collecte des statistiques d'utilisation anonymes (nombre de commandes, pourcentage d'économie) pour améliorer l'outil. Aucune donnée personnelle ni contenu de commande n'est transmis.
Désactiver :
export CONTEXTZIP_TELEMETRY_DISABLED=1
# ou dans ~/.config/contextzip/config.toml :
# [telemetry]
# enabled = falseMIT — Fork de RTK par rtk-ai.
⚡ Moins de bruit. Plus de code. Déployez plus vite.