ai-growth 1.1.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.
- package/.env.example +19 -0
- package/AGENTS.md +232 -0
- package/IMPLEMENTATION_PLAN.md +207 -0
- package/LICENSE +21 -0
- package/PRODUCT_SPEC.md +1776 -0
- package/README.md +384 -0
- package/SKILL.md +121 -0
- package/START-HERE.md +156 -0
- package/dist/api/app.js +206 -0
- package/dist/api/server.js +42 -0
- package/dist/cli/main.js +799 -0
- package/dist/core/actions.js +264 -0
- package/dist/core/context.js +7 -0
- package/dist/core/directions.js +26 -0
- package/dist/core/evidence.js +155 -0
- package/dist/core/goals.js +188 -0
- package/dist/core/lifeContext.js +41 -0
- package/dist/core/memory.js +35 -0
- package/dist/core/metrics.js +74 -0
- package/dist/core/profile.js +95 -0
- package/dist/core/progress.js +244 -0
- package/dist/core/prompts/index.js +40 -0
- package/dist/core/replan.js +100 -0
- package/dist/core/rollover.js +68 -0
- package/dist/core/rolloverTypes.js +1 -0
- package/dist/core/stateMachine.js +61 -0
- package/dist/core/status.js +57 -0
- package/dist/core/types.js +9 -0
- package/dist/daemon/main.js +64 -0
- package/dist/db/cli.js +19 -0
- package/dist/db/client.js +36 -0
- package/dist/db/migrate.js +34 -0
- package/dist/db/migrations/V1__init.sql +249 -0
- package/dist/device/card.js +257 -0
- package/dist/device/deck.js +157 -0
- package/dist/device/fontCoverage.js +162 -0
- package/dist/device/http.js +170 -0
- package/dist/device/png.js +111 -0
- package/dist/device/provision.js +185 -0
- package/dist/device/render.js +194 -0
- package/dist/device/renderCard.js +48 -0
- package/dist/device/report.js +146 -0
- package/dist/device/serial.js +201 -0
- package/dist/device/token.js +78 -0
- package/dist/device/types.js +2 -0
- package/dist/mcp/ctx.js +48 -0
- package/dist/mcp/server.js +15 -0
- package/dist/mcp/tools.js +586 -0
- package/dist/passport/builder.js +83 -0
- package/dist/passport/state.js +81 -0
- package/dist/passport/sync.js +61 -0
- package/dist/reminder/notify.js +30 -0
- package/dist/reminder/scheduler.js +87 -0
- package/dist/reminder/service.js +102 -0
- package/dist/shared/config.js +50 -0
- package/dist/shared/result.js +27 -0
- package/dist/shared/time.js +67 -0
- package/dist/shared/util.js +21 -0
- package/dist/ui/app.js +500 -0
- package/dist/ui/index.html +38 -0
- package/dist/ui/style.css +367 -0
- package/docs/images/cards.png +0 -0
- package/docs/images/cover.png +0 -0
- package/launchd/com.lairey.ai-growth.daemon.plist +45 -0
- package/llms.txt +52 -0
- package/package.json +79 -0
- package/scripts/check-device-cards.mjs +177 -0
- package/scripts/doctor.sh +194 -0
- package/scripts/gen-device-assets.mjs +188 -0
- package/scripts/install.sh +291 -0
- package/scripts/preview-cards.mjs +120 -0
- package/scripts/reset-dev-data.sh +92 -0
- package/scripts/smoke-device.mjs +401 -0
- package/scripts/uninstall.sh +63 -0
- package/server.json +56 -0
package/PRODUCT_SPEC.md
ADDED
|
@@ -0,0 +1,1776 @@
|
|
|
1
|
+
# AI Growth V1 — Agent-Driven Personal Growth System
|
|
2
|
+
|
|
3
|
+
> 本文档用于直接交给 Coding Agent 从 0 开发。Agent 应按本文档实现,不应擅自改变核心产品规则。若实现细节存在冲突,以“核心原则”和“状态机”优先。
|
|
4
|
+
|
|
5
|
+
## 0. 产品目标
|
|
6
|
+
|
|
7
|
+
构建一个本地优先(Local-first)的 AI 驱动个人成长系统。它不是传统 Todo List,也不是虚构属性值 RPG。
|
|
8
|
+
|
|
9
|
+
系统通过 Agent 与用户沟通确定成长方向和阶段目标,动态生成每天少量、可执行的任务,记录真实 Evidence,并持续更新 Human Model / AI Passport。
|
|
10
|
+
|
|
11
|
+
核心循环:
|
|
12
|
+
|
|
13
|
+
Human → Interview → Direction → Goal → Stage Plan → Daily Plan → Action → Evidence → Reflection → Growth Event → Memory → AI Passport → Next Plan
|
|
14
|
+
|
|
15
|
+
核心原则:
|
|
16
|
+
|
|
17
|
+
1. AI 管路线,人决定目的地。
|
|
18
|
+
2. 第一次使用必须由 Agent 主动发起 Onboarding Interview,不允许直接生成任务。
|
|
19
|
+
3. Goal / 重要方向必须经用户确认。
|
|
20
|
+
4. 长期计划规划到 Stage;Daily Action 根据实际状态动态生成,不提前硬编码整个月每日任务。
|
|
21
|
+
5. 每天默认 2~3 个任务:1 个 Main Quest + 1~2 个 Daily Action;Agent 可根据用户情况建议调整,长期改变默认负荷需要用户确认。
|
|
22
|
+
6. AI 可自主修改、拆分、重排执行层任务;重大 Goal、Deadline、成长方向变化必须确认。
|
|
23
|
+
7. Daily Action 只来自用户明确认可过的成长方向、生活意图或客观约束,不能由 AI 自行定义“正确的人生”。
|
|
24
|
+
8. Daily Action 仅当天有效。进入下一自然日后,昨日未完成的 Daily Action 自动 EXPIRED,不得继续显示为待完成,也不得直接复制到今天;Agent 必须根据今天情况重新判断是否创建类似任务。
|
|
25
|
+
9. Main Quest 不同:未完成的 Main Quest 不自动作废,应进入 Replan,由 Agent 判断继续、拆分、调整或延期,并同步影响后续 Stage。
|
|
26
|
+
10. Passport 是当前 Human State 的压缩表达,不是 Source of Truth。Source of Truth 是 Growth DB + Memory。
|
|
27
|
+
11. Skill 负责告诉 Agent “什么时候做什么”;MCP 负责提供能力;Core 负责业务状态与规则。
|
|
28
|
+
12. 系统必须支持开机/登录后自动运行,不要求用户手动启动 MCP Server。
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. V1 使用体验
|
|
33
|
+
|
|
34
|
+
### 1.1 首次安装
|
|
35
|
+
|
|
36
|
+
Agent 加载 AI Growth Skill 后:
|
|
37
|
+
|
|
38
|
+
1. 调用 `growth_status`。
|
|
39
|
+
2. 如果不存在 Profile,Agent 主动开启 Interview。
|
|
40
|
+
3. 自然语言了解用户,而不是一次性问卷。
|
|
41
|
+
4. 至少确认:当前主要目标、期望结果、目标周期、每日可投入时间、当前水平、生活约束、希望改善的生活领域、任务负荷偏好。
|
|
42
|
+
5. Agent 生成 Profile + Goal Draft + Stage Plan Draft。
|
|
43
|
+
6. 展示摘要,让用户确认。
|
|
44
|
+
7. 确认后 Goal 进入 ACTIVE,生成 Day 1 Plan。
|
|
45
|
+
|
|
46
|
+
示例:
|
|
47
|
+
|
|
48
|
+
用户:“我想 30 天学会 Agent 开发。”
|
|
49
|
+
|
|
50
|
+
Agent 应继续沟通:最终希望达到什么程度、已有基础、每天投入多久、理论/实践偏好等。不能立即创建 30 天固定任务列表。
|
|
51
|
+
|
|
52
|
+
### 1.2 每日开始
|
|
53
|
+
|
|
54
|
+
Agent 每天第一次进入 Growth Flow 时:
|
|
55
|
+
|
|
56
|
+
1. 检测本地日期。
|
|
57
|
+
2. 执行 Daily Rollover。
|
|
58
|
+
3. 将昨日所有 `DAILY` 且未完成的 Action 标记 `EXPIRED`。
|
|
59
|
+
4. 检查昨日 Main Quest:如未完成,触发 Replan。
|
|
60
|
+
5. 读取 Active Goals / Current Stage / Recent Evidence / Recent Completion / User Constraints / Today Availability。
|
|
61
|
+
6. 必要时主动询问今天的特殊情况,例如:“今天大概能投入多久?”
|
|
62
|
+
7. 创建今天计划。
|
|
63
|
+
8. 默认:1 Main Quest + 1~2 Daily Actions。
|
|
64
|
+
9. 创建对应提醒。
|
|
65
|
+
10. 同步今日摘要到 Passport。
|
|
66
|
+
|
|
67
|
+
### 1.3 每日任务提醒
|
|
68
|
+
|
|
69
|
+
Agent 必须根据任务性质自动创建提醒,不要求用户逐条手工设置。
|
|
70
|
+
|
|
71
|
+
提醒规则:
|
|
72
|
+
|
|
73
|
+
- Main Quest:如果用户提供可执行时间,按该时间提醒;否则 Agent 可在 Daily Planning 中询问或使用用户已确认的默认时间窗口。
|
|
74
|
+
- Exercise / Family / Habit 等 Daily Action:根据用户已确认的时间偏好、日程和上下文安排。
|
|
75
|
+
- 不允许为了创建提醒擅自猜测非常具体的时间。如果没有足够信息,Agent 在规划时自然询问一次。
|
|
76
|
+
- 提醒记录必须属于 Action,可取消、更新、重排。
|
|
77
|
+
- Action 被修改/延期/删除/过期时,对应提醒必须同步修改或取消。
|
|
78
|
+
- 第二天 Daily Action 过期时,昨日相关未触发提醒一并取消。
|
|
79
|
+
- V1 至少实现本地 Scheduler;具体系统通知实现可使用 macOS Notification / Web Notification,封装为 Notification Adapter。
|
|
80
|
+
|
|
81
|
+
### 1.4 第二天处理规则(重要)
|
|
82
|
+
|
|
83
|
+
例:
|
|
84
|
+
|
|
85
|
+
昨天:
|
|
86
|
+
- Main Quest:完成 Agent Memory Demo — 未完成
|
|
87
|
+
- Daily:散步 30 分钟 — 未完成
|
|
88
|
+
- Daily:给父母打电话 — 未完成
|
|
89
|
+
|
|
90
|
+
今天 rollover 后:
|
|
91
|
+
|
|
92
|
+
- Memory Demo → `DELAYED` / `PENDING_REPLAN`,进入 Replan。
|
|
93
|
+
- 散步 → `EXPIRED`。
|
|
94
|
+
- 给父母打电话 → `EXPIRED`。
|
|
95
|
+
|
|
96
|
+
Agent 今天可以根据当前状态再次生成“散步 30 分钟”,但这是一个全新的 Action,有新的 ID,不能把昨日 Action 重新激活。
|
|
97
|
+
|
|
98
|
+
这保证 Daily Action 表达的是“今天最值得做什么”,而不是越来越长的欠债清单。
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 2. 任务模型
|
|
103
|
+
|
|
104
|
+
### 2.1 Action 类型
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
type ActionKind =
|
|
108
|
+
| 'MAIN_QUEST'
|
|
109
|
+
| 'DAILY';
|
|
110
|
+
|
|
111
|
+
type ActionDomain =
|
|
112
|
+
| 'LEARN'
|
|
113
|
+
| 'BUILD'
|
|
114
|
+
| 'TRAIN'
|
|
115
|
+
| 'HABIT'
|
|
116
|
+
| 'CREATE'
|
|
117
|
+
| 'RELATIONSHIP'
|
|
118
|
+
| 'EXPLORE'
|
|
119
|
+
| 'LIFE'
|
|
120
|
+
| 'OTHER';
|
|
121
|
+
|
|
122
|
+
type ActionStatus =
|
|
123
|
+
| 'DRAFT'
|
|
124
|
+
| 'PLANNED'
|
|
125
|
+
| 'IN_PROGRESS'
|
|
126
|
+
| 'COMPLETED'
|
|
127
|
+
| 'SKIPPED'
|
|
128
|
+
| 'DELAYED'
|
|
129
|
+
| 'PENDING_REPLAN'
|
|
130
|
+
| 'EXPIRED'
|
|
131
|
+
| 'CANCELLED';
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 2.2 Main Quest
|
|
135
|
+
|
|
136
|
+
来源于 Active Goal / Stage,是当天最重要的推进动作。
|
|
137
|
+
|
|
138
|
+
Main Quest 必须包含:
|
|
139
|
+
|
|
140
|
+
- 为什么今天做。
|
|
141
|
+
- 预计时间。
|
|
142
|
+
- 完成标准。
|
|
143
|
+
- Evidence 要求。
|
|
144
|
+
- Verification Strategy(若需要)。
|
|
145
|
+
|
|
146
|
+
Main Quest 未完成不会跨日作废,而是 Replan。
|
|
147
|
+
|
|
148
|
+
### 2.3 Daily Action
|
|
149
|
+
|
|
150
|
+
用于健康、关系、习惯、生活维护等,不一定直接属于主线 Goal。
|
|
151
|
+
|
|
152
|
+
Daily Action:
|
|
153
|
+
|
|
154
|
+
- 必须与用户认可过的 Direction / Intention 有依据关系。
|
|
155
|
+
- 通常 0~2 个。
|
|
156
|
+
- 当天有效。
|
|
157
|
+
- 未完成次日自动 EXPIRED。
|
|
158
|
+
- 不制造 streak guilt / EXP 惩罚。
|
|
159
|
+
- AI 可根据近期情况决定今天不生成 Daily Action。
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 3. Goal 与 Stage
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
type GoalStatus =
|
|
167
|
+
| 'DRAFT'
|
|
168
|
+
| 'CONFIRMED'
|
|
169
|
+
| 'ACTIVE'
|
|
170
|
+
| 'PAUSED'
|
|
171
|
+
| 'COMPLETED'
|
|
172
|
+
| 'ABANDONED';
|
|
173
|
+
|
|
174
|
+
interface Goal {
|
|
175
|
+
id: string;
|
|
176
|
+
title: string;
|
|
177
|
+
motivation?: string;
|
|
178
|
+
expectedOutcome: string;
|
|
179
|
+
startDate?: string;
|
|
180
|
+
targetDate?: string;
|
|
181
|
+
status: GoalStatus;
|
|
182
|
+
dailyTimeBudgetMinutes?: number;
|
|
183
|
+
acceptanceCriteria: AcceptanceCriterion[];
|
|
184
|
+
createdAt: string;
|
|
185
|
+
updatedAt: string;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
interface Stage {
|
|
189
|
+
id: string;
|
|
190
|
+
goalId: string;
|
|
191
|
+
title: string;
|
|
192
|
+
objective: string;
|
|
193
|
+
order: number;
|
|
194
|
+
plannedStartDate?: string;
|
|
195
|
+
plannedEndDate?: string;
|
|
196
|
+
status: 'PLANNED'|'ACTIVE'|'COMPLETED'|'DELAYED'|'SKIPPED';
|
|
197
|
+
exitCriteria: AcceptanceCriterion[];
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
长期计划只需要明确 Stage、里程碑和验收,不要一次生成所有未来 Daily Action。
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 4. 动态 Replan Engine
|
|
206
|
+
|
|
207
|
+
触发条件:
|
|
208
|
+
|
|
209
|
+
- Main Quest 延期。
|
|
210
|
+
- Stage 关键验收失败。
|
|
211
|
+
- 用户可投入时间变化。
|
|
212
|
+
- 用户反馈任务过难/过易/不合理。
|
|
213
|
+
- Evidence 表明用户已经掌握计划中的内容。
|
|
214
|
+
- 连续任务完成率明显下降。
|
|
215
|
+
- 现实 Deadline / Constraints 变化。
|
|
216
|
+
|
|
217
|
+
Replan 优先级:
|
|
218
|
+
|
|
219
|
+
1. 先调整 Action。
|
|
220
|
+
2. 再调整 Stage 内部节奏。
|
|
221
|
+
3. 再使用计划缓冲时间。
|
|
222
|
+
4. 若影响 Goal Deadline / Scope,生成 Proposal 并让用户确认。
|
|
223
|
+
|
|
224
|
+
AI 自主权限:
|
|
225
|
+
|
|
226
|
+
- 修改任务描述。
|
|
227
|
+
- 拆分/合并任务。
|
|
228
|
+
- 调整难度。
|
|
229
|
+
- 修改 Evidence / Verification 方法。
|
|
230
|
+
- Stage 内任务重排。
|
|
231
|
+
- 小幅顺延 Stage,并告知用户。
|
|
232
|
+
|
|
233
|
+
必须确认:
|
|
234
|
+
|
|
235
|
+
- 改变 Goal Outcome。
|
|
236
|
+
- 放弃 Goal。
|
|
237
|
+
- 明显改变 Target Date。
|
|
238
|
+
- 明显改变学习/训练范围。
|
|
239
|
+
- 新增长期 Direction。
|
|
240
|
+
- 长期提高每日任务负荷。
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 5. Strategy Engine
|
|
245
|
+
|
|
246
|
+
不同成长类型不能使用统一的“点完成”。
|
|
247
|
+
|
|
248
|
+
### LEARN
|
|
249
|
+
|
|
250
|
+
流程:Current Level → Knowledge Gap → Learning Action → Verification → Evidence → Knowledge State Update。
|
|
251
|
+
|
|
252
|
+
Verification 可由 Agent 自主选择:
|
|
253
|
+
|
|
254
|
+
- Explain in own words
|
|
255
|
+
- Quiz
|
|
256
|
+
- Coding challenge
|
|
257
|
+
- Practical exercise
|
|
258
|
+
- Mini project
|
|
259
|
+
- Real project application
|
|
260
|
+
|
|
261
|
+
Knowledge State 建议:
|
|
262
|
+
|
|
263
|
+
`UNKNOWN → AWARE → UNDERSTANDING → APPLYING → PROFICIENT`
|
|
264
|
+
|
|
265
|
+
不要仅因阅读过内容就判定掌握。
|
|
266
|
+
|
|
267
|
+
### BUILD / CREATE
|
|
268
|
+
|
|
269
|
+
Evidence 优先:文件、代码、Git commit、截图、可运行 Artifact、发布结果。
|
|
270
|
+
|
|
271
|
+
### TRAIN
|
|
272
|
+
|
|
273
|
+
Evidence 优先使用客观 Metrics,例如 duration / distance / reps / weight / pace。
|
|
274
|
+
|
|
275
|
+
不得使用虚构的“健康 +3”。
|
|
276
|
+
|
|
277
|
+
### HABIT
|
|
278
|
+
|
|
279
|
+
看 Consistency,但不要因为中断而进行人格化负面评价。
|
|
280
|
+
|
|
281
|
+
### RELATIONSHIP / LIFE / EXPLORE
|
|
282
|
+
|
|
283
|
+
通常使用行动记录 + 简短 Reflection。敏感内容不要强迫用户记录详细隐私。
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 6. Evidence 与 Growth Event
|
|
288
|
+
|
|
289
|
+
```ts
|
|
290
|
+
interface Evidence {
|
|
291
|
+
id: string;
|
|
292
|
+
actionId?: string;
|
|
293
|
+
type: 'TEXT'|'FILE'|'GIT'|'METRIC'|'QUIZ'|'ARTIFACT'|'REFLECTION'|'MANUAL';
|
|
294
|
+
content: string;
|
|
295
|
+
metadata?: Record<string, unknown>;
|
|
296
|
+
createdAt: string;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
interface GrowthEvent {
|
|
300
|
+
id: string;
|
|
301
|
+
date: string;
|
|
302
|
+
title: string;
|
|
303
|
+
description: string;
|
|
304
|
+
domain: ActionDomain;
|
|
305
|
+
evidenceIds: string[];
|
|
306
|
+
goalId?: string;
|
|
307
|
+
stageId?: string;
|
|
308
|
+
tags: string[];
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Growth Event 只在有意义的真实行动/变化发生后创建。不要每次普通聊天都创建。
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 7. Profile / Memory / Human Model
|
|
317
|
+
|
|
318
|
+
Profile 保存用户明确确认的相对稳定信息:
|
|
319
|
+
|
|
320
|
+
- Growth Directions
|
|
321
|
+
- Active intentions
|
|
322
|
+
- Time preferences
|
|
323
|
+
- Task capacity preference
|
|
324
|
+
- Relevant constraints
|
|
325
|
+
- Learning preferences
|
|
326
|
+
- Reminder preferences
|
|
327
|
+
|
|
328
|
+
Memory 保存 Agent 为持续理解用户需要的上下文、决策、行为模式与近期变化。
|
|
329
|
+
|
|
330
|
+
不要把 AI 推断直接永久写成事实。行为模式等推断应包含 `confidence` 和 `evidenceRefs`,重要判断需要用户确认。
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 8. AI Passport
|
|
335
|
+
|
|
336
|
+
Passport 是可同步的当前 Human Model 快照。
|
|
337
|
+
|
|
338
|
+
建议结构:
|
|
339
|
+
|
|
340
|
+
```ts
|
|
341
|
+
interface Passport {
|
|
342
|
+
version: string;
|
|
343
|
+
generatedAt: string;
|
|
344
|
+
currentChapter?: string;
|
|
345
|
+
activeDirections: DirectionSummary[];
|
|
346
|
+
activeGoals: GoalSummary[];
|
|
347
|
+
currentStages: StageSummary[];
|
|
348
|
+
recentEvidence: EvidenceSummary[];
|
|
349
|
+
recentGrowthEvents: GrowthEventSummary[];
|
|
350
|
+
knowledgeStates?: KnowledgeSummary[];
|
|
351
|
+
trainingProgress?: MetricSummary[];
|
|
352
|
+
currentFocus: string[];
|
|
353
|
+
recentChanges: string[];
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
规则:
|
|
358
|
+
|
|
359
|
+
- Passport 可随时从 DB + Memory 重建。
|
|
360
|
+
- Passport 不保存唯一数据。
|
|
361
|
+
- 每日计划生成、Daily Review、重要 Evidence、Goal/Stage 变化后标记 Passport `dirty`。
|
|
362
|
+
- 通过 Sync Adapter 同步到外部 AI Passport 卡。
|
|
363
|
+
- 外部 AI Passport API 未确定时,先实现通用 `PassportSyncAdapter` 接口 + Local JSON Adapter。
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 9. Human Version
|
|
368
|
+
|
|
369
|
+
Human Version 不按天机械增加。
|
|
370
|
+
|
|
371
|
+
只有 Reflection Engine 判断存在“有意义的稳定变化”时生成 Version Proposal,例如:
|
|
372
|
+
|
|
373
|
+
- 完成重要 Stage / Goal。
|
|
374
|
+
- 能力从 UNDERSTANDING 进入 APPLYING。
|
|
375
|
+
- 产生重要 Artifact。
|
|
376
|
+
- 客观训练指标明显变化。
|
|
377
|
+
- 长期方向发生用户确认后的变化。
|
|
378
|
+
|
|
379
|
+
Version 内容必须引用 Evidence,不允许空洞评价。
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## 10. Daily Planner
|
|
384
|
+
|
|
385
|
+
输入:
|
|
386
|
+
|
|
387
|
+
- Profile
|
|
388
|
+
- Active Goals
|
|
389
|
+
- Current Stages
|
|
390
|
+
- Yesterday Actions
|
|
391
|
+
- Recent Evidence
|
|
392
|
+
- Recent completion/delay data
|
|
393
|
+
- User time constraints
|
|
394
|
+
- Current date
|
|
395
|
+
- User-confirmed reminder preferences
|
|
396
|
+
- Recent workload
|
|
397
|
+
|
|
398
|
+
输出:
|
|
399
|
+
|
|
400
|
+
```ts
|
|
401
|
+
interface DailyPlan {
|
|
402
|
+
id: string;
|
|
403
|
+
date: string;
|
|
404
|
+
mainQuest?: Action;
|
|
405
|
+
dailyActions: Action[];
|
|
406
|
+
rationale: string;
|
|
407
|
+
createdAt: string;
|
|
408
|
+
confirmedAt?: string;
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
默认约束:
|
|
413
|
+
|
|
414
|
+
- Main Quest <= 1。
|
|
415
|
+
- Daily Actions 0~2。
|
|
416
|
+
- 总数通常 2~3。
|
|
417
|
+
- 可以只有 Main Quest。
|
|
418
|
+
- 可以 Recovery Day。
|
|
419
|
+
- 创建后应让使用者确认;用户提出“不合理”时 Agent 应立即修改方案,直到确认。
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 11. Daily Rollover 状态机
|
|
424
|
+
|
|
425
|
+
每天首次运行或 daemon 检测日期变化时执行,必须幂等。
|
|
426
|
+
|
|
427
|
+
Pseudo:
|
|
428
|
+
|
|
429
|
+
```ts
|
|
430
|
+
async function rollover(today: LocalDate) {
|
|
431
|
+
const last = await systemState.lastRolloverDate();
|
|
432
|
+
if (last === today) return;
|
|
433
|
+
|
|
434
|
+
const previousOpenActions = await actions.before(today).open();
|
|
435
|
+
|
|
436
|
+
for (const action of previousOpenActions) {
|
|
437
|
+
if (action.kind === 'DAILY') {
|
|
438
|
+
await actions.expire(action.id);
|
|
439
|
+
await reminders.cancelByAction(action.id);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (action.kind === 'MAIN_QUEST') {
|
|
443
|
+
await actions.markPendingReplan(action.id);
|
|
444
|
+
await reminders.cancelByAction(action.id);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
await planner.flagReplanIfNeeded();
|
|
449
|
+
await systemState.setLastRolloverDate(today);
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
不要将昨日 Daily Action 自动 clone 到今天。
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## 12. Reminder / Scheduler
|
|
458
|
+
|
|
459
|
+
```ts
|
|
460
|
+
interface Reminder {
|
|
461
|
+
id: string;
|
|
462
|
+
actionId: string;
|
|
463
|
+
scheduledAt: string;
|
|
464
|
+
status: 'SCHEDULED'|'SENT'|'CANCELLED';
|
|
465
|
+
channel: 'LOCAL_NOTIFICATION'|'WEB'|'OTHER';
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
提供:
|
|
470
|
+
|
|
471
|
+
- `createReminder`
|
|
472
|
+
- `updateReminder`
|
|
473
|
+
- `cancelReminder`
|
|
474
|
+
- `cancelByAction`
|
|
475
|
+
- `listTodayReminders`
|
|
476
|
+
|
|
477
|
+
Scheduler 应常驻运行,并在系统重启后恢复未过期提醒。
|
|
478
|
+
|
|
479
|
+
macOS V1 推荐:Node daemon + `launchd`。安装脚本负责创建/加载 plist;卸载脚本负责清理。
|
|
480
|
+
|
|
481
|
+
不得要求用户每次重启手工 `npm run mcp`。
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
## 13. Skill 规范
|
|
486
|
+
|
|
487
|
+
项目必须提供可被 Agent 安装/读取的 `SKILL.md`。
|
|
488
|
+
|
|
489
|
+
建议核心内容:
|
|
490
|
+
|
|
491
|
+
```md
|
|
492
|
+
# AI Growth Skill
|
|
493
|
+
|
|
494
|
+
You are connected to the user's AI Growth system.
|
|
495
|
+
|
|
496
|
+
Your job is not to maximize task count. Your job is to help the human make meaningful, evidence-backed progress toward directions they have chosen.
|
|
497
|
+
|
|
498
|
+
## On load
|
|
499
|
+
|
|
500
|
+
1. Call growth_status.
|
|
501
|
+
2. If onboarding is missing/incomplete, proactively continue onboarding before planning tasks.
|
|
502
|
+
3. If there is no active goal, discuss goals with the human; do not invent a major goal.
|
|
503
|
+
4. If a goal draft exists, continue planning and request confirmation.
|
|
504
|
+
5. Run/verify daily rollover.
|
|
505
|
+
6. If today's plan does not exist, start daily planning.
|
|
506
|
+
7. If a previous Main Quest is pending replan, resolve it before creating a new Main Quest.
|
|
507
|
+
8. Ask for missing situational information only when it materially affects today's plan.
|
|
508
|
+
9. Present today's plan and obtain confirmation.
|
|
509
|
+
10. Create/update reminders after plan confirmation.
|
|
510
|
+
|
|
511
|
+
## During work
|
|
512
|
+
|
|
513
|
+
- When meaningful work is completed, record Evidence.
|
|
514
|
+
- Modify unreasonable execution-level tasks autonomously when appropriate.
|
|
515
|
+
- If the human says a task is unreasonable, replan it rather than defending the task.
|
|
516
|
+
- Use the correct verification strategy for the task domain.
|
|
517
|
+
- Never mark learning as mastered solely because content was shown/read.
|
|
518
|
+
|
|
519
|
+
## Daily actions
|
|
520
|
+
|
|
521
|
+
- Daily Actions are valid only for their local calendar day.
|
|
522
|
+
- Never carry an incomplete Daily Action into the next day.
|
|
523
|
+
- A similar action may be newly created only after reassessing today's context.
|
|
524
|
+
|
|
525
|
+
## Human authority
|
|
526
|
+
|
|
527
|
+
Get explicit confirmation before changing major goals, meaningful deadlines, long-term directions, or persistent task capacity.
|
|
528
|
+
|
|
529
|
+
## End/update
|
|
530
|
+
|
|
531
|
+
After meaningful state changes, update memory/growth state and mark Passport for sync.
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
实际 `SKILL.md` 应扩充 Tool 使用说明、错误恢复与例子,但保持简洁,避免消耗过多 Agent Context。
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## 14. MCP Tools
|
|
539
|
+
|
|
540
|
+
至少实现:
|
|
541
|
+
|
|
542
|
+
### System
|
|
543
|
+
- `growth_status()`
|
|
544
|
+
- `run_daily_rollover()`
|
|
545
|
+
|
|
546
|
+
### Profile
|
|
547
|
+
- `get_profile()`
|
|
548
|
+
- `update_profile()`
|
|
549
|
+
|
|
550
|
+
### Goal
|
|
551
|
+
- `list_goals()`
|
|
552
|
+
- `get_goal(goalId)`
|
|
553
|
+
- `create_goal_draft(input)`
|
|
554
|
+
- `confirm_goal(goalId)`
|
|
555
|
+
- `update_goal(input)`
|
|
556
|
+
- `pause_goal(goalId)`
|
|
557
|
+
|
|
558
|
+
### Plan / Stage
|
|
559
|
+
- `get_stage_plan(goalId)`
|
|
560
|
+
- `create_stage_plan(goalId, input)`
|
|
561
|
+
- `update_stage(input)`
|
|
562
|
+
- `replan(input)`
|
|
563
|
+
|
|
564
|
+
### Today / Action
|
|
565
|
+
- `get_today_plan()`
|
|
566
|
+
- `create_today_plan(input)`
|
|
567
|
+
- `confirm_today_plan(planId)`
|
|
568
|
+
- `create_action(input)`
|
|
569
|
+
- `update_action(input)`
|
|
570
|
+
- `complete_action(actionId, evidence?)`
|
|
571
|
+
- `delay_action(actionId, reason?)`
|
|
572
|
+
- `skip_action(actionId, reason?)`
|
|
573
|
+
|
|
574
|
+
### Evidence / Assessment
|
|
575
|
+
- `add_evidence(input)`
|
|
576
|
+
- `list_evidence(filters)`
|
|
577
|
+
- `create_assessment(input)`
|
|
578
|
+
- `submit_assessment(input)`
|
|
579
|
+
|
|
580
|
+
### Review
|
|
581
|
+
- `daily_review(input?)`
|
|
582
|
+
- `weekly_review(input?)`
|
|
583
|
+
|
|
584
|
+
### Reminder
|
|
585
|
+
- `list_reminders(date?)`
|
|
586
|
+
- `create_reminder(input)`
|
|
587
|
+
- `update_reminder(input)`
|
|
588
|
+
- `cancel_reminder(reminderId)`
|
|
589
|
+
|
|
590
|
+
### Passport
|
|
591
|
+
- `get_passport()`
|
|
592
|
+
- `rebuild_passport()`
|
|
593
|
+
- `sync_passport()`
|
|
594
|
+
|
|
595
|
+
所有 Tool 必须返回结构化 JSON,并提供清晰错误码,例如:`ONBOARDING_REQUIRED`, `CONFIRMATION_REQUIRED`, `REPLAN_REQUIRED`, `INVALID_STATE`。
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
599
|
+
## 15. Agent 主动沟通规则
|
|
600
|
+
|
|
601
|
+
Agent 必须主动沟通的场景:
|
|
602
|
+
|
|
603
|
+
1. First Run / Onboarding。
|
|
604
|
+
2. 创建长期 Goal 前信息不足。
|
|
605
|
+
3. Goal Draft / Stage Plan 需要确认。
|
|
606
|
+
4. 今日可投入时间等信息会明显影响 Daily Plan。
|
|
607
|
+
5. 今日 Plan 生成后等待确认。
|
|
608
|
+
6. Goal Outcome / Deadline 等重大调整。
|
|
609
|
+
7. 用户明确表示任务不合理。
|
|
610
|
+
|
|
611
|
+
Agent 不应反复询问已明确且仍有效的信息。
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## 16. 数据库
|
|
616
|
+
|
|
617
|
+
V1 使用 SQLite。推荐 Prisma/Drizzle(二选一;优先选择 Agent 当前生态稳定方案)。
|
|
618
|
+
|
|
619
|
+
核心表:
|
|
620
|
+
|
|
621
|
+
- system_state
|
|
622
|
+
- profiles
|
|
623
|
+
- directions
|
|
624
|
+
- goals
|
|
625
|
+
- stages
|
|
626
|
+
- daily_plans
|
|
627
|
+
- actions
|
|
628
|
+
- evidence
|
|
629
|
+
- assessments
|
|
630
|
+
- growth_events
|
|
631
|
+
- memories
|
|
632
|
+
- reminders
|
|
633
|
+
- passports
|
|
634
|
+
- passport_sync_logs
|
|
635
|
+
- human_versions
|
|
636
|
+
|
|
637
|
+
所有核心记录包含 `id`, `created_at`, `updated_at`;需要软删除的对象增加 `deleted_at`。
|
|
638
|
+
|
|
639
|
+
时间处理:数据库保存 ISO timestamp;Daily Rollover 必须基于用户配置的本地 timezone 计算自然日,不能直接按 UTC 日期判断。
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
## 17. 推荐工程结构
|
|
644
|
+
|
|
645
|
+
```text
|
|
646
|
+
ai-growth/
|
|
647
|
+
├── apps/
|
|
648
|
+
│ ├── daemon/
|
|
649
|
+
│ └── web/
|
|
650
|
+
├── packages/
|
|
651
|
+
│ ├── core/
|
|
652
|
+
│ │ ├── profile/
|
|
653
|
+
│ │ ├── goals/
|
|
654
|
+
│ │ ├── stages/
|
|
655
|
+
│ │ ├── planning/
|
|
656
|
+
│ │ ├── actions/
|
|
657
|
+
│ │ ├── evidence/
|
|
658
|
+
│ │ ├── assessment/
|
|
659
|
+
│ │ ├── reflection/
|
|
660
|
+
│ │ ├── memory/
|
|
661
|
+
│ │ ├── passport/
|
|
662
|
+
│ │ └── reminders/
|
|
663
|
+
│ ├── db/
|
|
664
|
+
│ ├── mcp-server/
|
|
665
|
+
│ ├── skill/
|
|
666
|
+
│ ├── scheduler/
|
|
667
|
+
│ ├── passport-sync/
|
|
668
|
+
│ └── shared/
|
|
669
|
+
├── scripts/
|
|
670
|
+
│ ├── install-macos.sh
|
|
671
|
+
│ └── uninstall-macos.sh
|
|
672
|
+
├── docs/
|
|
673
|
+
└── README.md
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
推荐 TypeScript + Node.js,monorepo 可使用 pnpm workspace。
|
|
677
|
+
|
|
678
|
+
---
|
|
679
|
+
|
|
680
|
+
## 18. Web UI(V1)
|
|
681
|
+
|
|
682
|
+
不要过度开发 UI,但必须有可观察/修改状态的界面。
|
|
683
|
+
|
|
684
|
+
页面:
|
|
685
|
+
|
|
686
|
+
### Today
|
|
687
|
+
- Main Quest
|
|
688
|
+
- Daily Actions
|
|
689
|
+
- Reminder
|
|
690
|
+
- Complete / Skip / Request Replan
|
|
691
|
+
|
|
692
|
+
### Goals
|
|
693
|
+
- Active Goals
|
|
694
|
+
- Stage Timeline
|
|
695
|
+
- Delay / Progress
|
|
696
|
+
|
|
697
|
+
### Timeline
|
|
698
|
+
- Growth Events
|
|
699
|
+
- Evidence
|
|
700
|
+
|
|
701
|
+
### Learning
|
|
702
|
+
- Knowledge Map(有学习 Goal 时展示)
|
|
703
|
+
- Assessment history
|
|
704
|
+
|
|
705
|
+
### Passport
|
|
706
|
+
- Current Chapter
|
|
707
|
+
- Active Directions
|
|
708
|
+
- Active Goals
|
|
709
|
+
- Recent Evidence
|
|
710
|
+
- Recent Changes
|
|
711
|
+
- Last Sync
|
|
712
|
+
|
|
713
|
+
### Settings
|
|
714
|
+
- timezone
|
|
715
|
+
- default availability
|
|
716
|
+
- reminder preferences
|
|
717
|
+
- task capacity
|
|
718
|
+
- Passport Sync Adapter
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
## 19. Daily / Weekly Reflection
|
|
723
|
+
|
|
724
|
+
Daily Review 不要求长日记。
|
|
725
|
+
|
|
726
|
+
至少总结:
|
|
727
|
+
|
|
728
|
+
- Main Quest 是否完成。
|
|
729
|
+
- 关键 Evidence。
|
|
730
|
+
- 今日任务是否合理。
|
|
731
|
+
- 是否产生需要进入 Memory 的变化。
|
|
732
|
+
- 是否需要 Replan。
|
|
733
|
+
|
|
734
|
+
Weekly Review:
|
|
735
|
+
|
|
736
|
+
- Goal / Stage progress。
|
|
737
|
+
- Completion / Delay pattern。
|
|
738
|
+
- Knowledge / Training progress。
|
|
739
|
+
- 有 Evidence 支撑的变化。
|
|
740
|
+
- 下周 Stage 调整建议。
|
|
741
|
+
- 是否需要 Human Version Proposal。
|
|
742
|
+
|
|
743
|
+
不要生成没有 Evidence 的人格判断。
|
|
744
|
+
|
|
745
|
+
---
|
|
746
|
+
|
|
747
|
+
## 20. AI 调用抽象
|
|
748
|
+
|
|
749
|
+
Core 不绑定特定模型厂商。
|
|
750
|
+
|
|
751
|
+
```ts
|
|
752
|
+
interface AIProvider {
|
|
753
|
+
generateStructured<T>(request: AIRequest<T>): Promise<T>;
|
|
754
|
+
}
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
所有 Planner / Reflection / Assessment Prompt 应版本化存放,例如:
|
|
758
|
+
|
|
759
|
+
```text
|
|
760
|
+
packages/core/prompts/
|
|
761
|
+
├── onboarding.v1.md
|
|
762
|
+
├── goal-planner.v1.md
|
|
763
|
+
├── stage-planner.v1.md
|
|
764
|
+
├── daily-planner.v1.md
|
|
765
|
+
├── replan.v1.md
|
|
766
|
+
├── assessment.v1.md
|
|
767
|
+
├── daily-review.v1.md
|
|
768
|
+
└── passport.v1.md
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
优先让外部 Agent 通过 Skill + MCP 承担对话智能;daemon 内部 AI Provider 用于后台可自动执行的结构化工作。两种路径应共享 Core 规则。
|
|
772
|
+
|
|
773
|
+
---
|
|
774
|
+
|
|
775
|
+
## 21. 安全与用户控制
|
|
776
|
+
|
|
777
|
+
- 所有本地数据默认保存在用户机器。
|
|
778
|
+
- 外部同步必须显式配置 Adapter。
|
|
779
|
+
- 用户可以查看、修改、删除 Profile / Goal / Action / Memory / Evidence。
|
|
780
|
+
- 不把 Agent 推断当作医学、心理或其他专业诊断。
|
|
781
|
+
- 对身体训练任务,V1 避免自动生成极端训练强度;用户报告不适/受伤时不继续自动加量。
|
|
782
|
+
- Reminder 必须可关闭。
|
|
783
|
+
|
|
784
|
+
---
|
|
785
|
+
|
|
786
|
+
## 22. 开发 Phase
|
|
787
|
+
|
|
788
|
+
### Phase 1 — Core + DB
|
|
789
|
+
|
|
790
|
+
完成 SQLite Schema、Repository、Goal/Stage/Action 状态机、Daily Rollover、单元测试。
|
|
791
|
+
|
|
792
|
+
验收:
|
|
793
|
+
|
|
794
|
+
- 可以创建 Profile / Goal / Stage / Action。
|
|
795
|
+
- Daily Action 次日自动 EXPIRED。
|
|
796
|
+
- Main Quest 次日进入 PENDING_REPLAN。
|
|
797
|
+
- rollover 幂等。
|
|
798
|
+
|
|
799
|
+
### Phase 2 — Planner + Strategy
|
|
800
|
+
|
|
801
|
+
完成 Daily Planner、Replan、LEARN/BUILD/TRAIN/RELATIONSHIP 等策略、Evidence、Assessment。
|
|
802
|
+
|
|
803
|
+
验收:
|
|
804
|
+
|
|
805
|
+
- 30 天学习 Goal 能生成 Stage Plan。
|
|
806
|
+
- 每天只动态创建当天计划。
|
|
807
|
+
- 延期后可以重排 Stage。
|
|
808
|
+
- Quiz / Practical Evidence 可记录。
|
|
809
|
+
|
|
810
|
+
### Phase 3 — MCP + Skill
|
|
811
|
+
|
|
812
|
+
实现 MCP Tools + `SKILL.md`。
|
|
813
|
+
|
|
814
|
+
验收:
|
|
815
|
+
|
|
816
|
+
- 一个新的兼容 Agent 加载 Skill 后,能调用 `growth_status`。
|
|
817
|
+
- 无 Profile 时主动进入 Onboarding。
|
|
818
|
+
- 有 Active Goal 时可以继续当天流程。
|
|
819
|
+
- 用户无需重复解释整个系统怎么使用。
|
|
820
|
+
|
|
821
|
+
### Phase 4 — Scheduler + Reminder + Daemon
|
|
822
|
+
|
|
823
|
+
完成常驻服务、Daily Rollover 定时检查、本地提醒、macOS launchd 安装。
|
|
824
|
+
|
|
825
|
+
验收:
|
|
826
|
+
|
|
827
|
+
- 重启 Mac 后 daemon 自动恢复。
|
|
828
|
+
- MCP 能正常连接。
|
|
829
|
+
- Reminder 可恢复。
|
|
830
|
+
- 第二天旧 Daily Action 提醒被取消。
|
|
831
|
+
|
|
832
|
+
### Phase 5 — Passport
|
|
833
|
+
|
|
834
|
+
实现 Passport Builder、Local JSON Sync Adapter、通用 Sync Adapter Interface。
|
|
835
|
+
|
|
836
|
+
验收:
|
|
837
|
+
|
|
838
|
+
- Passport 可从 Source of Truth 重建。
|
|
839
|
+
- 每日关键更新后可同步。
|
|
840
|
+
- Sync failure 不影响 Growth DB。
|
|
841
|
+
|
|
842
|
+
### Phase 6 — Web UI
|
|
843
|
+
|
|
844
|
+
实现 Today / Goals / Timeline / Passport / Settings。
|
|
845
|
+
|
|
846
|
+
### Phase 7 — Integration Tests
|
|
847
|
+
|
|
848
|
+
模拟至少以下完整流程:
|
|
849
|
+
|
|
850
|
+
1. 新用户安装 → Interview → 30 天学习 Goal → 确认 → Day 1。
|
|
851
|
+
2. Day 1 Main Quest 完成 → Evidence → Passport 更新。
|
|
852
|
+
3. Daily Exercise 未完成 → 第二天 EXPIRED → 提醒取消。
|
|
853
|
+
4. Main Quest 未完成 → 第二天 Replan → Stage 顺延。
|
|
854
|
+
5. 用户说任务不合理 → Agent 修改 → 用户确认。
|
|
855
|
+
6. 学习任务 → Quiz → 未通过 → 不升级 Knowledge State → 重新规划。
|
|
856
|
+
7. 重启 daemon → 状态和提醒恢复。
|
|
857
|
+
8. 换一个 Agent → 读取 Skill + MCP → 能从当前状态继续。
|
|
858
|
+
|
|
859
|
+
---
|
|
860
|
+
|
|
861
|
+
## 23. Agent 开发执行要求
|
|
862
|
+
|
|
863
|
+
Coding Agent 收到本文档后:
|
|
864
|
+
|
|
865
|
+
1. 先阅读全文。
|
|
866
|
+
2. 创建 `IMPLEMENTATION_PLAN.md`,按 Phase 拆解任务。
|
|
867
|
+
3. 创建数据库 Schema 和领域状态机,不要先写 UI。
|
|
868
|
+
4. 每完成一个 Phase,运行 tests / typecheck / lint。
|
|
869
|
+
5. 不允许用 mock 替代核心状态规则后宣称完成。
|
|
870
|
+
6. 对 AI Provider、Passport 外部 API、通知渠道等尚未确定的外部依赖,使用明确 Adapter Interface,不阻塞 Core。
|
|
871
|
+
7. 所有日期逻辑写测试,重点覆盖 timezone / midnight / restart / duplicate rollover。
|
|
872
|
+
8. 所有 AI 结构化输出使用 schema validation(例如 Zod)。
|
|
873
|
+
9. 所有状态变更必须通过 Core Service,不允许 MCP/Web 直接写 DB。
|
|
874
|
+
10. 在 README 中提供安装、启动、Skill 安装、MCP 配置、launchd 安装与卸载说明。
|
|
875
|
+
|
|
876
|
+
---
|
|
877
|
+
|
|
878
|
+
## 24. V1 Definition of Done
|
|
879
|
+
|
|
880
|
+
V1 完成的判断不是“页面都做出来”,而是以下体验真实跑通:
|
|
881
|
+
|
|
882
|
+
用户把 Skill/MCP 接入一个 Agent → Agent 主动了解用户 → 双方确定一个目标 → AI 创建 Stage Plan → 每天动态创建少量任务并提醒 → 用户完成或延期 → Evidence 被记录 → 第二天 Daily Action 自动作废、Main Quest 自动 Replan → 计划随现实变化 → Learning/Training 等使用不同验收策略 → Growth State 持续积累 → AI Passport 自动同步 → Mac 重启后系统仍可继续 → 换一个兼容 Agent 后仍能从 Passport/Growth State 继续推进。
|
|
883
|
+
|
|
884
|
+
如果上述链路未完整跑通,则 V1 未完成。
|
|
885
|
+
|
|
886
|
+
---
|
|
887
|
+
|
|
888
|
+
# V1.1 冻结补充规范(本节优先级高于前文)
|
|
889
|
+
|
|
890
|
+
> 目标:Claude Coding Agent 应在一次连续开发流程中,把项目做到“用户明早可以开始真实使用”的程度,而不是只完成脚手架或 Demo。除非遇到无法由本文档判断的破坏性产品决策,否则不要逐步停下来询问;应自行实现、测试、修复并继续推进。
|
|
891
|
+
|
|
892
|
+
## 16. V1.1 产品定位与非目标
|
|
893
|
+
|
|
894
|
+
### 16.1 一句话产品定义
|
|
895
|
+
|
|
896
|
+
AI Growth 是一个 **Agent-native、Local-first 的个人成长执行系统**:AI 先理解用户和用户认可的方向,与用户共同确定目标,然后维护阶段计划、每天给出少量下一步行动,随现实变化动态重排,并用真实 Evidence 形成可携带的 AI Passport。
|
|
897
|
+
|
|
898
|
+
它的价值不是“管理更多 Todo”,而是:
|
|
899
|
+
|
|
900
|
+
> 用户不用持续维护计划;AI 维护计划,人保留目标、选择和最终确认权。
|
|
901
|
+
|
|
902
|
+
### 16.2 V1 必须验证的核心假设
|
|
903
|
+
|
|
904
|
+
1. Agent 能通过首次访谈形成足够好的 Profile 和 Goal。
|
|
905
|
+
2. Agent 每天给出的 1 个 Main Quest + 少量 Daily Actions,大部分无需用户大改即可接受。
|
|
906
|
+
3. 未完成任务不会造成越来越长的债务列表:Daily 跨天作废,Main 自动进入 Replan。
|
|
907
|
+
4. AI 会根据反馈、可用时间和生活状态越来越会安排这个用户。
|
|
908
|
+
5. 用户能从 Timeline / Stage / Evidence 中感受到“我正在前进”,而不是依赖虚构属性值。
|
|
909
|
+
6. 换一个支持 Skill + MCP 的 Agent 后,能够读取当前状态继续推进。
|
|
910
|
+
|
|
911
|
+
### 16.3 V1 明确不做 / 不写死
|
|
912
|
+
|
|
913
|
+
以下能力允许预留接口,但不得阻塞 V1 上线:
|
|
914
|
+
|
|
915
|
+
- 六维属性、EXP、等级数值。
|
|
916
|
+
- 完整 RPG 装备/金币/宠物系统。
|
|
917
|
+
- 复杂 Knowledge Graph UI。
|
|
918
|
+
- 通用课程平台。
|
|
919
|
+
- AI 自动生成大型题库。
|
|
920
|
+
- 专业医疗/康复/营养训练指导。
|
|
921
|
+
- 强制量化“掌握度百分比”。
|
|
922
|
+
- 社交排名。
|
|
923
|
+
- 云端账号体系。
|
|
924
|
+
- 多人协作。
|
|
925
|
+
|
|
926
|
+
V1 可以在真实使用过程中按需要新增这些能力。
|
|
927
|
+
|
|
928
|
+
## 17. 用户控制权与 AI 权限模型
|
|
929
|
+
|
|
930
|
+
### 17.1 原则
|
|
931
|
+
|
|
932
|
+
**AI 管路线,人决定目的地。**
|
|
933
|
+
|
|
934
|
+
AI 不得通过任务暗中改变用户的人生方向。所有 Daily Action 必须能追溯到:
|
|
935
|
+
|
|
936
|
+
- 用户已确认的 Goal;或
|
|
937
|
+
- 用户已确认的生活意图;或
|
|
938
|
+
- 用户明确告诉系统的现实约束/偏好。
|
|
939
|
+
|
|
940
|
+
### 17.2 AI 可自主执行(无需逐次确认)
|
|
941
|
+
|
|
942
|
+
- 创建当天执行层任务。
|
|
943
|
+
- 修改任务文案、难度、预计时间。
|
|
944
|
+
- 拆分/合并执行层任务。
|
|
945
|
+
- 将 Main Quest 在阶段内合理顺延。
|
|
946
|
+
- Daily Action 在当天重新安排。
|
|
947
|
+
- 根据任务类型选择 Evidence 方式。
|
|
948
|
+
- 生成轻量 Quiz / Explain / Coding Challenge。
|
|
949
|
+
- 根据反馈减少当天任务数量。
|
|
950
|
+
- 取消已失效提醒。
|
|
951
|
+
|
|
952
|
+
### 17.3 AI 可调整但必须告知
|
|
953
|
+
|
|
954
|
+
- Stage 内任务顺序变化。
|
|
955
|
+
- Stage 小幅延期。
|
|
956
|
+
- 当天从 3 个任务降为 1~2 个。
|
|
957
|
+
- 学习方式或验收方式明显变化。
|
|
958
|
+
- 进入临时 Busy / Recovery 等模式(若由上下文推断,应先确认)。
|
|
959
|
+
|
|
960
|
+
### 17.4 必须用户确认
|
|
961
|
+
|
|
962
|
+
- 创建/删除长期 Goal。
|
|
963
|
+
- 改变 Goal 的 why / desired outcome / success criteria。
|
|
964
|
+
- 放弃 Goal。
|
|
965
|
+
- 明显改变总 Deadline。
|
|
966
|
+
- 长期增加默认每日负荷。
|
|
967
|
+
- 新增一个此前未被用户认可的生活成长方向。
|
|
968
|
+
- 将推断写成 Passport 的重要稳定事实。
|
|
969
|
+
|
|
970
|
+
## 18. Goal 必须包含 Why
|
|
971
|
+
|
|
972
|
+
Goal 最低结构:
|
|
973
|
+
|
|
974
|
+
```ts
|
|
975
|
+
interface Goal {
|
|
976
|
+
id: string;
|
|
977
|
+
title: string;
|
|
978
|
+
why: string;
|
|
979
|
+
desiredOutcome: string;
|
|
980
|
+
successCriteria: string[];
|
|
981
|
+
startDate: string;
|
|
982
|
+
targetDate?: string;
|
|
983
|
+
status: 'DRAFT' | 'CONFIRMED' | 'ACTIVE' | 'PAUSED' | 'COMPLETED' | 'ABANDONED';
|
|
984
|
+
createdAt: string;
|
|
985
|
+
updatedAt: string;
|
|
986
|
+
}
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
首次创建 Goal 时,Agent 至少要弄清:
|
|
990
|
+
|
|
991
|
+
- 为什么现在想做?
|
|
992
|
+
- 希望最后能做到什么,而不是“学完什么”?
|
|
993
|
+
- 时间周期。
|
|
994
|
+
- 每日/每周可投入资源。
|
|
995
|
+
- 当前基础。
|
|
996
|
+
- 什么证据代表成功。
|
|
997
|
+
|
|
998
|
+
例如“30 天学习 Agent”不能以“看完 30 天内容”为成功标准;若目标是独立开发 Agent,则实际可运行项目应成为主要 Evidence。
|
|
999
|
+
|
|
1000
|
+
## 19. LifeContext:计划必须服从现实
|
|
1001
|
+
|
|
1002
|
+
增加:
|
|
1003
|
+
|
|
1004
|
+
```ts
|
|
1005
|
+
interface LifeContext {
|
|
1006
|
+
id: string;
|
|
1007
|
+
mode: 'NORMAL' | 'BUSY' | 'RECOVERY' | 'TRAVEL' | 'FOCUS' | 'CUSTOM';
|
|
1008
|
+
availableMinutesPerDay?: number;
|
|
1009
|
+
startDate: string;
|
|
1010
|
+
expectedEndDate?: string;
|
|
1011
|
+
note?: string;
|
|
1012
|
+
confirmed: boolean;
|
|
1013
|
+
}
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
用户可以自然语言说:
|
|
1017
|
+
|
|
1018
|
+
- “这周特别忙。”
|
|
1019
|
+
- “明天只有半小时。”
|
|
1020
|
+
- “我这几天在旅行。”
|
|
1021
|
+
- “这周想冲刺这个项目。”
|
|
1022
|
+
|
|
1023
|
+
Planner 必须因此改变负荷,而不是机械维持旧计划。
|
|
1024
|
+
|
|
1025
|
+
临时 LifeContext 到期后,Agent 应主动确认是否恢复,而不是永久保留。
|
|
1026
|
+
|
|
1027
|
+
## 20. Task Feedback:系统必须学会怎么推动这个人
|
|
1028
|
+
|
|
1029
|
+
Action 支持反馈:
|
|
1030
|
+
|
|
1031
|
+
```ts
|
|
1032
|
+
type TaskFeedbackReason =
|
|
1033
|
+
| 'NOT_INTERESTED'
|
|
1034
|
+
| 'BAD_TIMING'
|
|
1035
|
+
| 'TOO_HARD'
|
|
1036
|
+
| 'TOO_EASY'
|
|
1037
|
+
| 'ALREADY_DONE'
|
|
1038
|
+
| 'NOT_RELEVANT'
|
|
1039
|
+
| 'NO_TIME'
|
|
1040
|
+
| 'OTHER';
|
|
1041
|
+
|
|
1042
|
+
interface TaskFeedback {
|
|
1043
|
+
id: string;
|
|
1044
|
+
actionId: string;
|
|
1045
|
+
reason: TaskFeedbackReason;
|
|
1046
|
+
comment?: string;
|
|
1047
|
+
createdAt: string;
|
|
1048
|
+
}
|
|
1049
|
+
```
|
|
1050
|
+
|
|
1051
|
+
规则:
|
|
1052
|
+
|
|
1053
|
+
1. 用户说“这个任务不合理”“换一个”“今天不想跑”等,应优先转化为反馈,而不是只记 SKIPPED。
|
|
1054
|
+
2. 相同类别连续被拒绝时,Planner 必须降低重复推荐概率。
|
|
1055
|
+
3. 不得把“用户不喜欢某种执行方式”错误解释成“用户不想实现整个 Goal”。
|
|
1056
|
+
4. Agent 应在必要时询问替代方式,例如跑步 → 散步/骑车/力量训练。
|
|
1057
|
+
|
|
1058
|
+
## 21. Evidence 强度
|
|
1059
|
+
|
|
1060
|
+
所有成长记录不要求同等证明强度。
|
|
1061
|
+
|
|
1062
|
+
```ts
|
|
1063
|
+
type EvidenceStrength =
|
|
1064
|
+
| 'AUTO_VERIFIED'
|
|
1065
|
+
| 'USER_CONFIRMED'
|
|
1066
|
+
| 'AGENT_OBSERVED'
|
|
1067
|
+
| 'UNVERIFIED';
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
说明:
|
|
1071
|
+
|
|
1072
|
+
- `AUTO_VERIFIED`:Git、测试、文件、可验证工具输出、Quiz 结果等。
|
|
1073
|
+
- `USER_CONFIRMED`:用户直接说已完成,如散步、联系家人。
|
|
1074
|
+
- `AGENT_OBSERVED`:Agent 在当前工作流中观察到,但缺少外部强证明。
|
|
1075
|
+
- `UNVERIFIED`:仅有推断,不能用于自动宣布完成关键目标。
|
|
1076
|
+
|
|
1077
|
+
Agent 不得为了“数据完整”要求用户为所有生活行为上传证据。低风险生活任务允许一句话确认,且支持“今天其他 Daily 都完成了”这类批量确认。
|
|
1078
|
+
|
|
1079
|
+
## 22. 学习类任务的 V1 验收模型
|
|
1080
|
+
|
|
1081
|
+
V1 不需要复杂 Knowledge Engine,但 Evidence 应支持以下语义等级:
|
|
1082
|
+
|
|
1083
|
+
1. `EXPOSURE`:接触/阅读过。
|
|
1084
|
+
2. `RECALL`:能回答基本问题。
|
|
1085
|
+
3. `EXPLAIN`:能用自己的话解释。
|
|
1086
|
+
4. `APPLY`:能独立应用。
|
|
1087
|
+
5. `REAL_WORLD_EVIDENCE`:真实项目/场景成功使用。
|
|
1088
|
+
|
|
1089
|
+
AI 可以自己教学和出题,但不得仅因为自己出的 Quiz 高分就宣称用户“完全掌握”。对于工程类技能,优先使用实际实现作为更强 Evidence。
|
|
1090
|
+
|
|
1091
|
+
## 23. Daily Plan 精确规则
|
|
1092
|
+
|
|
1093
|
+
### 23.1 默认结构
|
|
1094
|
+
|
|
1095
|
+
正常日默认:
|
|
1096
|
+
|
|
1097
|
+
- 1 个 `MAIN`。
|
|
1098
|
+
- 1~2 个 `DAILY`。
|
|
1099
|
+
- 总数通常 2~3 个。
|
|
1100
|
+
|
|
1101
|
+
这不是硬限制。Planner 可根据 LifeContext、近期完成率和当天可用时间降为 1 个;长期提高默认负荷必须征得用户同意。
|
|
1102
|
+
|
|
1103
|
+
### 23.2 Main Quest
|
|
1104
|
+
|
|
1105
|
+
必须:
|
|
1106
|
+
|
|
1107
|
+
- 对 Active Goal / Current Stage 有明确推进价值。
|
|
1108
|
+
- 有完成标准。
|
|
1109
|
+
- 有预计耗时。
|
|
1110
|
+
- 尽量可在当天完成。
|
|
1111
|
+
- 若过大,Agent 应拆成当天可完成的一步。
|
|
1112
|
+
|
|
1113
|
+
### 23.3 Daily Action
|
|
1114
|
+
|
|
1115
|
+
Daily Action 用于用户已认可的生活方向,例如活动、家庭联系、阅读、整理、休息等。
|
|
1116
|
+
|
|
1117
|
+
禁止:
|
|
1118
|
+
|
|
1119
|
+
- AI 根据刻板的“健康人生模板”擅自给所有人添加运动/社交/家庭任务。
|
|
1120
|
+
- 因昨日 Daily 未完成而机械复制到今天。
|
|
1121
|
+
- 形成跨天债务。
|
|
1122
|
+
|
|
1123
|
+
### 23.4 午夜/第二自然日 Rollover
|
|
1124
|
+
|
|
1125
|
+
当检测到日期从 D1 进入 D2:
|
|
1126
|
+
|
|
1127
|
+
1. D1 未完成 `DAILY` → `EXPIRED`。
|
|
1128
|
+
2. 取消 D1 Daily 未触发 Reminder。
|
|
1129
|
+
3. D1 Daily 不进入 D2 待办。
|
|
1130
|
+
4. Planner 可以根据 D2 情况重新创建一个相似但全新的 Action;必须有新 ID。
|
|
1131
|
+
5. D1 未完成 `MAIN` → `PENDING_REPLAN`。
|
|
1132
|
+
6. Replanner 判断:继续、拆分、降难度、顺延或调整 Stage。
|
|
1133
|
+
7. 若 Stage 延误影响后续计划,应重算阶段窗口。
|
|
1134
|
+
8. 大幅改变最终 Goal Deadline 前必须确认。
|
|
1135
|
+
|
|
1136
|
+
必须用自动化测试覆盖跨午夜行为。
|
|
1137
|
+
|
|
1138
|
+
## 24. Reminder / Notification 策略
|
|
1139
|
+
|
|
1140
|
+
提醒不是固定闹钟列表,而是 `AdaptiveReminderPolicy`。
|
|
1141
|
+
|
|
1142
|
+
最低规则:
|
|
1143
|
+
|
|
1144
|
+
- 每个 Action 可有 0~N 个 Reminder。
|
|
1145
|
+
- Reminder 与 Action 生命周期绑定。
|
|
1146
|
+
- Action 更新/过期/取消时 Reminder 同步更新。
|
|
1147
|
+
- 不允许无限催促。
|
|
1148
|
+
- 默认每个普通 Daily Action 最多 1 次主动提醒;Main 可按用户确认策略设置合理提醒。
|
|
1149
|
+
- 记录提醒触发时间与用户响应,用于未来调整推荐时间。
|
|
1150
|
+
- 若系统不知道合适时间,Daily Planning 时询问用户一次,保存偏好。
|
|
1151
|
+
- 支持用户关闭某类提醒或全部提醒。
|
|
1152
|
+
|
|
1153
|
+
V1 优先实现 macOS 本地通知;Notification Adapter 必须可替换。
|
|
1154
|
+
|
|
1155
|
+
## 25. 首页 / Today UX
|
|
1156
|
+
|
|
1157
|
+
UI 不应首先呈现“欠了多少任务”,而应 `Progress First, Tasks Second`。
|
|
1158
|
+
|
|
1159
|
+
建议 Today 页:
|
|
1160
|
+
|
|
1161
|
+
```text
|
|
1162
|
+
当前主线:30 天掌握 Agent Engineering
|
|
1163
|
+
Current Stage: Memory (Stage 3 / 6)
|
|
1164
|
+
|
|
1165
|
+
最近进展
|
|
1166
|
+
✓ Tool Calling Demo
|
|
1167
|
+
✓ MCP Tool 实际应用
|
|
1168
|
+
● 正在进入 Memory 阶段
|
|
1169
|
+
|
|
1170
|
+
今天最重要的一步
|
|
1171
|
+
🔥 Main Quest
|
|
1172
|
+
实现最小 Agent Memory Demo
|
|
1173
|
+
预计 60 min
|
|
1174
|
+
完成标准:...
|
|
1175
|
+
|
|
1176
|
+
Daily
|
|
1177
|
+
○ 散步 30 min
|
|
1178
|
+
○ ...
|
|
1179
|
+
```
|
|
1180
|
+
|
|
1181
|
+
禁止用没有可信计算依据的“72% 掌握度”。阶段进度优先显示 `Stage 3 / 6`、完成节点和 Evidence。
|
|
1182
|
+
|
|
1183
|
+
## 26. Passport 最终结构
|
|
1184
|
+
|
|
1185
|
+
Passport 是压缩状态,不得无限膨胀。
|
|
1186
|
+
|
|
1187
|
+
建议:
|
|
1188
|
+
|
|
1189
|
+
```ts
|
|
1190
|
+
interface Passport {
|
|
1191
|
+
schemaVersion: string;
|
|
1192
|
+
generatedAt: string;
|
|
1193
|
+
identity: {
|
|
1194
|
+
displayName?: string;
|
|
1195
|
+
stablePreferences: string[];
|
|
1196
|
+
};
|
|
1197
|
+
currentState: {
|
|
1198
|
+
currentChapter?: string;
|
|
1199
|
+
activeGoals: PassportGoalSummary[];
|
|
1200
|
+
lifeContext?: string;
|
|
1201
|
+
currentFocus: string[];
|
|
1202
|
+
};
|
|
1203
|
+
capabilities: PassportCapabilityEvidence[];
|
|
1204
|
+
recentGrowth: PassportGrowthSummary[];
|
|
1205
|
+
planningHints: string[];
|
|
1206
|
+
}
|
|
1207
|
+
```
|
|
1208
|
+
|
|
1209
|
+
原则:
|
|
1210
|
+
|
|
1211
|
+
- 只放 Agent 接手当前用户真正需要的压缩信息。
|
|
1212
|
+
- 完整历史保留在 Growth DB。
|
|
1213
|
+
- Passport 必须可由 DB + Memory 重建。
|
|
1214
|
+
- 同步失败不得破坏本地 Source of Truth。
|
|
1215
|
+
- Sync Adapter 必须隔离外部 AI Passport API 细节。
|
|
1216
|
+
|
|
1217
|
+
## 27. Agent Handoff Protocol
|
|
1218
|
+
|
|
1219
|
+
V1 必须做到:另一个兼容 Agent 只要读取 Skill 并连接 MCP,就能判断当前该做什么。
|
|
1220
|
+
|
|
1221
|
+
`growth_status()` 最少返回:
|
|
1222
|
+
|
|
1223
|
+
```json
|
|
1224
|
+
{
|
|
1225
|
+
"onboarding": "COMPLETED",
|
|
1226
|
+
"activeGoalCount": 1,
|
|
1227
|
+
"currentStage": "Memory",
|
|
1228
|
+
"todayPlanStatus": "NOT_CREATED",
|
|
1229
|
+
"pendingReplan": true,
|
|
1230
|
+
"lifeContext": "NORMAL",
|
|
1231
|
+
"passportLastUpdatedAt": "...",
|
|
1232
|
+
"suggestedNextOperation": "RUN_DAILY_PLANNING"
|
|
1233
|
+
}
|
|
1234
|
+
```
|
|
1235
|
+
|
|
1236
|
+
Skill 必须明确:
|
|
1237
|
+
|
|
1238
|
+
1. 无 Profile → 主动 Interview。
|
|
1239
|
+
2. Interview 未完成 → 继续,不重复从头问。
|
|
1240
|
+
3. 无 Active Goal → 与人讨论 Goal。
|
|
1241
|
+
4. 有 Goal 无今日计划 → Daily Planning。
|
|
1242
|
+
5. 有 Pending Replan → 先 Replan。
|
|
1243
|
+
6. 用户正在做 Main → 优先帮助完成,而不是另开新任务。
|
|
1244
|
+
7. Agent 观察到有效成果 → 提议/自动记录合适 Evidence。
|
|
1245
|
+
8. 交互结束前,若状态有变化 → 持久化并触发 Passport Sync。
|
|
1246
|
+
|
|
1247
|
+
## 28. 推荐数据库实体
|
|
1248
|
+
|
|
1249
|
+
至少实现:
|
|
1250
|
+
|
|
1251
|
+
- `profiles`
|
|
1252
|
+
- `directions`
|
|
1253
|
+
- `goals`
|
|
1254
|
+
- `stages`
|
|
1255
|
+
- `daily_plans`
|
|
1256
|
+
- `actions`
|
|
1257
|
+
- `task_feedback`
|
|
1258
|
+
- `evidence`
|
|
1259
|
+
- `growth_events`
|
|
1260
|
+
- `life_contexts`
|
|
1261
|
+
- `reminders`
|
|
1262
|
+
- `memories`
|
|
1263
|
+
- `passport_snapshots`
|
|
1264
|
+
- `sync_jobs`
|
|
1265
|
+
- `settings`
|
|
1266
|
+
|
|
1267
|
+
所有表必须有 migration。时间统一存 ISO timestamp;“哪一天”的判断必须基于配置的本地 timezone,而不是 UTC 日期直接截断。
|
|
1268
|
+
|
|
1269
|
+
## 29. 可靠性要求
|
|
1270
|
+
|
|
1271
|
+
### 29.1 Local-first
|
|
1272
|
+
|
|
1273
|
+
- 无网络时 Core / DB / Today / Rollover 仍可工作。
|
|
1274
|
+
- AI 调用不可用时,不得损坏状态。
|
|
1275
|
+
- 外部 Passport 同步失败进入重试队列。
|
|
1276
|
+
|
|
1277
|
+
### 29.2 Idempotency
|
|
1278
|
+
|
|
1279
|
+
以下操作必须幂等:
|
|
1280
|
+
|
|
1281
|
+
- Daily Rollover。
|
|
1282
|
+
- Passport Sync Job 创建。
|
|
1283
|
+
- Reminder Cancel。
|
|
1284
|
+
- 同一天重复启动 Agent。
|
|
1285
|
+
- Daemon 重启恢复。
|
|
1286
|
+
|
|
1287
|
+
### 29.3 审计
|
|
1288
|
+
|
|
1289
|
+
对关键 AI 修改记录最小 Audit:
|
|
1290
|
+
|
|
1291
|
+
- 谁/什么触发。
|
|
1292
|
+
- 修改前后。
|
|
1293
|
+
- 原因。
|
|
1294
|
+
- 时间。
|
|
1295
|
+
|
|
1296
|
+
用户应能知道“为什么这个任务被改了”。
|
|
1297
|
+
|
|
1298
|
+
## 30. 指标:验证 AI 是否越来越懂用户
|
|
1299
|
+
|
|
1300
|
+
V1 本地统计即可,不需要上传分析平台。
|
|
1301
|
+
|
|
1302
|
+
至少计算:
|
|
1303
|
+
|
|
1304
|
+
### Accepted Suggestion Rate
|
|
1305
|
+
|
|
1306
|
+
AI 初次提出的 Action 中,未经实质修改就被用户接受的比例。
|
|
1307
|
+
|
|
1308
|
+
### Completion Rate
|
|
1309
|
+
|
|
1310
|
+
按 MAIN / DAILY 分开统计。
|
|
1311
|
+
|
|
1312
|
+
### Replan Rate
|
|
1313
|
+
|
|
1314
|
+
Main Quest 需要重排的频率。
|
|
1315
|
+
|
|
1316
|
+
### Modification Rate
|
|
1317
|
+
|
|
1318
|
+
用户修改 AI 建议的频率。
|
|
1319
|
+
|
|
1320
|
+
### Skip / Feedback Distribution
|
|
1321
|
+
|
|
1322
|
+
为什么用户拒绝。
|
|
1323
|
+
|
|
1324
|
+
### Reminder Response
|
|
1325
|
+
|
|
1326
|
+
不同提醒时段的响应情况。
|
|
1327
|
+
|
|
1328
|
+
这些指标用于 Planner 改善,不得变成给用户打分的“自律分”。
|
|
1329
|
+
|
|
1330
|
+
## 31. 明早可用的强制交付物
|
|
1331
|
+
|
|
1332
|
+
Coding Agent 完成后,仓库必须至少包含:
|
|
1333
|
+
|
|
1334
|
+
```text
|
|
1335
|
+
README.md
|
|
1336
|
+
IMPLEMENTATION_PLAN.md
|
|
1337
|
+
PRODUCT_SPEC.md # 可复制本文档或保留链接
|
|
1338
|
+
SKILL.md
|
|
1339
|
+
.env.example
|
|
1340
|
+
package.json
|
|
1341
|
+
src/
|
|
1342
|
+
core/
|
|
1343
|
+
db/
|
|
1344
|
+
mcp/
|
|
1345
|
+
planner/
|
|
1346
|
+
reminder/
|
|
1347
|
+
passport/
|
|
1348
|
+
daemon/
|
|
1349
|
+
api/
|
|
1350
|
+
ui/ # 若采用独立前端可调整目录
|
|
1351
|
+
scripts/
|
|
1352
|
+
install.sh
|
|
1353
|
+
uninstall.sh
|
|
1354
|
+
doctor.sh
|
|
1355
|
+
reset-dev-data.sh
|
|
1356
|
+
tests/
|
|
1357
|
+
unit/
|
|
1358
|
+
integration/
|
|
1359
|
+
e2e/
|
|
1360
|
+
launchd/ # macOS plist/template
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
并且必须提供一条尽量简单的安装路径,例如:
|
|
1364
|
+
|
|
1365
|
+
```bash
|
|
1366
|
+
./scripts/install.sh
|
|
1367
|
+
```
|
|
1368
|
+
|
|
1369
|
+
安装脚本至少完成:
|
|
1370
|
+
|
|
1371
|
+
1. 检查 Node/包管理器依赖。
|
|
1372
|
+
2. 安装依赖。
|
|
1373
|
+
3. 初始化 DB / migration。
|
|
1374
|
+
4. 安装/生成 daemon 配置。
|
|
1375
|
+
5. 启动服务。
|
|
1376
|
+
6. 输出 MCP 配置片段或自动安装到目标 Agent(若安全且明确可做)。
|
|
1377
|
+
7. 输出 Skill 安装/引用方式。
|
|
1378
|
+
8. 运行 `doctor` 验证。
|
|
1379
|
+
|
|
1380
|
+
不得要求用户每次重启电脑后手工 `npm run mcp`。
|
|
1381
|
+
|
|
1382
|
+
## 32. Claude Coding Agent 执行要求
|
|
1383
|
+
|
|
1384
|
+
收到本文档后,Claude 应:
|
|
1385
|
+
|
|
1386
|
+
1. 先读取完整 SPEC。
|
|
1387
|
+
2. 生成 `IMPLEMENTATION_PLAN.md`,列出阶段、依赖和验收项。
|
|
1388
|
+
3. 检查当前仓库已有代码;有旧实现则优先迁移,不盲目重写。
|
|
1389
|
+
4. 先实现 DB Schema + migration + Core 状态机。
|
|
1390
|
+
5. 然后实现 Daily Rollover / Replan / Feedback / Evidence。
|
|
1391
|
+
6. 再实现 MCP + Skill 所需接口。
|
|
1392
|
+
7. 再实现 Daemon + Reminder。
|
|
1393
|
+
8. 再实现 Passport + UI。
|
|
1394
|
+
9. 编写测试,不得只手工点通。
|
|
1395
|
+
10. 运行 lint/typecheck/test/build。
|
|
1396
|
+
11. 自己修复失败项。
|
|
1397
|
+
12. 运行端到端“首次用户 → 第二天 rollover”测试。
|
|
1398
|
+
13. 最终生成 `DELIVERY_REPORT.md`。
|
|
1399
|
+
14. 除非存在本文档无法决定的破坏性选择,否则不要每完成一步就等待用户确认;持续开发到验收通过。
|
|
1400
|
+
|
|
1401
|
+
不得以以下状态宣称完成:
|
|
1402
|
+
|
|
1403
|
+
- 只有 UI Mock。
|
|
1404
|
+
- MCP Tools 只有空实现。
|
|
1405
|
+
- Reminder 只写 TODO。
|
|
1406
|
+
- Passport 只生成静态 JSON。
|
|
1407
|
+
- 测试未运行。
|
|
1408
|
+
- 电脑重启后服务无法恢复。
|
|
1409
|
+
|
|
1410
|
+
## 33. 强制端到端验收场景
|
|
1411
|
+
|
|
1412
|
+
### Scenario A — 全新安装
|
|
1413
|
+
|
|
1414
|
+
Given:空 DB。
|
|
1415
|
+
|
|
1416
|
+
When:Agent 第一次加载 Skill。
|
|
1417
|
+
|
|
1418
|
+
Then:
|
|
1419
|
+
|
|
1420
|
+
- `growth_status` 告知需要 Onboarding。
|
|
1421
|
+
- Agent 主动开始自然语言 Interview。
|
|
1422
|
+
- 不得直接创建随机 Daily Tasks。
|
|
1423
|
+
|
|
1424
|
+
### Scenario B — 创建 30 天学习目标
|
|
1425
|
+
|
|
1426
|
+
用户说:“我想 30 天学会 Agent 开发。”
|
|
1427
|
+
|
|
1428
|
+
Then:
|
|
1429
|
+
|
|
1430
|
+
- Agent 追问目标程度、基础、时间、实践偏好。
|
|
1431
|
+
- 生成带 why / outcome / success criteria 的 Goal Draft。
|
|
1432
|
+
- 生成 Stage Plan,不生成固定 30 天每日任务表。
|
|
1433
|
+
- 用户确认后才 Active。
|
|
1434
|
+
|
|
1435
|
+
### Scenario C — 正常 Daily Planning
|
|
1436
|
+
|
|
1437
|
+
Given:Active Goal + Normal LifeContext。
|
|
1438
|
+
|
|
1439
|
+
Then:
|
|
1440
|
+
|
|
1441
|
+
- 创建 1 Main + 1~2 Daily(若上下文适合)。
|
|
1442
|
+
- Main 有完成标准和预计耗时。
|
|
1443
|
+
- Daily 来源可追溯到已确认方向。
|
|
1444
|
+
- 自动创建合理提醒。
|
|
1445
|
+
|
|
1446
|
+
### Scenario D — 用户认为任务不合理
|
|
1447
|
+
|
|
1448
|
+
用户:“这个任务太简单了,换一个。”
|
|
1449
|
+
|
|
1450
|
+
Then:
|
|
1451
|
+
|
|
1452
|
+
- 记录 Task Feedback。
|
|
1453
|
+
- AI 可自主替换执行层任务。
|
|
1454
|
+
- 新任务保持对 Goal 的推进价值。
|
|
1455
|
+
- 不要求重新确认整个 Goal。
|
|
1456
|
+
|
|
1457
|
+
### Scenario E — Daily 跨天未完成
|
|
1458
|
+
|
|
1459
|
+
Given:D1 Daily 未完成。
|
|
1460
|
+
|
|
1461
|
+
When:系统进入 D2。
|
|
1462
|
+
|
|
1463
|
+
Then:
|
|
1464
|
+
|
|
1465
|
+
- D1 Daily = EXPIRED。
|
|
1466
|
+
- D1 Reminder 取消。
|
|
1467
|
+
- D2 Today 不显示其为欠任务。
|
|
1468
|
+
- 若 Planner 仍认为同类行动合适,应创建新 ID 的 D2 Action。
|
|
1469
|
+
|
|
1470
|
+
### Scenario F — Main 跨天未完成
|
|
1471
|
+
|
|
1472
|
+
Given:D1 Main 未完成。
|
|
1473
|
+
|
|
1474
|
+
When:进入 D2。
|
|
1475
|
+
|
|
1476
|
+
Then:
|
|
1477
|
+
|
|
1478
|
+
- Main 进入 PENDING_REPLAN。
|
|
1479
|
+
- AI 根据原因和计划决定继续/拆分/延期。
|
|
1480
|
+
- 必要时移动后续 Stage。
|
|
1481
|
+
- 大幅延长最终 Deadline 前要求用户确认。
|
|
1482
|
+
|
|
1483
|
+
### Scenario G — Busy Week
|
|
1484
|
+
|
|
1485
|
+
用户:“这周工作很忙,每天最多 30 分钟。”
|
|
1486
|
+
|
|
1487
|
+
Then:
|
|
1488
|
+
|
|
1489
|
+
- 创建/更新临时 LifeContext。
|
|
1490
|
+
- Planner 降低负荷。
|
|
1491
|
+
- 不因为完成率下降而催促更多任务。
|
|
1492
|
+
- 到期后询问是否恢复。
|
|
1493
|
+
|
|
1494
|
+
### Scenario H — Evidence
|
|
1495
|
+
|
|
1496
|
+
用户在 Agent 中完成代码实现。
|
|
1497
|
+
|
|
1498
|
+
Then:
|
|
1499
|
+
|
|
1500
|
+
- Agent 能记录 Artifact/测试/Git 等 Evidence。
|
|
1501
|
+
- Evidence Strength 合理。
|
|
1502
|
+
- Timeline 形成 Growth Event。
|
|
1503
|
+
- Passport Recent Growth 可更新。
|
|
1504
|
+
|
|
1505
|
+
### Scenario I — Reminder 生命周期
|
|
1506
|
+
|
|
1507
|
+
修改、完成、取消、过期 Action 后:
|
|
1508
|
+
|
|
1509
|
+
- 旧 Reminder 不得继续触发。
|
|
1510
|
+
- Daemon 重启不得产生重复 Reminder。
|
|
1511
|
+
|
|
1512
|
+
### Scenario J — Agent Handoff
|
|
1513
|
+
|
|
1514
|
+
Given:已有 Profile / Goal / Stage / Yesterday Evidence。
|
|
1515
|
+
|
|
1516
|
+
When:一个新 Agent 读取 Skill 并连接 MCP。
|
|
1517
|
+
|
|
1518
|
+
Then:
|
|
1519
|
+
|
|
1520
|
+
- 不重新做 Onboarding。
|
|
1521
|
+
- 能读取当前状态。
|
|
1522
|
+
- 能说清当前 Stage / 今日是否已有 Plan / 是否需要 Replan。
|
|
1523
|
+
- 可以继续推进。
|
|
1524
|
+
|
|
1525
|
+
### Scenario K — Passport Sync Failure
|
|
1526
|
+
|
|
1527
|
+
Given:外部 AI Passport API 不可用。
|
|
1528
|
+
|
|
1529
|
+
Then:
|
|
1530
|
+
|
|
1531
|
+
- 本地状态正常提交。
|
|
1532
|
+
- Sync Job 记录失败并可重试。
|
|
1533
|
+
- 不回滚已完成 Action。
|
|
1534
|
+
|
|
1535
|
+
### Scenario L — 重启恢复
|
|
1536
|
+
|
|
1537
|
+
Given:服务正常安装。
|
|
1538
|
+
|
|
1539
|
+
When:模拟 daemon 重启/重新登录。
|
|
1540
|
+
|
|
1541
|
+
Then:
|
|
1542
|
+
|
|
1543
|
+
- DB 无损。
|
|
1544
|
+
- 服务自动恢复。
|
|
1545
|
+
- 不重复执行已完成 rollover。
|
|
1546
|
+
- MCP 重新可用。
|
|
1547
|
+
|
|
1548
|
+
## 34. 明早首次真实测试脚本
|
|
1549
|
+
|
|
1550
|
+
开发完成后,用户明早第一次真实使用建议只做以下流程,不要预填测试数据:
|
|
1551
|
+
|
|
1552
|
+
1. 打开常用 Agent。
|
|
1553
|
+
2. 让 Agent 加载 AI Growth Skill / 连接 MCP。
|
|
1554
|
+
3. Agent 应主动发现这是首次使用并开始 Interview。
|
|
1555
|
+
4. 用户用真实目标回答,不配合“测试答案”。
|
|
1556
|
+
5. 观察 Agent 是否能形成合理 Goal Draft 和 Stage Plan。
|
|
1557
|
+
6. 确认后生成真实 Day 1 Plan。
|
|
1558
|
+
7. 检查任务数量是否让人愿意做,而不是“功能展示”。
|
|
1559
|
+
8. 对至少一个任务故意提出修改,测试 Feedback + Replan。
|
|
1560
|
+
9. 完成一个真实任务,检查 Evidence / Timeline / Passport。
|
|
1561
|
+
10. 保留一个非关键 Daily 不完成,用于第二天验证 EXPIRED。
|
|
1562
|
+
|
|
1563
|
+
第一天重点不是测试所有按钮,而是回答:
|
|
1564
|
+
|
|
1565
|
+
> “如果我完全不维护 Todo,只和 Agent 沟通,我愿不愿意让它继续替我维护计划?”
|
|
1566
|
+
|
|
1567
|
+
## 35. 7 天 Beta 观察问题
|
|
1568
|
+
|
|
1569
|
+
每天结束记录极短反馈:
|
|
1570
|
+
|
|
1571
|
+
- 今天 AI 给的 Main Quest 是不是“我确实该做的下一步”?
|
|
1572
|
+
- 哪个任务我改了?为什么?
|
|
1573
|
+
- 有没有觉得 AI 在管教我?
|
|
1574
|
+
- 有没有任务太多?
|
|
1575
|
+
- 提醒烦不烦?
|
|
1576
|
+
- 我是否感受到 Goal 在推进?证据是什么?
|
|
1577
|
+
- 今天我有没有为了维护系统本身额外花很多时间?
|
|
1578
|
+
|
|
1579
|
+
第 7 天根据真实数据再决定是否增加 Knowledge Map / Quiz Engine / RPG / Human Version 等 V2 能力。
|
|
1580
|
+
|
|
1581
|
+
## 36. Definition of Done(最终完成标准)
|
|
1582
|
+
|
|
1583
|
+
V1.1 只有在以下全部满足时才算完成:
|
|
1584
|
+
|
|
1585
|
+
### Product
|
|
1586
|
+
|
|
1587
|
+
- [ ] 首次 Agent 自动访谈。
|
|
1588
|
+
- [ ] Goal 经沟通和确认建立,并包含 why/outcome/success criteria。
|
|
1589
|
+
- [ ] Stage Plan 可动态调整。
|
|
1590
|
+
- [ ] Daily Plan 默认 1 Main + 1~2 Daily,且负荷可动态变化。
|
|
1591
|
+
- [ ] Task 可修改、拒绝、反馈。
|
|
1592
|
+
- [ ] Daily 第二天自动 EXPIRED,不形成债务。
|
|
1593
|
+
- [ ] Main 未完成会 Replan。
|
|
1594
|
+
- [ ] LifeContext 会影响规划。
|
|
1595
|
+
- [ ] Evidence 可记录且区分强度。
|
|
1596
|
+
- [ ] Timeline 能看到真实进展。
|
|
1597
|
+
- [ ] Passport 可生成并同步/重试。
|
|
1598
|
+
- [ ] Reminder 随 Action 生命周期更新。
|
|
1599
|
+
|
|
1600
|
+
### Agent-native
|
|
1601
|
+
|
|
1602
|
+
- [ ] SKILL.md 足以让新 Agent 判断下一步。
|
|
1603
|
+
- [ ] MCP Tool 有真实实现。
|
|
1604
|
+
- [ ] Agent Handoff 测试通过。
|
|
1605
|
+
- [ ] 不要求用户每次重复解释 Goal。
|
|
1606
|
+
|
|
1607
|
+
### Reliability
|
|
1608
|
+
|
|
1609
|
+
- [ ] SQLite migration 正常。
|
|
1610
|
+
- [ ] Rollover 幂等。
|
|
1611
|
+
- [ ] Daemon 重启恢复。
|
|
1612
|
+
- [ ] macOS 登录/重启后可自动运行。
|
|
1613
|
+
- [ ] Reminder 不重复。
|
|
1614
|
+
- [ ] Passport 外部同步失败不影响本地提交。
|
|
1615
|
+
|
|
1616
|
+
### Engineering
|
|
1617
|
+
|
|
1618
|
+
- [ ] Typecheck 通过。
|
|
1619
|
+
- [ ] Lint 通过。
|
|
1620
|
+
- [ ] Unit tests 通过。
|
|
1621
|
+
- [ ] Integration tests 通过。
|
|
1622
|
+
- [ ] 关键 E2E 场景通过。
|
|
1623
|
+
- [ ] Production build 通过。
|
|
1624
|
+
- [ ] `doctor.sh` 通过。
|
|
1625
|
+
- [ ] README 包含安装、启动、Agent 接入、卸载、故障排查。
|
|
1626
|
+
|
|
1627
|
+
### UX
|
|
1628
|
+
|
|
1629
|
+
- [ ] 新用户无需阅读数据库/MCP 文档即可开始。
|
|
1630
|
+
- [ ] Today 页面 Progress First。
|
|
1631
|
+
- [ ] 用户可以用自然语言完成/修改/跳过任务。
|
|
1632
|
+
- [ ] 不使用虚假成长分数。
|
|
1633
|
+
- [ ] AI 能解释任务为何出现以及为何被调整。
|
|
1634
|
+
|
|
1635
|
+
## 37. 最终 DELIVERY_REPORT.md 必须包含
|
|
1636
|
+
|
|
1637
|
+
Claude 完成开发后必须输出:
|
|
1638
|
+
|
|
1639
|
+
```markdown
|
|
1640
|
+
# Delivery Report
|
|
1641
|
+
|
|
1642
|
+
## Implemented
|
|
1643
|
+
- ...
|
|
1644
|
+
|
|
1645
|
+
## Architecture
|
|
1646
|
+
- ...
|
|
1647
|
+
|
|
1648
|
+
## How to Install
|
|
1649
|
+
- exact commands
|
|
1650
|
+
|
|
1651
|
+
## How to Connect Agent
|
|
1652
|
+
- exact Skill/MCP steps
|
|
1653
|
+
|
|
1654
|
+
## How to Start First Real Use
|
|
1655
|
+
- exact steps
|
|
1656
|
+
|
|
1657
|
+
## Tests
|
|
1658
|
+
- unit: pass/fail
|
|
1659
|
+
- integration: pass/fail
|
|
1660
|
+
- e2e: pass/fail
|
|
1661
|
+
- build: pass/fail
|
|
1662
|
+
|
|
1663
|
+
## macOS Auto-start
|
|
1664
|
+
- installed path
|
|
1665
|
+
- status command
|
|
1666
|
+
|
|
1667
|
+
## Data Location
|
|
1668
|
+
- DB path
|
|
1669
|
+
- logs path
|
|
1670
|
+
- config path
|
|
1671
|
+
|
|
1672
|
+
## Passport Sync
|
|
1673
|
+
- implemented adapter
|
|
1674
|
+
- configuration required
|
|
1675
|
+
|
|
1676
|
+
## Known Limitations
|
|
1677
|
+
- only real remaining limitations; no hidden TODOs
|
|
1678
|
+
|
|
1679
|
+
## Tomorrow Morning Checklist
|
|
1680
|
+
- 1...
|
|
1681
|
+
- 2...
|
|
1682
|
+
```
|
|
1683
|
+
|
|
1684
|
+
## 38. 最终指令给 Coding Agent
|
|
1685
|
+
|
|
1686
|
+
> 你不是在制作一个演示 Demo,而是在制作一个用户明天早上会开始真实使用的本地个人成长系统。优先保证核心闭环、状态一致性、跨天逻辑、Agent 接入和恢复能力。不要为了展示功能而生成大量任务。不要用虚构分数替代成长证据。不要让用户成为系统的管理员。系统应该替用户维护计划,而不是要求用户维护系统。
|
|
1687
|
+
>
|
|
1688
|
+
> 在实现过程中,若本文档已经给出明确规则,直接执行,不要重复询问。若某个外部集成(例如现有 AI Passport API)缺少必要接口信息,请实现清晰的 Adapter、Mock/Local implementation 和配置入口,使其不阻塞其余 V1 验收,并在 DELIVERY_REPORT 中准确列出需要用户补充的唯一信息。
|
|
1689
|
+
|
|
1690
|
+
---
|
|
1691
|
+
|
|
1692
|
+
# 附录 A:建议 MCP Tool Contract(V1)
|
|
1693
|
+
|
|
1694
|
+
至少提供:
|
|
1695
|
+
|
|
1696
|
+
- `growth_status()`
|
|
1697
|
+
- `get_profile()`
|
|
1698
|
+
- `update_profile_patch()`
|
|
1699
|
+
- `get_active_goals()`
|
|
1700
|
+
- `create_goal_draft()`
|
|
1701
|
+
- `confirm_goal()`
|
|
1702
|
+
- `update_goal()`
|
|
1703
|
+
- `get_current_stage()`
|
|
1704
|
+
- `get_today_plan()`
|
|
1705
|
+
- `plan_today()`
|
|
1706
|
+
- `replan()`
|
|
1707
|
+
- `create_action()`
|
|
1708
|
+
- `update_action()`
|
|
1709
|
+
- `complete_action()`
|
|
1710
|
+
- `skip_action()`
|
|
1711
|
+
- `add_task_feedback()`
|
|
1712
|
+
- `add_evidence()`
|
|
1713
|
+
- `get_recent_growth()`
|
|
1714
|
+
- `set_life_context()`
|
|
1715
|
+
- `get_life_context()`
|
|
1716
|
+
- `create_or_update_reminder()`
|
|
1717
|
+
- `cancel_reminder()`
|
|
1718
|
+
- `run_daily_rollover()`
|
|
1719
|
+
- `generate_passport()`
|
|
1720
|
+
- `sync_passport()`
|
|
1721
|
+
- `get_passport()`
|
|
1722
|
+
|
|
1723
|
+
Tool 返回结构统一:
|
|
1724
|
+
|
|
1725
|
+
```ts
|
|
1726
|
+
interface ToolResult<T> {
|
|
1727
|
+
ok: boolean;
|
|
1728
|
+
data?: T;
|
|
1729
|
+
error?: {
|
|
1730
|
+
code: string;
|
|
1731
|
+
message: string;
|
|
1732
|
+
retryable?: boolean;
|
|
1733
|
+
};
|
|
1734
|
+
suggestedNextOperation?: string;
|
|
1735
|
+
}
|
|
1736
|
+
```
|
|
1737
|
+
|
|
1738
|
+
Tool 应尽量 deterministic;需要 LLM 判断的规划逻辑可以由 Skill 驱动 Agent 调用 Core primitives,或封装 Planner Provider,但必须保证 Core 状态规则不依赖模型“记得遵守”。
|
|
1739
|
+
|
|
1740
|
+
# 附录 B:状态机最低要求
|
|
1741
|
+
|
|
1742
|
+
Action:
|
|
1743
|
+
|
|
1744
|
+
```text
|
|
1745
|
+
DRAFT
|
|
1746
|
+
↓
|
|
1747
|
+
PLANNED
|
|
1748
|
+
↓
|
|
1749
|
+
ACTIVE
|
|
1750
|
+
├──→ COMPLETED
|
|
1751
|
+
├──→ SKIPPED
|
|
1752
|
+
├──→ CANCELLED
|
|
1753
|
+
├──→ EXPIRED # DAILY only
|
|
1754
|
+
└──→ PENDING_REPLAN # MAIN mainly
|
|
1755
|
+
```
|
|
1756
|
+
|
|
1757
|
+
Goal:
|
|
1758
|
+
|
|
1759
|
+
```text
|
|
1760
|
+
DRAFT → CONFIRMED → ACTIVE
|
|
1761
|
+
├→ PAUSED → ACTIVE
|
|
1762
|
+
├→ COMPLETED
|
|
1763
|
+
└→ ABANDONED (human confirm)
|
|
1764
|
+
```
|
|
1765
|
+
|
|
1766
|
+
不得允许非法状态转换静默发生。
|
|
1767
|
+
|
|
1768
|
+
# 附录 C:数据与隐私默认原则
|
|
1769
|
+
|
|
1770
|
+
- 默认 Local-first。
|
|
1771
|
+
- 不把完整个人 Growth DB 自动发送到外部 Passport。
|
|
1772
|
+
- Passport 只同步压缩后的必要字段。
|
|
1773
|
+
- 日志不得默认打印完整敏感 Profile/Memory。
|
|
1774
|
+
- 提供清晰的数据目录和备份方式。
|
|
1775
|
+
- 删除/重置测试数据必须有显式脚本,不得误删用户真实数据。
|
|
1776
|
+
|