Install
openclaw skills install @lzyling/signal-dreamingSafe single-owner staged memory consolidation with autonomous bounded index compaction.
openclaw skills install @lzyling/signal-dreamingConsolidate daily logs into L2 topic files and a compact MEMORY.md index. Preserve the proven v1.3.1 Sense → Consolidate → Settle model while adding deterministic P0 safety guards.
Release candidate: 3.0.0-rc.3.
Use exactly one memory consolidation writer.
DREAMS.md, memory/dreaming/**, or memory/.dreams/**.Collect three fixed read-only public CLI outputs into a private temporary directory, then run preflight:
openclaw --version > <EVIDENCE_DIR>/version.txt
openclaw config get plugins.entries.memory-core.config.dreaming.enabled --json > <EVIDENCE_DIR>/dreaming.json
openclaw cron list --all --json > <EVIDENCE_DIR>/cron.json
node <SKILL_DIR>/scripts/preflight.mjs <WORKSPACE_ROOT> \
--version-file <EVIDENCE_DIR>/version.txt \
--dreaming-file <EVIDENCE_DIR>/dreaming.json \
--cron-file <EVIDENCE_DIR>/cron.json
If any collection command fails, stop. Keep evidence local; do not paste cron payloads into chat. Create the evidence directory with owner-only permissions and remove it after preflight. Use the raw command outputs; do not hand-author alternative evidence schemas.
Use --read-only only for diagnosis when built-in Dreaming is enabled. A read-only pass does not authorize writes.
Zero scheduled writers is acceptable for an explicitly invoked manual run and produces a warning. Every scheduled invocation must add --scheduled; it then fails unless exactly one enabled writer is visible.
2026.7.1-2.22.23.1.3.0.0-rc.3 until their isolated acceptance matrices pass.Future OpenClaw releases may work only when the public CLI fields still match the validated contract. Unknown fields fail closed.
memory/YYYY-MM-DD*.md — immutable daily source logs; never move, delete, or edit.memory/<topic>.md — durable L2 topic detail.MEMORY.md — compact current-state index and L2 pointers.memory/dream-log.md — human-readable diary, at most 30 entries.logs/signal-dreaming/state.json — rebuildable hash cursor outside memory indexing..backup/memory-dreams/<run-id>/manifest.json — run status, plan, hashes, and backup map.Do not depend on recall JSON. Detect work from daily-log SHA-256 changes, including same-day appends and suffixed logs.
Read references/dream-protocol.md completely before a write run.
Run preflight.mjs.
Generate and save a read-only plan:
node <SKILL_DIR>/scripts/delta-state.mjs plan <WORKSPACE_ROOT> > <PLAN_FILE>
The planner combines changed daily logs and index maintenance. Stop only when "noop": true. A hard-limit index must produce a non-noop compact-first plan even when no daily log changed.
Read selected daily logs and relevant L2 files. When plan.index.maintenanceRequired is true, prioritize semantic compaction: keep current state, recovery conditions, authority boundaries, and L2 pointers; move detail to L2 before removing it from the index.
Begin the guarded candidate transaction:
node <SKILL_DIR>/scripts/run-guard.mjs create-run-id <WORKSPACE_ROOT>
node <SKILL_DIR>/scripts/run-guard.mjs begin <WORKSPACE_ROOT> <RUN_ID> <PLAN_FILE> MEMORY.md memory/dream-log.md memory/<topic>.md
node <SKILL_DIR>/scripts/run-guard.mjs verify-before-write <WORKSPACE_ROOT> <RUN_ID>
Edit only the manifest's candidate files under .backup/memory-dreams/<RUN_ID>/candidate/. Never edit live MEMORY.md, live L2, or the diary during the candidate phase.
Prepare the diary entry JSON and semantically review candidate L2 files.
Finalize:
node <SKILL_DIR>/scripts/run-guard.mjs finalize <WORKSPACE_ROOT> <RUN_ID> <ENTRY_JSON> --semantic-review-confirmed
Finalization audits the candidate, rechecks every live hash, renders the diary in the candidate tree, then commits planned files and advances state. Candidate rejection leaves live memory untouched. Omit --semantic-review-confirmed only when no L2 candidate is touched.
--full-history is manual only and remains bounded.MEMORY.md at 0–8192 bytes is healthy.8193–10240 bytes is a soft trimming band.10240 bytes is a hard failure for candidates and a mandatory compact-first trigger for the planner.MEMORY.md; otherwise reject it without writing a diary or advancing state.Manifest states distinguish candidate failure from uncertain live state.
candidate_rejected: deterministic candidate failure; live memory was not changed, the lock is released, and no acknowledgement is required.incomplete: a live commit may be partial or an older live-edit run needs reconciliation. Inspect backups and live hashes before acknowledgement.committed: candidate audit, live hash recheck, planned-file commit, diary, and state all completed.Never start over an active, stale, or unreviewed incomplete run. For an incomplete run:
node <SKILL_DIR>/scripts/run-guard.mjs ack-incomplete <WORKSPACE_ROOT> <RUN_ID> --confirm <RUN_ID>
Acknowledgement records review; it does not restore files.
Inventory retained V2 and V3 transactions without mutating them:
node <SKILL_DIR>/scripts/transaction-list.mjs <WORKSPACE_ROOT>
The inventory accepts legacy V2 workspace/entries manifests and V3 root/plannedFiles manifests. It recognizes the legacy backup lock directory and the V3 logs/signal-dreaming/run.lock file, fails closed when both lock formats are present, and rejects mixed or conflicting manifest identities. V3 results are diagnostic only and never emit automatic rollback commands.
For STATE_INVALID or STATE_SCHEMA_UNSUPPORTED, inspect and quarantine only the exact reviewed state hash:
node <SKILL_DIR>/scripts/delta-state.mjs inspect-state <WORKSPACE_ROOT>
node <SKILL_DIR>/scripts/delta-state.mjs quarantine-state <WORKSPACE_ROOT> --confirm <STATE_SHA256>
Run standalone audit and isolated acceptance tests with:
node <SKILL_DIR>/scripts/dream-audit.mjs <WORKSPACE_ROOT>
node <SKILL_DIR>/scripts/self-test.mjs
Provide cron only as a template; never create or modify it automatically. Schedule one isolated agent turn and include the workspace root. The job must run preflight and stop on no-op or any ambiguity.
{
"name": "signal-dreaming-v3-daily",
"schedule": { "kind": "cron", "expr": "<MINUTE> <HOUR> * * *", "tz": "<TIMEZONE>" },
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"timeoutSeconds": 900,
"message": "Run signal-dreaming as a scheduled invocation. Read its SKILL.md and references/dream-protocol.md completely. Workspace root: <WORKSPACE_ROOT>. Run preflight with --scheduled. Stop on preflight failure, no-op, ambiguity, or an unfinished run."
},
"delivery": { "mode": "announce", "channel": "<CHANNEL>", "to": "<TARGET>" }
}
For a v1.3.1 upgrade, leave existing memories and diary in place. Missing V3 state triggers the bounded 7-day bootstrap; diary numbering uses the maximum valid existing Dream number plus one.