Stage N1. Stochastic scanning of past conversations to gather raw memory fragments. Broad, unfocused, deliberately noisy. The only stage that touches conversation history directly.
The hypnagogic scan. Fast, cheap, broad, noisy. ~5% of cycle time.
Drift is the only stage that directly searches past conversations. All downstream stages work exclusively with drift's output.
From orchestrator: target_skill, scan_depth (default 10),
recency_bias (0-1, default 0.7), randomness (0-1, default 0.4),
cycle_number (1-indexed).
Read the target SKILL.md. Extract:
Build a keyword pool of 10-20 terms ranked by specificity.
Use conversation_search and recent_chats tools. Strategy varies
by cycle:
| Cycle | Recency Bias | Randomness | Scan Depth |
|---|---|---|---|
| 1 | 0.8 | 0.3 | 8 |
| 2 | 0.5 | 0.5 | 10 |
| 3 | 0.3 | 0.7 | 12 |
| 4+ | 0.2 | 0.8 | 15 |
Early cycles: mostly recent_chats. Later: mostly conversation_search
with random keywords from the less-specific end of the pool. Include
cross-domain terms in later cycles.
From each result, extract 1-3 sentence fragments capturing:
Do NOT reproduce conversation content — summarize the essence.
Fragment format (YAML):
- id: f001
source: recent_chats | conversation_search
recency: recent | mid | old
relevance: direct | adjacent | tangential
content: "User requested Word doc with mixed English/Arabic, bidirectional TOC"
friction: true
friction_signal: "Corrected RTL formatting twice"
tags: [docx, rtl, toc, multilingual]
synthetic: false
Add 1-3 synthetic fragments — deliberately tangential or surreal:
Tag all as synthetic: true.
fragment_bag:
target_skill: /path/to/SKILL.md
cycle_number: 1
total_fragments: 14
sources: {recent_chats: 7, conversation_search: 4, synthetic: 3}
fragments: [...]