work-ally 0.2.0-alpha.1

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 (172) hide show
  1. package/AGENTS.md +110 -0
  2. package/DASHBOARD.md +160 -0
  3. package/PRODUCT.md +113 -0
  4. package/README.md +403 -0
  5. package/ally.sh +171 -0
  6. package/bridge/src/approval-rules.ts +360 -0
  7. package/bridge/src/channel-delivery.ts +207 -0
  8. package/bridge/src/channel-types.ts +22 -0
  9. package/bridge/src/channels/fake/adapter.ts +31 -0
  10. package/bridge/src/channels/feishu/adapter.ts +411 -0
  11. package/bridge/src/channels/feishu/approvals.ts +6 -0
  12. package/bridge/src/channels/feishu/formatter.ts +276 -0
  13. package/bridge/src/channels/feishu/normalize.ts +368 -0
  14. package/bridge/src/codex-config.ts +52 -0
  15. package/bridge/src/config.ts +240 -0
  16. package/bridge/src/fake-runtime-client.ts +505 -0
  17. package/bridge/src/handoff-service.ts +494 -0
  18. package/bridge/src/logger.ts +194 -0
  19. package/bridge/src/memory-digest.ts +186 -0
  20. package/bridge/src/receiver-approval-autonomy.ts +158 -0
  21. package/bridge/src/receiver-control-core.ts +140 -0
  22. package/bridge/src/receiver-control-work-session.ts +218 -0
  23. package/bridge/src/receiver-control.ts +83 -0
  24. package/bridge/src/receiver-delivery.ts +136 -0
  25. package/bridge/src/receiver-helpers.ts +96 -0
  26. package/bridge/src/receiver-human-gate.ts +333 -0
  27. package/bridge/src/receiver-inbound-preflight.ts +162 -0
  28. package/bridge/src/receiver-recovery.ts +236 -0
  29. package/bridge/src/receiver-runtime-callbacks.ts +367 -0
  30. package/bridge/src/receiver-runtime-policy.ts +132 -0
  31. package/bridge/src/receiver-runtime-state.ts +124 -0
  32. package/bridge/src/receiver-support-actions.ts +189 -0
  33. package/bridge/src/receiver-thread-start.ts +57 -0
  34. package/bridge/src/receiver-turn-coordination.ts +94 -0
  35. package/bridge/src/receiver-turn-execution.ts +257 -0
  36. package/bridge/src/receiver-turn-failure.ts +143 -0
  37. package/bridge/src/receiver-turn-result.ts +185 -0
  38. package/bridge/src/receiver-turn-steer.ts +70 -0
  39. package/bridge/src/receiver-work-session.ts +76 -0
  40. package/bridge/src/receiver.ts +329 -0
  41. package/bridge/src/router.ts +62 -0
  42. package/bridge/src/runtime-client-agent-messages.ts +150 -0
  43. package/bridge/src/runtime-client-message-dispatch.ts +176 -0
  44. package/bridge/src/runtime-client-protocol.ts +411 -0
  45. package/bridge/src/runtime-client-request-ops.ts +56 -0
  46. package/bridge/src/runtime-client-run-turn.ts +158 -0
  47. package/bridge/src/runtime-client-thread-ops.ts +270 -0
  48. package/bridge/src/runtime-client-transport.ts +309 -0
  49. package/bridge/src/runtime-client-turn-poll.ts +224 -0
  50. package/bridge/src/runtime-client-turn-read.ts +185 -0
  51. package/bridge/src/runtime-client-turn-state.ts +105 -0
  52. package/bridge/src/runtime-client.ts +344 -0
  53. package/bridge/src/runtime-user-input.ts +403 -0
  54. package/bridge/src/scheduler.ts +239 -0
  55. package/bridge/src/server-handoff-command.ts +364 -0
  56. package/bridge/src/server-main.ts +80 -0
  57. package/bridge/src/server-routine-command.ts +60 -0
  58. package/bridge/src/server-routine-execution.ts +222 -0
  59. package/bridge/src/server-runtime-app-support.ts +107 -0
  60. package/bridge/src/server-runtime-app.ts +238 -0
  61. package/bridge/src/server-thread-sync-command.ts +63 -0
  62. package/bridge/src/server.ts +17 -0
  63. package/bridge/src/session-store-delivery.ts +220 -0
  64. package/bridge/src/session-store-human-gate.ts +380 -0
  65. package/bridge/src/session-store-inbound-acceptance.ts +66 -0
  66. package/bridge/src/session-store-meta.ts +134 -0
  67. package/bridge/src/session-store-turn-ledger.ts +272 -0
  68. package/bridge/src/session-store.ts +380 -0
  69. package/bridge/src/system-notify.ts +220 -0
  70. package/bridge/src/thread-sync.ts +200 -0
  71. package/bridge/src/translator.ts +494 -0
  72. package/bridge/src/types.ts +289 -0
  73. package/bridge/src/utils.ts +104 -0
  74. package/bridge/src/work-session-store.ts +471 -0
  75. package/docs/.gitkeep +0 -0
  76. package/docs/architecture/codex-feishu-bridge-proposal.md +2742 -0
  77. package/docs/completed/FEATURE-feishu-markdown-and-reply-support.md +327 -0
  78. package/docs/completed/README.md +21 -0
  79. package/docs/completed/SPEC-approval-autonomy-and-safe-defaults.md +205 -0
  80. package/docs/completed/SPEC-approval-batch-and-strict-reply-shortcuts.md +153 -0
  81. package/docs/completed/SPEC-conversation-noise-reduction-and-busy-input-gate.md +538 -0
  82. package/docs/completed/SPEC-engineering-sop-skillization.md +190 -0
  83. package/docs/completed/SPEC-faithful-bridge-core-thinning-v2.md +376 -0
  84. package/docs/completed/SPEC-faithful-bridge-core-thinning.md +1071 -0
  85. package/docs/completed/SPEC-group-chat-sender-identity.md +301 -0
  86. package/docs/completed/SPEC-middleware-exception-visibility.md +227 -0
  87. package/docs/completed/SPEC-nightly-memory-digest-visibility.md +121 -0
  88. package/docs/completed/SPEC-project-group-chat-human-centered-conversation-mapping.md +326 -0
  89. package/docs/completed/SPEC-remove-cli-persona-bootstrap.md +201 -0
  90. package/docs/developer-workflow.md +49 -0
  91. package/docs/implementation/SPEC-codex-same-machine-session-handoff-implementation.md +239 -0
  92. package/docs/implementation/test-coverage-map.md +363 -0
  93. package/docs/implementation/work-ally-implementation-guide.md +790 -0
  94. package/docs/issues/README.md +10 -0
  95. package/docs/issues/pending/ANALYSIS-ally-premature-recovery-notice-and-task-state-semantics-2026-03-18.md +295 -0
  96. package/docs/issues/resolved/ANALYSIS-approval-waiting-visible-but-approval-artifact-missing-2026-03-16.md +466 -0
  97. package/docs/issues/resolved/ANALYSIS-blocking-state-visible-without-user-actionable-artifact-2026-03-16.md +261 -0
  98. package/docs/issues/resolved/ANALYSIS-codex-app-server-transport-disconnect-semantics-2026-03-14.md +606 -0
  99. package/docs/issues/resolved/ANALYSIS-premature-terminalization-on-fresh-thread-poll-and-object-error-leak-2026-03-16.md +348 -0
  100. package/docs/issues/resolved/ANALYSIS-runtime-turn-delivery-and-recovery-2026-03-14.md +603 -0
  101. package/docs/issues/resolved/ANALYSIS-self-test-gap-approval-waiting-visible-but-approval-artifact-missing-2026-03-16.md +166 -0
  102. package/docs/issues/resolved/ANALYSIS-self-test-gap-blocking-state-visible-without-user-actionable-artifact-2026-03-16.md +186 -0
  103. package/docs/issues/resolved/ANALYSIS-self-test-gap-premature-terminalization-on-fresh-thread-poll-and-object-error-leak-2026-03-16.md +166 -0
  104. package/docs/issues/resolved/REPORT-ally-runtime-turn-delivery-3b42fb8-2026-03-15.md +373 -0
  105. package/docs/manual-acceptance.md +127 -0
  106. package/docs/ops-runbook.md +44 -0
  107. package/docs/planning/FEATURE-memory-system.md +748 -0
  108. package/docs/planning/SPEC-active-turn-steer-and-context-compaction-visibility.md +269 -0
  109. package/docs/planning/SPEC-approval-rules-inheritance-and-local-validation-lane.md +450 -0
  110. package/docs/planning/SPEC-assistant-persona-bootstrap.md +199 -0
  111. package/docs/planning/SPEC-assistant-rename.md +610 -0
  112. package/docs/planning/SPEC-bridge-app-server-protocol-alignment.md +667 -0
  113. package/docs/planning/SPEC-claude-runtime-host-for-work-ally.md +434 -0
  114. package/docs/planning/SPEC-cli-feishu-codex-session-unification.md +236 -0
  115. package/docs/planning/SPEC-codex-same-machine-session-handoff.md +873 -0
  116. package/docs/planning/SPEC-feishu-reaction-shortcuts.md +282 -0
  117. package/docs/planning/SPEC-local-stable-release-boundary.md +166 -0
  118. package/docs/planning/SPEC-managed-thread-entry-and-surface-mobility.md +862 -0
  119. package/docs/planning/SPEC-minimal-bridge-semantics-and-user-visible-surface.md +362 -0
  120. package/docs/planning/SPEC-npm-alpha-distribution-and-install-first-release.md +222 -0
  121. package/docs/planning/SPEC-remove-websocket-runtime-transport.md +364 -0
  122. package/docs/planning/SPEC-runtime-abstraction-phase-1.md +424 -0
  123. package/docs/planning/SPEC-runtime-connection-and-turn-recovery-semantics.md +274 -0
  124. package/docs/planning/SPEC-session-presence-and-state-visibility.md +397 -0
  125. package/docs/planning/SPEC-skill-first-capability-packaging.md +338 -0
  126. package/docs/planning/SPEC-stable-archive-contract.md +456 -0
  127. package/docs/planning/SPEC-supervised-start-boundary.md +127 -0
  128. package/docs/planning/SPEC-user-barrier-reduction-and-activation.md +832 -0
  129. package/docs/planning/ally-next.md +1278 -0
  130. package/docs/planning/assistant-workbench-spec.md +725 -0
  131. package/docs/planning/product-workbench.md +283 -0
  132. package/docs/product-onboarding.md +227 -0
  133. package/docs/product-spec-standard.md +528 -0
  134. package/docs/troubleshooting.md +45 -0
  135. package/docs/user-quickstart.md +46 -0
  136. package/internal/dispatch.sh +95 -0
  137. package/internal/lib/common.sh +1450 -0
  138. package/internal/modules/assistant/manage.sh +1312 -0
  139. package/internal/modules/bootstrap/setup.sh +144 -0
  140. package/internal/modules/config/init-env.sh +10 -0
  141. package/internal/modules/global/manage.sh +154 -0
  142. package/internal/modules/handoff/manage.sh +54 -0
  143. package/internal/modules/mcp/manage.sh +83 -0
  144. package/internal/modules/ops/logs.sh +76 -0
  145. package/internal/modules/routines/manage.sh +55 -0
  146. package/internal/modules/runtime/assistant-autosave.sh +26 -0
  147. package/internal/modules/runtime/restart.sh +6 -0
  148. package/internal/modules/runtime/start.sh +283 -0
  149. package/internal/modules/runtime/status.sh +194 -0
  150. package/internal/modules/runtime/stop.sh +55 -0
  151. package/internal/modules/runtime/supervisor.sh +216 -0
  152. package/internal/modules/runtime/update.sh +26 -0
  153. package/package.json +41 -0
  154. package/runtime/config/.gitkeep +0 -0
  155. package/runtime/host/.gitkeep +0 -0
  156. package/runtime/host/healthcheck-codex-app-server.ts +22 -0
  157. package/runtime/host/ping-pong-codex-app-server.ts +66 -0
  158. package/runtime/host/probe-codex-app-server.ts +115 -0
  159. package/skills/archive-reader/SKILL.md +9 -0
  160. package/skills/feishu-production-debug/SKILL.md +37 -0
  161. package/skills/feishu-production-debug/references/feishu-debug-order.md +49 -0
  162. package/skills/feishu-production-debug/references/platform-permission-baseline.md +23 -0
  163. package/skills/issue-to-spec-triage/SKILL.md +44 -0
  164. package/skills/issue-to-spec-triage/references/triage-rules.md +66 -0
  165. package/skills/memory-digest/SKILL.md +9 -0
  166. package/skills/post-implementation-closure/SKILL.md +39 -0
  167. package/skills/post-implementation-closure/references/closure-checklist.md +45 -0
  168. package/skills/post-implementation-closure/references/doc-drift-map.md +49 -0
  169. package/skills/product-spec/SKILL.md +244 -0
  170. package/templates/env.example +5 -0
  171. package/templates/routines/nightly-memory-digest.yaml +10 -0
  172. package/templates/workspace/AGENTS.md +26 -0
@@ -0,0 +1,1278 @@
1
+ # ally-next
2
+
3
+ 更新时间:2026-03-11
4
+
5
+ 这份文档是 `work-ally` 的下一阶段 feature spec。
6
+
7
+ 用途不是记录零散想法,而是为后续派工提供**可执行的产品规格基线**。
8
+
9
+ 参考背景:
10
+
11
+ - 灯塔文档:`work-ally/docs/architecture/codex-feishu-bridge-proposal.md`
12
+ - 实施文档:`work-ally/docs/implementation/work-ally-implementation-guide.md`
13
+ - 当前实现:`work-ally/`
14
+ - 参考样例:`/Users/allenfeng/Development/Repositories/third/nanobot-main`
15
+
16
+ ---
17
+
18
+ ## 总体原则
19
+
20
+ 在所有 feature 之前,先固定六条全局原则:
21
+
22
+ 1. **先把一个主 Agent 跑顺**
23
+ - 先让单 Agent 稳定承接日常事务,再考虑扩编。
24
+ 2. **用户视角简单,系统边界清楚**
25
+ - 用户看到的是自然、简单的产品概念;系统内部要把会话、路由、执行上下文严格拆开。
26
+ 3. **产品应统一安装,工作空间只保留资产**
27
+ - 产品本体不应复制到每个工程里;工程里保留的应是资产、状态和映射,而不是一份份产品副本。
28
+ 4. **优先做明确 feature,暂不做大而全平台**
29
+ - 已经明确的 feature 进入实施。
30
+ - 不明确、依赖未来官方能力成熟的方向,标记为“暂不开始”。
31
+ 5. **战略防锁定,战术单押 Codex**
32
+ - 当前阶段继续以 Codex 作为唯一主引擎,不做多引擎平台化。
33
+ - 但产品语义、数据模型和路由设计不能写死成 Codex 私有概念。
34
+ 6. **只补产品缝隙,不重造 Agent 平台**
35
+ - 只有飞书、工程工作区、异步调度、官方 Agent 之间的缝隙,才值得自己做。
36
+ - 能直接复用官方能力的地方,不自己重建第二套平台。
37
+
38
+ ## 产品边界(派工前必读)
39
+
40
+ 这一节不是 feature,而是所有 feature 的架构边界。后续派工时,应先检查是否越界。
41
+
42
+ ### 这是什么
43
+
44
+ `work-ally` 当前应被定义为:
45
+
46
+ > **面向飞书的、按工程隔离的 Agent 编排层。**
47
+
48
+ 它不是:
49
+
50
+ - 通用 Agent OS
51
+ - 多模型统一管理平台
52
+ - 自建 prompt / role / workflow 大平台
53
+ - 重型多 Agent 组织系统
54
+
55
+ ### 必须自己做
56
+
57
+ 以下是产品核心缝隙,应该由自己掌握:
58
+
59
+ - 飞书消息收发与结果回送
60
+ - 工程级身份、规则、工作空间映射
61
+ - 定时任务注册、调度与异线程执行
62
+ - 会话目标路由与最小恢复入口
63
+ - 统一安装、按当前工程生效的 CLI 包装
64
+ - 一层很薄的执行引擎适配边界
65
+
66
+ ### 优先复用官方,不自己重做
67
+
68
+ 以下能力优先借助官方 Agent / CLI 能力完成,不自己重造:
69
+
70
+ - 原生 thread / session 运行语义
71
+ - review lane / reviewer 能力
72
+ - reasoning effort / mode 的底层调参面
73
+ - prompt 注入体系与个人级配置体系
74
+ - automations 之外的大规模工作流平台能力
75
+
76
+ ### 引擎策略
77
+
78
+ 关于底层是否未来可替换,这里的口径固定如下:
79
+
80
+ - **战略上防锁定,战术上单押 Codex**
81
+ - 当前不做“多引擎统一平台”
82
+ - 但产品核心概念必须保持中立,只认:会话、定时任务、投递目标、模式、评审
83
+ - 不把 `thread`、`slash command`、厂商专有 automation 概念直接升格为产品主协议
84
+
85
+ ### 架构要求
86
+
87
+ 为未来可能的引擎替换留空间,但只留“薄边界”,不要提前平台化:
88
+
89
+ - 产品自己持有主 ID:`conversation_id`、`task_id`、`delivery_target_id`
90
+ - 厂商运行时只作为挂接:`engine`、`engine_session_id`
91
+ - 同引擎续聊可以直接 resume
92
+ - 跨引擎接棒不承诺原生续聊,只允许“基于摘要或冻结 brief 新开执行”
93
+
94
+ ### 明确不做什么
95
+
96
+ 当前阶段明确不做以下事情:
97
+
98
+ - 为假想的第二引擎提前造一整套中立 prompt / soul 平台
99
+ - 自建完整 thread OS 或 session 平台
100
+ - 自建复杂多 Agent 编制、总线、组织架构
101
+ - 为管理感而过早建设重型 dashboard / workflow engine
102
+
103
+ 判断一个新 feature 是否应进入主线,只问一句:
104
+
105
+ > **它是不是在弥合飞书、工程工作区、异步编排、官方 Agent 之间的缝隙?**
106
+
107
+ 如果不是,大概率就是在造轮子。
108
+
109
+ ---
110
+
111
+ # Feature 1:定时任务
112
+
113
+ **优先级:P0 / 立即开始**
114
+
115
+ 这是当前最明确、最值得开始做的 feature。
116
+
117
+ ## 1.1 背景
118
+
119
+ 当前 `work-ally` 已经有 `routine / scheduler` 的工程能力,但产品层仍然偏工程化:
120
+
121
+ - 任务定义主要来自工作空间中的 routine 文件
122
+ - 调度是 bridge 内部的 scheduler 逻辑
123
+ - 更像“实现仓库的主动能力”,而不是“用户可在聊天里自然使用的产品能力”
124
+
125
+ 但从真实使用场景看,用户需要的是一种非常自然的能力:
126
+
127
+ - 在飞书里说一句话
128
+ - 系统理解后自动注册一个未来要做的事情
129
+ - 到点后自动执行
130
+ - 执行完把结果发回来
131
+
132
+ 这件事的重要性非常高,因为它直接决定系统能否从“被动聊天”走向“主动代办”。
133
+
134
+ 另外,这个 feature 和上下文污染问题强相关:
135
+
136
+ - 定时任务执行时,不能污染用户当前正在进行的对话 thread
137
+ - 但执行结果又必须能回到用户可见的飞书对话里
138
+
139
+ 因此,定时任务不是一个附属小功能,而是产品架构中的关键 feature。
140
+
141
+ ## 1.2 目标与目的
142
+
143
+ ### 目标
144
+
145
+ 把“定时”统一收敛成一个用户可理解、模型可注册、系统可调度的 feature:**定时任务**。
146
+
147
+ ### 目的
148
+
149
+ 让用户可以通过自然语言直接创建长期任务,并让系统在未来某个时间点自动完成它,而不污染当前聊天上下文。
150
+
151
+ ### 产品定义
152
+
153
+ > **定时任务 = 由模型注册、由产品调度、以冻结任务说明为输入、在独立新会话中执行、结果回送目标飞书对话且不污染当前 thread 的长期任务。**
154
+
155
+ ### 目标结果
156
+
157
+ 定时任务 feature 做完后,用户应该能够这样使用:
158
+
159
+ - “每天 9 点提醒我喝水”
160
+ - “每天晚上 6 点根据今天的工作记录给我生成一个表格化日报”
161
+ - “每周一早上帮我整理上周项目进展并发给我”
162
+
163
+ 而系统应该做到:
164
+
165
+ - 模型负责理解并注册
166
+ - 产品负责调度和投递
167
+ - 到点后新开独立执行会话
168
+ - 结果发回飞书
169
+ - 不影响用户当前正在聊的主会话
170
+
171
+ ## 1.3 策略
172
+
173
+ ### 策略 A:用户面只保留一个概念
174
+
175
+ 对用户只保留一个概念:**定时任务**。
176
+
177
+ 当前阶段**不要**再拆成:
178
+
179
+ - 提醒类
180
+ - 任务类
181
+ - heartbeat 类
182
+ - cron 类
183
+
184
+ 这些可以是内部实现细节,但不应成为用户需要理解的产品概念。
185
+
186
+ ### 策略 B:注册由模型通过工具完成
187
+
188
+ 注册入口在聊天里。
189
+
190
+ 模型通过一个统一工具去注册定时任务。
191
+
192
+ 这意味着:
193
+
194
+ - 用户不需要自己回工作区写配置
195
+ - 用户不需要理解 scheduler / cron / YAML
196
+ - 模型只需要把定时任务理解成一个明确的工具调用能力
197
+
198
+ ### 策略 C:注册时冻结执行 brief
199
+
200
+ 必须把下面这条写入 skill / 提示词:
201
+
202
+ > **注册时想清楚,执行时不思旧账。**
203
+
204
+ 也就是说,模型在注册任务时,必须把任务“编译”成一份冻结后的执行 brief。
205
+
206
+ 未来新开的执行会话,拿到的就是这份 brief,而不是当前聊天上下文。
207
+
208
+ 注册时至少必须固定清楚:
209
+
210
+ - 什么时候触发
211
+ - 要做什么
212
+ - 基于什么输入做
213
+ - 输出长什么样
214
+ - 结果发回哪里
215
+ - 如果信息不足,执行时如何报阻塞
216
+
217
+ 如果信息不足,模型应先澄清,而不是草率注册。
218
+
219
+ ### 策略 D:执行时永远新开会话
220
+
221
+ 定时任务的执行默认固定为:**新会话**。
222
+
223
+ 当前阶段不要把 `reuse/new` 暴露给用户,也不要让定时任务复用用户当前会话。
224
+
225
+ 原因:
226
+
227
+ - 定时任务是为了全心做一件独立的事
228
+ - 它的结果不应污染当前对话上下文
229
+ - 如果允许复用当前 thread,上下文污染会重新出现
230
+
231
+ ### 策略 E:按“对话级路由”回送结果
232
+
233
+ 这里要明确区分三个概念:
234
+
235
+ 1. **飞书对话目标**
236
+ - 结果最终发到哪里
237
+ 2. **定时任务本身**
238
+ - 什么时候跑、跑什么
239
+ 3. **执行 thread**
240
+ - 到点后在哪个独立上下文里跑
241
+
242
+ 系统不能按 bot 路由,也不能按当前 thread 路由。
243
+
244
+ 必须按**飞书对话**路由。
245
+
246
+ 这条很重要,因为未来一定会出现:
247
+
248
+ - 私聊
249
+ - 群
250
+ - 总指挥官与多个项目负责人 Agent 协同
251
+
252
+ 所以现在不能把结果投递模型写死成“默认私聊”。
253
+
254
+ ### 策略 F:V1 默认使用来源对话作为投递目标
255
+
256
+ 虽然数据模型必须支持“对话级路由”,但 V1 的策略可以先简单:
257
+
258
+ - 如果用户在某个飞书对话里注册任务
259
+ - 默认就把该对话记录为任务的投递目标
260
+ - 以后执行完,也默认发回这个对话
261
+
262
+ 这意味着:
263
+
264
+ - V1 不需要复杂的多目标投递系统
265
+ - 但底层抽象已经为群和多 Agent 协同留好了空间
266
+
267
+ ### 策略 G:同窗回送,异线程执行
268
+
269
+ 这是本 feature 的硬口径:
270
+
271
+ > **同窗回送,异线程执行。**
272
+
273
+ 也就是说:
274
+
275
+ - 用户可以在同一个飞书聊天里看到定时任务结果
276
+ - 但系统内部必须保证:执行 thread 与当前主会话 thread 隔离
277
+
278
+ ### 策略 H:保留最小管理面
279
+
280
+ 虽然产品概念统一成“定时任务”,但系统不能没有管理面。
281
+
282
+ 至少必须支持:
283
+
284
+ - 查看已有任务
285
+ - 取消 / 停用任务
286
+ - 查看最近一次执行结果或状态
287
+
288
+ 否则定时任务一多,系统就会失控。
289
+
290
+ ## 1.4 非目标
291
+
292
+ 当前阶段,这个 feature 明确**不以**下列目标为交付标准:
293
+
294
+ - 不做复杂的 cron / rule 表达式产品教育
295
+ - 不做用户手写配置驱动的定时体系
296
+ - 不做复用当前主会话上下文的定时执行
297
+ - 不做一步到位的任务中台 / 任务运营平台
298
+
299
+ ## 1.5 暂不开始
300
+
301
+ 以下内容和定时任务相关,但当前阶段**暂不开始**:
302
+
303
+ - 复杂的多目标投递策略
304
+ - 非来源对话的高级路由配置
305
+ - 定时任务的多级权限体系
306
+ - 大规模任务面板 / 管理后台
307
+ - 定时任务与多 Agent 团队协同的深度联动
308
+
309
+ ---
310
+
311
+ # Feature 2:产品包装与统一安装
312
+
313
+ **优先级:P0 / 明确要开始**
314
+
315
+ 这是一个非常重要的产品包装 feature。
316
+
317
+ ## 2.1 背景
318
+
319
+ 当前如果把 `work-ally` 理解成“每个工程里都放一份脚本或产品副本”,会带来明显问题:
320
+
321
+ - 一台电脑上可能有很多工程
322
+ - 每个工程都对应一个助理
323
+ - 如果每个工程都复制一份产品入口或实现,更新会变成灾难
324
+ - 用户也会误以为这是“要拷贝进工程里的脚本”,而不是一个真正的产品
325
+
326
+ 从产品视角看,这不是好包装。
327
+
328
+ 更合理的直觉应该像 Codex CLI 一样:
329
+
330
+ - 产品被统一安装一次
331
+ - 命令注册在系统可执行路径里
332
+ - 我在哪个工程目录下执行,就控制哪个工程对应的助理
333
+
334
+ 这更像一个产品,而不是一份散落在各工程里的脚本。
335
+
336
+ ## 2.2 目标与目的
337
+
338
+ ### 目标
339
+
340
+ 把 `work-ally` 定义成一个**统一安装、按当前工程生效**的产品,而不是“拷贝进每个工程里”的脚本集合。
341
+
342
+ ### 目的
343
+
344
+ 解决下面几个问题:
345
+
346
+ - 降低多工程使用成本
347
+ - 降低更新成本
348
+ - 让产品包装更接近真正的 CLI / 可执行工具
349
+ - 保持“一个工程 = 一个助理”的边界,但不把产品本体复制进每个工程
350
+
351
+ ### 产品定义
352
+
353
+ > **产品统一安装一次;工程只保存资产与状态;用户在某个工程目录执行命令时,命令自动作用于该工程对应的助理。**
354
+
355
+ ### 目标结果
356
+
357
+ 用户应能获得如下体验:
358
+
359
+ - `ally setup`
360
+ - `ally start`
361
+ - `ally stop`
362
+ - `ally status`
363
+ - `ally update`
364
+
365
+ 并且:
366
+
367
+ - 在哪个工程目录下执行,就作用于哪个工程
368
+ - 更新产品只更新一处
369
+ - 不需要在每个工程里维护一份产品脚本副本
370
+
371
+ ## 2.3 策略
372
+
373
+ ### 当前先落地的切片
374
+
375
+ 在正式安装器 / Homebrew 之前,先必须落地一个开发态统一入口:
376
+
377
+ - 允许直接把实现仓库里的 `ally.sh` 暴露成 shell 命令
378
+ - 从任意 workspace 根目录执行时,按**当前目录**生效
379
+ - 已初始化 workspace 下再从子目录执行时,按**最近一个工作空间根目录**生效
380
+ - 绝不能再把“脚本文件所在目录”误判成被控制的 workspace
381
+
382
+ ### 策略 A:产品本体统一安装
383
+
384
+ 产品本体应作为:
385
+
386
+ - 一个二进制
387
+ - 或一个注册到 PATH 的统一命令
388
+ - 或一个统一安装的脚本入口
389
+
390
+ 总之,它应是**系统级安装**,而不是每个工程各自复制一份。
391
+
392
+ ### 策略 B:工作空间只保留资产,不保留产品副本
393
+
394
+ 工程目录中应该保留的是:
395
+
396
+ - `AGENTS.md`
397
+ - memory / knowledge / routines
398
+ - `.work-ally/` 运行态
399
+ - 工作空间映射或配置文件
400
+
401
+ 而不是产品实现本体的一份副本。
402
+
403
+ ### 策略 C:命令按当前工程生效
404
+
405
+ 命令运行时应以:
406
+
407
+ - 当前工作目录
408
+ - 或显式指定的 workspace 路径
409
+
410
+ 来决定控制哪个工程。
411
+
412
+ 也就是说,命令的基本语义应该是:
413
+
414
+ - **我在哪个工程目录下执行,就控制哪个工程。**
415
+
416
+ ### 策略 D:统一更新路径
417
+
418
+ 更新产品时,应更新全局安装的一处,而不是在多个工程里分别更新。
419
+
420
+ 这样才能避免:
421
+
422
+ - 多个工程版本漂移
423
+ - 每个工程都要手动跑更新
424
+ - 用户分不清“更新产品”和“更新工程资产”
425
+
426
+ ### 策略 E:保留工程边界,不做全局混合人格
427
+
428
+ 虽然产品统一安装,但不能把所有工程的身份和上下文混到全局产品目录里。
429
+
430
+ 必须坚持:
431
+
432
+ - 产品是全局安装的
433
+ - 但助理身份、项目规则、长期资产仍然在工程侧
434
+
435
+ 也就是说:
436
+
437
+ - **安装统一**
438
+ - **身份按工程隔离**
439
+
440
+ ### 策略 F:本 feature 会改写当前“每工程一个 facade 脚本”的主包装思路
441
+
442
+ 当前实现与文档里,对消费侧入口仍偏向一个项目内的 facade 概念。
443
+
444
+ 这条 feature 明确意味着:
445
+
446
+ - 后续应把“每工程复制一份入口脚本”从主包装思路中降级
447
+ - 主包装应改成“统一安装的 ally 命令”
448
+ - 如果未来还保留本地 shim,也只能是兼容层,而不是主路径
449
+
450
+ ## 2.4 非目标
451
+
452
+ 当前阶段,这个 feature 明确**不以**下列目标为交付标准:
453
+
454
+ - 不做完整的安装器产品矩阵
455
+ - 不做面向所有语言和所有系统的一步到位发布体系
456
+ - 不做全局人格、全局记忆、全局项目混合视图
457
+ - 不做与工程目录彻底脱钩的远程控制平台
458
+
459
+ ## 2.5 暂不开始
460
+
461
+ 以下和安装包装相关,但当前阶段**暂不开始**:
462
+
463
+ - 多版本并存管理
464
+ - 插件市场式安装体系
465
+ - 企业级安装器 / GUI 安装器
466
+ - 跨机器自动分发产品升级
467
+ - 重型全局控制中心
468
+
469
+ ---
470
+
471
+ # Feature 3:会话 mobility
472
+
473
+ **优先级:P0 / 应尽快开始**
474
+
475
+ ## 3.1 背景
476
+
477
+ `work-ally` 的核心价值之一,是让用户可以在不同场景下接续同一个工作空间里的工作:
478
+
479
+ - 在电脑前用官方 Codex 工作
480
+ - 出门时从飞书继续
481
+ - 回来后再接着做
482
+
483
+ 当前实现已经有一部分基础:
484
+
485
+ - 会话状态是文件化的
486
+ - 普通消息会默认复用当前绑定 thread
487
+ - `/new` 可以切换到新 thread
488
+
489
+ 但从产品层看,会话的可见性和可管理性还不够。
490
+
491
+ ## 3.2 目标与目的
492
+
493
+ ### 目标
494
+
495
+ 把当前隐性的 thread 复用,提升为显性的“会话接力能力”。
496
+
497
+ ### 目的
498
+
499
+ 让用户真正获得:
500
+
501
+ > **我可以随时接上工作。**
502
+
503
+ ### 目标结果
504
+
505
+ 用户应该能够:
506
+
507
+ - 查看最近会话
508
+ - 恢复会话
509
+ - 分叉会话
510
+ - 归档会话
511
+ - 明确知道当前会话状态
512
+
513
+ ## 3.3 策略
514
+
515
+ ### 策略 A:前台统一使用“会话”概念
516
+
517
+ 不要让飞书用户理解 `thread`。
518
+
519
+ 对外统一用:
520
+
521
+ - 会话
522
+ - 当前会话
523
+ - 新会话
524
+ - 恢复会话
525
+ - 会话列表
526
+
527
+ ### 策略 B:继续基于官方 thread 能力实现
528
+
529
+ 底层仍然用官方 `thread/list/read/resume/fork/archive` 能力。
530
+
531
+ 不要自造协议,也不要把“恢复会话”错误理解成“恢复某个运行进程”。
532
+
533
+ ### 策略 C:会话是连续性产品面,不是技术调试面
534
+
535
+ 重点不是暴露 `threadId`,而是暴露:
536
+
537
+ - 当前会话是否活跃
538
+ - 最近有没有结果
539
+ - 有没有待审批 / 待输入
540
+ - 哪条会话是当前默认会话
541
+
542
+ ## 3.4 非目标
543
+
544
+ 当前阶段,这个 feature 明确**不以**下列目标为交付标准:
545
+
546
+ - 不做完整聊天产品意义上的会话管理器
547
+ - 不做复杂 thread 调试工具或底层 ID 暴露面板
548
+ - 不做跨引擎原生无损续聊承诺
549
+ - 不做跨多个 workspace 的统一会话中枢
550
+
551
+ ## 3.5 暂不开始
552
+
553
+ - 多维度会话检索
554
+ - 复杂会话标签系统
555
+ - 会话知识图谱
556
+ - 跨多个 workspace 的会话统一检索
557
+
558
+ ---
559
+
560
+ # Feature 4:记忆系统
561
+
562
+ **优先级:P0 / 应尽快开始**
563
+
564
+ 这是当前产品主线里非常关键、但还没有真正产品化收口的 feature。
565
+
566
+ ## 4.1 背景
567
+
568
+ 从产品视角看,记忆不是“可有可无的增强项”,而是长期陪伴式 Agent 能否成立的基础能力。
569
+
570
+ 用户和 Agent 的关系不是一次性问答,而是持续合作:
571
+
572
+ - 今天交代的偏好,明天还应该记得
573
+ - 今天纠正过的误区,以后不应该重复犯
574
+ - 用户长期工作方式、协作边界、关系结构,不应每次重讲
575
+
576
+ 当前 `work-ally` 其实已经有了不错的地基:
577
+
578
+ - `memory/archive/` 已经在落原始黑匣子归档
579
+ - `.work-ally/sessions/`、`.work-ally/runs/` 已经在落会话与运行台账
580
+ - `nightly-memory-digest` 已经能把原材料提炼到 `memory/daily/` 与 `memory/long-term/`
581
+
582
+ 但从产品定义上看,它还没有完全收口成真正可依赖的“记忆系统”。
583
+
584
+ 主要缺口在于:
585
+
586
+ - 原始对话记录、记忆、知识这三层概念还没有被明确拉开
587
+ - 当前更像“已有 digest 产物”,还不是“每次对话都可靠带入的重要记忆”
588
+ - 记忆的可审阅、可纠错、可删除边界还不够明确
589
+ - 还不能完全保证未来对话一定稳定吃到记忆,而不是依赖模型临场去读文件
590
+
591
+ 因此,这个 feature 的本质不是“再加一个 memory 目录”,而是把“黑匣子 → 提炼 → 加载 → 纠错”这条链路定成产品能力。
592
+
593
+ ### 行业参考口径
594
+
595
+ 对外部产品和框架的调查,给了三个很清晰的启发:
596
+
597
+ - ChatGPT 产品里的 memory 明确区分了 **saved memories** 与 **chat history**,说明“记忆”和“历史对话”本来就不是一回事。
598
+ - Claude Code 把 `CLAUDE.md` 这类**指令文件**,和自动积累的 **auto memory** 分开,说明“规则 / 指令”和“从互动中长出来的记忆”也不是一回事。
599
+ - LangGraph 这类 agent 框架则把 memory 分成 **thread 内短期记忆** 与 **跨会话长期记忆**,并明确承认记忆既可以走热路径,也可以走后台异步路径。
600
+
601
+ 这些行业做法并不要求我们照搬实现,但它们共同说明:
602
+
603
+ - 分层是必要的
604
+ - 后台异步提炼是合理的
605
+ - 记忆必须与原始历史分离
606
+ - 记忆不能只靠一份主指令文件硬扛
607
+
608
+ ## 4.2 目标与目的
609
+
610
+ ### 目标
611
+
612
+ 建立一个**轻量、可审阅、持续增长**的记忆系统,让 Agent 能从长期互动中沉淀真正有用的记忆,而不是每次都从零开始。
613
+
614
+ ### 目的
615
+
616
+ 实现下面四件事:
617
+
618
+ 1. **先有米**
619
+ - 先稳定拿到高质量原始材料,而不是一上来讨论高阶记忆算法。
620
+ 2. **把原始对话和记忆分开**
621
+ - 原始流水是黑匣子;记忆是提炼结果,不能混成一层。
622
+ 3. **让记忆异步成长**
623
+ - 通过日终 digest 等后台机制,持续把对话中的高价值信息沉淀下来。
624
+ 4. **让未来对话可靠带上记忆**
625
+ - 重要记忆必须是产品层可靠加载,而不是靠模型“碰运气想起来”。
626
+
627
+ ### 产品定义
628
+
629
+ > **记忆系统 = 先完整保存黑匣子原材料,再通过异步 digest 提炼出可审阅、可删除、可加载的长期记忆,并在后续对话中稳定带入,而不是把原始对话直接当记忆。**
630
+
631
+ ### 目标结果
632
+
633
+ 记忆 feature 做完后,系统应做到:
634
+
635
+ - 每一轮关键交互都有原始留档
636
+ - 每天结束前,系统能自动读当天原材料并提炼
637
+ - 长期记忆会逐步增长,但不会无限发散
638
+ - 后续对话默认能带上重要记忆
639
+ - 用户可以查看、修正、删除记忆
640
+
641
+ ## 4.3 策略
642
+
643
+ ### 策略 A:黑匣子归档先行,先把“米”攒够
644
+
645
+ 第一优先级不是“记忆写得多聪明”,而是“原材料留得够不够完整”。
646
+
647
+ 因此,黑匣子归档应被视为一等公民。
648
+
649
+ 至少应稳定保留:
650
+
651
+ - 用户输入
652
+ - 用户可见的模型输出
653
+ - 关键 system event
654
+ - 关键审批 / 阻塞 / 运行结果
655
+
656
+ 归档维度应优先便于人工检查与机器消费:
657
+
658
+ - 按日期分桶
659
+ - 按会话 / 对话目标区分
660
+ - 保持标准化、可 grep、可回放
661
+
662
+ ### 策略 B:明确区分三层资产
663
+
664
+ 这件事必须明确分成三层:
665
+
666
+ 1. **对话记录 / 黑匣子 archive**
667
+ - 原始事件流水,是事实原材料。
668
+ 2. **记忆 memory**
669
+ - 从 archive 中提炼出的高价值、可复用信息。
670
+ 3. **知识 knowledge**
671
+ - 来自文档、代码、外部资料、项目材料的事实知识。
672
+
673
+ 这三者不能混写在一个桶里。
674
+
675
+ 尤其要强调:
676
+
677
+ - archive 不是 memory
678
+ - memory 不是 knowledge
679
+ - memory 的可信度来自可回溯到 archive,而不是“看起来像总结”
680
+
681
+ ### 策略 C:V1 以“后台 digest”作为主更新路径
682
+
683
+ 当前阶段,记忆更新的主路径应固定为:**异步 digest**。
684
+
685
+ 也就是:
686
+
687
+ - 平时先保存原材料
688
+ - 到固定时间点再新开独立执行会话
689
+ - 读取当天 archive 与当前记忆快照
690
+ - 产出新的 daily memory 与 long-term memory
691
+
692
+ 这样做的原因是:
693
+
694
+ - 更稳定
695
+ - 更容易审阅
696
+ - 不污染当前对话链路
697
+ - 不会让每轮交互都承担“要不要记住这个”的额外负担
698
+
699
+ 当前阶段不要把“每轮实时自动写记忆”当作主路径。
700
+
701
+ ### 策略 D:记忆输出分成“当日记忆”和“长期记忆”两层
702
+
703
+ V1 应固定只产出两层结果:
704
+
705
+ 1. **当日记忆 `memory/daily/YYYY-MM-DD.md`**
706
+ - 记录今天发生了什么、今天学到了什么、今天形成了哪些重要结论。
707
+ 2. **长期记忆 `memory/long-term/MEMORY.md`**
708
+ - 只保留长期稳定有效的事实和约束。
709
+
710
+ 这样做的好处是:
711
+
712
+ - 避免所有信息都堆进一份总记忆里
713
+ - 让“今日上下文”与“长期稳定规则”分开
714
+ - 便于未来控制加载量
715
+
716
+ ### 策略 E:记忆加载必须由产品层兜底,不能靠模型自觉
717
+
718
+ 这是本 feature 最关键的一条产品判断。
719
+
720
+ 当前官方 Codex 能稳定自动发现的是 `AGENTS.md` 指令链,而不是你的 `memory/long-term/MEMORY.md` 或 `memory/daily/*.md` 本身。
721
+
722
+ 因此,产品不能把“未来对话会不会读到记忆”寄托在:
723
+
724
+ - 模型自己想起来去读
725
+ - 用户手动提醒它去看
726
+ - 把所有记忆硬塞进根 `AGENTS.md`
727
+
728
+ V1 必须建立**明确的记忆加载合同**。
729
+
730
+ 也就是说,产品层要负责保证:
731
+
732
+ - 长期记忆在新会话或关键 turn 中能稳定带入
733
+ - 必要时追加最近的日记忆
734
+ - 带入的是经过压缩和筛选的记忆,而不是原始 archive
735
+
736
+ ### 策略 F:长期记忆只收“稳定、可复用、高价值”的东西
737
+
738
+ 并不是所有对话都值得变成长期记忆。
739
+
740
+ V1 应只允许以下内容进入长期记忆:
741
+
742
+ - 用户稳定偏好
743
+ - 长期有效的协作约束
744
+ - 项目内反复出现的重要规则
745
+ - 用户多次纠正出来的高价值事实
746
+ - 持续有效的人物关系、职责边界、项目背景
747
+
748
+ 明确不应进入长期记忆的内容包括:
749
+
750
+ - 寒暄
751
+ - 单次失败
752
+ - 一次性报错
753
+ - thread / turn / message id
754
+ - routine 运行元数据
755
+ - 临时情绪表达
756
+ - 已过期的短期状态
757
+
758
+ ### 策略 G:记忆必须可审阅、可纠错、可删除
759
+
760
+ 如果记忆会自动增长,它就必须可控。
761
+
762
+ 否则系统会出现两个问题:
763
+
764
+ - 错误记忆被不断固化
765
+ - 用户对系统失去信任
766
+
767
+ 因此,V1 至少要具备最小管理面:
768
+
769
+ - 看当前长期记忆
770
+ - 看最近日记忆
771
+ - 删除或修正错误记忆
772
+ - 明确知道“系统记住了什么”
773
+
774
+ ### 策略 H:敏感信息宁缺毋滥
775
+
776
+ 不是所有信息都应该自动升格为记忆。
777
+
778
+ 当前阶段应坚持:
779
+
780
+ - 对高敏感信息保守处理
781
+ - 不因为“技术上能记”就默认去记
782
+ - 不把用户隐私、一次性个人状态、模糊推断自动固化为长期记忆
783
+
784
+ 如无明确必要,应偏向不记,而不是多记。
785
+
786
+ ### 策略 I:不要一上来做向量库优先的重型记忆平台
787
+
788
+ 从业界看,长期记忆常见会和向量检索、文件搜索、嵌入检索结合,但这不代表你现在就应该先做重型 memory platform。
789
+
790
+ 当前阶段更合理的路线是:
791
+
792
+ - 先把文件化、可审阅、可回溯的记忆闭环做稳
793
+ - 先解决 archive、digest、load、delete 这四件核心问题
794
+ - 以后在规模真的上来时,再考虑向量化检索增强
795
+
796
+ 不要因为“业界有人做 memory retrieval”就提前把自己带进复杂基础设施。
797
+
798
+ ### 策略 J:坚持文件优先,并把原材料格式尽早冻结
799
+
800
+ 这里必须再加一条硬边界:**记忆系统以文本文件为导向,不引入向量库、数据库或黑盒存储作为主路径。**
801
+
802
+ 原因不是“数据库一定不好”,而是当前阶段最重要的是:
803
+
804
+ - 可审阅
805
+ - 可迁移
806
+ - 可版本化
807
+ - 可回溯
808
+ - 可长期稳定
809
+
810
+ 因此,V1 的文件合同建议固定为:
811
+
812
+ 1. **黑匣子 archive:NDJSON**
813
+ - 适合逐条追加
814
+ - 适合长期保留原始事件
815
+ - 适合后续用脚本、grep、jq 一类工具处理
816
+ 2. **记忆 memory:Markdown**
817
+ - 适合人读、人改、人审阅
818
+ - 适合作为长期工作空间资产进入版本管理
819
+ 3. **内部运行态 / 元数据:JSON**
820
+ - 只用于状态、索引、调度元信息,不把它当作用户记忆正文
821
+
822
+ 这里的判断应尽量固定,不要反复切换。
823
+
824
+ 尤其要强调:
825
+
826
+ - 原材料格式一旦定下来,应把它当作长期合同
827
+ - 后续可以升级的是 digest / 压缩 / 提炼逻辑
828
+ - 不应频繁改写 archive 的底层存储格式
829
+
830
+ ### 策略 K:把“原材料”和“原材料加工”彻底拆开
831
+
832
+ 工作流上必须明确区分两条线:
833
+
834
+ 1. **原材料层**
835
+ - 负责保存事实,不负责解释事实
836
+ 2. **加工层**
837
+ - 负责提炼、压缩、归纳、索引、合并、纠错
838
+
839
+ 这两层不能混在一起。
840
+
841
+ 也就是说:
842
+
843
+ - archive 保存后,原则上不再回写改造
844
+ - 新版本的记忆算法,应重新读取旧 archive 再产出新 memory
845
+ - 原材料应该尽可能保持稳定、忠实、可回放
846
+ - 加工逻辑可以随着产品迭代不断优化
847
+
848
+ 这条边界非常关键,因为它决定系统是不是具备“未来可重放、可重建”的能力。
849
+
850
+ ### 策略 L:`AGENTS.md` 是宪法,memory 是被注入的工作记忆
851
+
852
+ 这里必须把文件本质想清楚。
853
+
854
+ 对 Codex 来说,`AGENTS.md` 的语义更接近:
855
+
856
+ - 唤醒时优先读取的工作区主指令
857
+ - 主身份说明 / 宪法 / 长期规则
858
+ - 告诉模型“你是谁、边界是什么、怎么工作”
859
+
860
+ 而 memory 不应扮演这个角色。
861
+
862
+ 更合理的分工应该是:
863
+
864
+ - **`AGENTS.md`**:短、稳、长期有效;定义身份、规则、边界、记忆使用原则
865
+ - **`memory/long-term/MEMORY.md`**:长期工作记忆正文
866
+ - **`memory/daily/*.md`**:短期 / 近日记忆
867
+ - **archive NDJSON**:原始黑匣子事实来源
868
+
869
+ 也就是说:
870
+
871
+ - `AGENTS.md` 不等于 memory
872
+ - memory 也不应膨胀成第二份 `AGENTS.md`
873
+ - `AGENTS.md` 应只说明“记忆系统存在、记忆在哪、如何使用”,而不是承载全部记忆正文
874
+
875
+ ### 策略 M:记忆必须有明确的注入合同,而不是靠模型自己去找
876
+
877
+ 由于 Codex 会自动发现并加载 `AGENTS.md` 指令链,但不会自动把 `memory/long-term/MEMORY.md` 当成天然首屏上下文,因此必须建立记忆注入合同。
878
+
879
+ V1 更合理的口径是:
880
+
881
+ - `AGENTS.md` 负责声明记忆原则和位置
882
+ - 产品层负责在**新会话 / 关键 turn / 定时执行**前,把必要的 memory 以紧凑形式带入上下文
883
+ - ongoing thread 继续依赖 thread 自身上下文,不必每轮都全量重灌 memory
884
+
885
+ 因此,memory 的本质可以理解为:
886
+
887
+ > **它不是天然“第一个被加载的文件”,而是产品需要稳定注入到模型上下文里的工作记忆。**
888
+
889
+ 这个判断很重要,因为它避免了两个误区:
890
+
891
+ - 误以为只要文件存在,模型就一定会读到
892
+ - 误以为把所有 memory 塞进 `AGENTS.md` 就等于解决了加载问题
893
+
894
+ ### 策略 N:记忆采用“核心正文 + 渐进式披露”结构
895
+
896
+ 为了避免 memory 爆炸,V1 不应只有一份无限变长的总记忆。
897
+
898
+ 更合理的结构是:
899
+
900
+ - `MEMORY.md` 保留高密度、必须常驻的核心记忆
901
+ - 对某些较长、但仍然重要的专题,允许拆成主题文件
902
+ - `MEMORY.md` 中只保留必要摘要与指向关系,按需再展开
903
+
904
+ 但这里要把握分寸:
905
+
906
+ - 不能把 `MEMORY.md` 做成纯索引目录
907
+ - 也不能把所有细节都塞回 `MEMORY.md`
908
+
909
+ 更合理的原则是:
910
+
911
+ - **核心事实常驻正文**
912
+ - **次级细节按主题渐进披露**
913
+
914
+ 这和 skill 的思路很像:不是把一切都预先塞满上下文,而是把真正需要常驻的内容留下,把其余内容做成可按需展开的工作资产。
915
+
916
+ ## 4.4 非目标
917
+
918
+ 当前阶段,这个 feature 明确**不以**下列目标为交付标准:
919
+
920
+ - 不做全量实时自动记忆系统
921
+ - 不做向量库优先的重型记忆平台
922
+ - 不做不可审阅的黑盒记忆数据库
923
+ - 不做“把全部聊天记录都自动当长期记忆”
924
+ - 不做把记忆硬塞进根 `AGENTS.md` 的粗暴方案
925
+ - 不做频繁变更的 archive 底层存储格式
926
+
927
+ ## 4.5 暂不开始
928
+
929
+ 以下和记忆相关,但当前阶段**暂不开始**:
930
+
931
+ - 记忆的复杂语义检索 / 向量召回体系
932
+ - 多层级 memory scope(个人 / 工程 / 组织)的复杂治理
933
+ - 每条记忆的独立审批工作流
934
+ - 自动敏感信息分类与精细权限系统
935
+ - 基于记忆的复杂推荐 / 主动推断系统
936
+
937
+ ---
938
+
939
+ # Feature 5:模式与推理深度
940
+
941
+ **优先级:P1 / 明确要做**
942
+
943
+ ## 5.1 背景
944
+
945
+ 很多“一个 Agent 好像不够用”的感受,不一定来自缺少角色,而可能来自:
946
+
947
+ - 思考深度不对
948
+ - 输出风格不对
949
+ - 当前任务模式不对
950
+
951
+ 官方已经提供了 reasoning effort / summary / personality / profile 等能力,因此这是一条清晰、可落地的增强路线。
952
+
953
+ ## 5.2 目标与目的
954
+
955
+ ### 目标
956
+
957
+ 让用户可以根据任务类型切换工作模式,而不是强迫所有任务都用同一种工作方式。
958
+
959
+ ### 目的
960
+
961
+ 先通过模式能力吸收复杂度,而不是过早引入团队系统。
962
+
963
+ ### 目标结果
964
+
965
+ 用户至少应能切换:
966
+
967
+ - `fast`
968
+ - `balanced`
969
+ - `deep`
970
+
971
+ 后续再考虑:
972
+
973
+ - `reviewer`
974
+ - `planner`
975
+ - `builder`
976
+
977
+ ## 5.3 策略
978
+
979
+ ### 策略 A:先做产品级抽象,不暴露底层细节
980
+
981
+ 不要一开始就暴露:
982
+
983
+ - effort
984
+ - summary
985
+ - verbosity
986
+ - personality 的所有原子选项
987
+
988
+ 先做 mode 层,让用户用简单的词完成切换。
989
+
990
+ ### 策略 B:优先做会话级 mode
991
+
992
+ mode 最有价值的落点是:**会话级默认值**。
993
+
994
+ 而不是只有 env 默认值。
995
+
996
+ ### 策略 C:角色模式先做成 mode,不做成团队
997
+
998
+ 如果要先试“第二角色感”,优先落成:
999
+
1000
+ - reviewer mode
1001
+ - planner mode
1002
+ - builder mode
1003
+
1004
+ 而不是一开始就变成多常驻 Agent。
1005
+
1006
+ ## 5.4 暂不开始
1007
+
1008
+ - 全量暴露底层模型调参面板
1009
+ - 每轮 turn 都高度可编程的复杂模式矩阵
1010
+ - 为每个 mode 配一个平级主身份文件
1011
+
1012
+ ---
1013
+
1014
+ # Feature 6:Reviewer / 交叉评审
1015
+
1016
+ **优先级:P1 / 明确要做**
1017
+
1018
+ ## 6.1 背景
1019
+
1020
+ “自己做自己审”天然有盲区。
1021
+
1022
+ 如果未来只优先做一个“第二角色”,最值得先做的是 reviewer,而不是 planner。
1023
+
1024
+ 因为 reviewer:
1025
+
1026
+ - 价值稳定
1027
+ - 风险较低
1028
+ - 更符合官方 review lane 的思路
1029
+
1030
+ ## 6.2 目标与目的
1031
+
1032
+ ### 目标
1033
+
1034
+ 提供一个稳定的“交叉评审”能力。
1035
+
1036
+ ### 目的
1037
+
1038
+ 用最小代价引入第二视角,降低“自己审自己”的问题。
1039
+
1040
+ ### 目标结果
1041
+
1042
+ 用户应能触发一种 reviewer 形态,对当前工作进行独立复核,并得到结构化反馈。
1043
+
1044
+ ## 6.3 策略
1045
+
1046
+ ### 策略 A:优先做 reviewer mode / review lane
1047
+
1048
+ 优先落成:
1049
+
1050
+ - reviewer mode
1051
+ - detached review lane
1052
+ - review digest / summary
1053
+
1054
+ ### 策略 B:不做常驻 reviewer 人设
1055
+
1056
+ 当前阶段不要做:
1057
+
1058
+ - 常驻 reviewer ally
1059
+ - reviewer 团队注册系统
1060
+
1061
+ 先把 reviewer 作为能力,不要先做成编制。
1062
+
1063
+ ## 6.4 暂不开始
1064
+
1065
+ - 多 reviewer 并发协作
1066
+ - reviewer 组织架构
1067
+ - reviewer 专属长期会话体系
1068
+
1069
+ ---
1070
+
1071
+ # Feature 7:汇报与把关
1072
+
1073
+ **优先级:P2 / 后续增强**
1074
+
1075
+ ## 7.1 背景
1076
+
1077
+ 当基础工作流跑顺以后,下一步要解决的是:
1078
+
1079
+ - 让用户更像经理
1080
+ - 减少手工搬运上下文
1081
+ - 减少反复追问状态
1082
+
1083
+ ## 7.2 目标与目的
1084
+
1085
+ ### 目标
1086
+
1087
+ 建立阶段性汇报、digest、summary 这类“管理感”能力。
1088
+
1089
+ ### 目的
1090
+
1091
+ 让系统不仅会做事,还会主动、清楚、稳定地汇报。
1092
+
1093
+ ## 7.3 策略
1094
+
1095
+ ### 策略 A:优先做 digest 和阶段性总结
1096
+
1097
+ 先做:
1098
+
1099
+ - nightly digest
1100
+ - reviewer summary
1101
+ - 风险与阻塞提炼
1102
+ - 任务阶段性回报
1103
+
1104
+ ### 策略 B:建立在前置 feature 稳定之上
1105
+
1106
+ 汇报能力必须建立在:
1107
+
1108
+ - 会话 continuity 稳定
1109
+ - mode 稳定
1110
+ - 定时任务稳定
1111
+ - 记忆系统稳定
1112
+
1113
+ 否则汇报会变成对不稳定系统的包装。
1114
+
1115
+ ## 7.4 暂不开始
1116
+
1117
+ - 复杂 BI 面板
1118
+ - 多层级审批工作流
1119
+ - 重型管理后台
1120
+
1121
+ ---
1122
+
1123
+ # Feature 8:多工程状态感知
1124
+
1125
+ **优先级:P2 / 后续增强**
1126
+
1127
+ ## 8.1 背景
1128
+
1129
+ 未来你一定不会只管一个工程。
1130
+
1131
+ 但多工程总览建立在单工程工作流已经稳定的基础之上。
1132
+
1133
+ ## 8.2 目标与目的
1134
+
1135
+ ### 目标
1136
+
1137
+ 让用户逐渐获得跨工程的管理视角。
1138
+
1139
+ ### 目的
1140
+
1141
+ 知道:
1142
+
1143
+ - 哪个工程在忙
1144
+ - 哪个工程卡住了
1145
+ - 哪个工程在等审批
1146
+
1147
+ ## 8.3 策略
1148
+
1149
+ ### 策略 A:先做轻量状态感知,不做重面板
1150
+
1151
+ 先做统一状态总览、摘要、阻塞提示。
1152
+
1153
+ ### 策略 B:建立在单工程 feature 跑顺后
1154
+
1155
+ 如果单工程都还没稳,多工程聚合只会放大噪音。
1156
+
1157
+ ## 8.4 暂不开始
1158
+
1159
+ - 复杂多工程控制台
1160
+ - 跨工程自动任务编排
1161
+ - 多项目统一资源调度系统
1162
+
1163
+ ---
1164
+
1165
+ # Feature 9:工程内团队角色 / 多 Agent 协同
1166
+
1167
+ **优先级:P3 / 暂不开始 / 进入预研**
1168
+
1169
+ ## 9.1 背景
1170
+
1171
+ 这个痛点是真实存在的:
1172
+
1173
+ - 术业有专攻
1174
+ - 需要交叉评审
1175
+ - 主线程会过载
1176
+ - 你本人需要分发和把关
1177
+
1178
+ 但它同时也是最容易把产品带向“第二套 agent 平台”的方向。
1179
+
1180
+ ## 9.2 目标与目的
1181
+
1182
+ ### 目标
1183
+
1184
+ 明确:这件事未来可能做,但当前不进入实现主线。
1185
+
1186
+ ### 目的
1187
+
1188
+ 避免在基础主线尚未稳定时,过早进入复杂团队系统。
1189
+
1190
+ ## 9.3 策略
1191
+
1192
+ ### 策略 A:先验证单 Agent + reviewer + mode 是否足够
1193
+
1194
+ 在真正进入团队模式前,先看这些能力能否吸收大部分复杂度:
1195
+
1196
+ - 单 Agent
1197
+ - mode / profile
1198
+ - detached review
1199
+ - digest / 汇报
1200
+ - 定时任务
1201
+ - 记忆系统
1202
+
1203
+ ### 策略 B:未来优先复用官方能力
1204
+
1205
+ 如果未来要做:
1206
+
1207
+ - multi-agent
1208
+ - collaboration mode
1209
+ - 独立 review lane
1210
+
1211
+ 优先复用官方成熟能力,不自己造一套重体系。
1212
+
1213
+ ### 策略 C:只有满足触发条件才进入实施
1214
+
1215
+ 触发条件至少包括:
1216
+
1217
+ - 单 Agent 已稳定承接大多数日常事务
1218
+ - reviewer / digest / mode 仍无法吸收新增复杂度
1219
+ - 第二角色需求持续、重复、明确
1220
+ - 官方相关 surface 已更成熟
1221
+
1222
+ ## 9.4 暂不开始
1223
+
1224
+ 当前明确不进入主线:
1225
+
1226
+ - 多常驻 ally
1227
+ - 复杂角色注册中心
1228
+ - ally 间长期互通总线
1229
+ - 群体组织架构系统
1230
+ - 一个工程里多个平级主 AGENTS
1231
+
1232
+ ---
1233
+
1234
+ ## 当前派工建议
1235
+
1236
+ ### 第一批:立即开始
1237
+
1238
+ - Feature 1:定时任务
1239
+ - Feature 2:产品包装与统一安装
1240
+ - Feature 3:会话 mobility
1241
+ - Feature 4:记忆系统
1242
+
1243
+ ### 第二批:随后开始
1244
+
1245
+ - Feature 5:模式与推理深度
1246
+ - Feature 6:Reviewer / 交叉评审
1247
+
1248
+ ### 第三批:后续增强
1249
+
1250
+ - Feature 7:汇报与把关
1251
+ - Feature 8:多工程状态感知
1252
+
1253
+ ### 暂不开始
1254
+
1255
+ - Feature 9:工程内团队角色 / 多 Agent 协同
1256
+
1257
+ ---
1258
+
1259
+ ## 最终结论
1260
+
1261
+ 当前最明确、最应该开始做的 feature 仍然是:
1262
+
1263
+ > **Feature 1:定时任务**
1264
+
1265
+ 而当前最应该补齐、否则“长期伙伴感”很难成立的 feature 是:
1266
+
1267
+ > **Feature 4:记忆系统**
1268
+
1269
+ 它的重要性在于:
1270
+
1271
+ - 没有黑匣子原材料,就没有真正可持续的记忆
1272
+ - 没有记忆提炼,就只能反复重讲上下文
1273
+ - 没有稳定加载,记忆文件就只是摆设
1274
+ - 没有纠错与删除,记忆会逐渐变成污染源
1275
+
1276
+ 而当前阶段最重要的总体路线仍然是:
1277
+
1278
+ > **先把一个主 Agent 跑顺,先把日常工作接住。**