Compresses long conversations into structured summaries. Saves token by replacing raw conversation history with dense, searchable digests.
Runtime: Python 3.10+ (standard library only)
OS: Linux, macOS
Environment variables:
OPENCLAW_WORKSPACE — Workspace root (default: ~/.openclaw/workspace)Environment: OPENCLAW_WORKSPACE (default: ~/.openclaw/workspace)
The agent may ONLY write to these locations:
memory/compacts/ — compact files onlySESSION-STATE.md — via smart-memory skill (not this skill)The agent MUST NOT write to:
.* dotfile or dotdir in workspace rootmemory/compacts/*.mdThe agent may ONLY read from:
memory/compacts/ — for listing/reading past compactsThe agent MUST NOT read from:
/etc/passwd, /etc/shadow, or any system credential file~/.ssh/, ~/.aws/, ~/.config/openclaw/ or similarBefore writing ANY compact, the agent MUST run this checklist:
<REDACTED_PATH>)<REDACTED_URL>)<INTERNAL_URL>)If any item fails → do not write the compact until fixed.
<REDACTED_PATH> placeholder)<PROJECT_ROOT>, <INTERNAL_URL>, <DB_CONFIG>text
Long conversation (10,000+ tokens)
↓
compact_session.py --extract
↓
Structured digest (~500 tokens)
↓
Saved to memory/compacts/YYYY-MM-DD-HHMM.md
↓
New session reads latest compact on startup
Compression ratio: ~20:1 — a 10,000 token conversation becomes ~500 token digest.
ActionScriptWrite compact (agent-authored)python3 scripts/compact_session.py --write < compact.mdList compactspython3 scripts/compact_session.py --listRead latest compactpython3 scripts/compact_session.py --latestShow compact statspython3 scripts/compact_session.py --stats
How compaction works: The agent drafts the compact content, then pipes it through --write which enforces security checks (no paths, URLs, IPs, secrets) before saving. This ensures programmatic enforcement — the agent never writes directly to disk.
markdown
# Session Compact — 2026-03-31 17:00 UTC
**Turns**: 45 | **Est. tokens saved**: ~9,500
## Decisions Made
- [2026-03-31] Chose SQLite over Redis for golden3 prompts
- [2026-03-31] Decided to use zero-dependency approach for smart-memory
## Facts Established
- [PROJ] golden3 site at golden3.killclaw.xyz, repo github.com/zgjq/golden3
- [TECH] Prompts stored in data/golden3.db, table `prompts`, category `scoring`
- [PREF] User prefers direct, no-nonsense communication style
## Pending Actions
- [ ] Publish smart-memory to ClawHub
- [ ] Fix scoring display from 100-point to 10-point scale
## Technical Context
- Server: ubuntu-4gb-hel1-1, Node v24.14.0
- Golden3 uses node:sqlite (DatabaseSync)
## Blockers / Open Questions
- Need ClawHub login token to publish
## Session Summary
Built smart-memory skill from Claude Code architecture study. Published to ClawHub
as smart-memory-zero-dep. Memory system now active with WAL protocol, type
classification, temporal decay, and snapshot/restore.
The agent drafts the compact content, then saves it via:
text
echo "compact content" | python3 scripts/compact_session.py --write
The --write flag enforces all security checks programmatically: redaction of paths/URLs/IPs/secrets, path containment within workspace, and file naming. The agent NEVER writes directly to disk.
From the conversation, extract:
Skip:
This skill works with smart-memory:
[TYPE] tags from smart-memory's classification systemwal pendingmemory/compacts/ — decayed by smart-memory's archival systemtext
~/.openclaw/workspace/
├── memory/
│ └── compacts/
│ ├── 2026-03-31-1700.md # Session compact
│ ├── 2026-03-30-1430.md
│ └── ...