Dreaming
Dreaming è il sistema di consolidamento della memoria in background inmemory-core.
Aiuta OpenClaw a spostare segnali forti di breve termine nella memoria durevole, mantenendo il processo spiegabile e verificabile.
Dreaming è opt-in ed è disabilitato per impostazione predefinita.
Cosa scrive Dreaming
Dreaming mantiene due tipi di output:- Stato macchina in
memory/.dreams/(archivio di richiamo, segnali di fase, checkpoint di ingestione, lock). - Output leggibile da esseri umani in
DREAMS.md(o nell’esistentedreams.md) e file di report facoltativi per fase inmemory/dreaming/<phase>/YYYY-MM-DD.md.
MEMORY.md.
Modello delle fasi
Dreaming usa tre fasi cooperative:| Fase | Scopo | Scrittura durevole |
|---|---|---|
| Light | Ordina e prepara il materiale recente di breve termine | No |
| Deep | Valuta e promuove i candidati durevoli | Sì (MEMORY.md) |
| REM | Riflette su temi e idee ricorrenti | No |
Fase Light
La fase Light acquisisce segnali di memoria giornalieri recenti e tracce di richiamo, li deduplica e prepara le righe candidate.- Legge dallo stato di richiamo a breve termine, dai file di memoria giornalieri recenti e dalle trascrizioni di sessione redatte quando disponibili.
- Scrive un blocco gestito
## Light Sleepquando l’archiviazione include output inline. - Registra segnali di rinforzo per la successiva classificazione deep.
- Non scrive mai in
MEMORY.md.
Fase Deep
La fase Deep decide cosa diventa memoria a lungo termine.- Classifica i candidati usando punteggi pesati e soglie di controllo.
- Richiede il superamento di
minScore,minRecallCounteminUniqueQueries. - Reidrata gli snippet dai file giornalieri live prima della scrittura, così gli snippet obsoleti/eliminati vengono saltati.
- Aggiunge le voci promosse a
MEMORY.md. - Scrive un riepilogo
## Deep SleepinDREAMS.mde facoltativamente scrivememory/dreaming/deep/YYYY-MM-DD.md.
Fase REM
La fase REM estrae schemi e segnali riflessivi.- Costruisce riepiloghi di temi e riflessioni dalle recenti tracce di breve termine.
- Scrive un blocco gestito
## REM Sleepquando l’archiviazione include output inline. - Registra segnali di rinforzo REM usati dalla classificazione deep.
- Non scrive mai in
MEMORY.md.
Ingestione delle trascrizioni di sessione
Dreaming può acquisire trascrizioni di sessione redatte nel corpus di Dreaming. Quando le trascrizioni sono disponibili, vengono inviate alla fase Light insieme ai segnali di memoria giornalieri e alle tracce di richiamo. I contenuti personali e sensibili vengono redatti prima dell’ingestione.Diario dei sogni
Dreaming mantiene anche un narrativo Diario dei sogni inDREAMS.md.
Dopo che ogni fase dispone di materiale sufficiente, memory-core esegue un turno di sottoagente in background best-effort (usando il modello runtime predefinito) e aggiunge una breve voce di diario.
Questo diario è destinato alla lettura umana nell’interfaccia Dreams, non è una fonte di promozione.
Gli artefatti di diario/report generati da Dreaming sono esclusi dalla
promozione a breve termine. Solo gli snippet di memoria fondati sono idonei alla promozione in
MEMORY.md.
Esiste anche un percorso di backfill storico fondato per il lavoro di revisione e recupero:
memory rem-harness --path ... --groundedmostra in anteprima l’output del diario fondato dalle note storicheYYYY-MM-DD.md.memory rem-backfill --path ...scrive voci di diario fondate e reversibili inDREAMS.md.memory rem-backfill --path ... --stage-short-termprepara candidati durevoli fondati nello stesso archivio di evidenze a breve termine che la normale fase deep usa già.memory rem-backfill --rollbacke--rollback-short-termrimuovono quegli artefatti di backfill preparati senza toccare le normali voci di diario o il richiamo live a breve termine.
Segnali di classificazione deep
La classificazione deep usa sei segnali di base pesati più il rinforzo di fase:| Segnale | Peso | Descrizione |
|---|---|---|
| Frequenza | 0.24 | Quanti segnali a breve termine ha accumulato la voce |
| Rilevanza | 0.30 | Qualità media di recupero per la voce |
| Diversità delle query | 0.15 | Contesti distinti di query/giorno che l’hanno fatta emergere |
| Recenza | 0.15 | Punteggio di freschezza con decadimento temporale |
| Consolidation | 0.10 | Forza di ricorrenza su più giorni |
| Ricchezza concettuale | 0.06 | Densità di tag concettuali da snippet/percorso |
memory/.dreams/phase-signals.json.
Pianificazione
Quando abilitato,memory-core gestisce automaticamente un processo Cron per una sweep completa di Dreaming. Ogni sweep esegue le fasi in ordine: light -> REM -> deep.
Comportamento della cadenza predefinita:
| Impostazione | Predefinito |
|---|---|
dreaming.frequency | 0 3 * * * |
Avvio rapido
Abilitare Dreaming:Comando slash
Flusso di lavoro CLI
Usa la promozione CLI per l’anteprima o l’applicazione manuale:memory promote usa per impostazione predefinita le soglie della fase deep, a meno che non vengano sovrascritte
con flag CLI.
Spiegare perché un candidato specifico verrebbe o non verrebbe promosso:
Valori predefiniti principali
Tutte le impostazioni si trovano inplugins.entries.memory-core.config.dreaming.
| Chiave | Predefinito |
|---|---|
enabled | false |
frequency | 0 3 * * * |
Interfaccia Dreams
Quando abilitata, la scheda Dreams del Gateway mostra:- stato attuale di Dreaming abilitato
- stato a livello di fase e presenza di sweep gestita
- conteggi di breve termine, fondati, segnali e promossi oggi
- tempistica della prossima esecuzione pianificata
- un percorso Scene fondato distinto per le voci di replay storico preparate
- un lettore espandibile del Diario dei sogni supportato da
doctor.memory.dreamDiary
Risoluzione dei problemi
Dreaming non viene mai eseguito (lo stato mostra blocked)
Il Cron Dreaming gestito usa l’Heartbeat dell’agente predefinito. Se l’Heartbeat non viene attivato per quell’agente, il Cron accoda un evento di sistema che nessuno consuma e Dreaming silenziosamente non viene eseguito. Siaopenclaw memory status sia /dreaming status segnaleranno blocked in quel caso e indicheranno l’agente il cui Heartbeat è il blocco.
Due cause comuni:
- Un altro agente dichiara un blocco
heartbeat:esplicito. Quando qualsiasi voce inagents.listha il proprio bloccoheartbeat, solo quegli agenti eseguono l’Heartbeat — i valori predefiniti smettono di applicarsi a tutti gli altri, quindi l’agente predefinito può restare silenzioso. Sposta le impostazioni di Heartbeat inagents.defaults.heartbeat, oppure aggiungi un bloccoheartbeatesplicito all’agente predefinito. Vedi Ambito e precedenza. heartbeat.everyè0, vuoto o non analizzabile. Il Cron non ha alcun intervallo rispetto a cui pianificare, quindi l’Heartbeat è di fatto disabilitato. Impostaeverysu una durata positiva come30m. Vedi Valori predefiniti.