π¦ Claw Compactor

"Cut your tokens. Keep your facts."
Cut your AI agent's token spend in half. One command compresses your entire workspace β memory files, session transcripts, sub-agent context β using 5 layered compression techniques. Deterministic. Mostly lossless. No LLM required.
Features
- 5 compression layers working in sequence for maximum savings
- Zero LLM cost β all compression is rule-based and deterministic
- Lossless roundtrip for dictionary, RLE, and rule-based compression
- ~97% savings on session transcripts via observation extraction
- Tiered summaries (L0/L1/L2) for progressive context loading
- CJK-aware β full Chinese/Japanese/Korean support
- One command (
full) runs everything in optimal order
5 Compression Layers
| # | Layer | Method | Savings | Lossless? |
|---|---|---|---|---|
| 1 | Rule engine | Dedup lines, strip markdown filler, merge sections | 4-8% | β |
| 2 | Dictionary encoding | Auto-learned codebook, $XX substitution | 4-5% | β |
| 3 | Observation compression | Session JSONL β structured summaries | ~97% | β* |
| 4 | RLE patterns | Path shorthand ($WS), IP prefix, enum compaction | 1-2% | β |
| 5 | Compressed Context Protocol | ultra/medium/light abbreviation | 20-60% | β* |
*Lossy techniques preserve all facts and decisions; only verbose formatting is removed.
Quick Start
git clone https://github.com/aeromomo/claw-compactor.git
cd claw-compactor
# See how much you'd save (non-destructive)
python3 scripts/mem_compress.py /path/to/workspace benchmark
# Compress everything
python3 scripts/mem_compress.py /path/to/workspace full
Requirements: Python 3.9+. Optional: pip install tiktoken for exact token counts (falls back to heuristic).
Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β mem_compress.py β
β (unified entry point) β
ββββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββ
β β β β β β β β
βΌ βΌ βΌ βΌ βΌ βΌ βΌ βΌ
estimate compress dict dedup observe tiers audit optimize
ββββββββ΄βββββββ΄βββ¬ββββ΄βββββββ΄βββββββ΄βββββββ΄βββββββ
βΌ
ββββββββββββββββββ
β lib/ β
β tokens.py β β tiktoken or heuristic
β markdown.py β β section parsing
β dedup.py β β shingle hashing
β dictionary.py β β codebook compression
β rle.py β β path/IP/enum encoding
β tokenizer_ β
β optimizer.py β β format optimization
β config.py β β JSON config
β exceptions.py β β error types
ββββββββββββββββββ
Commands
All commands: python3 scripts/mem_compress.py <workspace> <command> [options]
| Command | Description | Typical Savings |
|---|---|---|
full | Complete pipeline (all steps in order) | 50%+ combined |
benchmark | Dry-run performance report | β |
compress | Rule-based compression | 4-8% |
dict | Dictionary encoding with auto-codebook | 4-5% |
observe | Session transcript β observations | ~97% |
tiers | Generate L0/L1/L2 summaries | 88-95% on sub-agent loads |
dedup | Cross-file duplicate detection | varies |
estimate | Token count report | β |
audit | Workspace health check | β |
optimize | Tokenizer-level format fixes | 1-3% |
Global Options
--jsonβ Machine-readable JSON output--dry-runβ Preview changes without writing--since YYYY-MM-DDβ Filter sessions by date--auto-mergeβ Auto-merge duplicates (dedup)
Real-World Savings
| Workspace State | Typical Savings | Notes |
|---|---|---|
| Session transcripts (observe) | ~97% | Megabytes of JSONL β concise observation MD |
| Verbose/new workspace | 50-70% | First run on unoptimized workspace |
| Regular maintenance | 10-20% | Weekly runs on active workspace |
| Already-optimized | 3-12% | Diminishing returns β workspace is clean |
cacheRetention β Complementary Optimization
Before compression runs, enable prompt caching for a 90% discount on cached tokens:
{
"models": {
"model-name": {
"cacheRetention": "long"
}
}
}
Compression reduces token count, caching reduces cost-per-token. Together: 50% compression + 90% cache discount = 95% effective cost reduction.
Heartbeat Automation
Run weekly or on heartbeat:
## Memory Maintenance (weekly)
- python3 skills/claw-compactor/scripts/mem_compress.py <workspace> benchmark
- If savings > 5%: run full pipeline
- If pending transcripts: run observe
Cron example:
0 3 * * 0 cd /path/to/skills/claw-compactor && python3 scripts/mem_compress.py /path/to/workspace full
Configuration
Optional claw-compactor-config.json in workspace root:
{
"chars_per_token": 4,
"level0_max_tokens": 200,
"level1_max_tokens": 500,
"dedup_similarity_threshold": 0.6,
"dedup_shingle_size": 3
}
All fields optional β sensible defaults are used when absent.
Artifacts
| File | Purpose |
|---|---|
memory/.codebook.json | Dictionary codebook (must travel with memory files) |
memory/.observed-sessions.json | Tracks processed transcripts |
memory/observations/ | Compressed session summaries |
memory/MEMORY-L0.md | Level 0 summary (~200 tokens) |
FAQ
Q: Will compression lose my data? A: Rule engine, dictionary, RLE, and tokenizer optimization are fully lossless. Observation compression and CCP are lossy but preserve all facts and decisions.
Q: How does dictionary decompression work?
A: decompress_text(text, codebook) expands all $XX codes back. The codebook JSON must be present.
Q: Can I run individual steps?
A: Yes. Every command is independent: compress, dict, observe, tiers, dedup, optimize.
Q: What if tiktoken isn't installed? A: Falls back to a CJK-aware heuristic (charsΓ·4). Results are ~90% accurate.
Q: Does it handle Chinese/Japanese/Unicode? A: Yes. Full CJK support including character-aware token estimation and Chinese punctuation normalization.
Troubleshooting
FileNotFoundErroron workspace: Ensure path points to workspace root (containsmemory/orMEMORY.md)- Dictionary decompression fails: Check
memory/.codebook.jsonexists and is valid JSON - Zero savings on
benchmark: Workspace is already optimized β nothing to do observefinds no transcripts: Check sessions directory for.jsonlfiles- Token count seems wrong: Install tiktoken:
pip3 install tiktoken
Credits
- Inspired by claude-mem by thedotmack
- Built by Bot777 π€ for OpenClaw
License
MIT






