Dreaming
The opt-in idle mode: replay, association and speculative hypotheses that can never act.
Dreaming is an optional idle mode. It is off by default, confined to an hours window, budgeted, and structurally unable to act. When it runs, the mind replays a deterministic sample of its memories, notices pairs that share vocabulary but were never connected, and proposes speculative hypotheses for an operator to review.
On this page
Why it exists
A mind that only ever reasons about the thing in front of it never notices that two things it learned weeks apart are related. Dreaming is the cheapest safe way to find such links: it uses no external input, spends a bounded number of model calls (often none), produces nothing above hypothesis confidence, and leaves every proposal in a review queue.
Guarantees
- Cannot act. The dream marks its context forbidden for the capability layer before doing anything; any invocation reached from a dream is refused, and a test proves it.
- Low confidence by construction. Every dream hypothesis is a belief of epistemic kind
hypothesis with two weak memory citations, which lands near 0.30 and is asserted in tests to stay at or below 0.35. Only ordinary evidence can raise it.
- Nothing rewritten. Sampled memories are untouched; new links are additional edges; rejecting a hypothesis retracts its belief and leaves everything else.
- Budgeted and scheduled. Per-mind model-call, memory and hypothesis caps; a global pause switch; scheduled dreams require enabled, inside the hours window, interval elapsed and not paused. An operator's "dream now" ignores the hours window but never the pause.
Dreaming is an optional idle mode (spec §19). It is off by default. When
enabled, and only inside the allowed hours, a mind periodically:
- Replays a deterministic sample of recent episodic and semantic memories
(the sample is a function of the dream id, so a dream can be replayed).
- Associates pairs that share vocabulary (Jaccard within a band, excluding
near-duplicates and same-episode pairs) but were never linked. Each new link
is a
similar_to relationship with low confidence and a dream_association
event citing both memories.
- Proposes speculative hypotheses for the strongest pairs. Wording is
deterministic unless a budgeted model call (role
hypothesise, prompt
dream) offers a better one. The model never decides truth.
Guarantees
- Dreams cannot act.
Run marks its context forbidden for the capability
layer before doing anything; any Invoke reached from a dream returns
ErrForbiddenContext. There is no code path from dreaming to an executor.
- Low confidence by construction. Every hypothesis is a belief with
epistemic kind
hypothesis (prior 0.25) and two memory citations at weight
0.1, giving roughly 0.30. The test suite asserts ≤ 0.35. Confidence can only
rise through ordinary evidence.
- Nothing is rewritten. Sampled memories are untouched. Rejecting a
hypothesis retracts its belief; promoting adds an operator endorsement as
evidence, so the arithmetic stays inspectable on the belief page.
- Budgeted. Per-mind model-call, memory and hypothesis caps; a global pause
switch; scheduled dreams need enabled + hours window + interval elapsed.
Operating
- UI: mind → Dreams. Review proposed hypotheses (promote / reject), see
dreams with counts, change settings (administrator).
- API:
GET /api/v1/minds/{mind}/dreams, POST .../dreams/run,
POST .../dreams/settings, POST .../dreams/hypotheses/{id}/promote|reject,
POST /api/v1/dreams/pause.
- CLI:
noemactl dreams <mind> list|run|promote <id> [note]|reject <id> [reason].
Settings (CognitiveConfig): dreaming_enabled, dream_hours (HH-HH local,
may wrap midnight, blank = any), dream_interval, dream_llm_calls,
dream_max_memories, dream_max_hypotheses.