π¦ Shrink β Three-Tier Multimodal Context Optimizer
Replace base64 images in session history with context-aware text descriptions, reducing image token cost by 96-99%. Use when: (1) user says /shrink, /shrink,...
Like a lobster shell, security has layers β review code before you run it.
License
Runtime requirements
SKILL.md
π¦ 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
Files
5 totalComments
Loading commentsβ¦
