๐ฆ Shrink โ Multimodal Context Optimizer
Replace base64 image blocks in session JSONL with concise, context-aware text descriptions.
Images consuming 15,000โ25,000+ tokens become ~100 token descriptions โ a 99%+ reduction.
OpenClaw's built-in pruning explicitly skips images. This is the only tool that solves this.
Interactive Flow
When triggered, present an interactive menu using inline buttons (Telegram/Discord).
Step 1: Scan & Present
Run a dry-run first to show the user what's available:
python3 <skill_dir>/scripts/shrink.py --agent <agentId> --dry-run --json
Parse the JSON output and present:
๐ Context Scan Complete
๐ Found {images_found} images in this session
โข {images_deduped} duplicates detected
โข Est. savings: ~{tokens_saved:,} tokens ({savings_percent}%)
โข Est. cost: ~${estimated_cost_usd:.3f}
Then offer buttons:
- ๐ Shrink Now โ run without --dry-run
- ๐ Details โ show per-image breakdown from the dry-run
- โ๏ธ Options โ show configurable settings
If no images found: "โ
No unprocessed images found. Session is already optimized!"
Step 2: Execute
On "Shrink Now", run live and keep the user informed with progress updates.
For large runs (10+ images), send a progress message and update it as images complete:
๐ผ๏ธ Shrinking Wayne (36 images)...
โ
1/36 โ Quicknode dashboard (23K tokens saved)
โ
2/36 โ โป๏ธ Duplicate (reused)
โ
3/36 โ Wagyu portfolio (21K tokens saved)
...running total: 68K saved
python3 <skill_dir>/scripts/shrink.py --agent <agentId>
Report the full summary stats when complete.
Step 2b: Apply Changes
After shrinking completes, inform the user that changes are saved to disk but agents
still hold old context in memory. Offer to apply immediately:
โ ๏ธ Changes saved to disk. Agents are still using old context in memory.
Present buttons:
- โก Apply Now โ run
openclaw gateway restart (~5 sec downtime, all agents reload clean)
- โฐ Apply Later โ changes take effect at next session load (daily reset, /compact, or /reset)
If user chooses "Apply Now", run:
openclaw gateway restart
Then confirm: "โ
Gateway restarted. All agents now running on shrunk sessions."
Important: Warn that "Apply Now" causes ~5 seconds of downtime for ALL agents, not just the shrunk one.
Step 3: Options (if requested)
Show current settings and let the user adjust:
- Model: auto (detects key type), claude-sonnet-4-6, claude-haiku-4-5
- Context depth: 1-10 preceding messages (default: 5)
- Min tokens: skip images below threshold (default: 500)
- Scope: this session only, or all sessions
Present buttons:
- ๐ All Sessions โ
--all-sessions
- ๐ฏ This Session โ single session (default)
Variant: /shrink all
When user says "shrink all", "shrink all sessions", or "shrink everything":
python3 <skill_dir>/scripts/shrink.py --agent <agentId> --all-sessions --dry-run --json
Present totals across all sessions, then confirm before running live.
Script Reference
# Basic: current session dry-run
python3 scripts/shrink.py --agent main --dry-run
# Live shrink with all defaults
python3 scripts/shrink.py --agent main
# All sessions for an agent
python3 scripts/shrink.py --agent main --all-sessions
# Specific session file
python3 scripts/shrink.py --session-file path/to/session.jsonl
# Budget-conscious: limit images and use cheaper model
python3 scripts/shrink.py --agent main --max-images 5 --model claude-haiku-4-5
# JSON output for programmatic use
python3 scripts/shrink.py --agent main --all-sessions --json
All Flags
| Flag | Default | Description |
|---|
--session-file | โ | Path to specific JSONL file |
--agent <id> | โ | Target agent's sessions directory |
--all-sessions | off | Process all JSONL files for the agent |
--dry-run | off | Preview without modifying |
--model | auto | Vision model (auto-detects from auth type) |
--max-images N | all | Limit to first N images |
--min-tokens N | 500 | Skip images below token threshold |
--context-depth N | 5 | Preceding messages for context-aware descriptions |
--no-backup | off | Skip .bak backup creation |
--json | off | JSON output (suppresses pretty-print) |
--no-verbose | off | Suppress per-image details |
Key Behaviors
- Idempotent โ re-runs skip already-deflated images (marker:
[๐ผ๏ธ Image deflated:)
- Dedup โ identical images get one API call, description reused for copies
- Context-aware โ reads preceding messages + user text + agent response for rich descriptions
- Auth failover โ tries API key first (Sonnet), falls back to OAuth (Haiku) automatically
- Safe โ creates .bak backup before writing, gracefully skips failed images
- Redaction โ
--redact pii|keys|all strips sensitive data during extraction for compliance