Phase 2 features:
- Daily summaries auto-generated from session logs
- Weekly summaries rolled up from dailies (every Monday)
- Auto-tagging: #tag extraction from sessions → memory/tags.md
- Enhanced search across state, archives, sessions, and summaries
- /mc summary command for browsing summaries
- /mc tags command for viewing tag index
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Explains how to remove the old skills/ocp/SKILL.md to avoid
conflicts with the new plugin-based command handler.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New companion plugin (mc-plugin/) registers /mc as a native OpenClaw
slash command with 10 subcommands: state, history, restore, clear,
search, settings, compact, export. All commands work across multiple
agent workspaces and return instant responses (direct file reads,
no model invocation).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- post-install.sh: reads openclaw.json `list` array via python3,
presents a numbered menu (all/specific/quit), installs SKILL.md
to <workspace>/skills/memory-continuity/SKILL.md for chosen agents;
falls back to manual path prompt if config absent
- post-install.sh: remove gateway restart step
- verify.sh: add --all-agents flag that runs the 3-layer check
(SKILL.md, continuity_doctor.py, CURRENT_STATE.md) across every
detected agent workspace and reports pass/fail per agent
- openclaw.plugin.json: bump version to 2.4.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace 'Path | None' union syntax with 'Optional[Path]' (typing import)
so continuity_doctor.py works on Python 3.6+
- Remove message-count guard in agent_end hook that blocked state writes
when realUserMsgs.length < 2; agents can now update CURRENT_STATE.md
regardless of conversation length
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Layer 1: checks SKILL.md, continuity_doctor.py, openclaw.plugin.json exist
Layer 2: runs continuity_doctor.py to confirm tool is available
Layer 3: detects empty/placeholder CURRENT_STATE.md and suggests --sample
--sample flag shows a realistic production migration task (db v2→v3,
blocked on migration window sign-off) so new users understand what
high-importance state looks like before their first session.
Colour output with ✅⚠️❌. README Quick Start updated with verify commands.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bump version to 2.3.0 across package.json, openclaw.plugin.json.
Add comprehensive CHANGELOG documenting all bugs found and fixed
during the v2.x development cycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Short conversations (< 2 real user messages) no longer overwrite
existing meaningful state. This prevents the "recovery death spiral"
where:
1. Secret told → state saved ✅
2. /new → state injected → model ignores it → "I don't remember"
3. agent_end overwrites good state with "I don't remember" ❌
4. All subsequent recoveries fail permanently
Now step 3 is blocked: a 1-message "what was my secret?" conversation
won't overwrite the previously saved secret.
Also strips channel metadata and /new-style short commands from
the real message count.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The agent_end hook was skipping state extraction when CURRENT_STATE.md
already contained meaningful content. This meant once a state was written,
subsequent conversations never updated it — the next /new would always
recover stale data.
Now: every session end overwrites CURRENT_STATE.md with the latest
conversation state. Previous state is archived to STATE_ARCHIVE_<ts>.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v2.2.0 — first fully working plugin release:
- Fix: resolve workspace dir from hook context (_ctx), not api.runtime
- Fix: strip channel metadata from user messages before state extraction
- Both fixes are required for gateway/Telegram/Discord deployments
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Hook callbacks now get workspace from _ctx.workspaceDir (the hook
context parameter) instead of api.runtime.workspaceDir which is
undefined in gateway mode. This was the root cause of the plugin
silently doing nothing on all remote/gateway deployments.
- extractStateFromMessages now strips Telegram/Discord channel
metadata ("Conversation info (untrusted metadata)") from user
messages before saving to CURRENT_STATE.md, preventing garbage
data in the Objective field.
Tested on: macOS local (GPT-5.4), Oracle Cloud (MiniMax M2.5)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
post-install.sh now writes plugins.installs with source:"path" so
OpenClaw recognizes the plugin origin. Eliminates both the allow-list
and provenance warnings on fresh install. Script is now fully
idempotent — always refreshes allow/installs/entries.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add package.json with openclaw plugin metadata, configure plugins.allow
in post-install.sh, and add source field to plugin manifest. Fresh
installs now load without trust/provenance warnings in gateway logs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Unify version references across all files. Update GitHub repo
description from "Draft skill" to "Lifecycle plugin".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace prompt-based skill approach with OpenClaw lifecycle hooks
(before_agent_start, agent_end, before_compaction, before_reset).
State injection now happens automatically at the hook level,
making it model-agnostic and reliable across all providers.
- Add index.js with 5 lifecycle hooks
- Add openclaw.plugin.json manifest
- Rewrite post-install.sh to handle plugin installation
- Update README with plugin architecture docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add scripts/post-install.sh to clear stale skillsSnapshot cache from
existing sessions, ensuring the skill loads immediately after install.
Update README with corrected install path and post-install instructions.
Include detailed troubleshooting report documenting the snapshot cache
root cause analysis.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>