spool-memory 0.2.3

Local-first developer memory system — persistent, structured knowledge for AI coding tools
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
# 桌面端产品重构规划

## 背景

`spool` 当前已经具备若干底层能力:

- 本地检索与项目路由
- wakeup packet 生成
- memory lifecycle / ledger
- MCP gateway
- 可选 daemon 读路径
- 最小 Tauri host 与桌面壳

但当前桌面端的问题也非常明确:

1. 使用门槛过高,打开后需要手动理解太多概念
2. 主界面像调试台,不像面向日常工作的产品
3. 用户目标是“给 AI 注入最有用的上下文”,但界面默认并没有围绕这个目标组织
4. “会话浏览”目前只是原型,不足以支撑用户回看真实 AI 对话
5. MCP 是否启用、是否生效、是否注入到当前环境都不可见

这导致当前工具在产品体验上处于“不伦不类”的状态:

- 既不像 `cc-switch` 那样围绕真实本机会话工作
- 也不像 `llmwiki` 那样围绕知识沉淀与 AI 协作形成清晰闭环

## 本次重构的产品目标

桌面端不再是“memory 生命周期调试面板”,而应重构为:

**一个本地 AI 工作增强台**

它的核心作用是:

1. 识别用户正在使用的 AI 会话
2. 感知该会话所在的当前工作目录
3. 从 Obsidian 知识库和本地 memory 中提取最有用的上下文
4. 明确展示 MCP / 注入状态
5. 让用户以最低操作成本把上下文带入当前 AI 工作流

## 目标用户体验

### 理想体验

用户第一次进入时:

1. 设置 Obsidian 知识库目录
2. 设置默认工作区或项目识别规则
3. 启用 MCP 或注入能力

之后每次使用时:

1. 桌面端自动列出本机最近 AI 会话
2. 用户点开一个会话
3. 工具自动识别:
   - provider
   - 会话标题
   - 当前工作目录
   - 最近用户问题
4. 工具自动生成:
   - 推荐上下文
   - wakeup packet
   - 推荐知识片段
5. 用户只需要:
   - 一键复制注入内容
   - 或查看为什么推荐这些上下文

### 非目标

桌面端不应成为:

- 通用知识库编辑器
- 大而全的 memory 运维后台
- 又一个需要频繁手工维护的配置中心
- 只服务某一个 AI 平台的绑定工具

## 产品定位更新

桌面端应从当前的:

- 调试型 workbench

转向新的定位:

- **会话优先**
- **注入优先**
- **知识增强优先**
- **低操作成本优先**

## 参考产品与可借鉴点

### `cc-switch`

应借鉴的方向:

- 真实本机会话浏览
- 会话作为主入口
- 用户不需要先理解底层 memory 模型

不应照搬的部分:

- 账号切换相关逻辑
-`spool` 无关的代理或模型切换管理

### `llmwiki`

应借鉴的方向:

- 三层知识结构:
  - 原始来源
  - 编译后的知识层
  - 提供给 AI 的工具层
- 让复杂能力隐藏在清晰产品流之后
- 不要求用户先看到所有内部机制

不应照搬的部分:

- wiki-first 产品形态
- 偏云端/多服务的复杂架构
- 以 Claude 写 wiki 为主的交互方式

## 重新定义桌面端的信息架构

### 一级导航

桌面端应收敛为 4 个一级区域:

1. **当前会话**
2. **上下文注入**
3. **会话浏览**
4. **设置与状态**

### 默认首页

默认首页不再是 `Advanced Workbench`,而应是:

- `当前会话`

它应自动展示:

- 当前检测到的 AI provider
- 当前活跃或最近使用的会话
- 会话标题
- 会话工作目录
- 最近用户问题
- 一键生成注入内容
- 一键复制

### 高级功能下沉

以下内容必须下沉到次级区域,不应该成为默认主页面:

- memory lifecycle workbench
- record detail/history 原始调试视图
- 手动 memory create/propose/action 面板
- daemon 读路径调试

这些仍然保留,但只在“高级”或“调试模式”下出现。

## 知识与数据分层

桌面端的数据层应明确区分以下 4 层:

### 第 1 层:原始本机会话层

来源示例:

- `~/.claude/projects/**/*.jsonl`
- `~/.claude/projects/**/sessions-index.json`
- `~/.codex/session_index.jsonl`
- `~/.codex/sessions/**/*.jsonl`

作用:

- 展示真实历史会话
- 提取当前工作目录
- 提取最近用户意图
- 为上下文注入提供“当前任务线索”

### 第 2 层:本地知识库层

来源:

- Obsidian vault

作用:

- 作为长期知识来源
- 提供项目背景、偏好、约束、决策、工作流

### 第 3 层:本地 memory 层

来源:

- `spool` ledger / lifecycle

作用:

- 提供近期人工记录或 AI 提议的结构化 memory
- 补充长期知识库中尚未沉淀的上下文

### 第 4 层:注入输出层

输出目标:

- Claude / Codex / OpenCode / 其他 MCP 客户端

表现形式:

- 可复制文本
- wakeup packet
- 结构化 context bundle
- MCP status / 注入状态

## 桌面端核心能力重构

### 能力 A:当前会话感知

必须实现:

- 自动扫描本机 AI 会话
- 支持至少:
  - Claude
  - Codex
- 按最近活跃时间排序
- 提供最小会话摘要:
  - provider
  - 标题
  - 更新时间
  - cwd
  - 最近用户问题摘要

后续扩展:

- Cursor
- VS Code chat
- 其他本地 AI 客户端

### 能力 B:一键上下文注入

必须实现:

- 选中会话后自动填充:
  - cwd
  - task 草稿
- 自动生成:
  - context
  - wakeup
  - 合并注入内容
- 一键复制

后续扩展:

- 针对不同 provider 生成不同风格的注入模板
- 支持“只注入 wakeup”或“只注入 project context”

### 能力 C:可见的 MCP / 注入状态

必须实现:

- 当前 MCP 是否启用
- 当前 MCP 是否指向正确配置
- 当前注入是否基于:
  - 当前会话
  - 当前 cwd
  - 当前 vault
- 最近一次生成的注入结果摘要

后续扩展:

- 环境变量注入状态
- provider 级别的接入状态
- “当前会话是否已经被增强”提示

### 能力 D:会话浏览

必须实现:

- 列出本机真实 AI 会话
- 查看会话消息预览
- 查看关联 memory
- 从会话直接跳转到“注入上下文”

后续扩展:

- 对话消息搜索
- 按 cwd / 项目 / provider 过滤
- 会话收藏与 pin

### 能力 E:高级 memory 工作台

必须保留但下沉:

- pending review
- wakeup ready
- record detail/history
- manual/propose/action

原则:

- 不删除
- 不默认显示
- 保留给高级用户与调试场景

## 与现有 `spool` 模块的映射

### 保持不动或尽量少动

- `app::run_with_overrides`
- `memory_gateway`
- `wakeup`
- `lifecycle_service`
- `mcp`
- `daemon`

这些是现有核心能力,不应因桌面端重构而推翻。

### 需要新增

#### 1. Session Provider Layer

建议新增一个独立模块,例如:

- `src/session_sources.rs`

职责:

- 扫描本机会话目录
- 统一不同 provider 的会话索引
- 提供标准化的:
  - session list
  - session detail
  - message preview
  - cwd
  - latest user prompt

#### 2. Desktop Injection Orchestrator

可以保留在 `src/desktop.rs` 上层,也可以拆出:

- `src/desktop_injection.rs`

职责:

- 给定会话 -> 推导任务
- 给定会话 cwd -> 调用 `context + wakeup`
- 合并成最终注入文本

#### 3. MCP Status Model

建议新增一个可视状态层,例如:

- `src/desktop_status.rs`

职责:

- 汇总:
  - MCP 配置是否存在
  - 当前 config 是否可用
  - daemon 是否存在
  - provider 会话扫描是否可用

## 逐阶段实施计划

### Phase A:修正当前产品方向

目标:

- 让桌面端先从“能用”变成“方向正确”

交付:

- 默认首页切换为“当前会话 / 注入上下文”
- 基础配置明确展示:
  - Obsidian 知识库目录
  - 当前工作目录
- 会话浏览接入 Claude / Codex 本地 session 源
- 一键从会话带入注入输入

验收:

- 用户打开后不需要先进入高级 workbench
- 用户能从会话直接生成注入内容

### Phase B:把会话浏览做成主功能

目标:

- 让桌面端具备 `cc-switch` 风格的本机会话体验

交付:

- 会话列表更清晰:
  - provider badge
  - 标题
  - cwd
  - 最近更新时间
- 会话详情显示:
  - 最近若干条用户/助手消息
  - 会话摘要
  - 关联 memory
- 支持:
  - provider 过滤
  - cwd 过滤
  - 文本搜索

验收:

- 用户能快速从最近几十个会话里找到目标会话
- 用户能理解该会话和当前知识库的关联

### Phase C:可见的 MCP / 注入状态

目标:

- 让用户不再猜“是否真的生效”

交付:

- 状态面板显示:
  - MCP 是否配置
  - 当前 host 使用的 config
  - 当前会话推导出的 cwd
  - 最近一次注入时间
  - 最近一次注入摘要

验收:

- 用户能明确看到“已连接 / 未连接 / 配置错误”

### Phase D:完整聊天视图与 transcript 管线

目标:

- 从“会话摘要浏览”升级为“真实聊天视图”

交付:

- Claude transcript 更完整解析
- Codex transcript 更完整解析
- 统一消息模型
- 会话消息搜索

验收:

- 用户能在工具里回看最近真实对话,而不仅是摘要

### Phase E:知识增强闭环

目标:

- 让工具真正做到“越用越懂你”

交付:

- 会话 -> memory 提议
- memory -> review
- review -> 注入优化
- 推荐上下文为什么出现的解释层

验收:

- 用户能看到:
  - 这次为什么推荐这些知识
  - 哪些内容来自长期知识库
  - 哪些内容来自近期会话或 memory

## 关键 UX 原则

### 1. 默认只显示必要内容

默认页面只显示:

- 当前会话
- 当前注入内容
- 一键操作

不要默认把:

- 生命周期队列
- record detail
- 原始 JSON
- 所有配置项

堆在主界面。

### 2. 用户只配置一次

必须明确区分:

- 首次设置
- 日常使用

首次设置才展示完整配置项,日常使用默认隐藏配置细节。

### 3. 会话是主入口,不是 memory

用户的 mental model 是:

- “我现在正在和哪个 AI 会话工作”

而不是:

- “我现在要操作哪条 ledger record”

### 4. 注入必须有结果感

用户点击“生成注入内容”后,必须立刻看到:

- 生成了什么
- 为什么生成这些
- 可以复制到哪里

### 5. 状态必须透明

MCP / daemon / config / cwd / vault 状态都必须可见,不能隐藏在内部。

## 风险与规避

### 风险 1:继续做成“高级调试台”

规避:

- 默认页只保留主路径
- 高级 workbench 下沉

### 风险 2:会话浏览做成“半真半假”

规避:

- 优先接真实本机会话源
- 明确区分:
  - 真实 provider transcript
  - `spool memory` 关联记录

### 风险 3:把 `spool` 做成第二个 wiki

规避:

- 坚持“注入优先、工作增强优先”
- 不把桌面端主路径做成知识编辑器

### 风险 4:功能太多继续膨胀

规避:

- 所有新增能力都必须回答:
  - 是否减少用户操作?
  - 是否更快生成注入上下文?
  - 是否更容易理解当前会话?

## 成功标准

当桌面端达到以下标准时,才算方向正确:

1. 用户首次配置后,不需要反复进入设置页
2. 用户能从本机会话列表里快速找到当前工作会话
3. 用户能一键生成并复制上下文注入内容
4. 用户能看到 MCP / 注入是否真的生效
5. 用户理解这个工具是在增强 AI 工作,而不是维护内部数据结构

## 当前建议的实施顺序

按照优先级,应这样推进:

1. 修正前端默认流,隐藏复杂度
2. 做真实 provider session browser
3. 做会话 -> 注入的一键动作
4. 做 MCP / 状态可视化
5. 再继续补 transcript 深解析与知识增强闭环

## 下一步执行建议

下一轮开发建议直接做这三项:

1. 新增独立 `session_sources` 模块,把 Claude / Codex session 扫描从 `desktop.rs` 中抽离
2. 前端默认页进一步收敛成:
   - 当前会话
   - 注入输出
   - 一键复制
3. 增加 `MCP 状态` 卡片,直接显示:
   - config 是否可用
   - vault 是否可访问
   - 当前 cwd
   - provider 会话是否已识别