recallnest 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/.env +4 -0
  2. package/CLAUDE.md +1 -1
  3. package/README.md +30 -5
  4. package/README_CN.md +30 -5
  5. package/config.json +55 -0
  6. package/connectors/examples/email-adapter.ts +73 -0
  7. package/connectors/examples/logs-adapter.ts +103 -0
  8. package/connectors/examples/rss-adapter.ts +95 -0
  9. package/logs/daily-recall.error.log +0 -0
  10. package/logs/daily-recall.log +60 -0
  11. package/logs/ingest-2026-04-11.log +110 -0
  12. package/logs/ingest-2026-04-12.log +90 -0
  13. package/logs/ingest-2026-04-13.log +87 -0
  14. package/logs/launchagent-stderr.log +0 -0
  15. package/logs/launchagent-stdout.log +0 -0
  16. package/package.json +1 -1
  17. package/src/cli.ts +30 -0
  18. package/src/connector-types.ts +57 -0
  19. package/src/conversation-importer.ts +25 -1
  20. package/src/data-checkup.ts +31 -1
  21. package/src/doctor.ts +29 -0
  22. package/src/ingest.ts +203 -0
  23. package/src/mcp-server.ts +2 -2
  24. package/src/obsidian-connector.ts +282 -0
  25. package/src/session-schema.ts +2 -2
  26. package/src/source-heartbeat.ts +108 -0
  27. package/.claude-plugin/CLAUDE.md +0 -29
  28. package/.claude-plugin/marketplace.json +0 -18
  29. package/.dockerignore +0 -11
  30. package/.github/workflows/ci.yml +0 -28
  31. package/.mcp.json +0 -9
  32. package/CHANGELOG.md +0 -51
  33. package/DEMO.md +0 -94
  34. package/Dockerfile +0 -20
  35. package/EVAL.md +0 -89
  36. package/FAILURES.md +0 -75
  37. package/OPERATIONS.md +0 -59
  38. package/ROADMAP.md +0 -245
  39. package/SKILL.md +0 -250
  40. package/assets/dashboard.png +0 -0
  41. package/assets/knowledge-graph.png +0 -0
  42. package/assets/recallnest-workbench.png +0 -0
  43. package/assets/screenshots/ui-full.png +0 -0
  44. package/assets/screenshots/ui-overview.png +0 -0
  45. package/assets/screenshots/ui-search.png +0 -0
  46. package/assets/ui/app.js +0 -1031
  47. package/assets/ui/index.html +0 -224
  48. package/assets/ui/styles.css +0 -781
  49. package/assets/wechat-qr.jpg +0 -0
  50. package/bun.lock +0 -337
  51. package/daily-reflections/2026-03-05.md +0 -15
  52. package/daily-reflections/2026-03-06.md +0 -15
  53. package/daily-reflections/2026-03-07.md +0 -7
  54. package/daily-reflections/2026-03-08.md +0 -34
  55. package/daily-reflections/2026-03-09.md +0 -35
  56. package/daily-reflections/2026-03-10.md +0 -36
  57. package/daily-reflections/2026-03-11.md +0 -35
  58. package/daily-reflections/2026-03-12.md +0 -36
  59. package/daily-reflections/2026-03-13.md +0 -35
  60. package/daily-reflections/2026-03-14.md +0 -35
  61. package/daily-reflections/2026-03-15.md +0 -35
  62. package/daily-reflections/2026-03-16.md +0 -41
  63. package/daily-reflections/2026-03-17.md +0 -10
  64. package/daily-reflections/2026-03-18.md +0 -10
  65. package/daily-reflections/2026-03-19.md +0 -10
  66. package/daily-reflections/2026-03-20.md +0 -10
  67. package/daily-reflections/2026-03-21.md +0 -10
  68. package/daily-reflections/2026-03-22.md +0 -10
  69. package/daily-reflections/2026-03-23.md +0 -10
  70. package/daily-reflections/2026-03-24.md +0 -10
  71. package/daily-reflections/2026-03-25.md +0 -32
  72. package/daily-reflections/2026-03-26.md +0 -37
  73. package/daily-reflections/2026-03-27.md +0 -35
  74. package/daily-reflections/2026-03-28.md +0 -35
  75. package/daily-reflections/2026-03-29.md +0 -35
  76. package/daily-reflections/2026-03-30.md +0 -36
  77. package/daily-reflections/2026-03-31.md +0 -35
  78. package/daily-reflections/2026-04-01.md +0 -35
  79. package/daily-reflections/2026-04-02.md +0 -35
  80. package/daily-reflections/2026-04-03.md +0 -37
  81. package/daily-reflections/2026-04-04.md +0 -37
  82. package/daily-reflections/2026-04-05.md +0 -35
  83. package/daily-reflections/2026-04-06.md +0 -36
  84. package/daily-reflections/2026-04-07.md +0 -35
  85. package/daily-reflections/2026-04-08.md +0 -35
  86. package/daily-reflections/2026-04-12.md +0 -35
  87. package/data/alias-map.example.json +0 -22
  88. package/docs/api-reference.md +0 -1291
  89. package/docs/architecture.md +0 -168
  90. package/docs/memory-boundary-contract.md +0 -226
  91. package/docs/memory-categories.md +0 -119
  92. package/docs/pipeline-audit-ultramemory.md +0 -177
  93. package/docs/plans/2026-03-08-query-expansion.md +0 -270
  94. package/docs/plans/2026-03-16-continuity-layer.md +0 -196
  95. package/docs/plans/2026-04-01-recall-boost.md +0 -100
  96. package/docs/plans/mcp-tiering-plan.md +0 -126
  97. package/docs/research/recall-quality-audit-2026-03-22.md +0 -153
  98. package/docs/self-evolution.md +0 -198
  99. package/docs/superpowers/plans/2026-03-19-ingest-pipeline-upgrade.md +0 -782
  100. package/docs/superpowers/plans/2026-04-11-constructive-retrieval-emotion.md +0 -1195
  101. package/docs/superpowers/specs/2026-03-19-ingest-pipeline-upgrade-design.md +0 -77
  102. package/docs/superpowers/specs/2026-03-23-pull-claude-desktop-design.md +0 -95
  103. package/docs/superpowers/specs/2026-04-11-constructive-retrieval-emotion-design.md +0 -398
  104. package/eval/continuity/results-2026-03-16.md +0 -117
  105. package/eval/continuity/results-2026-03-19.md +0 -453
  106. package/eval/continuity/runbook.md +0 -110
  107. package/eval/continuity/seed-cases.md +0 -54
  108. package/eval/reports/2026-03-06-abstract-query-baseline.md +0 -96
  109. package/eval/reports/2026-03-06-aws-ssh-baseline.md +0 -82
  110. package/eval/reports/2026-03-06-baseline.md +0 -82
  111. package/eval/reports/query-expansion.md +0 -138
  112. package/glama.json +0 -6
  113. package/lm +0 -19
  114. package/plan-philosophy-upgrades.md +0 -363
  115. package/plan-product-upgrades.md +0 -155
  116. package/plan-v1.2-distributable.md +0 -105
  117. package/plan.md +0 -140
  118. package/research-memory-evolution.md +0 -440
  119. package/research-rl-agent-memory.md +0 -330
  120. package/scripts/archive-distilled-junk.ts +0 -116
  121. package/scripts/backfill-anchors.ts +0 -130
  122. package/scripts/backfill-l0l1l2.ts +0 -98
  123. package/scripts/blind-scan.ts +0 -588
  124. package/scripts/cleanup-step1-exact-dups.ts +0 -117
  125. package/scripts/cleanup-step2-template-dups.ts +0 -113
  126. package/scripts/cleanup-step3-stale-content.ts +0 -149
  127. package/scripts/cleanup-step4-orphan-scopes.ts +0 -131
  128. package/scripts/delete-distilled-junk.ts +0 -88
  129. package/scripts/diagnose-vector-search.ts +0 -132
  130. package/scripts/distill-facts.ts +0 -305
  131. package/scripts/health-check.ts +0 -343
  132. package/scripts/incremental-ingest.sh +0 -71
  133. package/scripts/migrate-language.ts +0 -75
  134. package/scripts/mlp-health-check.ts +0 -382
  135. package/scripts/pull-claude-desktop.ts +0 -515
  136. package/scripts/re-ingest-cc.sh +0 -66
  137. package/scripts/rebalance-memory-health.ts +0 -181
  138. package/scripts/run-desktop-ingest.sh +0 -11
  139. package/scripts/start-server.sh +0 -12
  140. package/scripts/verify-emotion-decay.ts +0 -148
  141. package/scripts/viz-dashboard.html +0 -423
  142. package/scripts/viz-export.ts +0 -703
  143. package/src/__tests__/access-tracker-novelty.test.ts +0 -228
  144. package/src/__tests__/activity-counter.test.ts +0 -96
  145. package/src/__tests__/admission-control.test.ts +0 -206
  146. package/src/__tests__/anchor-generator.test.ts +0 -67
  147. package/src/__tests__/auto-consolidation.test.ts +0 -168
  148. package/src/__tests__/auto-recall.test.ts +0 -131
  149. package/src/__tests__/babel-integration.test.ts +0 -139
  150. package/src/__tests__/batch-dedup.test.ts +0 -65
  151. package/src/__tests__/capture-engine.test.ts +0 -1144
  152. package/src/__tests__/capture-heuristic.test.ts +0 -171
  153. package/src/__tests__/cascade-forget.test.ts +0 -210
  154. package/src/__tests__/category-min-scores.test.ts +0 -33
  155. package/src/__tests__/cc8-cc1-essential-context.test.ts +0 -298
  156. package/src/__tests__/circuit-breaker.test.ts +0 -99
  157. package/src/__tests__/cluster-consolidation.test.ts +0 -712
  158. package/src/__tests__/confidence-metadata.test.ts +0 -125
  159. package/src/__tests__/confidence-tracker.test.ts +0 -249
  160. package/src/__tests__/conflict-advisor.test.ts +0 -206
  161. package/src/__tests__/conflict-escalation.test.ts +0 -149
  162. package/src/__tests__/conflict-lifecycle.test.ts +0 -83
  163. package/src/__tests__/conflict-output.test.ts +0 -85
  164. package/src/__tests__/conflict-store.test.ts +0 -374
  165. package/src/__tests__/consolidation-engine.test.ts +0 -181
  166. package/src/__tests__/constructive-retrieval.test.ts +0 -509
  167. package/src/__tests__/context-collapse-renderer.test.ts +0 -214
  168. package/src/__tests__/context-composer-pins.test.ts +0 -64
  169. package/src/__tests__/context-composer-task-selection.test.ts +0 -24
  170. package/src/__tests__/context-reconstructor.test.ts +0 -65
  171. package/src/__tests__/context-renderer.test.ts +0 -91
  172. package/src/__tests__/continuity-eval.test.ts +0 -275
  173. package/src/__tests__/continuity-schema.test.ts +0 -97
  174. package/src/__tests__/conversation-importer.test.ts +0 -692
  175. package/src/__tests__/core-recall-eval.test.ts +0 -235
  176. package/src/__tests__/core-summary.test.ts +0 -109
  177. package/src/__tests__/data-checkup.test.ts +0 -225
  178. package/src/__tests__/decay-exemption.test.ts +0 -84
  179. package/src/__tests__/dedup-actions.test.ts +0 -58
  180. package/src/__tests__/dedup-guard.test.ts +0 -39
  181. package/src/__tests__/deterministic-id.test.ts +0 -39
  182. package/src/__tests__/distill-lock.test.ts +0 -176
  183. package/src/__tests__/doctor.test.ts +0 -303
  184. package/src/__tests__/dream-pipeline.test.ts +0 -232
  185. package/src/__tests__/drill-down.test.ts +0 -108
  186. package/src/__tests__/embedder.test.ts +0 -122
  187. package/src/__tests__/emotion-decay.test.ts +0 -46
  188. package/src/__tests__/emotion-detector.test.ts +0 -56
  189. package/src/__tests__/emotion-phase1-integration.test.ts +0 -153
  190. package/src/__tests__/emotion-retrieval.test.ts +0 -56
  191. package/src/__tests__/entity-resolver.test.ts +0 -58
  192. package/src/__tests__/ethics-layer.test.ts +0 -476
  193. package/src/__tests__/event-segmenter.test.ts +0 -153
  194. package/src/__tests__/feature-flags-integration.test.ts +0 -54
  195. package/src/__tests__/frequency-tracker.test.ts +0 -113
  196. package/src/__tests__/graph-export.test.ts +0 -489
  197. package/src/__tests__/hotness-blend.test.ts +0 -76
  198. package/src/__tests__/ingest.test.ts +0 -360
  199. package/src/__tests__/interference-detector.test.ts +0 -203
  200. package/src/__tests__/kg-extractor.test.ts +0 -184
  201. package/src/__tests__/kg-store.test.ts +0 -198
  202. package/src/__tests__/llm-consolidation.test.ts +0 -226
  203. package/src/__tests__/mcp-efficiency.test.ts +0 -288
  204. package/src/__tests__/memory-boundaries.test.ts +0 -237
  205. package/src/__tests__/memory-evolution-b2-b3-e1.test.ts +0 -243
  206. package/src/__tests__/memory-evolution.test.ts +0 -271
  207. package/src/__tests__/memory-health-rebalance.test.ts +0 -144
  208. package/src/__tests__/memory-lint.test.ts +0 -271
  209. package/src/__tests__/memory-output.test.ts +0 -215
  210. package/src/__tests__/multi-vector.test.ts +0 -242
  211. package/src/__tests__/narrative-architecture.test.ts +0 -456
  212. package/src/__tests__/pending-review.test.ts +0 -77
  213. package/src/__tests__/post-retrieval-filter.test.ts +0 -178
  214. package/src/__tests__/ppr-traversal.test.ts +0 -256
  215. package/src/__tests__/prediction-engine.test.ts +0 -349
  216. package/src/__tests__/predictive-prospective-memory.test.ts +0 -416
  217. package/src/__tests__/preference-guard-smoke.test.ts +0 -211
  218. package/src/__tests__/preference-matcher.test.ts +0 -230
  219. package/src/__tests__/preference-slots.test.ts +0 -205
  220. package/src/__tests__/prospective-memory.test.ts +0 -283
  221. package/src/__tests__/query-entity-detector.test.ts +0 -171
  222. package/src/__tests__/query-expander-alias.test.ts +0 -89
  223. package/src/__tests__/query-expander.test.ts +0 -34
  224. package/src/__tests__/recall-governor.test.ts +0 -227
  225. package/src/__tests__/recall-mode.test.ts +0 -64
  226. package/src/__tests__/result-synthesizer.test.ts +0 -198
  227. package/src/__tests__/resume-context.test.ts +0 -4898
  228. package/src/__tests__/retrieval-trace.test.ts +0 -213
  229. package/src/__tests__/retriever-boundary-weight.test.ts +0 -136
  230. package/src/__tests__/retroactive-boost.test.ts +0 -223
  231. package/src/__tests__/salience-scoring.test.ts +0 -106
  232. package/src/__tests__/scope-inventory.test.ts +0 -200
  233. package/src/__tests__/scope-policy.test.ts +0 -69
  234. package/src/__tests__/session-checkpoint.test.ts +0 -259
  235. package/src/__tests__/session-distiller.test.ts +0 -611
  236. package/src/__tests__/session-gc.test.ts +0 -215
  237. package/src/__tests__/skill-engine.test.ts +0 -546
  238. package/src/__tests__/skill-promotion.test.ts +0 -349
  239. package/src/__tests__/store-scope-audit.test.ts +0 -81
  240. package/src/__tests__/supersede-chain.test.ts +0 -154
  241. package/src/__tests__/temporal-parser.test.ts +0 -241
  242. package/src/__tests__/temporal-validity.test.ts +0 -160
  243. package/src/__tests__/term-registry.test.ts +0 -121
  244. package/src/__tests__/tool-output-compressor.test.ts +0 -133
  245. package/src/__tests__/topic-tag.test.ts +0 -113
  246. package/src/__tests__/trusted-memory.test.ts +0 -828
  247. package/src/__tests__/version-manager.test.ts +0 -213
  248. package/src/__tests__/workflow-observation.test.ts +0 -400
  249. package/src/__tests__/write-verifier.test.ts +0 -122
package/EVAL.md DELETED
@@ -1,89 +0,0 @@
1
- # RecallNest Eval Memo
2
-
3
- This file is the operator memo for improving retrieval quality without relying on intuition.
4
-
5
- ## Why this exists
6
-
7
- RecallNest will keep evolving with:
8
- - upstream retrieval changes from `memory-lancedb-pro`
9
- - local tuning for your own workflows
10
- - new asset behavior (`pin`, `brief`, cleanup rules)
11
-
12
- Without a repeatable eval, it is impossible to tell whether recall actually improved.
13
-
14
- ## Core files
15
-
16
- | File | Purpose |
17
- |------|---------|
18
- | `eval/cases.json` | real-world recall cases to protect |
19
- | `src/eval.ts` | eval runner |
20
- | `eval/reports/` | saved baselines to compare across upgrades |
21
-
22
- ## What to evaluate
23
-
24
- Use queries that matter in real usage:
25
- - bot / bridge maintenance
26
- - OpenClaw memory architecture
27
- - writing style and user preference recall
28
- - visual style preference recall
29
- - AWS / config operations
30
-
31
- Important:
32
- - prefer the wording the operator actually types
33
- - do not invent a cleaner label if the real query is messier but more common
34
- - if `aws ssh` is what gets used in practice, benchmark `aws ssh`, not `aws bot config`
35
- - abstract, summarized queries are valid benchmarks if that is how the operator naturally searches
36
- - protect both query styles: exact operational wording and high-level conceptual wording
37
-
38
- Each case should define:
39
- - `query`
40
- - `profile`
41
- - optional `scope`
42
- - `expectAny`
43
- - `expectAll`
44
- - `expectScopePrefixes`
45
- - optional `forbid`
46
-
47
- ## Recommended workflow
48
-
49
- ### Before changing retrieval
50
-
51
- Run:
52
-
53
- ```bash
54
- bun run src/eval.ts --output eval/reports/latest.md
55
- ```
56
-
57
- If the change is important, also save a dated snapshot:
58
-
59
- ```bash
60
- bun run src/eval.ts --output eval/reports/2026-03-06-baseline.md
61
- ```
62
-
63
- ### After changing retrieval
64
-
65
- Run the same eval again and compare:
66
- - pass count
67
- - average score
68
- - top scopes
69
- - top snippet quality
70
-
71
- ## What counts as a good change
72
-
73
- Good:
74
- - relevant source scopes move up
75
- - user preference memories stay stable
76
- - bridge / ops / config queries become easier to recover
77
- - `pin` and `brief` behave differently on purpose
78
-
79
- Bad:
80
- - asset recursion comes back
81
- - old noisy `brief` objects dominate retrieval
82
- - exact operational queries stop surfacing recent config changes
83
- - writing/style queries drift away from user preference memories
84
-
85
- ## Maintenance note
86
-
87
- Whenever a new recurring workflow appears, add it to `eval/cases.json`.
88
-
89
- That turns “I hope this still works” into “I can prove it still works.”
package/FAILURES.md DELETED
@@ -1,75 +0,0 @@
1
- # RecallNest Failure Notebook
2
-
3
- Use this file to record misses, weak hits, and noisy hits.
4
-
5
- Do not rely on memory when retrieval quality changes. Add an entry, then update `eval/cases.json` if the failure should become a permanent benchmark.
6
-
7
- ## How To Use
8
-
9
- | Step | Action |
10
- |------|------|
11
- | 1 | Record the exact query you ran |
12
- | 2 | Note the mode, scope, and surface (`UI`, `MCP`, or `CLI`) |
13
- | 3 | Write what you expected to see |
14
- | 4 | Write what actually happened |
15
- | 5 | Make one concrete hypothesis, not five vague ones |
16
- | 6 | After a fix, record whether the issue moved into `eval/cases.json` |
17
-
18
- ## Entry Template
19
-
20
- ```md
21
- ## YYYY-MM-DD - short_name
22
-
23
- | Field | Value |
24
- |------|------|
25
- | Query | `...` |
26
- | Profile | `default / writing / debug / fact-check` |
27
- | Scope | `...` |
28
- | Surface | `UI / MCP / CLI` |
29
- | Expected | ... |
30
- | Actual | ... |
31
- | Failure Type | `miss / weak hit / noisy hit / asset pollution / bad ranking` |
32
- | Hypothesis | ... |
33
- | Fix | ... |
34
- | Eval Case Added | `yes / no` |
35
- ```
36
-
37
- ## Current Known Weak Spots
38
-
39
- | Query family | Current issue | Status |
40
- |------|------|------|
41
- | `aws ssh` | needs to stay strong because this is the real operator wording | watch |
42
- | abstract relationship queries | must keep working without exact keywords | watch |
43
- | asset-heavy topics | old briefs can pollute recall if asset hygiene is ignored | mitigated, keep watching |
44
-
45
- ## Entries
46
-
47
- ## 2026-03-06 - aws_query_wording
48
-
49
- | Field | Value |
50
- |------|------|
51
- | Query | `aws bot config` vs `aws ssh` |
52
- | Profile | `debug` |
53
- | Scope | `cc / codex / gemini / memory` |
54
- | Surface | `UI` |
55
- | Expected | the AWS access path should be easy to recover using the wording the operator naturally types |
56
- | Actual | `aws ssh` returns stronger and more directly useful hits than `aws bot config` |
57
- | Failure Type | `bad ranking` |
58
- | Hypothesis | the earlier eval case used an artificial wording closer to a label than a real operator query |
59
- | Fix | replace the eval case with `aws ssh` and treat operator wording as the benchmark source of truth |
60
- | Eval Case Added | `yes` |
61
-
62
- ## 2026-03-06 - working_relationship_positive
63
-
64
- | Field | Value |
65
- |------|------|
66
- | Query | `我们相处态度` |
67
- | Profile | `default` |
68
- | Scope | `cc / codex / gemini / memory` |
69
- | Surface | `UI` |
70
- | Expected | abstract relationship and collaboration preferences should still surface the right context |
71
- | Actual | user reported the result felt right; eval later passed at `73%`, which means it works but is still weaker than exact operational queries |
72
- | Failure Type | `weak hit / positive signal` |
73
- | Hypothesis | semantic recall is working for summarized wording, but abstract preference queries still need stronger ranking and cleaner memory prioritization |
74
- | Fix | keep this query as a protected eval case and treat it as a primary target for future retrieval tuning |
75
- | Eval Case Added | `yes` |
package/OPERATIONS.md DELETED
@@ -1,59 +0,0 @@
1
- # RecallNest Operations
2
-
3
- This file is the short operator memo for common actions.
4
-
5
- ## Open The UI
6
-
7
- ### Manual
8
-
9
- ```bash
10
- cd /Users/anxianjingya/recallnest
11
- bun run src/ui-server.ts
12
- ```
13
-
14
- Then open:
15
-
16
- ```text
17
- http://localhost:4317
18
- ```
19
-
20
- ### Ask Codex
21
-
22
- Use either of these:
23
-
24
- - `帮我启动 RecallNest UI`
25
- - `帮我打开 RecallNest 记忆工作台`
26
- - `帮我把 RecallNest 的本地界面跑起来`
27
-
28
- Expected result:
29
- - local UI server starts
30
- - browser target is `http://localhost:4317`
31
-
32
- ## Quick Intent Phrases
33
-
34
- ### Search
35
- - `帮我在 RecallNest 里搜 telegram bridge`
36
- - `帮我查一下过去关于 OpenClaw memory 的记录`
37
-
38
- ### Distill
39
- - `帮我把 OpenClaw 记忆系统蒸馏成 briefing`
40
-
41
- ### Brief
42
- - `帮我把这个主题做成一个 brief asset`
43
-
44
- ### Assets
45
- - `帮我打开 Assets 视图`
46
- - `帮我看一下有哪些 memory assets`
47
-
48
- ### Cleanup
49
- - `帮我检查有没有 dirty briefs`
50
- - `帮我清理旧的脏 brief`
51
-
52
- ## Product Position
53
-
54
- RecallNest should be operated primarily through:
55
-
56
- 1. MCP
57
- 2. UI
58
-
59
- CLI is an implementation layer, not the main product surface.
package/ROADMAP.md DELETED
@@ -1,245 +0,0 @@
1
- # RecallNest Roadmap
2
-
3
- > Vision: a shared memory layer for Claude Code, Codex, and Gemini CLI that gets more useful over time.
4
-
5
- RecallNest is no longer best described as "local transcript search." The real target is stricter:
6
-
7
- - one memory layer shared by the three terminals
8
- - stable context that survives across windows
9
- - memory that becomes more reusable, not just larger
10
-
11
- This roadmap reflects that direction.
12
-
13
- ## The Core Problem
14
-
15
- Today, most coding agents have weak continuity:
16
-
17
- - past context is scattered across tools
18
- - a new window often behaves like a reset
19
- - search is passive, so memory works only when explicitly invoked
20
- - transcript archives are large, but high-value memories are sparse
21
-
22
- RecallNest exists to close that gap without giving up local control.
23
-
24
- What matters first is this: opening another window should not erase stable context about the user, projects, patterns, and past solutions.
25
-
26
- ## Status Summary
27
-
28
- ### Already Done
29
-
30
- - Shared local LanceDB index
31
- - MCP server for Claude Code, Gemini CLI, and Codex (41 tools in 3 tiers)
32
- - HTTP API for custom agents (21 endpoints)
33
- - Ingestion from existing transcripts and memory files
34
- - Hybrid retrieval: vector + BM25 + reranking + 4 retrieval profiles
35
- - 6-channel retrieval: vector + BM25 + L0/L1/L2 multi-vector + KG graph (PPR)
36
- - 6-category memory classification with topic tags (15 auto-detected topics)
37
- - Tier-aware decay (Weibull) and access reinforcement
38
- - Brief and pin assets re-indexed into recall
39
- - Session checkpoints for active work state
40
- - `resume_context` composition for fresh windows (full/light/summary modes)
41
- - Continuity eval harness with seed cases and baseline reports
42
- - Setup scripts, diagnostics, and debugging UI
43
- - Explicit evidence -> durable promotion with provenance and `canonicalKey`
44
- - Conflict candidates, review, audit, escalation, merge resolution, and audit export
45
- - Session Distiller: 3-layer conversation compression to durable memory
46
- - Conversation import from Claude Code, Claude.ai, ChatGPT, Slack, and plaintext
47
- - Skill Memory: store, retrieve, and auto-promote executable skills
48
- - Admission Control: write-time gating with noise filter, importance floor, dedup, and rate limiting
49
- - Memory Lint: contradiction, duplicate, stale, and orphan detection with health score
50
- - Knowledge Graph: interactive D3.js visualization with cross-scope semantic bridges
51
- - Memory Dashboard: Web UI with stats, category distribution, growth trends, and health
52
- - SKILL.md: Memory Partner Protocol for LLM onboarding
53
- - Offline consolidation (`dream`): clustering, merging, pruning
54
- - Batch operations (`batch_store`): up to 20 memories per call with dedup
55
- - Data quality health checks (`data_checkup`)
56
- - Philosophy-Informed Memory: emotion-aware decay, memory ethics layer, autobiographical narrative, constructive retrieval, predictive prospective memory (5 phases, all complete)
57
- - Feature flags: 6 independent flags for gradual rollout
58
- - `forget_memory` MCP tool with cascade deletion and audit trail
59
- - `set_reminder` MCP tool with behavioral prediction engine
60
- - Memory confidence meta-tags: structured `ConfidenceMetadata` (score/reliability/verifiedAt), source-based auto-assignment, retrieval weighting, low-confidence tagging in `resume_context`
61
- - Interference detection + active forgetting gate: semantic cluster detection, enhanced RIF with top-K cluster demotion, write-time interference pre-warning, `data_checkup` density report
62
- - Temporal validity windows: `eventTime`/`validUntil` on `store_memory`, `validAt`/`includeExpired` on `search_memory`, expired memory demotion, auto-GC decay acceleration
63
-
64
- Test baseline: 1,428 tests, 0 failures
65
-
66
- ### Current Gap
67
-
68
- RecallNest is a mature three-terminal continuity layer with philosophy-informed memory architecture and research-grade retrieval quality (confidence scoring, interference detection, temporal validity). The remaining gaps are operational and architectural:
69
-
70
- - continuity eval still depends on the latest live checkpoint in one case
71
- - scheduled conflict audit/export for recurring review is still missing
72
- - cross-scope semantic bridge threshold may need per-user tuning
73
- - `retriever.ts` and `capture-engine.ts` are the two largest modules (2,111 and 1,280 lines) and need decomposition
74
- - Feature flags (6 total) need gradual production validation before defaulting to on
75
-
76
- ## Phase 1: Shared Memory Foundation
77
-
78
- Status: done
79
-
80
- Goal: make all three terminals use the same local memory base.
81
-
82
- Delivered:
83
-
84
- - one local index shared by Claude Code, Codex, and Gemini CLI
85
- - MCP integration scripts for the three terminals
86
- - HTTP API for agent frameworks
87
- - multi-source ingest pipeline
88
-
89
- ## Phase 2: Searchable Recall Engine
90
-
91
- Status: done
92
-
93
- Goal: make the memory base actually retrievable.
94
-
95
- Delivered:
96
-
97
- - ✅ hybrid retrieval (vector + BM25 + RRF)
98
- - ✅ 6-channel retrieval: vector + BM25 + L0/L1/L2 multi-vector + KG graph (PPR)
99
- - ✅ temporal validity windows: `validAt`/`includeExpired` retrieval, expired memory demotion
100
- - ✅ 4 retrieval profiles (default, writing, debug, fact-check)
101
- - ✅ 6 memory categories with topic tags
102
- - ✅ Weibull decay + tiering (core / working / peripheral)
103
- - ✅ explain, distill, brief, and pin flows
104
- - ✅ Recall Governor: auto-recall governance with budget control and session dedup
105
-
106
- ## Phase 3: Cross-Window Continuity Layer
107
-
108
- Status: ~~usable~~ **done**
109
-
110
- Goal: a fresh window should recall stable context without depending on the user to restate it.
111
-
112
- Delivered:
113
-
114
- - ✅ session checkpoints for active work state
115
- - ✅ `resume_context` for fresh windows (full/light/summary modes)
116
- - ✅ ultra-light wake-up: `resume_context(mode='light')` returns <300 tokens for low-budget terminals
117
- - ✅ context composition that prefers stable background over blindly replaying the last topic
118
- - ✅ managed continuity rules installed by setup for Claude Code, Codex, and Gemini CLI
119
- - ✅ repo-state guard: `checkpoint_session` scrubs volatile git status before handoff
120
- - ✅ session distiller: 3-layer conversation compression to durable memory
121
-
122
- Remaining work:
123
-
124
- - ⬜ isolate eval from live checkpoint drift
125
- - ⬜ keep measuring instruction-driven startup continuity across the three terminals
126
-
127
- ## Phase 4: High-Signal Memory Capture
128
-
129
- Status: ~~usable~~ **done**
130
-
131
- Goal: store more useful memory and less raw transcript residue.
132
-
133
- Delivered:
134
-
135
- - ✅ `store_memory` for MCP
136
- - ✅ dedicated workflow-pattern capture for durable `patterns`
137
- - ✅ structured capture endpoints for non-MCP agents
138
- - ✅ explicit evidence promotion into durable memory
139
- - ✅ boundary guards for `evidence / durable / session`
140
- - ✅ conflict handling when new durable candidates disagree with existing canonical owners
141
- - ✅ admission control: noise filter, importance floor, dedup, rate limiting
142
- - ✅ conversation import from Claude Code, ChatGPT, Slack, plaintext
143
- - ✅ batch store: up to 20 memories per call with dedup
144
- - ✅ auto capture: zero-LLM heuristic extraction from text
145
- - ✅ skill memory: store, retrieve, auto-promote executable skills from recurring patterns
146
- - ✅ topic tags: 15 auto-detected topics per scope, filterable in `search_memory`
147
-
148
- ## Phase 5: Memory Boundary and Conflict Operations
149
-
150
- Status: ~~usable~~ **done**
151
-
152
- Goal: stop durable memory from drifting silently and make conflicts operable in the terminal.
153
-
154
- Delivered:
155
-
156
- - ✅ `promote_memory` with provenance and `canonicalKey`
157
- - ✅ conflict candidates instead of silent overwrite
158
- - ✅ terminal conflict review: `list / show / resolve`
159
- - ✅ conflict advice, clusters, audit, escalation, and `merge`
160
- - ✅ audit export snapshots in markdown or JSON
161
- - ✅ workflow observation: append-only health records outside regular memory
162
- - ✅ workflow health dashboard and evidence pack generation
163
-
164
- Remaining work:
165
-
166
- - ⬜ scheduled audit / export for recurring review
167
- - ⬜ stronger merge and promotion heuristics
168
-
169
- ## Phase 6: Self-Evolution Engine
170
-
171
- Status: ~~planned~~ **done**
172
-
173
- Goal: make memory quality improve over time.
174
-
175
- Delivered:
176
-
177
- - ✅ memory consolidation for merge-style categories (`consolidate_memories`, dry-run by default)
178
- - ✅ duplicate detection and cleanup (`memory_lint` duplicate check, cosine >= 0.92)
179
- - ✅ stale memory detection (90+ days, low access count)
180
- - ✅ contradiction detection with category-aware filtering (skip append-only categories)
181
- - ✅ orphan detection (missing scope, broken consolidation links)
182
- - ✅ health score formula: 100 - weighted penalties, clamped 0-100
183
- - ✅ promotion suggestions for memories that should become skills (`scan_skill_promotions`)
184
- - ✅ offline consolidation via `dream` (clustering, merging, pruning)
185
- - ✅ admission control: write-time noise filter, importance floor, dedup, rate limiting
186
- - ✅ memory confidence meta-tags: structured scoring (direct/inferred/hearsay), source-based auto-assignment
187
- - ✅ interference detection + active forgetting gate: semantic clustering, RIF top-K demotion, write-time pre-warning
188
-
189
- Interfaces:
190
-
191
- - `memory_lint` (MCP + CLI + HTTP)
192
- - `consolidate_memories` (MCP)
193
- - `dream` (MCP)
194
- - `scan_skill_promotions` (MCP)
195
- - `data_checkup` (MCP)
196
- - `GET /v1/lint` (HTTP)
197
-
198
- ## Phase 7: Product Polish
199
-
200
- Status: ~~ongoing~~ **mostly done**
201
-
202
- Goal: make RecallNest easier to trust, measure, and operate.
203
-
204
- Delivered:
205
-
206
- - ✅ health and quality summaries in CLI (`lint` command with health score 0-100)
207
- - ✅ Memory Dashboard: Web UI homepage with stat cards, category bars, lint summary, growth trends
208
- - ✅ Knowledge Graph export: interactive HTML visualization with D3.js force-directed layout
209
- - ✅ Cross-scope semantic bridges: auto-discover hidden cross-domain knowledge connections
210
- - ✅ SKILL.md: Memory Partner Protocol for LLM onboarding (session protocol, anti-patterns, tool decision tree)
211
- - ✅ stronger docs: updated README/README_CN with screenshots, v2.0 highlights, 41 tools in 3 tiers, 21 endpoints
212
- - ✅ Session Distiller: 3-layer conversation compression (microcompact -> LLM summary -> knowledge extraction)
213
- - ✅ Conversation Import: Claude Code, Claude.ai, ChatGPT, Slack, plaintext — auto-detected
214
-
215
- Remaining work:
216
-
217
- - ⬜ continuity eval isolation from live checkpoints
218
- - ⬜ broader continuity-focused evals and benchmarks
219
- - ⬜ cleaner setup for long-running background usage
220
- - ⬜ Philosophy feature flags: validate each flag in production, then default to on
221
-
222
- ## Phase 8: Code Architecture Hardening
223
-
224
- Status: planned
225
-
226
- Goal: reduce complexity in the two largest modules and centralize configuration.
227
-
228
- Planned work:
229
-
230
- - ⬜ MC-1: Split `retriever.ts` (2,111 lines) into retrieval pipeline modules (~250 lines each)
231
- - ⬜ MC-2: `search_memory` tokenBudget parameter with L0/L1/L2 auto-layer selection
232
- - ⬜ MC-3: `distill_session` auto-persist to long-term memory (close the two-step gap)
233
- - ⬜ MC-4: Centralize all `process.env.RECALLNEST_*` reads into one typed config module
234
- - ⬜ MC-5: Refactor `capture-engine.ts` (1,280 lines) into middleware pipeline
235
- - ⬜ MC-6: Centralize type definitions with re-export index
236
-
237
- Dependencies: none (all independent of each other, can be done in any order)
238
-
239
- ## Principles
240
-
241
- - Local-first: all memory stays on your machine
242
- - Three-terminal first: Claude Code, Codex, and Gemini CLI are the immediate focus
243
- - Continuity over transcript hoarding: useful memory matters more than raw volume
244
- - Agent-agnostic at the interface layer: HTTP API and MCP remain the public surface
245
- - Measured evolution: use evals before tuning retrieval or memory policies