Memory health CLI for Claude Code, OpenClaw, and any markdown-based AI agent.
Install once. Your agent's memory stays lean forever. Zero dependencies.
If this fixed your agent's memory bloat, a β helps others find it.
curl -fsSL https://raw.githubusercontent.com/Ramsbaby/openclaw-memorybox/main/install.sh | bashβ‘ Quick Start β’ π Without vs With β’ π€ Claude Code β’ π» CLI β’ π Results β’ π§ How It Works β’ π Daemon β’ β FAQ
Full diagnostic in one command: health check β size analysis β duplicates β stale content β suggestions
3 commands. 30 seconds.
# 1. Install (one-liner)
curl -fsSL https://raw.githubusercontent.com/Ramsbaby/openclaw-memorybox/main/install.sh | bash
# 2. Diagnose
memorybox doctor ~/openclaw # OpenClaw
memorybox doctor ~/.claude # Claude Code
# 3. Fix (if needed)
memorybox split ~/openclaw # interactive: move large sections to domain files
memorybox archive ~/openclaw # move old logs to archive/Verify install:
memorybox --version # memorybox v2.3.0Option B: Manual install (git clone)
git clone https://github.com/Ramsbaby/openclaw-memorybox.git
cd openclaw-memorybox && chmod +x bin/memorybox
sudo ln -sf "$(pwd)/bin/memorybox" /usr/local/bin/memorybox| Without MemoryBox | With MemoryBox | |
|---|---|---|
| MEMORY.md size | Grows unbounded (20KB+) | Capped at ~3.5KB |
| Every session loads | Everything (all 20KB) | Core facts only (3.5KB) |
| Context pressure | 98% β compaction failures | 7% β comfortable headroom |
| Agent crashes | 2β3/week from context overflow | 0 |
| Setup time | β | 5 minutes, one-time |
| Maintenance | Manual or never | Automated via cron/daemon |
| Old logs | Accumulate in root | Auto-archived after 14 days |
The crash chain MemoryBox prevents:
Memory bloat β Context overflow β Compaction failure β Gateway crash
Your AI agent's MEMORY.md grows every day. Whether you're running Claude Code, OpenClaw, or any 24/7 agent β at some point it hits 20KB+, gets loaded into every session, eats tokens, and eventually causes context overflow or crashes.
MemoryBox prevents this in 5 minutes:
memorybox doctor ~/openclaw # diagnose
memorybox split ~/openclaw # fix interactivelyYour MEMORY.md stays lean. Your agent stays fast. Move on to things that matter.
2026 context: Personal AI agents running 24/7 locally are surging β subscription fatigue is real, and "own your AI" is the new default. Memory management is now the #1 silent bottleneck. MemoryBox solves it before it crashes you.
MemoryBox applies a simple 3-tier pattern (inspired by Letta/MemGPT):
workspace/
βββ MEMORY.md β Tier 1: Core facts only (β€10KB, loaded everywhere)
βββ memory/
βββ YYYY-MM-DD.md β Tier 1.5: Daily logs (today+yesterday, auto-loaded)
βββ domains/ β Tier 2: Detailed reference (searched on-demand)
β βββ persona.md
β βββ decisions.md
β βββ ...
βββ projects/ β Tier 2: Per-project context
βββ archive/ β Tier 3: Old daily logs (14+ days)
| Tier | Loaded when | Token cost |
|---|---|---|
| Tier 1 | Every session, automatically | ~3.5KB (lean!) |
| Tier 2 | On-demand via memory_search |
Only when needed |
| Tier 3 | Manual reference only | ~0 |
Key insight: OpenClaw's memory_search indexes memory/**/*.md recursively. Tier 2 files are automatically searchable β zero config changes needed.
MemoryBox works directly with Claude Code's CLAUDE.md / AGENTS.md workflow.
Point it at your Claude workspace:
memorybox doctor ~/.claudeOr set the workspace once:
export OPENCLAW_WORKSPACE=~/.claude
memorybox doctor # uses ~/.claude automatically## Memory Health Protocol
- Check health: `memorybox health ~/.claude`
- If score < 80: run `memorybox doctor ~/.claude` and follow the suggestions
- NEVER delete files in memory/ directly β use `memorybox archive` instead
- After restructuring: memory/ is RAG-indexed on the next rag-index run
- Large MEMORY.md (β₯10KB): run `memorybox split` interactively
- Search memory: `memorybox search "<query>" ~/.claude`# Start the health watcher before beginning a long Claude Code session
MEMORYBOX_WORKSPACE=~/.claude \
MEMORYBOX_NTFY_TOPIC=your-ntfy-topic \
bash /path/to/memorybox-watch.sh --daemon
# It runs in the background while you work.
# If memory health degrades mid-session, you get a push notification.{
"hooks": {
"Stop": [{"command": "bash ~/.local/share/memorybox/session-end-hook.sh"}]
}
}Install the hook:
mkdir -p ~/.local/share/memorybox
curl -fsSL https://raw.githubusercontent.com/Ramsbaby/openclaw-memorybox/main/scripts/session-end-hook.sh \
-o ~/.local/share/memorybox/session-end-hook.sh
chmod +x ~/.local/share/memorybox/session-end-hook.shTested on a production instance (7 Discord channels, 48 crons, running 24/7):
| Metric | Before | After | Improvement |
|---|---|---|---|
| MEMORY.md size | 20,542 bytes | 3,460 bytes | -83% |
| Context pressure | 98% (critical) | 7% (healthy) | -91% |
| Compaction frequency | Multiple per session | Rare (~weekly) | 10x fewer |
| Gateway crashes | 2-3/week | 0 | 100% stable |
memory_search |
Works | Still works | No change |
| Setup time | β | 5 minutes | One-time |
Before:
$ memorybox health ~/openclaw
ββββββββββββββββββββββββββββββββββββββ
π₯ Health Score: 28/100 π¨ CRITICAL
β MEMORY.md over limit: 20,542 bytes (205%) π¨
β³ 8 daily logs need archiving (>14 days)
β³ 12 potential duplicate lines
ACTION REQUIRED: Run 'memorybox doctor' for full diagnostic
ββββββββββββββββββββββββββββββββββββββ
After (5 minutes of interactive splitting + archiving):
$ memorybox health ~/openclaw
ββββββββββββββββββββββββββββββββββββββ
π₯ Health Score: 92/100 β
EXCELLENT
β MEMORY.md: 3,460 bytes (35%)
β domains/: 3 files
β Daily logs up to date
β memory/ root is clean
β archive/ exists
All systems green. No action needed.
ββββββββββββββββββββββββββββββββββββββ
Honest note: The 83% reduction applies to MEMORY.md load β roughly 5-15% of total per-session tokens depending on conversation length. But in a 24/7 agent with 48 crons, those savings compound over thousands of sessions. More importantly, it prevents the context overflow that crashes your agent β and that's worth far more than the token savings alone.
memorybox doctor [path] # Full diagnostic β start here
memorybox analyze [path] # Section-by-section size breakdown with bar charts
memorybox split [path] # Interactive: move large sections to domain files
memorybox health [path] # Quick health score (0-100)
memorybox search "<query>" [path] # Search memory files for matching content
memorybox archive [path] # Move old daily logs (14+ days) to archive/
memorybox dedupe [path] # Find duplicate content across files
memorybox stale [path] # Detect outdated content
memorybox suggest [path] # Improvement recommendations
memorybox report [path] # Before/after token savings
memorybox init [path] # Set up 3-tier directory structureDaemon mode (v2.2):
bash scripts/memorybox-watch.sh --daemon # start background health watcher
bash scripts/memorybox-watch.sh --status # check watcher status
bash scripts/memorybox-watch.sh --stop # stop watcherMost users only need two commands:
memorybox doctorβ see what's wrongmemorybox splitβ fix it interactively
memorybox -w ~/my-workspace doctor # custom workspace path
memorybox -d 7 archive # archive logs older than 7 days (default: 14)
memorybox -m 8000 health # custom max target (default: 10KB)π©Ί MemoryBox Doctor β Full Diagnostic
ββββββββββββββββββββββββββββββββββββββ
Workspace: /Users/you/openclaw
2026-02-11 17:00:00
[1/5] Health Check
β MEMORY.md over limit: 20,542 bytes (205%) π¨
β domains/: 3 files
β³ 8 daily logs need archiving (>14 days)
β memory/ root is clean
β archive/ exists
Health Score: 40/100 π¨ Critical
[2/5] Size Analysis
MEMORY.md: 20,542 bytes (205%)
domains/: 3,200 bytes
Total managed: 23,742 bytes
[3/5] Duplicate Check
β οΈ 2 potential duplicate lines
[4/5] Stale Content
β° 1 domain file(s) unchanged for 60+ days
[5/5] Suggestions
π 3 section(s) could be split to domains/
ποΈ 8 daily logs ready for archiving
ββββββββββββββββββββββββββββββββββββββ
Run MemoryBox in the background. Get alerts when your memory health drops below a threshold β before it crashes your agent.
# Start background daemon (checks every 60s, alerts when score < 80)
bash scripts/memorybox-watch.sh --daemon
# With push notifications + custom interval
MEMORYBOX_INTERVAL=120 \
MEMORYBOX_THRESHOLD=85 \
MEMORYBOX_NTFY_TOPIC=your-ntfy-topic \
bash scripts/memorybox-watch.sh --daemon
# With Discord webhook
MEMORYBOX_DISCORD_URL="https://discord.com/api/webhooks/..." \
bash scripts/memorybox-watch.sh --daemon
# Check status
bash scripts/memorybox-watch.sh --status
# Stop
bash scripts/memorybox-watch.sh --stop- Runs
memorybox healthevery N seconds (default: 60) - Score drops below threshold β sends alert (ntfy / Discord webhook)
- Score recovers above threshold β sends recovery notification
- Logs all checks to
~/.openclaw/logs/memorybox-watch.log - State persisted to
/tmp/memorybox-watch-state.json
| Env var | Default | Description |
|---|---|---|
MEMORYBOX_WORKSPACE |
~/openclaw |
Workspace path to monitor |
MEMORYBOX_INTERVAL |
60 |
Check interval in seconds |
MEMORYBOX_THRESHOLD |
80 |
Alert when score drops below this |
MEMORYBOX_NTFY_TOPIC |
β | ntfy.sh push topic |
MEMORYBOX_DISCORD_URL |
β | Discord webhook URL |
MEMORYBOX_LOG_DIR |
~/.openclaw/logs |
Log directory |
If you just want daily checks without a running daemon:
{
"name": "Memory Health Watch",
"schedule": "0 9 * * *",
"prompt": "Run: memorybox health ~/openclaw. If score < 80, run memorybox doctor and report findings."
}curl -fsSL https://raw.githubusercontent.com/Ramsbaby/openclaw-memorybox/main/install.sh | bashThis installs the CLI to ~/.local/bin/memorybox and the Claude Code skill to ~/.claude/skills/memorybox.md.
curl -sSL https://raw.githubusercontent.com/Ramsbaby/openclaw-memorybox/main/bin/memorybox -o /usr/local/bin/memorybox && chmod +x /usr/local/bin/memoryboxgit clone https://github.com/Ramsbaby/openclaw-memorybox.git
cd openclaw-memorybox && chmod +x bin/memorybox
sudo ln -sf "$(pwd)/bin/memorybox" /usr/local/bin/memoryboxmemorybox --version # memorybox v2.3.0
memorybox doctor ~/openclawMemoryBox is a maintenance tool, like df for your agent's memory.
It doesn't replace your memory system β it keeps it healthy.
| Tool | What it does | Category |
|---|---|---|
| Mem0 | Decides what to remember | π§ Memory engine |
| Supermemory | Cloud-based persistent recall | π§ Memory engine |
| QMD | Local search backend | π Search engine |
| MemoryBox | Keeps files organized & lean | π§Ή Maintenance tool |
You can use MemoryBox with all of the above, or with none of them. It only touches file structure β never configs, never plugins, never internals.
I run an OpenClaw agent 24/7 β 7 Discord channels, 48 cron jobs. As it learned, MEMORY.md ballooned to 20KB+. Every session loaded all of it.
One day, context hit 100%. Compaction corrupted state. I tried to fix the config β and crashed the gateway.
That crash led to openclaw-self-healing (auto-recovery in ~30s). But the root cause was memory bloat. So I built MemoryBox to prevent it from happening again.
Memory bloat β Context overflow β Gateway crash
β Built self-healing (recover from crashes)
β Built MemoryBox (prevent the bloat)
β Problem solved at both ends.
Add to your AGENTS.md:
## Memory Protocol
- **MEMORY.md** (β€10KB): Core facts only. Loaded everywhere β keep it lean.
- **memory/domains/*.md**: Detailed reference. Use `memory_search` to find.
- **memory/archive/**: Old logs. Rarely needed.
When MEMORY.md grows past 8KB, split large sections to domains/.{
"name": "Memory Maintenance",
"schedule": { "kind": "cron", "expr": "0 23 * * 0", "tz": "Asia/Seoul" },
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "Run: memorybox archive && memorybox health. Report if score < 80."
}
}Works with everything:
| Plugin / Backend | Compatible | Notes |
|---|---|---|
| memory-core (default) | β | No changes needed |
| Mem0 | β | Different layer β no conflict |
| Supermemory | β | Different layer β no conflict |
| QMD | β | Indexes same files |
memory_search |
β | Indexes memory/**/*.md recursively |
memory_get |
β | Reads any memory/ file |
| Claude Code | β | CLAUDE.md / AGENTS.md friendly |
Does NOT touch:
openclaw.jsonβ no config changes- Plugin behavior β no overrides
- OpenClaw internals β files only
| Project | Role |
|---|---|
| openclaw-memorybox β you are here | Zero-dep memory hygiene CLI |
| openclaw-self-healing | 4-tier autonomous crash recovery β gateway back in ~30s |
| openclaw-self-evolving | AI agent that proposes its own improvements |
| jarvis | 24/7 AI ops system using Claude Max β self-healing, RAG, cron |
All MIT licensed, all battle-tested on the same 24/7 production instance.
Q: My MEMORY.md is only 5KB. Do I need this?
A: Not yet. Bookmark it for when it grows. Or run memorybox health to confirm you're fine.
Q: Will this break my existing setup? A: No. It only creates directories and moves content you approve. Backup is automatic.
Q: Does memory_search find files in subdirectories?
A: Yes. OpenClaw indexes memory/**/*.md recursively.
Q: I'm using Mem0/Supermemory. Should I also use this? A: Yes β they solve different problems. Mem0 decides what to remember. MemoryBox keeps your file structure clean so sessions load fast.
Q: Will OpenClaw updates break this? A: Unlikely. This uses standard markdown files in the standard memory directory. OpenClaw's philosophy is "files are source of truth" β that won't change.
Q: I use Claude Code, not OpenClaw. Does this work?
A: Yes. Point MEMORYBOX_WORKSPACE at ~/.claude or your project dir. See Claude Code Compatibility.
Q: How does memorybox search work?
A: It searches MEMORY.md and all memory/**/*.md files for your query (case-insensitive), showing 2 context lines around each match. Example: memorybox search "API key" ~/.claude
PRs welcome! Areas for improvement:
- Migration script for different workspace layouts
- Automated MEMORY.md size monitoring via cron (see cron template)
- Domain file templates for common use cases
- Integration tests with memory_search
-
memorybox watchβ daemon mode for continuous monitoring (added in v2.2) -
memorybox searchβ full-text search across memory files (added in v2.3) - Qdrant/local vector search integration for Tier 2 semantic retrieval
MIT β Do whatever you want.
Made with π¦ by @ramsbaby
Battle-tested on a production OpenClaw instance running 24/7 with 48 crons and 7 channels.
