@lumoai/cli 1.25.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/assets/skill/SKILL.md +21 -7
  2. package/assets/skill/references/artifacts-figma.md +1 -1
  3. package/assets/skill/references/criteria.md +10 -9
  4. package/assets/skill/references/docs.md +5 -5
  5. package/assets/skill/references/milestones.md +6 -6
  6. package/assets/skill/references/sessions.md +30 -30
  7. package/assets/skill/references/sprints.md +6 -6
  8. package/assets/skill/references/task-context.md +5 -5
  9. package/assets/skill/references/tasks.md +37 -15
  10. package/assets/skill/references/verify.md +3 -3
  11. package/dist/cli/src/commands/doc-list.js +4 -0
  12. package/dist/cli/src/commands/memory-promote.js +11 -4
  13. package/dist/cli/src/commands/memory-rm.js +1 -1
  14. package/dist/cli/src/commands/milestone-show.js +1 -1
  15. package/dist/cli/src/commands/next.js +1 -1
  16. package/dist/cli/src/commands/session-attach.js +5 -4
  17. package/dist/cli/src/commands/task-artifact-add.js +2 -2
  18. package/dist/cli/src/commands/task-criteria-set.js +3 -3
  19. package/dist/cli/src/commands/task-deps.js +12 -12
  20. package/dist/cli/src/commands/verify.js +1 -1
  21. package/dist/cli/src/commands/wrap/blocked-prompt-section.js +9 -9
  22. package/dist/cli/src/commands/wrap/fragment-usage-section.js +6 -6
  23. package/dist/cli/src/commands/wrap/memory-review-section.js +6 -6
  24. package/dist/cli/src/commands/wrap/progress-comment-section.js +11 -11
  25. package/dist/cli/src/index.js +7 -2
  26. package/dist/cli/src/lib/doc-input.js +10 -1
  27. package/dist/cli/src/lib/hook-runner.js +9 -9
  28. package/dist/cli/src/lib/wrap-panel.js +1 -1
  29. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lumo
3
- description: 'Use the Lumo CLI to load task context, manage session bindings, and run tasks / projects / milestones / sprints / docs / memory from the terminal. Activate when: the user mentions a Lumo task identifier (LUM-42 etc.), asks to load task background/context, wants to bind/check/detach a Claude Code session''s task, is about to start work on a task, or wants to create/update/list/show/comment on tasks, projects, milestones, sprints, documents, artifacts, Figma links, or memory. Triggers on: "LUM-", "task context", "load context", "session start", "session attach", "session status", "session detach", "which task", "what task am I on", "work on LUM", "session wrap", "wrap up session", "进度评论", "卡住检测", "fragment usage vote", "mark used fragments", "which fragments did I use", "--used", "上下文使用投票", "标记用过的记忆", "create task", "new task", "file a task", "list tasks", "my tasks", "show task", "view task", "comment on task", "update task", "change task status", "rename task", "reassign task", "mark task as done", "lumo next", "next task", "what should I work on", "推荐下一个任务", "list projects", "what projects", "milestone", "里程碑", "list/create/update/delete/show milestone", "set milestone", "attach/unbind milestone", "tasks in milestone", "search milestones", "find milestone", "milestone health", "at-risk", "overdue", "archive/unarchive milestone", "归档里程碑", "milestone summary", "里程碑复盘", "reorder/move milestone", "排序里程碑", "milestone add/remove", "挂任务到里程碑", "auth login", "log in", "logout", "sign out", "switch account", "whoami", "who am I", "current workspace", "登录", "切换账号", "create/update/list/show/delete doc", "write doc", "写文档", "新建文档", "修改文档", "查看文档", "bind/unbind doc", "把文档关联到任务", "doc scope", "personal/workspace doc", "tag", "add/remove tag", "标签", "share/unshare doc", "分享文档", "doc share-list", "viewer/editor/manager", "doc tree", "doc move", "move/reparent doc", "移动文档", "sprint", "冲刺", "迭代", "create/list/show/update/delete sprint", "start/close sprint", "开始/关闭冲刺", "add to sprint", "active sprints", "sprint summary", "冲刺总结", "把任务挂到冲刺", "sprint health", "sprint risk", "is this sprint at risk", "冲刺风险", "冲刺健康度", "sprint blockers", "冲刺阻塞", "lumo update", "upgrade lumo", "升级 lumo", "new lumo version", "lumo setup", "install lumo skill/hooks", "wire up lumo", "set up lumo", "安装 lumo", "配置 lumo", "task artifact", "artifact add/list/show/update/rm", "spec artifact", "record/attach spec", "attach plan", "记录 spec", "查看 artifact", figma, attach figma, figma link, 关联 figma, 设计稿, figma design, "memory", "记忆", "remember", "record a memory", "记一条", "promote memory", "promote to project", "沉淀", "task/project memory", "retrieval", "取全文", "拉全文", "task slack show", "看 thread", "show slack thread", "task web show", "web 正文", "task figma context", "figma metadata", "task comments list", "list comments", "看评论", "task pr show", "查看 PR", "show pr", "PR 详情", "task deps", "dependency", "dependencies", "依赖", "依赖边", "blocked by", "blocker", "confirm dependency", "dismiss dependency", "确认依赖", "忽略依赖", "import google doc", "sync google doc", "google drive", "doc import-gdoc", "doc sync", "导入/同步 google 文档", "mark blocked", "blocked tag", "标记 blocked", "stuck", "repeatedly failing", "worktree", "git worktree", "并行 worktree", "scaffold worktree", "新建 worktree", "node_modules 软链", "worktree 隔离", "lumo worktree add/rm/list", "task criteria", "criteria set", "criteria list", "acceptance criteria", "验收标准", "验收合约", "draft criteria", "草拟验收", "definition of done", "lumo verify", "verify task", "machine verification", "verification round", "机器验收", "自验", "验收轮", "claim done", "宣称完成", "--cause", "contract drift", "合约漂移", "task status", "acceptance status", "验收进度", "验收状态", "verification history", "验收历史", "next actions", "还差什么", "unmet criteria", "未满足", "resume task", "恢复任务", "被打回", "current round", "第几轮", "task lineage", "lineage", "causal trail", "审计", "因果链", "成本归因", "trace context", "--signal", "usage signal health", "auto usage audit", "自动使用审计", "signal-health".'
3
+ description: 'Use the Lumo CLI to work with Lumo (project management for dev teams) from the terminal: load task context, bind/wrap Claude Code sessions, and create/update/list/show/comment on tasks, projects, milestones, sprints, documents, artifacts, Figma links, dependencies, and team memory plus acceptance criteria, machine verification (verify / task status), lineage audit, worktree scaffolding, and CLI setup/auth/update. Activate when the user mentions a Lumo task identifier (LUM-N) or the lumo CLI, in any language; asks to load task background or bind/check/wrap a session; manages any of the resources above in Lumo; is starting, resuming, or about to claim completion of a task; or asks what to work on next. Key triggers: "LUM-", "lumo", "task context", "session attach", "session wrap", "verify", "task status", "acceptance criteria", "milestone", "sprint", "docs", "memory", "deps", "lineage", "worktree", "design link", "what should I work on", "resume task".'
4
4
  ---
5
5
 
6
6
  ## Prerequisites
@@ -26,7 +26,7 @@ The command catalog below is a **map**: it lists every command grouped by domain
26
26
  | `task create/update/list/show/comment`, `next` | [references/tasks.md](references/tasks.md) |
27
27
  | `task artifact*`, `task figma*` | [references/artifacts-figma.md](references/artifacts-figma.md) |
28
28
  | `task criteria set/list`, drafting the acceptance contract | [references/criteria.md](references/criteria.md) |
29
- | `verify`, `task status` — machine verification loop, claim-done flow, 自查/恢复 | [references/verify.md](references/verify.md) |
29
+ | `verify`, `task status` — machine verification loop, claim-done flow, self-check/resume | [references/verify.md](references/verify.md) |
30
30
  | `project list`, `milestone*` | [references/milestones.md](references/milestones.md) |
31
31
  | `doc*` | [references/docs.md](references/docs.md) |
32
32
  | `sprint*` | [references/sprints.md](references/sprints.md) |
@@ -64,19 +64,19 @@ The command catalog below is a **map**: it lists every command grouped by domain
64
64
 
65
65
  **Task dependencies**
66
66
 
67
- - `lumo task deps list <id>` — list dependency edges in both directions, grouped CONFIRMED / SUGGESTED(待确认) / DISMISSED; each row shows a short edge id `[xxxxxxxx]`, the other task, and detected evidence (`shared_files(N 个共享文件: …)` / `task_mention(…)`); SUGGESTED rows include a copy-pasteable confirm hint
67
+ - `lumo task deps list <id>` — list dependency edges in both directions, grouped CONFIRMED / SUGGESTED (pending confirmation) / DISMISSED; each row shows a short edge id `[xxxxxxxx]`, the other task, and detected evidence (`shared_files(N shared files: …)` / `task_mention(…)`); SUGGESTED rows include a copy-pasteable confirm hint
68
68
  - `lumo task deps add <id> --blocked-by <LUM-N>` — declare a manual hard dependency (created CONFIRMED, source MANUAL; if a SUGGESTED/DISMISSED edge already exists in the same direction, it is confirmed in place rather than creating a new row)
69
69
  - `lumo task deps confirm <id> <edge> [--reverse]` — confirm a detected candidate; `<edge>` is a short edge-id prefix (≥6 chars) or the other task's identifier (case-insensitive); `--reverse` flips the direction when the detector guessed it backwards
70
70
  - `lumo task deps dismiss <id> <edge>` — dismiss a candidate (never re-suggested)
71
71
  - `lumo task deps rm <id> <edge> --yes` — delete an edge (refuses without `--yes`)
72
72
  - On an ambiguous/unknown `<edge>` selector the CLI prints all candidates with short ids and exits 1 — retry with one of them
73
73
 
74
- **Acceptance criteria(验收合约)** — see [criteria.md](references/criteria.md)
74
+ **Acceptance criteria (contract)** — see [criteria.md](references/criteria.md)
75
75
 
76
76
  - `lumo task criteria set <task> --file <criteria.json> [--human] [--cause <tag>]` — submit the whole contract: default = initial agent draft (AGENT_DRAFT, locked once submitted); `--human` = a HUMAN_EDIT revision transcribed from the conversation (desired final list; items with `id` keep/update, missing ones are deleted); `--cause` (with `--human`) annotates why the contract drifted: `NEW_INFO | SCOPE_CHANGE | DRAFT_BLIND_SPOT | GRANULARITY | OTHER`
77
77
  - `lumo task criteria list <task>` — print the contract (id, MACHINE/HUMAN, provenance source@round, checkpointer)
78
78
 
79
- **Verification(机器验收循环)** — see [verify.md](references/verify.md)
79
+ **Verification (machine acceptance loop)** — see [verify.md](references/verify.md)
80
80
 
81
81
  - `lumo verify [task] [--timeout <seconds>]` — run every MACHINE criterion's checkpointer locally, report one structured PASS/FAIL verdict per criterion to the server, print next actions. Defaults to the session-bound task. Round cap 3: an all-pass round moves the task to IN_REVIEW (agent stops there); a round-3 fail escalates to a human (stop retrying). **Run this before claiming a task is done.**
82
82
  - `lumo task status [task] [--json]` — read-only acceptance self-check (no LLM, milliseconds): the contract with each criterion's latest verdict (REVIEW_ADDED provenance visible), verification history, current round, last round's failure reasons, and `nextActions` = the unmet criteria (the declarative "what's next" — no separate plan). Defaults to the session-bound task; `--json` emits a versioned payload (`version` field). **Run it first when resuming a task in a new session or after a verification round was rejected.**
@@ -128,6 +128,20 @@ The command catalog below is a **map**: it lists every command grouped by domain
128
128
  - `lumo worktree rm <LUM-N> --yes` — remove a worktree (keeps the branch unless `--delete-branch`)
129
129
  - `lumo worktree list` — list `.worktrees/` worktrees (task id, branch, dirty, node_modules link)
130
130
 
131
+ ## Commands & flags that do NOT exist (common mistakes)
132
+
133
+ Measured from real agent sessions (LUM-392) — don't guess these:
134
+
135
+ - No `lumo session start` — binding is `lumo session attach <LUM-N>`
136
+ - No `lumo task delete` — tasks can't be deleted from the CLI (web UI only)
137
+ - No `lumo task artifact edit` — it's `lumo task artifact update`
138
+ - No `lumo auth status` — identity check is `lumo whoami`
139
+ - No `--body` on `lumo task comment` — the body is a positional arg: `lumo task comment LUM-N "text"`
140
+ - No `--content` on `task/project memory add` — memory is structured fields (`--category` + per-category flags), see [memory.md](references/memory.md)
141
+ - No global `--verbose` flag on any command
142
+ - `lumo task comments list` (plural) **reads** the thread; `lumo task comment` (singular) **writes** one
143
+ - Status updates: `lumo task update LUM-N --status done` is one direct call — do **not** walk `in_progress → in_review → done` step by step (see [tasks.md](references/tasks.md) for the transition matrix; under the verify flow you shouldn't be setting `in_review`/`done` yourself at all)
144
+
131
145
  ## Core workflow
132
146
 
133
147
  Typical flow when a user says "help me with LUM-42":
@@ -135,10 +149,10 @@ Typical flow when a user says "help me with LUM-42":
135
149
  1. `lumo session attach LUM-42` — bind this session
136
150
  2. `lumo task context LUM-42` — load background
137
151
  3. Review unresolved items, PR-review todos, and the task description
138
- 4. **If the task has no acceptance criteria** (context shows the 草拟提醒 instead of a contract): draft 3–7 outcome-level criteria and submit them with `lumo task criteria set` **before writing the first line of code** — see [criteria.md](references/criteria.md) for the drafting guide
152
+ 4. **If the task has no acceptance criteria** (context shows the draft reminder instead of a contract): draft 3–7 outcome-level criteria and submit them with `lumo task criteria set` **before writing the first line of code** — see [criteria.md](references/criteria.md) for the drafting guide
139
153
  5. Begin working on the task
140
154
  6. **Before claiming the work is done: run `lumo verify`** — the machine half of the acceptance loop. Fix failures and re-run (round cap 3). On all-pass the task moves to IN_REVIEW and you stop; never set DONE yourself after a verify loop — that adjudication is human-only. See [verify.md](references/verify.md)
141
155
 
142
156
  **Status-first recovery:** when you pick a task back up — a new session resuming earlier work, or a task that came back after a rejected verification round / review findings — run `lumo task status` **before** re-reading code or planning. It tells you where the loop stands (current round, what passed, what's unmet and why, any REVIEW_ADDED criteria appended during review) so you don't redo finished work or miss the reason it bounced. See [verify.md](references/verify.md)
143
157
 
144
- **Git-suggest at start:** when the session is unbound, session-start may infer the task from the git branch / recent commits and print a suggestion — `检测到 LUM-N 运行 lumo session attach LUM-N 绑定。` — **without** binding. Confirm it's the right task, then run `lumo session attach <LUM-N>` yourself (binding only happens on an explicit attach). See [sessions.md](references/sessions.md) for the full session-start behavior.
158
+ **Git-suggest at start:** when the session is unbound, session-start may infer the task from the git branch / recent commits and print a suggestion — `Detected LUM-N (from branch name). Run lumo session attach LUM-N to bind.` (or `from recent commits`) — **without** binding. Confirm it's the right task, then run `lumo session attach <LUM-N>` yourself (binding only happens on an explicit attach). See [sessions.md](references/sessions.md) for the full session-start behavior.
@@ -2,7 +2,7 @@
2
2
 
3
3
  ### Task ↔ Spec Artifacts
4
4
 
5
- Record Claude Code spec-engineering products (spec / plan / design …) on a task. The artifacts show up in the task detail "规格" (definition) layer and are injected into `lumo task context`.
5
+ Record Claude Code spec-engineering products (spec / plan / design …) on a task. The artifacts show up in the task detail definition ("spec") layer and are injected into `lumo task context`.
6
6
 
7
7
  #### `lumo task artifact add <task> --kind <kind> --title <title> --file <path> --source <source> --agent <agent>`
8
8
 
@@ -1,16 +1,17 @@
1
- # Acceptance criteria(验收合约)
1
+ # Acceptance criteria (contract)
2
2
 
3
3
  The acceptance contract is a small set of structured criteria the task's work
4
4
  will be verified against (Acceptance v1, LUM-341/342). The agent drafts it;
5
5
  the server validates and stores it; verification rounds (`lumo verify`,
6
- Slice 1 任务 ) judge against it. Criteria are injected at session start and
7
- in `lumo task context` as the `## 验收标准(合约)` section.
6
+ Slice 1 task #3) judge against it. Criteria are injected at session start and
7
+ in `lumo task context` as the `## Acceptance criteria (contract)` section.
8
8
 
9
9
  ## When to draft — the golden rule
10
10
 
11
11
  **Attach → read context → draft criteria → THEN write the first line of code.**
12
12
 
13
- If `lumo task context` / session-start shows 该任务尚无验收标准 instead of a
13
+ If `lumo task context` / session-start shows the draft reminder ("This task
14
+ has no acceptance criteria yet. …") instead of a
14
15
  contract, you MUST draft and submit criteria before starting implementation:
15
16
 
16
17
  1. Read the task description, comments, linked resources, and memory first —
@@ -38,7 +39,7 @@ to-do list you trim to fit what you built.
38
39
  - `MACHINE` = an executable check exists. It **must** carry a `checkpointer`
39
40
  (the runnable check: a test command, script, probe…). The checkpointer
40
41
  runs on the agent's machine; the structured verdict is reported back to
41
- the server (执行在客户端,裁判在服务端).
42
+ the server (execution on the client, adjudication on the server).
42
43
  - `HUMAN` = needs human judgment (UX feel, copy tone, design fidelity).
43
44
  - **If you can't attach a checkpointer to a MACHINE criterion, demote it to
44
45
  HUMAN** — the server rejects checkpointer-less MACHINE criteria rather
@@ -97,7 +98,7 @@ time, even after the agent lock. The file is the **desired final list**:
97
98
  - existing criteria missing from the file are **deleted** — refused with 409
98
99
  if the criterion already has verification runs (reword it instead)
99
100
 
100
- The revision is auto-recorded as a task comment with the session 出处
101
+ The revision is auto-recorded as a task comment with the session origin
101
102
  (`X-Lumo-Session-Id`). **Transcribing the contract is allowed; transcribing a
102
103
  verdict is never** — human verdicts only enter through human-initiated paths
103
104
  (web UI / Slack action), and the agent has no write path to them.
@@ -123,10 +124,10 @@ before a `--human` revision. Empty contract prints a drafting pointer.
123
124
 
124
125
  - **Session start** (bound task): the contract is the highest-priority
125
126
  section in the injection budget — ahead of memory/PR/Slack/Figma/web. If a
126
- still-open task has no criteria, a 草拟提醒 is injected instead.
127
- - **`lumo session attach`**: prints the contract (or the 草拟提醒) right after
127
+ still-open task has no criteria, the draft reminder is injected instead.
128
+ - **`lumo session attach`**: prints the contract (or the draft reminder) right after
128
129
  binding.
129
- - **`lumo task context`**: the `## 验收标准(合约)` section appears after the
130
+ - **`lumo task context`**: the `## Acceptance criteria (contract)` section appears after the
130
131
  task description, before memory.
131
132
  - Review-time gap findings (`REVIEW_ADDED`, appended at the round they
132
133
  surface) arrive via the verification loop, not via `criteria set`.
@@ -42,7 +42,7 @@ The `Tags:` line is omitted when no tags were attached.
42
42
 
43
43
  ### When to suggest `doc create`
44
44
 
45
- - User says "write a doc", "起一篇 RFC", "新建文档", or describes a deliverable that should live as a document.
45
+ - User says "write a doc", "draft an RFC", "new document" (in any language), or describes a deliverable that should live as a document.
46
46
  - After a discussion that needs a write-up, offer to create the doc with a title and the right scope.
47
47
 
48
48
  ### `lumo doc update <doc> [flags]` — update a document
@@ -156,7 +156,7 @@ Moved cmd_xxx "Sub-doc" → root
156
156
 
157
157
  ### When to suggest `doc move`
158
158
 
159
- - User says "move doc X under Y", "把文档 X 挂到 Y 下", "reparent X to root", "promote X to top level".
159
+ - User says "move doc X under Y", "reparent X to root", "promote X to top level".
160
160
  - After `doc create`, if the user realizes the new doc should live elsewhere in the tree — suggest `doc move` rather than recreating.
161
161
 
162
162
  ### `lumo doc delete <doc> --yes` — delete a document
@@ -232,7 +232,7 @@ lumo doc share-list "RFC"
232
232
 
233
233
  ### When to suggest the doc share commands
234
234
 
235
- - User says "share doc X with Y", "give Y access to X", "把文档分享给 Y"
235
+ - User says "share doc X with Y", "give Y access to X"
236
236
  - After `doc create --scope personal`, if the user mentions teammates needing access, suggest `doc share` rather than `doc update --scope workspace` when only specific members should see it
237
237
  - Before `doc unshare`, run `doc share-list` if the user hasn't named a specific member
238
238
 
@@ -266,7 +266,7 @@ The `Bound ... ↔ LUM-N` line appears only when `--task` is supplied.
266
266
 
267
267
  ### When to suggest `doc import-gdoc`
268
268
 
269
- - User pastes a Google Doc URL or says "import this Google Doc", "pull this gdoc into Lumo", "把这篇 Google 文档导入".
269
+ - User pastes a Google Doc URL or says "import this Google Doc", "pull this gdoc into Lumo".
270
270
  - User wants a Google Doc tracked alongside Lumo tasks/docs — suggest import (with `--task LUM-N` if a task is in context) and remind them about the over-share semantics for `--scope workspace`.
271
271
 
272
272
  ### `lumo doc sync <doc>` — re-sync an imported doc from Google
@@ -290,7 +290,7 @@ Synced cmd_xxx "Quarterly Plan" from Google
290
290
 
291
291
  ### When to suggest `doc sync`
292
292
 
293
- - User says "re-sync the Google Doc", "pull the latest from Google", "refresh the imported doc", "更新一下从 Google 导入的文档".
293
+ - User says "re-sync the Google Doc", "pull the latest from Google", "refresh the imported doc".
294
294
  - After the user mentions the Google Doc changed upstream. Warn first that local Lumo edits to that doc will be overwritten (one-way, destructive).
295
295
 
296
296
  ### Out of scope (CLI v1)
@@ -45,7 +45,7 @@ lumo milestone list --all --search launch # search across archived + non-archi
45
45
 
46
46
  - Before suggesting `task create --milestone <ref>` or `task update --milestone <ref>` to confirm the milestone exists under the expected name.
47
47
  - When the user asks "what milestones do we have", "what's on v1.0", or similar.
48
- - When the user wants to **find/search milestones by keyword** ("find the launch milestone", "搜索里程碑", "which milestones mention X") — use `--search <text>` rather than listing all and eyeballing.
48
+ - When the user wants to **find/search milestones by keyword** ("find the launch milestone", "which milestones mention X") — use `--search <text>` rather than listing all and eyeballing.
49
49
 
50
50
  When to suggest: before `task create --project <ref>` when the workspace has more than one project and the user hasn't specified which one.
51
51
 
@@ -75,7 +75,7 @@ Prints a key:value header (name, status, **health**, dates, project, description
75
75
 
76
76
  It also prints a **Sprint coverage** section (above the task table) listing which
77
77
  sprints the milestone's tasks span — each row shows the sprint number, status, name,
78
- and `done/total` progress — plus an `未排期` line counting milestone tasks not in any
78
+ and `done/total` progress — plus an `Unscheduled` line counting milestone tasks not in any
79
79
  sprint (shown only when there are any). The section is derived from the milestone's
80
80
  tasks (no schema relation), so it needs no extra flags. When no task is in any sprint
81
81
  it prints `Sprint coverage: (no sprint coverage)`.
@@ -86,7 +86,7 @@ Example coverage section:
86
86
  Sprint coverage:
87
87
  #3 ACTIVE Sprint 3 4/6 done
88
88
  #4 DRAFT Sprint 4 0/2 done
89
- 未排期 1 task
89
+ Unscheduled 1 task
90
90
  ```
91
91
 
92
92
  ```bash
@@ -176,7 +176,7 @@ Q3 Launch: 1 removed, 1 skipped
176
176
 
177
177
  ### When to suggest `milestone add` / `milestone remove`
178
178
 
179
- - The user wants to attach/detach **several** tasks to a milestone at once ("挂这几个任务到 Q3", " LUM-1 LUM-2 LUM-3 都放进里程碑", "remove these from the milestone"). For a single task, `task update --milestone <ref>` (or `--milestone ""` to clear) is equally fine.
179
+ - The user wants to attach/detach **several** tasks to a milestone at once ("attach these tasks to Q3", "put LUM-1 LUM-2 LUM-3 into the milestone", "remove these from the milestone"). For a single task, `task update --milestone <ref>` (or `--milestone ""` to clear) is equally fine.
180
180
  - `remove` only clears the binding for tasks actually in the named milestone, so it's safe to pass a broad list — anything not in it is reported as skipped, not clobbered.
181
181
  - For one-at-a-time sprint binding see `lumo sprint add / remove` (sprint batch is not yet supported).
182
182
 
@@ -197,7 +197,7 @@ lumo milestone summary "Q3 Launch" --retry
197
197
  lumo milestone summary 11111111-2222-3333-4444-555555555555
198
198
  ```
199
199
 
200
- When to suggest: user asks "summarize the milestone", "milestone retro", "give me a summary of the Q3 milestone", "里程碑总结", "里程碑复盘".
200
+ When to suggest: user asks "summarize the milestone", "milestone retro", "give me a summary of the Q3 milestone".
201
201
 
202
202
  ### `lumo milestone reorder <ref...> [--project <ref>]` — set the full milestone order
203
203
 
@@ -241,4 +241,4 @@ Both commands resolve to a full ordered list client-side and call the same `PATC
241
241
 
242
242
  **Ambiguous names:** milestone names are not unique within a project (only the slug is). A ref whose name matches more than one milestone is **rejected** with an `ambiguous milestone name … re-run with the id` error listing the candidate cuids — pass the cuid instead. This applies to every name-based milestone ref (`reorder`, `move`, and also `show` / `update` / `delete` / `summary` / `add` / `remove`).
243
243
 
244
- When to suggest: user asks to "reorder milestones", "排序里程碑", "调整里程碑顺序", "move milestone X before/after Y", "把里程碑 X 移到 Y 前面/后面", "put this milestone first".
244
+ When to suggest: user asks to "reorder milestones", "move milestone X before/after Y", "put this milestone first".
@@ -13,7 +13,8 @@ infer the task from local git so it can **suggest** one — it never binds for y
13
13
  `LUM-<n>`.
14
14
  - On a hit it prints a single suggestion line and stops — the session stays
15
15
  **unbound** and no context is injected yet:
16
- `检测到 LUM-145(依据分支名/最近 commit)。运行 lumo session attach LUM-145 绑定。`
16
+ `Detected LUM-145 (from branch name). Run lumo session attach LUM-145 to bind.`
17
+ (the basis reads `from recent commits` when the hit came from commit subjects instead of the branch name)
17
18
  No task title is shown here because nothing was fetched; the title, memory,
18
19
  and PR-review todos appear only once you actually attach.
19
20
  - No match (detached HEAD, a non-lumo branch with no tagged commits, not a git
@@ -27,7 +28,7 @@ just attach the correct task instead.
27
28
 
28
29
  ### Layer 2 project-memory review at session start
29
30
 
30
- When the session is bound, session-start may inject a **"🆕 待核对:上次会话自动合并的项目级记忆"** section alongside the memory / PR-review blocks (LUM-165). It lists the **PROJECT-scope** memories that the member's **immediately-preceding session** auto-consolidated (Layer 2 runs asynchronously when a task is marked `done`). Each item shows its `id`.
31
+ When the session is bound, session-start may inject a **"🆕 Review needed: project memories auto-consolidated by the previous session"** section alongside the memory / PR-review blocks (LUM-165). It lists the **PROJECT-scope** memories that the member's **immediately-preceding session** auto-consolidated (Layer 2 runs asynchronously when a task is marked `done`). Each item shows its `id`.
31
32
 
32
33
  - **Why it's here:** Layer 2 promotions land async, so they can't be reviewed in the synchronous `session wrap` panel — they're surfaced at the _next_ session-start instead, when they've definitely landed.
33
34
  - **Show-once:** the section appears only at the session that immediately follows the one that produced the memories. It does **not** re-nag on later sessions, so act on it now or it scrolls off.
@@ -45,31 +46,31 @@ When the bound task has live blockers or SUGGESTED dependency candidates, the at
45
46
 
46
47
  **Output form A — live blockers exist (with or without SUGGESTED candidates):**
47
48
 
48
- Starts with the `## ⚠ 依赖告警` header, followed by one line per live blocker, then the advice line. If there are also SUGGESTED candidates the candidate-hint line is appended after the advice line.
49
+ Starts with the `## ⚠ Dependency alerts` header, followed by one line per live blocker, then the advice line. If there are also SUGGESTED candidates the candidate-hint line is appended after the advice line.
49
50
 
50
51
  ```
51
- ## ⚠ 依赖告警
52
+ ## ⚠ Dependency alerts
52
53
 
53
- - 本任务被 LUM-9Fix auth token expiry」阻塞(状态 IN_PROGRESS)
54
- - 本任务被 LUM-15Upgrade Postgres driver」阻塞(状态 IN_REVIEW,PR #42 merge)
54
+ - This task is blocked by LUM-9 "Fix auth token expiry" (status IN_PROGRESS).
55
+ - This task is blocked by LUM-15 "Upgrade Postgres driver" (status IN_REVIEW, PR #42 not merged).
55
56
 
56
- 建议先等 blocker 合并再开工,避免白跑 run;如边已过时,用 `lumo task deps rm/dismiss` 清理。
57
- 检测到 3 条候选依赖待确认:运行 `lumo task deps list LUM-42`。
57
+ Consider waiting for the blocker(s) to merge before starting work to avoid a wasted run; if an edge is stale, clean it up with `lumo task deps rm/dismiss`.
58
+ Detected 3 candidate dependencies awaiting confirmation: run `lumo task deps list LUM-42`.
58
59
  ```
59
60
 
60
61
  **Output form B — NO live blockers, but SUGGESTED candidates exist:**
61
62
 
62
- Output is **only** the hint line — no `## ⚠ 依赖告警` header, no advice line. Design rationale: 纯候选是提示不是告警,不戴头,避免稀释真告警。
63
+ Output is **only** the hint line — no `## ⚠ Dependency alerts` header, no advice line. Design rationale: pure candidates are a hint, not an alert — they don't get the header, so real alerts aren't diluted.
63
64
 
64
65
  ```
65
- 检测到 3 条候选依赖待确认:运行 `lumo task deps list LUM-42`。
66
+ Detected 3 candidate dependencies awaiting confirmation: run `lumo task deps list LUM-42`.
66
67
  ```
67
68
 
68
- - Each blocker line shows: identifier, title, current status. If the blocking task has an open pull request, a `,PR #N` note is appended (no space after the comma) — `,PR #N (draft) merge` for draft PRs.
69
- - The guidance line ("建议先等 blocker 合并…") appears only when there is at least one live blocker (form A).
69
+ - Each blocker line shows: identifier, title, current status. If the blocking task has an open pull request, a `, PR #N not merged` note is appended — `, PR #N (draft) not merged` for draft PRs.
70
+ - The guidance line ("Consider waiting for the blocker(s) to merge…") appears only when there is at least one live blocker (form A).
70
71
  - The function never throws — if it fails it silently returns an empty string, leaving the session start unaffected.
71
72
 
72
- **Agent guidance — watch for EITHER the `## ⚠ 依赖告警` header (form A) OR the standalone hint line (form B):**
73
+ **Agent guidance — watch for EITHER the `## ⚠ Dependency alerts` header (form A) OR the standalone hint line (form B):**
73
74
  - **Form A — live blockers:** Evaluate whether to wait. If the blocking task's work overlaps with yours (same files, same API surface), starting immediately risks rework. Read the blocker's status and open PR note before deciding.
74
75
  - **Stale or wrong edge?** Run `lumo task deps list <LUM-N>` to inspect the full edge list, then `lumo task deps rm <LUM-N> <edge> --yes` (if manually added and now obsolete) or `lumo task deps dismiss <LUM-N> <edge>` (if a false positive from detection).
75
76
  - **Candidate hint present (form A or B)?** Run `lumo task deps list <LUM-N>` and review each SUGGESTED edge — confirm real ones, dismiss false positives. Leaving SUGGESTED edges unreviewed means repeated hints every session.
@@ -89,7 +90,7 @@ What it does:
89
90
  - Calls `POST /api/sessions/<session_id>/bind-task` on the Lumo server, which sets the Session row's `taskId` and re-tags previously-untagged HookEvent rows in this session.
90
91
  - The binding lives entirely on the server (`Session.taskId`); subsequent hooks read it back via the session row. The CLI keeps no local sentinel.
91
92
 
92
- - Prints the task's **验收标准(合约)** (acceptance contract, LUM-342) right after the bind confirmation — or, when a still-open task has none, the 草拟提醒 telling you to draft 3–7 criteria before the first line of code (see [criteria.md](criteria.md)). The same section is auto-injected at session start when the session is already bound (highest priority in the injection budget, ahead of memory).
93
+ - Prints the task's **acceptance contract** (`## Acceptance criteria (contract)`, LUM-342) right after the bind confirmation — or, when a still-open task has none, the draft reminder telling you to draft 3–7 criteria before the first line of code (see [criteria.md](criteria.md)). The same section is auto-injected at session start when the session is already bound (highest priority in the injection budget, ahead of memory).
93
94
 
94
95
  **After attaching, always run `lumo task context <identifier>` to load the task background.**
95
96
 
@@ -97,7 +98,7 @@ What it does:
97
98
 
98
99
  Re-attaching a session that's already bound to a **different** task no longer silently clobbers the binding. The server returns the current binding instead of overwriting, and the CLI decides what to do:
99
100
 
100
- - **On a TTY** (a human running it directly): prompts `已绑定 LUM-X,覆盖为 LUM-Y? [y/N]`. Answering `y`/`yes` re-binds to `LUM-Y`; anything else (including bare Enter) cancels and leaves `LUM-X` bound.
101
+ - **On a TTY** (a human running it directly): prompts `Already bound to LUM-X. Rebind to LUM-Y? [y/N]`. Answering `y`/`yes` re-binds to `LUM-Y`; anything else (including bare Enter) cancels and leaves `LUM-X` bound.
101
102
  - **Off a TTY** (the usual agent case — `stdin` is not interactive): the command **refuses** and prints `Session already bound to LUM-X … Re-run with --force …` without overwriting. Exit code is `0` (a safe refusal, not an error).
102
103
  - **`--force`**: skips the prompt/refusal and overwrites unconditionally. Re-attaching to the **same** task is always a no-op re-bind (never prompts).
103
104
 
@@ -136,25 +137,25 @@ When to suggest: the user wants to stop tagging the current session with the act
136
137
 
137
138
  Session-end wrap-up panel with **four sections, run in order**:
138
139
 
139
- **1. 进度评论** — reads back the current Claude Code session's per-turn
140
- `turnSummary` rows (the one-line Chinese summaries written each STOP), aggregates
140
+ **1. Progress comment** — reads back the current Claude Code session's per-turn
141
+ `turnSummary` rows (the one-line summaries written each STOP), aggregates
141
142
  every turn **since the last progress comment** into one bulleted body, and — after
142
- a `[y] 发送 / [e] 编辑 / [s] 跳过` confirmation — posts it as a comment on the
143
+ a `[y] post / [e] edit / [s] skip` confirmation — posts it as a comment on the
143
144
  session's bound task. A server-side watermark (`Session.lastProgressCommentAt`)
144
145
  means re-running never re-posts the same turns.
145
146
 
146
- **2. 记忆审阅** — lists the Layer1 memories this session sedimented since the
147
+ **2. Memory review** — lists the Layer1 memories this session sedimented since the
147
148
  last review (deduped by a per-session watermark `Session.lastMemoryReviewAt`).
148
149
  Each new memory is shown as `[SCOPE] CATEGORY headline`, numbered from 1. You
149
150
  curate with a single line: `d 1,3` deletes rows 1 and 3, `p 2` promotes row 2 to
150
- project scope, and they combine (`d 1,3 p 2`). **回车 (empty) keeps all**; `s`
151
- skips the section. Keeping all (回车 or `--yes`) still **advances the watermark**
151
+ project scope, and they combine (`d 1,3 p 2`). **Enter (empty) keeps all**; `s`
152
+ skips the section. Keeping all (Enter or `--yes`) still **advances the watermark**
152
153
  so the next wrap won't re-list reviewed memories; `s` leaves them for next time.
153
154
  Out-of-range indices are ignored. Deletes/promotes run server-side, scoped to
154
155
  memories this session created (you can't touch other sessions' memories through
155
- this panel). With no new memories the section prints "(无内容)" and does nothing.
156
+ this panel). With no new memories the section prints "(no content)" and does nothing.
156
157
 
157
- **3. 上下文使用投票 (fragment-usage vote, LUM-300)** — lists the context
158
+ **3. Fragment-usage vote (LUM-300)** — lists the context
158
159
  fragments this session **consumed** (its lineage edges: memory / slack / web /
159
160
  figma / PR / review-todo / session), numbered from 1 with a content snippet
160
161
  label. The agent records which it **actually used** via
@@ -166,13 +167,12 @@ candidates and writes nothing** (edges stay `null` = not voted — honest, not
166
167
  upgrades the flywheel signal from "co-loaded" (constant, no information) to
167
168
  "actually used" (varies → discriminative); `task context` then prefers each
168
169
  fragment's usage-based merge rate, falling back to the weaker presence rate when
169
- usage samples are thin. With no consumed fragments the section prints "(无内容)".
170
+ usage samples are thin. With no consumed fragments the section prints "(no content)".
170
171
 
171
- **4. 卡住检测 (blocked-tag prompt, LUM-153)** — if the **same kind of failure
172
+ **4. Blocked check (blocked-tag prompt, LUM-153)** — if the **same kind of failure
172
173
  recurred ≥ 3 times** in this session (server-aggregated from
173
174
  `POST_TOOL_USE_FAILURE` events grouped by tool name, plus `STOP_FAILURE`
174
- turn-level failures), the section surfaces the dominant failure (`卡在 <tool>
175
- (N 次失败)` + last error summary) and prompts `[y] 标记 / [s] 跳过` whether to
175
+ turn-level failures), the section surfaces the dominant failure (`This session looks repeatedly stuck on <tool> (N failures).` + last error summary) and prompts `[y] tag / [s] skip` whether to
176
176
  flag the bound task with a **`blocked` tag**. **Prompt-only — never auto-flips
177
177
  status.** It uses a plain tag (no `TaskStatus` enum, no board column, **no
178
178
  schema migration**). The prompt is **suppressed** when: there's no bound task,
@@ -183,7 +183,7 @@ opt-in), so a stray Enter never tags the task. Confirming with an explicit `y`
183
183
  attaches the tag idempotently. **`--yes` does NOT auto-tag** — tagging the
184
184
  shared board requires an interactive `y`, so `--yes` (and non-TTY) prints the
185
185
  suggestion and moves on rather than silently flipping board state. When there's
186
- nothing to prompt, the section prints "(无内容)".
186
+ nothing to prompt, the section prints "(no content)".
187
187
 
188
188
  ```bash
189
189
  lumo session wrap # interactive: preview each section, choose per-section
@@ -200,8 +200,8 @@ see the numbered fragment list, decide which you actually used, then re-run with
200
200
 
201
201
  - Requires `$CLAUDE_CODE_SESSION_ID` (must run inside Claude Code) and a bound
202
202
  task (`lumo session attach <LUM-N>` first). With no bound task or no new turn
203
- summaries, the 进度评论 section prints "(无内容)" and posts nothing.
204
- - `[e] 编辑` (进度评论) opens `$EDITOR` (fallback vi/nano) on the drafted body;
203
+ summaries, the Progress comment section prints "(no content)" and posts nothing.
204
+ - `[e] edit` (Progress comment) opens `$EDITOR` (fallback vi/nano) on the drafted body;
205
205
  the edited text is posted and the watermark still advances to the turns the
206
206
  draft covered.
207
207
  - `--yes` posts the progress comment AND keeps all memories (no
@@ -36,7 +36,7 @@ lumo sprint create --name "Sprint 4" --start 2026-06-01 --end 2026-06-14 --team
36
36
 
37
37
  On success: `Created sprint #<number> "<name>" <id>`.
38
38
 
39
- When to suggest: user says "create a sprint", "new sprint", "新建冲刺", "start a new iteration".
39
+ When to suggest: user says "create a sprint", "new sprint", "start a new iteration".
40
40
 
41
41
  ### `lumo sprint show <identifier> [--team <ref>]` — show sprint detail + task table
42
42
 
@@ -63,7 +63,7 @@ lumo sprint show 3 --team backend
63
63
  lumo sprint show 11111111-2222-3333-4444-555555555555
64
64
  ```
65
65
 
66
- When to suggest: user asks "what's in sprint 3", "show me the current sprint", "冲刺里有什么", "what tasks are in this sprint", "is this sprint at risk", "冲刺风险", "sprint health".
66
+ When to suggest: user asks "what's in sprint 3", "show me the current sprint", "what tasks are in this sprint", "is this sprint at risk", "sprint health".
67
67
 
68
68
  ### `lumo sprint update <identifier> [flags]` — patch a sprint
69
69
 
@@ -101,7 +101,7 @@ No additional flags. Fails if the sprint is already ACTIVE or CLOSED.
101
101
  lumo sprint start 3
102
102
  ```
103
103
 
104
- When to suggest: user says "start the sprint", "开始冲刺", "kick off sprint 3", "activate sprint".
104
+ When to suggest: user says "start the sprint", "kick off sprint 3", "activate sprint".
105
105
 
106
106
  ### `lumo sprint close <identifier> [flags]` — transition ACTIVE → CLOSED
107
107
 
@@ -119,7 +119,7 @@ lumo sprint close 3 --move-all --yes # move unfinished to next sprint
119
119
  lumo sprint close 3 --backlog-all --yes # send unfinished to backlog
120
120
  ```
121
121
 
122
- When to suggest: user says "close the sprint", "关闭冲刺", "end sprint 3", "wrap up the sprint". If they haven't decided what to do with unfinished tasks, ask before adding `--move-all` or `--backlog-all`.
122
+ When to suggest: user says "close the sprint", "end sprint 3", "wrap up the sprint". If they haven't decided what to do with unfinished tasks, ask before adding `--move-all` or `--backlog-all`.
123
123
 
124
124
  ### `lumo sprint summary <identifier> [--retry]` — fetch AI-generated sprint retro
125
125
 
@@ -134,7 +134,7 @@ lumo sprint summary 3
134
134
  lumo sprint summary 3 --retry
135
135
  ```
136
136
 
137
- When to suggest: user asks "summarize the sprint", "sprint retro", "give me a summary of sprint 3", "冲刺总结".
137
+ When to suggest: user asks "summarize the sprint", "sprint retro", "give me a summary of sprint 3".
138
138
 
139
139
  ### `lumo sprint add <identifier> <task>` — bind a task to a sprint
140
140
 
@@ -144,7 +144,7 @@ Adds `<task>` (e.g. `LUM-48`) to the sprint. Same-team check applies — the tas
144
144
  lumo sprint add 3 LUM-48
145
145
  ```
146
146
 
147
- When to suggest: user says "add LUM-48 to sprint 3", "把任务挂到冲刺", "put this task in the sprint".
147
+ When to suggest: user says "add LUM-48 to sprint 3", "put this task in the sprint".
148
148
 
149
149
  ### `lumo sprint remove <identifier> <task>` — unbind a task from a sprint
150
150
 
@@ -15,25 +15,25 @@ Example: `lumo task context LUM-42`
15
15
  The command prints a markdown document to stdout containing:
16
16
 
17
17
  1. **Task header** — identifier, title, status, description
18
- 2. **验收标准(合约)** — the task's acceptance criteria (LUM-342), shown right after the header. Each line: `[MACHINE|HUMAN] statement` with a `↳ check:` line for MACHINE checkpointers; HUMAN_EDIT / REVIEW_ADDED provenance is tagged inline. If a still-open task has none, a 草拟提醒 appears instead — draft 3–7 criteria **before writing code** (see [criteria.md](criteria.md))
18
+ 2. **Acceptance criteria (contract)** — the task's acceptance criteria (LUM-342), shown right after the header as the `## Acceptance criteria (contract)` section. Each line: `[MACHINE|HUMAN] statement` with a `↳ check:` line for MACHINE checkpointers; HUMAN_EDIT / REVIEW_ADDED provenance is tagged inline. If a still-open task has none, a draft reminder appears instead — draft 3–7 criteria **before writing code** (see [criteria.md](criteria.md))
19
19
  3. **Memory section** — cross-session learnings accumulated over prior sessions; treat as trusted background context
20
20
  4. **Inline source cards** — Slack / web / Figma / artifacts / documents / comments / Pull Requests (see "Context Retrieval" below)
21
- 5. **PR Review 待办** — mirrored PR review comments as a checkbox todo list: each line-level reviewer comment (shown as `` `file:line` `` + the reviewer's ask + a link to the GitHub comment) and each `changes_requested` review summary (shown as "🛑 整体要求改动"). Present only when the task's PR(s) have review comments. This same block is **auto-injected at session start** (alongside the memory section) when the session is bound to a task — so reviewer asks surface without re-running `task context`.
21
+ 5. **PR review todos** — mirrored PR review comments as a checkbox todo list under the `## PR review todos` header: each line-level reviewer comment (shown as `` `file:line` `` + the reviewer's ask + a link to the GitHub comment) and each `changes_requested` review summary (shown as "🛑 Changes requested (whole PR)"). Present only when the task's PR(s) have review comments. This same block is **auto-injected at session start** (alongside the memory section) when the session is bound to a task — so reviewer asks surface without re-running `task context`.
22
22
  - The **inline source cards** (Slack / web / Figma / PR) are likewise **auto-injected at session start** when the session is bound, under a single global token budget shared with the memory section (priority: criteria > memory > PR > Slack > Figma > web). Cards that don't fit the budget are degraded to a one-line manifest carrying just the title and its `lumo task … show` retrieval command — so you still know they exist and can pull the full content on demand.
23
23
  6. **Previous sessions** — ordered newest-first, each with:
24
24
  - A headline summary of what was done
25
25
  - Unresolved items (carry-over TODOs from that session)
26
- 7. **飞轮信号 · 历史 merge 贡献** — appended at the very end. For each context fragment with enough history, a one-line historical merge-contribution signal (e.g. `出现在 5 个已闭合任务·4 merged (80%)`), computed from accumulated lineage edges. Denominator = distinct tasks where the fragment appeared with a resolved (non-UNKNOWN) outcome; only fragments with ≥3 such tasks are shown (cold-start gate), so the block is often absent early on. This is **historical correlation, not causation** — don't read it as a prediction.
26
+ 7. **Flywheel signal · historical merge contribution** — appended at the very end as the `## Flywheel signal · historical merge contribution` section. For each context fragment with enough history, a one-line historical merge-contribution signal (e.g. `appeared in 5 resolved tasks · 4 merged (80%)`), computed from accumulated lineage edges. Denominator = distinct tasks where the fragment appeared with a resolved (non-UNKNOWN) outcome; only fragments with ≥3 such tasks are shown (cold-start gate), so the block is often absent early on. This is **historical correlation, not causation** — don't read it as a prediction.
27
27
 
28
28
  ### How to use the context
29
29
 
30
30
  - **Unresolved items** from the most recent session are the highest-priority carry-overs — address them before starting new work unless the user says otherwise
31
- - **PR Review 待办** items are reviewer-requested changes — treat each unchecked box as a TODO to resolve, then reply on the PR (a Lumo comment mirrors back to GitHub)
31
+ - **PR review todos** items are reviewer-requested changes — treat each unchecked box as a TODO to resolve, then reply on the PR (a Lumo comment mirrors back to GitHub)
32
32
  - **Memory section** provides validated context that persists across sessions — use it to avoid re-learning decisions or constraints
33
33
  - Focus on the **most recent 1–2 sessions** for relevant state; older sessions are for historical reference only
34
34
  - If there are **no prior sessions**, this is a fresh start — read the task description carefully and ask clarifying questions if needed
35
35
 
36
- ## Context Retrieval (按需取全文)
36
+ ## Context Retrieval (full text on demand)
37
37
 
38
38
  LUM-122 split task context injection into tiers. `lumo task context <LUM-N>`
39
39
  now emits a **cheap inline card** for each source — a short summary or just