Current release: v2.7.0
OpenClaw lifecycle plugin for short-term working continuity. Preserves structured in-flight work state across /new, reset, gateway restarts, model fallback, and context compaction.
There are feature-rich memory plugins out there (vector search, semantic dedup, smart extraction). We took a different path:
- Zero dependency — no embedding API, no vector DB, no external services
- Plain files — data is markdown, human-readable, editable, greppable
- Hook-driven — doesn't rely on model behavior, works with any model
- Backup = copy —
cp/scp/rsyncis your entire backup strategy - Migrate in seconds — copy files to new host, done. No re-indexing, no model binding
- Upgrade-proof — doesn't occupy the
contextEngineslot, doesn't depend on OpenClaw internals - Native-consistent — aligns with OpenClaw's
memory/file conventions
If what you need is "don't lose work across sessions" rather than "semantic search over 100k memories", this plugin is for you.
OpenClaw already preserves transcripts, compaction summaries, memory files, and session memory search. But those don't always answer the most operational question:
What were we doing right now, where did we stop, and what should happen next?
That is the problem this plugin solves.
One-line summary:
- long-term memory = what you know
- memory continuity = what you are doing right now
The plugin uses OpenClaw lifecycle hooks to automatically save and restore working state — no model cooperation needed.
| Hook | What it does |
|---|---|
before_agent_start |
Reads memory/CURRENT_STATE.md and injects it into the agent's system context |
before_compaction |
Injects state before compaction so it survives context compression |
before_reset |
Archives current state to session_archive/ before /new |
agent_end |
Auto-extracts working state from conversation if no explicit state exists |
session_end |
Ensures CURRENT_STATE.md exists for future sessions |
Because state injection happens at the hook level (before the model sees anything), it works with any model — GPT-4o, MiniMax, Claude, etc.
# Clone the plugin
git clone https://github.com/dtzp555-max/memory-continuity.git
# Run the installer
cd memory-continuity
bash scripts/post-install.shThe installer will:
- Copy the plugin to
~/.openclaw/extensions/memory-continuity/ - Add the plugin entry to
~/.openclaw/openclaw.json - Add
memory-continuitytoplugins.allow(trust list) - Add install record to
plugins.installs(provenance tracking) - Restart the gateway
No npm install, no API keys, no external database.
# Quick 3-layer install check (files → tool → workspace state)
bash scripts/verify.sh
# Show a sample high-importance state entry
bash scripts/verify.sh --sample
# Check against a custom workspace
bash scripts/verify.sh --workspace ~/.openclaw/workspace/myproject# Alternatively, confirm the gateway loaded the plugin
openclaw gateway restart 2>&1 | grep memory-continuity
# Should show: [memory-continuity] Plugin registered successfully- Tell your agent something memorable (e.g., "I'll tell you a secret: Ethan is super kid")
- Send
/newto reset the session - Ask "what was the secret?" or "我们刚才聊到哪了"
- The agent should immediately surface the recovered state
The plugin works with zero configuration. Optional settings in openclaw.json:
{
"plugins": {
"allow": ["memory-continuity"],
"entries": {
"memory-continuity": {
"enabled": true,
"hooks": {
"allowPromptInjection": true
},
"config": {
"maxStateLines": 50,
"archiveOnNew": true,
"autoExtract": true
}
}
}
}
}| Option | Default | Description |
|---|---|---|
maxStateLines |
50 |
Max lines for CURRENT_STATE.md |
archiveOnNew |
true |
Archive state to session_archive/ before /new |
autoExtract |
true |
Auto-extract state from conversation at session end |
maxArchiveCount |
20 |
Maximum archive files to keep (oldest auto-deleted) |
The plugin maintains one file: $WORKSPACE/memory/CURRENT_STATE.md
# Current State
> Last updated: 2026-03-15T14:00:00Z
## Objective
Build the user authentication module
## Current Step
Completed JWT token generation, starting refresh endpoint
## Key Decisions
- Using RS256 for token signing (user approved)
## Next Action
Implement POST /auth/refresh endpoint
## Blockers
None
## Unsurfaced Results
NoneThis file is:
- Overwritten, not appended (it's a checkpoint, not a journal)
- Human-readable plain markdown
- Portable — just copy the file to backup or migrate
- Model-agnostic — injected via hooks, not dependent on model behavior
# Backup
cp $WORKSPACE/memory/CURRENT_STATE.md /backup/
# Migrate to another machine
scp -r ~/.openclaw/extensions/memory-continuity/ newhost:~/.openclaw/extensions/
scp $WORKSPACE/memory/CURRENT_STATE.md newhost:$WORKSPACE/memory/No database, no vector embeddings, no API keys to transfer.
OpenClaw upgrades (npm update -g openclaw) do not overwrite the user config at ~/.openclaw/openclaw.json. However, if the plugin stops working after an upgrade, follow these steps:
# Check if the plugin is loaded
openclaw gateway restart 2>&1 | grep memory-continuity
# Expected: [memory-continuity] Plugin registered successfully
# Verify config is intact
cat ~/.openclaw/openclaw.json | grep -A2 memory-continuity| Symptom | Cause | Fix |
|---|---|---|
No Plugin registered in startup log |
Plugin files missing or config lost | Re-run bash scripts/post-install.sh |
plugins.allow is empty warning |
plugins.allow was cleared in config |
Add "plugins.allow": ["memory-continuity"] |
loaded without provenance warning |
plugins.installs record missing |
Add "plugins.installs": {"memory-continuity": {"source": "path"}} |
| New version changed hook API | OpenClaw breaking change | Check CHANGELOG, update index.js |
| State not recovering, no errors | Session cached stale skillsSnapshot | /new to start fresh session, or re-run post-install.sh (clears cache) |
The install script is idempotent — safe to re-run at any time:
cd ~/.openclaw/projects/memory-continuity # or wherever you cloned it
git pull # pull latest version
bash scripts/post-install.sh # reinstall + restart gatewaycp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bakPrevious versions (v0.x) shipped as a skill — a markdown file that asked the model to read/write CURRENT_STATE.md. This was unreliable because models could ignore the instructions.
v2.0 is a lifecycle plugin that uses OpenClaw hooks. The key difference:
| Skill (v0.x) | Plugin (v2.0) | |
|---|---|---|
| State injection | Model must read the file | Hook injects automatically |
| State saving | Model must write the file | Hook saves automatically |
| Model dependency | Requires model cooperation | Model-agnostic |
| Reliability | Varies by model | Consistent |
The skill (SKILL.md) is retained as documentation and fallback protocol.
memory-continuity/
├── openclaw.plugin.json # Plugin manifest
├── index.js # Plugin entry point (hooks)
├── SKILL.md # Behavior contract / protocol docs
├── README.md
├── LICENSE
├── plugin/
│ └── lifecycle-prototype.ts # Original prototype (reference)
├── references/
│ ├── template.md
│ ├── doctor-spec.md
│ └── phase2-hook-validation.md
└── scripts/
├── post-install.sh # Automated installer
├── verify.sh # 3-layer install verifier
└── continuity_doctor.py # Health check
- Files are the source of truth — plain markdown, no database
- Hooks over prompts — don't rely on model behavior
- Zero external dependencies — no API keys, no vector DB
- Portable and backupable —
cpis your backup tool - Complements native OpenClaw memory — does not replace it
MIT