signal-dreaming
Safe single-owner staged memory consolidation with autonomous bounded index compaction.
kelven.ling
@lzyling
What This Skill Does
Consolidates daily logs into topic files and a compact MEMORY.md index using a deterministic Sense → Consolidate → Settle workflow. Enforces single-owner write access with preflight checks, guarded backups, and hash-based change detection.
Replaces manual memory consolidation and ad-hoc note organization by providing a safe, auditable, single-writer pipeline with automatic backup and recovery.
When to Use It
- Consolidate a week of daily logs into organized topic files
- Run a scheduled nightly memory consolidation with ownership verification
- Recover memory state from a guarded backup after data corruption
- Audit which daily logs have been processed and which remain
- Perform a one-time manual consolidation of selected daily logs
- Verify that no other consolidation writer is active before starting a write run
Install
$ openclaw skills install @lzyling/signal-dreamingSignal Dreaming
Consolidate 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.
Ownership contract
Use exactly one memory consolidation writer.
- Require built-in OpenClaw Dreaming to be disabled before any write.
- Refuse write mode when more than one enabled signal-dreaming cron is visible.
- Treat missing CLI fields, schema drift, unsafe paths, or ambiguous ownership as read-only failures.
- Never modify OpenClaw configuration, cron, Gateway, another agent, or memory-core internals.
- Do not read private plugin state, SQLite, recall locks,
DREAMS.md,memory/dreaming/**, ormemory/.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.
Runtime support
- Minimum and tested OpenClaw:
2026.7.1-2. - Minimum and tested Node.js:
22.23.1. - Tested platform for this release candidate: macOS arm64.
- Linux and Windows are not supported by
3.0.0-rc.3until their isolated acceptance matrices pass. - No third-party npm packages or Bash runtime are required.
Future OpenClaw releases may work only when the public CLI fields still match the validated contract. Unknown fields fail closed.
Durable model
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.
Workflow
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-noopcompact-firstplan even when no daily log changed. -
Read selected daily logs and relevant L2 files. When
plan.index.maintenanceRequiredis 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 liveMEMORY.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.
Limits
- Missing state: process only the most recent 7 calendar days.
- Per run: at most 32 daily logs and 512 KiB total input.
--full-historyis manual only and remains bounded.MEMORY.mdat0–8192bytes is healthy.8193–10240bytes is a soft trimming band.- More than
10240bytes is a hard failure for candidates and a mandatorycompact-firsttrigger for the planner. - A soft-band index triggers maintenance when it changed since the last successful review or that review is at least 7 days old. An unchanged recently reviewed soft-band index does not loop nightly.
- A maintenance-only candidate must reduce
MEMORY.md; otherwise reject it without writing a diary or advancing state.
Failure and recovery
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
Scheduling
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.
Top skills in this category
Self-Improving + Proactive Agent
@ivangdavilaSelf-reflection + Self-criticism + Self-learning + Self-organizing memory. Agent evaluates its own work, catches mistakes, and improves permanently. Use when...
ontology
@oswalpalashTyped knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linkin...
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Obsidian
@steipeteWork with Obsidian vaults (plain Markdown notes) and automate via obsidian-cli.
YouTube Watcher
@michaelgatharaFetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.