helloagents 3.0.9-beta.1 → 3.0.10-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/README.md +16 -7
  5. package/README_CN.md +41 -32
  6. package/bootstrap-lite.md +18 -18
  7. package/bootstrap.md +22 -22
  8. package/gemini-extension.json +1 -1
  9. package/package.json +1 -1
  10. package/scripts/cli-codex-config.mjs +8 -2
  11. package/scripts/cli-codex.mjs +5 -3
  12. package/scripts/cli-lifecycle.mjs +11 -0
  13. package/scripts/cli-messages.mjs +3 -3
  14. package/scripts/cli-toml-values.mjs +25 -0
  15. package/scripts/cli-toml.mjs +15 -0
  16. package/scripts/guard.mjs +2 -2
  17. package/scripts/notify-context.mjs +7 -7
  18. package/scripts/notify-events.mjs +0 -8
  19. package/scripts/notify-gates.mjs +128 -0
  20. package/scripts/notify-ui.mjs +3 -0
  21. package/scripts/notify.mjs +44 -76
  22. package/scripts/project-storage.mjs +5 -5
  23. package/scripts/workflow-core.mjs +5 -5
  24. package/scripts/workflow-recommendation.mjs +4 -4
  25. package/scripts/workflow-state.mjs +1 -1
  26. package/skills/commands/auto/SKILL.md +13 -13
  27. package/skills/commands/build/SKILL.md +5 -5
  28. package/skills/commands/clean/SKILL.md +6 -6
  29. package/skills/commands/commit/SKILL.md +2 -2
  30. package/skills/commands/help/SKILL.md +2 -2
  31. package/skills/commands/idea/SKILL.md +5 -5
  32. package/skills/commands/init/SKILL.md +4 -4
  33. package/skills/commands/loop/SKILL.md +4 -4
  34. package/skills/commands/plan/SKILL.md +13 -13
  35. package/skills/commands/prd/SKILL.md +13 -13
  36. package/skills/commands/verify/SKILL.md +3 -3
  37. package/skills/commands/wiki/SKILL.md +5 -5
  38. package/skills/hello-subagent/SKILL.md +1 -1
  39. package/skills/hello-ui/SKILL.md +2 -2
  40. package/skills/helloagents/SKILL.md +3 -2
  41. package/templates/plans/contract.json +2 -2
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "helloagents",
11
11
  "description": "Quality-driven orchestration kernel for AI CLIs: intelligent routing, quality verification, safety guards, and notifications",
12
- "version": "3.0.9-beta.1",
12
+ "version": "3.0.10-beta.1",
13
13
  "source": "./",
14
14
  "author": {
15
15
  "name": "HelloWind",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.9-beta.1",
3
+ "version": "3.0.10-beta.1",
4
4
  "description": "HelloAGENTS — The orchestration kernel that makes any AI CLI smarter. Adds intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
5
5
  "author": {
6
6
  "name": "HelloWind",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.9-beta.1",
3
+ "version": "3.0.10-beta.1",
4
4
  "description": "HelloAGENTS — Quality-driven orchestration kernel for AI CLIs with intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
5
5
  "author": {
6
6
  "name": "HelloWind",
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  **Quality-driven workflow framework for AI coding CLIs — 14 auto-activated skills, process discipline, and checklist-based quality checks.**
10
10
 
11
- [![Version](https://img.shields.io/badge/version-3.0.9-orange.svg)](./package.json)
11
+ [![Version](https://img.shields.io/badge/version-3.0.10-orange.svg)](./package.json)
12
12
  [![npm](https://img.shields.io/npm/v/helloagents.svg)](https://www.npmjs.com/package/helloagents)
13
13
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933.svg)](./package.json)
14
14
  [![Skills](https://img.shields.io/badge/skills-14-6366f1.svg)](./skills)
@@ -95,7 +95,7 @@ HelloAGENTS fixes that. It's a workflow layer that sits on top of your AI CLI an
95
95
 
96
96
  If the last version you used seriously was `v2.3.8`, this is not a minor update. The current line is a full product-line reset.
97
97
 
98
- | Dimension | v2.3.8 | Local `v3.0.9` |
98
+ | Dimension | v2.3.8 | Local `v3.0.10` |
99
99
  |-----------|--------|----------------|
100
100
  | **Implementation base** | Python package plus mixed scripts/rules | Pure Node.js + Markdown runtime built around `cli.mjs`, `bootstrap*.md`, `skills/`, and `scripts/` |
101
101
  | **Product shape** | More like a multi-CLI management tool plus prompt protocol bundle | More like a quality workflow framework for AI CLIs, centered on routing, checks, verification, and resumable execution |
@@ -108,7 +108,7 @@ If the last version you used seriously was `v2.3.8`, this is not a minor update.
108
108
  | **KB storage** | Project-local only | Project-local by default, plus `project_store_mode=repo-shared` for sharing stable KB/plan assets across git worktrees |
109
109
  | **Codex integration** | Earlier compatibility layers and legacy paths | Standby = injected rules + local links; global = native local-plugin chain with less noise and drift |
110
110
 
111
- In one sentence: `v2.3.8` was closer to "workflow glue for multiple CLIs"; `v3.0.9` is a workflow framework that unifies quality rules, plan files, verification records, and installation lifecycle into one operating model.
111
+ In one sentence: `v2.3.8` was closer to "workflow glue for multiple CLIs"; `v3.0.10` is a workflow framework that unifies quality rules, plan files, verification records, and installation lifecycle into one operating model.
112
112
 
113
113
  ## ✨ Core Features
114
114
 
@@ -499,9 +499,9 @@ After every task, Ralph Loop auto-runs your project's verification commands:
499
499
 
500
500
  `~wiki` creates or syncs the project knowledge base only. `~init` is the fuller bootstrap: it also writes project-level rule files (`AGENTS.md`, `CLAUDE.md`, `.gemini/GEMINI.md`), refreshes host-native project skill links, and appends the related ignore rules. In standby mode, the presence of the local `.helloagents/` is what promotes the current project into the full project workflow; project-level rule files are optional.
501
501
 
502
- By default, KB and plan files live in the project's local `.helloagents/`. The active recovery snapshot now has a single authoritative path: `state_path`. When the host exposes a stable conversation/session identifier, HelloAGENTS writes it to `.helloagents/sessions/<branch>/<session>/STATE.md`; otherwise it uses the branch default slot at `.helloagents/sessions/<branch>/default/STATE.md`. If `project_store_mode = "repo-shared"`, the local `.helloagents/` directory keeps the activation signal, session-scoped `STATE.md`, and runtime files such as `.ralph-*`, while `context.md`, `guidelines.md`, `DESIGN.md`, `verify.yaml`, `modules/`, `plans/`, and `archive/` move to `~/.helloagents/projects/<repo-key>/` so multiple worktrees of the same git repo can share stable project memory.
502
+ By default, KB and plan files live in the project's local `.helloagents/`. The state file uses the path provided by `state_path`. When the host exposes a stable conversation/session identifier, HelloAGENTS writes it to `.helloagents/sessions/<branch>/<session>/STATE.md`; otherwise it uses the branch default path at `.helloagents/sessions/<branch>/default/STATE.md`. If `project_store_mode = "repo-shared"`, the local `.helloagents/` directory keeps the activation signal, session-scoped `STATE.md`, and runtime files such as `.ralph-*`, while `context.md`, `guidelines.md`, `DESIGN.md`, `verify.yaml`, `modules/`, `plans/`, and `archive/` move to `~/.helloagents/projects/<repo-key>/` so multiple worktrees of the same git repo can share stable project memory.
503
503
 
504
- `STATE.md` is the active recovery snapshot resolved from `state_path`, not a universal memory file for every interaction. Its branch + session layout prevents concurrent conversations on the same repo from fighting over one shared file. It is created and continuously updated for long-running project workflows such as `~wiki`, `~init`, `~plan`, `~build`, `~auto`, `~prd`, and `~loop`; updated when already present for verification/review style tasks; and intentionally not created for one-off read-only interactions such as `~help`.
504
+ `STATE.md` is the current state file resolved from `state_path`, not a universal memory file for every interaction. Its branch + session layout prevents concurrent conversations on the same repo from fighting over one shared file. It is created and continuously updated for long-running project workflows such as `~wiki`, `~init`, `~plan`, `~build`, `~auto`, `~prd`, and `~loop`; updated when already present for verification/review style tasks; and intentionally not created for one-off read-only interactions such as `~help`.
505
505
 
506
506
  | File | Purpose |
507
507
  |------|---------|
@@ -718,10 +718,19 @@ Subagents may skip workflow packaging such as routing, interaction flow, and out
718
718
 
719
719
  ## 📈 Version History
720
720
 
721
- ### v3.0.9 (current)
721
+ ### v3.0.10 (current)
722
+
723
+ **Fixes and verification since `v3.0.9beta`:**
724
+ - 🔧 Codex managed `notify` entries now carry an explicit marker, so cleanup can distinguish HelloAGENTS config from user-owned `notify` commands that also use `codex-notify`
725
+ - 🔧 Codex cleanup now preserves multiline user `notify` arrays and restores them without corrupting surrounding TOML sections
726
+ - 🔧 `notify_level=0` now suppresses warning and confirmation notifications as well as completion notifications, keeping the documented "off" behavior consistent
727
+ - 🔧 Restored `hello-ui` guidance after confirming OpenAI's public skill guidance recommends keeping `SKILL.md` under about 500 lines rather than enforcing a 200-line limit
728
+ - 🧪 Added regressions for Codex `notify` preservation, multiline TOML handling, and notification-level gating
729
+
730
+ ### v3.0.9
722
731
 
723
732
  **Fixes and verification:**
724
- - 🔧 Claude Code / Gemini CLI `stop` delivery gating now prioritizes structured `turn-state` instead of inferring completion from natural-language text, so ordinary waiting turns no longer get misclassified as finished delivery
733
+ - 🔧 Claude Code / Gemini CLI `stop` delivery gating now only accepts structured `turn-state` for completion, so ordinary waiting turns no longer get misclassified as finished delivery
725
734
  - 🔧 Codex cleanup now preserves user-owned post-install replacements for `model_instructions_file`, `notify`, and non-managed `codex_hooks` instead of restoring stale pre-install values over them
726
735
  - 🧪 Added lifecycle/runtime regressions for structured `stop` gating and Codex config preservation after post-install user edits
727
736
 
package/README_CN.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  **质量驱动的 AI 编码 CLI 工作流框架 — 14 个自动激活技能、流程纪律、检查清单把关。**
10
10
 
11
- [![Version](https://img.shields.io/badge/version-3.0.9-orange.svg)](./package.json)
11
+ [![Version](https://img.shields.io/badge/version-3.0.10-orange.svg)](./package.json)
12
12
  [![npm](https://img.shields.io/npm/v/helloagents.svg)](https://www.npmjs.com/package/helloagents)
13
13
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933.svg)](./package.json)
14
14
  [![Skills](https://img.shields.io/badge/skills-14-6366f1.svg)](./skills)
@@ -36,7 +36,7 @@
36
36
  - [🆚 相比 v2.3.8 的变化](#-相比-v238-的变化)
37
37
  - [✨ 核心特性](#-核心特性)
38
38
  - [🚀 快速开始](#-快速开始)
39
- - [🔄 安装链路与文件写入](#-安装链路与文件写入)
39
+ - [🔄 安装流程与文件写入](#-安装流程与文件写入)
40
40
  - [📖 命令](#-命令)
41
41
  - [🔧 配置](#-配置)
42
42
  - [⚙️ 工作原理](#️-工作原理)
@@ -95,7 +95,7 @@ HelloAGENTS 就是为了解决这个问题。它是一个编排层,装在你
95
95
 
96
96
  如果你上一次认真使用 HelloAGENTS 还是 `v2.3.8`,这一代的变化不是“增量补丁”,而是整条产品线重构。
97
97
 
98
- | 维度 | v2.3.8 | 本地 `v3.0.9` |
98
+ | 维度 | v2.3.8 | 本地 `v3.0.10` |
99
99
  |------|--------|---------------|
100
100
  | **底层实现** | Python 包 + 大量脚本/规则混合 | 纯 Node.js + Markdown 运行时,围绕 `cli.mjs`、`bootstrap*.md`、`skills/`、`scripts/` 重建 |
101
101
  | **目标定位** | 更像多 CLI 管理工具 + 提示协议集合 | 更像 AI CLI 的质量工作流框架,重点是路由、把关、验证和可恢复执行 |
@@ -106,9 +106,9 @@ HelloAGENTS 就是为了解决这个问题。它是一个编排层,装在你
106
106
  | **质量模型** | 规则较分散,更多依赖自然语言约束 | 14 个自动激活技能 + 检查清单把关 + Ralph Loop + 结构化证据 |
107
107
  | **项目状态** | 知识库更多是附属能力 | `.helloagents/` 成为项目激活边界,`STATE.md` / 方案包 / `DESIGN.md` / `contract.json` 组成主流程的主要判断依据 |
108
108
  | **知识库存储** | 默认项目本地 | 默认项目本地,同时新增 `project_store_mode=repo-shared`,支持同一 git 仓库多个 worktree 共享稳定知识和方案资产 |
109
- | **Codex 集成** | 早期依赖更多兼容层和旧链路 | 标准模式使用注入规则 + 本地链接;全局模式使用原生本地插件链路,减少噪音与漂移 |
109
+ | **Codex 集成** | 早期依赖更多兼容层和旧流程 | 标准模式使用注入规则 + 本地链接;全局模式使用原生本地插件,减少噪音与漂移 |
110
110
 
111
- 一句话概括:`v2.3.8` 更像“给多个 CLI 加一层工作流外壳”,`v3.0.9` 更像“把质量协议、计划产物、验证证据和安装生命周期统一成一套真正可运转的工作流框架”。
111
+ 一句话概括:`v2.3.8` 更像“给多个 CLI 加一层工作流外壳”,`v3.0.10` 更像“把质量规则、计划产物、验证证据和安装生命周期统一成一套真正可运转的工作流框架”。
112
112
 
113
113
  ## ✨ 核心特性
114
114
 
@@ -217,7 +217,7 @@ helloagents install --all --standby
217
217
  |------|----------|------|
218
218
  | 先安装包,不立即改宿主 | `npm install -g helloagents` | 仅安装命令与 `~/.helloagents/helloagents.json` |
219
219
  | 默认保持轻量 | `helloagents install --all --standby` | **标准模式**:显式为目标 CLI 注入精简规则 |
220
- | 所有项目启用完整规则 | `helloagents install --all --global` 或 `helloagents --global` | 切到 **全局模式**:Claude/Gemini 走原生插件/扩展,Codex 自动安装原生本地插件链路 |
220
+ | 所有项目启用完整规则 | `helloagents install --all --global` 或 `helloagents --global` | 切到 **全局模式**:Claude/Gemini 走原生插件/扩展,Codex 自动安装原生本地插件 |
221
221
  | 本地切分支/改文件后重新同步 | `helloagents update codex`、`helloagents install --all --standby`、`helloagents --global` | 按目标或当前模式刷新已注入/已复制的文件 |
222
222
 
223
223
  ### 2.1)按单个 CLI 管理
@@ -233,7 +233,7 @@ helloagents uninstall gemini
233
233
  - 支持的目标:`claude`、`gemini`、`codex`
234
234
  - 省略 `--standby` / `--global` 时:优先沿用该 CLI 已记录或已检测到的模式;如果没有历史记录,则回退到 `standby`
235
235
  - `install` / `update` 只处理目标 CLI;用 `--all` 可显式批量处理全部目标
236
- - Claude Code / Gemini CLI 在 `global` 模式下仍需手动执行原生插件/扩展安装或卸载命令;Codex CLI 仍由 HelloAGENTS 自动处理本地插件链路
236
+ - Claude Code / Gemini CLI 在 `global` 模式下仍需手动执行原生插件/扩展安装或卸载命令;Codex CLI 仍由 HelloAGENTS 自动处理本地插件安装
237
237
 
238
238
  如需所有项目启用完整规则,切换到全局模式:
239
239
 
@@ -251,7 +251,7 @@ helloagents --global
251
251
  gemini extensions install https://github.com/hellowind777/helloagents
252
252
  ```
253
253
 
254
- Codex CLI 无需手动执行插件命令。`helloagents --global` 会自动走原生本地插件链路,写入:
254
+ Codex CLI 无需手动执行插件命令。`helloagents --global` 会自动安装原生本地插件,写入:
255
255
  - `~/.agents/plugins/marketplace.json`
256
256
  - `~/plugins/helloagents/`
257
257
  - `~/.codex/plugins/cache/local-plugins/helloagents/local/`
@@ -286,7 +286,7 @@ Codex CLI 无需手动执行插件命令。`helloagents --global` 会自动走
286
286
  ~plan "重构支付模块"
287
287
  ```
288
288
 
289
- ## 🔄 安装链路与文件写入
289
+ ## 🔄 安装流程与文件写入
290
290
 
291
291
  HelloAGENTS 在不同模式下会写入不同文件,但写入/恢复/清理都是可预期的。
292
292
 
@@ -304,7 +304,7 @@ HelloAGENTS 在不同模式下会写入不同文件,但写入/恢复/清理都
304
304
  |-----|---------|----------|
305
305
  | Claude Code | 原生插件安装(手动命令) | 由 Claude 插件系统管理 |
306
306
  | Gemini CLI | 原生扩展安装(手动命令) | 由 Gemini 扩展系统管理 |
307
- | Codex CLI | 原生本地插件链路(自动) | `~/.agents/plugins/marketplace.json`、`~/plugins/helloagents/`、`~/.codex/plugins/cache/local-plugins/helloagents/local/`、`~/.codex/config.toml`、`~/.codex/helloagents -> ~/plugins/helloagents` |
307
+ | Codex CLI | 原生本地插件(自动) | `~/.agents/plugins/marketplace.json`、`~/plugins/helloagents/`、`~/.codex/plugins/cache/local-plugins/helloagents/local/`、`~/.codex/config.toml`、`~/.codex/helloagents -> ~/plugins/helloagents` |
308
308
 
309
309
  ### 更新 / 重装 / 切分支行为
310
310
 
@@ -323,8 +323,8 @@ HelloAGENTS 在不同模式下会写入不同文件,但写入/恢复/清理都
323
323
  | 命令 | 说明 |
324
324
  |------|------|
325
325
  | `~idea` | 轻量点子探索 — 比较方向与方案,不写文件 |
326
- | `~auto` | 自动编排自动选择主路径并持续衔接到实现 / 验证 / 收尾,并优先复用现有活跃方案包 |
327
- | `~plan` | 结构化规划 — 需求澄清 + 方案收敛 + 计划包 |
326
+ | `~auto` | 自动执行自动选择主路径并持续推进到实现 / 验证 / 收尾,并优先复用现有活跃方案包 |
327
+ | `~plan` | 结构化规划 — 需求澄清 + 方案确认 + 计划包 |
328
328
  | `~build` | 执行实现 — 基于当前需求或现有计划包完成实现 |
329
329
  | `~prd` | 完整 PRD — 13 维度头脑风暴式探索,生成产品需求文档 |
330
330
  | `~loop` | 自主迭代优化 — 设定目标和指标,AI 循环改进直到达标 |
@@ -440,7 +440,7 @@ helloagents --standby
440
440
  - `T0` — 只读探索、点子比较、方向发散
441
441
  - `T1` — 低风险小改动、明确实现、显式验证
442
442
  - `T2` — 多文件功能、新项目、需要结构化产物的任务
443
- - `T3` — 高风险或不可逆链路,如认证、安全、支付、数据库、生产发布
443
+ - `T3` — 高风险或不可逆操作,如认证、安全、支付、数据库、生产发布
444
444
 
445
445
  **路由规则:**
446
446
  - 点子探索 / 比较方向 → `~idea`
@@ -464,7 +464,7 @@ HelloAGENTS 支持两种安装模式,采用不同的安装方式:
464
464
  | **标准模式** (默认) | `helloagents install <target> --standby` 或 `helloagents install --all --standby` | `bootstrap-lite.md`(含压缩版质量下限、UI 质量基线、安全规则与完成约束的精简规则) | `~command` 按需使用;激活前 UI 任务仍受 UI 质量基线约束,出现 `.helloagents/` 后切换到完整流程 | 按需使用,不影响其他项目 |
465
465
  | **全局模式** | Claude/Gemini 手动装插件;Codex 自动装原生本地插件 | `bootstrap.md`(完整规则) | 14 个技能自动激活 | 全面使用 HelloAGENTS |
466
466
 
467
- 标准模式会把规则注入到 `~/.claude/CLAUDE.md`、`~/.gemini/GEMINI.md`、`~/.codex/AGENTS.md`;对于 Codex,HelloAGENTS 还会在 `~/.codex/config.toml` 中写入一条受管的 `model_instructions_file`,指向同步后的 `~/.codex/AGENTS.md`,让同一份 home carrier 同时成为 Codex 的 base instructions override。执行清理时会恢复用户原来的 `model_instructions_file`。每个 CLI 还会创建 `helloagents` 包根目录符号链接。Claude Code 和 Gemini 仍使用 hooks,因为宿主可以较安静地承载这类注入;Codex 默认**不启用** HelloAGENTS hooks:最新 pre 源码里 hook 生命周期会在 TUI 中可见显示,且 `suppressOutput` 不能作为真正的静默注入通道,所以 Codex 改为依赖注入后的规则文件,以及本地符号链接 / 原生本地插件目录结构。全局模式下,Claude Code 通过 `.claude-plugin/plugin.json` 中声明的 hooks 工作,Gemini 通过 `contextFileName=bootstrap.md` 和扩展 hooks 工作;Codex 仍使用原生本地插件安装链路(marketplace + 本地插件目录 + cache + `config.toml` 插件启用段),并继续使用同一份 `~/.codex/AGENTS.md` home 基线,但不启用插件 hooks。
467
+ 标准模式会把规则注入到 `~/.claude/CLAUDE.md`、`~/.gemini/GEMINI.md`、`~/.codex/AGENTS.md`;对于 Codex,HelloAGENTS 还会在 `~/.codex/config.toml` 中写入一条受管的 `model_instructions_file`,指向同步后的 `~/.codex/AGENTS.md`,让同一份 home carrier 同时成为 Codex 的 base instructions override。执行清理时会恢复用户原来的 `model_instructions_file`。每个 CLI 还会创建 `helloagents` 包根目录符号链接。Claude Code 和 Gemini 仍使用 hooks,因为宿主可以较安静地承载这类注入;Codex 默认**不启用** HelloAGENTS hooks:最新 pre 源码里 hook 生命周期会在 TUI 中可见显示,且 `suppressOutput` 不能作为真正的静默注入通道,所以 Codex 改为依赖注入后的规则文件,以及本地符号链接 / 原生本地插件目录结构。全局模式下,Claude Code 通过 `.claude-plugin/plugin.json` 中声明的 hooks 工作,Gemini 通过 `contextFileName=bootstrap.md` 和扩展 hooks 工作;Codex 仍使用原生本地插件安装(marketplace + 本地插件目录 + cache + `config.toml` 插件启用段),并继续使用同一份 `~/.codex/AGENTS.md` home 基线,但不启用插件 hooks。
468
468
 
469
469
  在标准模式下,`.helloagents/` 就是项目激活边界。激活前,lite 规则**不会**进入完整六阶段主流程,也不会启用语义自动选路;它只保留轻量执行规则、显式 `~command` 入口,以及最低质量/完成门槛。项目一旦存在 `.helloagents/`,当前项目就切换到完整项目流程,并以 `bootstrap.md` 作为运行时判断依据。
470
470
 
@@ -482,10 +482,10 @@ HelloAGENTS 支持两种安装模式,采用不同的安装方式:
482
482
  | `~plan` | 仅做交互式规划,生成计划包 | 想先审查方案再编码 |
483
483
  | `~build` | 从当前需求或现有计划包执行实现 | 需求已明确,想直接开始做 |
484
484
  | `~verify` | 审查与验证工作流 | 想先看审查结果、跑检查并修复 |
485
- | `~auto` | 在以上模式之间自动编排并一路推进 | 需求明确,想要端到端交付 |
485
+ | `~auto` | 在以上模式之间自动选择并一路推进 | 需求明确,想要端到端交付 |
486
486
  | `~prd` | 13 维度 PRD 生成 | 需要完整的产品需求文档 |
487
487
 
488
- 典型模式:先 `~idea` 比较方向,再 `~plan` 收敛方案,然后 `~build` 实现,最后 `~verify` 验证。或者直接 `~auto` 一步到位。如果项目里已经有活跃方案包,`~auto` 应先复用这条现有链路,而不是无故重新脑暴或重新规划。涉及 UI 时,决策优先级固定为:`plan.md` / PRD 中的 UI 决策 → `DESIGN.md` → 通用 UI 规则。
488
+ 典型模式:先 `~idea` 比较方向,再 `~plan` 确认方案,然后 `~build` 实现,最后 `~verify` 验证。或者直接 `~auto` 一步到位。如果项目里已经有活跃方案包,`~auto` 应先复用现有计划,而不是无故重新脑暴或重新规划。涉及 UI 时,决策优先级固定为:`plan.md` / PRD 中的 UI 决策 → `DESIGN.md` → 通用 UI 规则。
489
489
 
490
490
  ### 质量验证(Ralph Loop)
491
491
 
@@ -499,9 +499,9 @@ HelloAGENTS 支持两种安装模式,采用不同的安装方式:
499
499
 
500
500
  `~wiki` 只创建或同步项目知识库。`~init` 是更完整的项目初始化:它还会写入项目级规则文件(`AGENTS.md`、`CLAUDE.md`、`.gemini/GEMINI.md`)、刷新各宿主项目级原生 skills 链接,并补齐相关忽略项。在标准模式下,真正让当前项目进入完整项目流程的是项目本地 `.helloagents/` 的存在,项目级规则文件只是 `~init` 的附加能力。
501
501
 
502
- 默认情况下,知识库和方案包都写在项目本地 `.helloagents/`。当前恢复快照现在只认一个权威路径:`state_path`。当宿主能提供稳定的会话标识时,HelloAGENTS 会把它写到 `.helloagents/sessions/<branch>/<session>/STATE.md`;否则写到分支默认槽位 `.helloagents/sessions/<branch>/default/STATE.md`。若 `project_store_mode = "repo-shared"`,本地 `.helloagents/` 仅保留激活信号、会话级 `STATE.md` 与 `.ralph-*` 等运行态文件;`context.md`、`guidelines.md`、`DESIGN.md`、`verify.yaml`、`modules/`、`plans/`、`archive/` 会改写到 `~/.helloagents/projects/<repo-key>/`,从而在同一 git 仓库的多个 worktree 间共享稳定资料。
502
+ 默认情况下,知识库和方案包都写在项目本地 `.helloagents/`。状态文件只使用 `state_path` 指定的位置。当宿主能提供稳定的会话标识时,HelloAGENTS 会把它写到 `.helloagents/sessions/<branch>/<session>/STATE.md`;否则写到分支默认位置 `.helloagents/sessions/<branch>/default/STATE.md`。若 `project_store_mode = "repo-shared"`,本地 `.helloagents/` 仅保留激活信号、会话级 `STATE.md` 与 `.ralph-*` 等运行态文件;`context.md`、`guidelines.md`、`DESIGN.md`、`verify.yaml`、`modules/`、`plans/`、`archive/` 会改写到 `~/.helloagents/projects/<repo-key>/`,从而在同一 git 仓库的多个 worktree 间共享稳定资料。
503
503
 
504
- `STATE.md` 是由 `state_path` 解析出的当前恢复快照,不是所有交互的统一记忆文件。按“分支 + 会话 / 默认槽位”存储后,同仓库并发对话不再争用同一个文件。它会在 `~wiki`、`~init`、`~plan`、`~build`、`~auto`、`~prd`、`~loop` 这类项目级连续流程中创建并持续更新;在验证/审查类任务中仅在文件已存在时更新;对 `~help` 这类一次性只读交互则不会创建。
504
+ `STATE.md` 是由 `state_path` 解析出的当前状态文件,不是所有交互的统一记忆文件。按“分支 + 会话 / 默认位置”存储后,同仓库并发对话不再争用同一个文件。它会在 `~wiki`、`~init`、`~plan`、`~build`、`~auto`、`~prd`、`~loop` 这类项目级连续流程中创建并持续更新;在验证/审查类任务中仅在文件已存在时更新;对 `~help` 这类一次性只读交互则不会创建。
505
505
 
506
506
  | 文件 | 用途 |
507
507
  |------|------|
@@ -541,8 +541,8 @@ npm test
541
541
  测试覆盖:
542
542
  - 标准/全局模式的安装、重装、刷新、卸载、模式切换
543
543
  - Claude / Gemini / Codex 配置文件的合并、恢复、清理行为
544
- - Codex 本地插件在本地切分支或文件更新后的刷新链路
545
- - 运行时 inject / route / guard / Ralph Loop 链路
544
+ - Codex 本地插件在本地切分支或文件更新后的刷新流程
545
+ - 运行时 inject / route / guard / Ralph Loop 流程
546
546
  - `~/.codex/` 已不存在时,Codex 全局产物的清理行为
547
547
 
548
548
  ## ❓ FAQ
@@ -550,7 +550,7 @@ npm test
550
550
  <details>
551
551
  <summary><strong>Q:这是 CLI 工具还是 prompt 框架?</strong></summary>
552
552
 
553
- **A:** 两者都是。CLI(`cli.mjs`)负责安装、模式切换和 CLI 配置。实际工作流来自 `bootstrap.md` / `bootstrap-lite.md` 规则、质量技能,以及按宿主选择的运行时辅助链路。Claude/Gemini 会使用 `notify.mjs`、`guard.mjs`、`ralph-loop.mjs` 等 hooks;Codex 默认走规则文件驱动,尽量保持 TUI 安静。可以理解为:交付系统 + 智能质量协议。
553
+ **A:** 两者都是。CLI(`cli.mjs`)负责安装、模式切换和 CLI 配置。实际工作流来自 `bootstrap.md` / `bootstrap-lite.md` 规则、质量技能,以及按宿主选择的运行时辅助流程。Claude/Gemini 会使用 `notify.mjs`、`guard.mjs`、`ralph-loop.mjs` 等 hooks;Codex 默认走规则文件驱动,尽量保持 TUI 安静。可以理解为:交付系统 + 智能质量协议。
554
554
  </details>
555
555
 
556
556
  <details>
@@ -718,21 +718,30 @@ npm test
718
718
 
719
719
  ## 📈 版本历史
720
720
 
721
- ### v3.0.9(当前版本)
721
+ ### v3.0.10(当前版本)
722
+
723
+ **相对 `v3.0.9beta` 的修复与验证:**
724
+ - 🔧 Codex 受管 `notify` 配置现在带有明确标记,清理时可区分 HelloAGENTS 写入和用户自定义的 `codex-notify`
725
+ - 🔧 Codex 清理流程现在会保留用户的多行 `notify` 数组,并正确恢复周围 TOML 配置
726
+ - 🔧 `notify_level=0` 现在同时关闭完成、警告和确认通知,和文档中的“关闭”含义保持一致
727
+ - 🔧 恢复 `hello-ui` 的完整指导;已确认 OpenAI 公开 skill 建议是主 `SKILL.md` 尽量控制在约 500 行以内,而不是按 200 行硬限制精简
728
+ - 🧪 新增 Codex `notify` 保留、多行 TOML 处理和通知等级门控的回归测试
729
+
730
+ ### v3.0.9
722
731
 
723
732
  **修复与验证:**
724
- - 🔧 Claude Code / Gemini CLI 的 `stop` 交付门控现在优先读取结构化 `turn-state`,不再先从自然语言文本反推“是否完成交付”,普通等待态不再被误判为已完成
725
- - 🔧 Codex 清理链路现在会保留安装后用户自行改写的 `model_instructions_file`、`notify` 与非托管 `codex_hooks`,不再被安装前旧备份回写覆盖
733
+ - 🔧 Claude Code / Gemini CLI 的 `stop` 交付门控现在只接受结构化 `turn-state` 完成态,普通等待态不再被误判为已完成
734
+ - 🔧 Codex 清理流程现在会保留安装后用户自行改写的 `model_instructions_file`、`notify` 与非托管 `codex_hooks`,不再被安装前旧备份回写覆盖
726
735
  - 🧪 新增运行时 / 生命周期回归,覆盖 `stop` 的结构化完成态门控,以及安装后用户改写 Codex 配置时的 cleanup 保留行为
727
736
 
728
737
  ### v3.0.7
729
738
 
730
739
  **相对 `v2.3.8` 的当前主线结果:**
731
- - ✨ 从 Python 包全面重写为 Node.js/Markdown 工作流框架,安装、运行时注入、技能、规则与验证链路全部重建
732
- - ✨ 把旧的多层路由 / design-develop 流程,统一收敛成 ROUTE/TIER → SPEC → PLAN → BUILD → VERIFY → CONSOLIDATE 六阶段主流程
740
+ - ✨ 从 Python 包全面重写为 Node.js/Markdown 工作流框架,安装、运行时注入、技能、规则与验证流程全部重建
741
+ - ✨ 把旧的多层路由 / design-develop 流程,统一整理为 ROUTE/TIER → SPEC → PLAN → BUILD → VERIFY → CONSOLIDATE 六阶段主流程
733
742
  - ✨ 从旧命令集切换到 `~idea` / `~plan` / `~build` / `~verify` / `~prd` / `~loop` / `~wiki` 等更聚焦的命令体系,并引入 14 个自动激活质量技能
734
743
  - ✨ 项目产物体系成型:`STATE.md`、`DESIGN.md`、`requirements.md`、`plan.md`、`tasks.md`、`contract.json`、`.ralph-*` 证据成为流程判断依据,而不是附属文档
735
- - ✨ 安装模型重构为标准模式 / 全局模式双轨;Codex 改为原生本地插件链路,Claude/Gemini 保留各自宿主原生能力
744
+ - ✨ 安装模型重构为标准模式 / 全局模式双轨;Codex 改为原生本地插件,Claude/Gemini 保留各自宿主原生能力
736
745
  - ✨ 新增 `project_store_mode=repo-shared`,让同一 git 仓库的多个 worktree 可以共享稳定知识库和方案包,而本地 `.helloagents/` 继续保留激活和运行态隔离
737
746
 
738
747
  ### v3.0.4
@@ -761,8 +770,8 @@ npm test
761
770
  ### v3.0.1
762
771
 
763
772
  **修复与验证:**
764
- - 🔧 收敛并加强 `STATE.md` 恢复规则:关键决策变更即更新,长流程一旦失真立即重写,宿主明确进入压缩/恢复前置阶段前必须先确认已同步
765
- - 🔧 修复 Codex 本地插件链路清理后的空 `~/.agents/plugins/marketplace.json` 残留
773
+ - 🔧 明确并加强 `STATE.md` 恢复规则:关键决策变更即更新,长流程一旦失真立即重写,宿主明确进入压缩/恢复前置阶段前必须先确认已同步
774
+ - 🔧 修复 Codex 本地插件清理后的空 `~/.agents/plugins/marketplace.json` 残留
766
775
  - 🔧 修复并验证单 CLI `update` 在记录模式过期时仍会优先复用本地已检测模式,符合 `helloagents update <cli>` 的预期行为
767
776
  - 🔧 明确标准模式下“链接文件立即同步、注入后的规则文件需显式刷新”的分支 / bootstrap 刷新语义
768
777
  - 🧪 新增标准模式规则文件刷新、模式自动复用、Codex 空 marketplace 清理,以及与版本号无关的 npm pack 生命周期测试
@@ -783,11 +792,11 @@ npm test
783
792
  - ✨ `~verify` 命令:自动检测并运行所有验证命令
784
793
  - ✨ Guard 系统(`guard.mjs`):L1 拦截破坏性命令 + L2 安全模式建议
785
794
  - ✨ 标准/全局模式:`install_mode` 配置项支持按项目或全局激活
786
- - ✨ 流状态管理(`STATE.md`):用于压缩/恢复衔接的恢复快照(≤70 行)
795
+ - ✨ 流状态管理(`STATE.md`):用于压缩/恢复时继续工作的恢复快照(≤70 行)
787
796
  - ✨ 设计系统生成(`DESIGN.md`):作为项目级 UI 契约自动创建
788
797
  - ✨ 计划包系统:`requirements.md` + `plan.md` + `tasks.md` + `contract.json`
789
- - ✨ 可选 advisor 契约与证据:仅在 T3 / UI / 高风险链路启用,通过 `contract.json` + `.helloagents/.ralph-advisor.json` 落地
790
- - ✨ 可选视觉验收证据:仅在 UI 契约明确要求时启用,通过 `contract.json` + `.helloagents/.ralph-visual.json` 落地
798
+ - ✨ 可选 advisor 契约与证据:仅在 T3 / UI / 高风险流程启用,通过 `contract.json` + `.helloagents/.ralph-advisor.json` 记录
799
+ - ✨ 可选视觉验收证据:仅在 UI 契约明确要求时启用,通过 `contract.json` + `.helloagents/.ralph-visual.json` 记录
791
800
 
792
801
  **架构:**
793
802
  - 📦 先选路再执行的六阶段主流程:ROUTE/TIER → SPEC → PLAN → BUILD → VERIFY → CONSOLIDATE
package/bootstrap-lite.md CHANGED
@@ -172,10 +172,10 @@
172
172
  - `T0` — 只读分析、创意探索、方案比较 → 自然响应或 `~idea`
173
173
  - `T1` — 低风险小改动、明确实现、显式验证 → 直接执行或 `~build` / `~verify`
174
174
  - `T2` — 多文件功能、新项目、需要结构化产物 → `~plan` 或 `~auto`
175
- - `T3` — 高风险或不可逆链路(权限、安全、支付、数据库、生产发布等)→ 先 `~plan` / `~prd`,再 `~build` / `~verify`
175
+ - `T3` — 高风险或不可逆操作(权限、安全、支付、数据库、生产发布等)→ 先 `~plan` / `~prd`,再 `~build` / `~verify`
176
176
 
177
177
  ## 完成约束
178
- - 未激活项目且未进入方案包 / `contract.json` / 证据链路时,声称完成前必须完成与任务类型匹配的必要检查;无法执行的检查必须明确说明,不得直接宣称完成
178
+ - 未激活项目且未进入方案包 / `contract.json` / 证据文件时,声称完成前必须完成与任务类型匹配的必要检查;无法执行的检查必须明确说明,不得直接宣称完成
179
179
  - 当前项目已激活,或已存在方案包 / `contract.json` / 证据文件时,以完整流程、对应 skill 与运行时交付约束为准,不得降级为本节
180
180
  - 只读分析、创意探索、方案比较、中间进度和阻塞汇报不适用本节
181
181
 
@@ -193,14 +193,14 @@
193
193
  所有文件的创建和更新必须按 templates/ 目录中对应模板的格式执行,不可自由发挥格式。
194
194
  说明:
195
195
  - `.helloagents/` 表示项目级存储路径,也是 standby 模式的激活信号
196
- - `STATE.md`、`.ralph-*.json`、`loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/`
197
- - 当前 `STATE.md` 只认当前项目存储中的 `state_path`;支持会话标识时,它会落在 `.helloagents/sessions/{branch}/{session}/STATE.md`,未提供稳定会话标识时则落到 `.helloagents/sessions/{branch}/default/STATE.md`
196
+ - `state_path` 指向的状态文件、`.ralph-*.json`、`loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/`
197
+ - `state_path` 是状态文件的唯一位置。宿主提供会话标识时,写入 `.helloagents/sessions/{branch}/{session}/STATE.md`;没有稳定会话标识时,写入 `.helloagents/sessions/{branch}/default/STATE.md`
198
198
  - 若 helloagents.json 中 `project_store_mode = "repo-shared"`,`context.md`、`guidelines.md`、`CHANGELOG.md`、`verify.yaml`、`DESIGN.md`、`modules/`、`plans/`、`archive/` 改按当前上下文中已注入的“当前项目存储”/“项目知识/方案目录”解析;未注入具体路径时,按当前存储模式自行解析,不要假定这些文件一定实际位于当前工作树中
199
199
  templates/ 查找路径(按优先级;首次确定模板根目录后,本轮复用):
200
200
  按上文 `~command` 路由中的相同技能根目录规则确定;确定根目录后读取其中的 `templates/`。
201
201
 
202
202
  ### 流程状态(不受 kb_create_mode 控制,始终可写)
203
- - STATE.md ≤70 行,项目级恢复快照。它只用于恢复“上次做到哪里”,不是主线任务的唯一判断依据;当前用户消息、显式命令、活跃方案包 / PRD、代码与验证证据优先于 STATE.md
203
+ - 状态文件(`state_path`)— ≤70 行,用来记录“上次做到哪里”。判断当前任务时,当前用户消息、显式命令、活跃方案包 / PRD、代码与验证证据优先于状态文件
204
204
  内容:主线目标、正在做什么、关键上下文(决策/变更/假设)、下一步(具体可执行动作含文件路径)、阻塞项
205
205
  适用边界:
206
206
  - 强制创建并持续更新:`~wiki`、`~init`、`~plan`、`~build`、`~auto`、`~prd`、`~loop`,以及进入统一执行流程/已激活项目的连续任务
@@ -208,14 +208,14 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
208
208
  - 已有则更新:`~verify`、`~review`(兼容别名)、`~test`、`~commit`
209
209
  - 不创建:`~help`、`~idea`、普通问答、一次性只读任务、子代理自身执行过程、压缩/恢复钩子
210
210
  更新规则:
211
- - 属于“强制创建并持续更新”范围且文件不存在时,按 templates/STATE.md 创建
212
- - 每次更新是重写,不是追加。STATE.md 永远反映“此刻”的状态,不是历史
211
+ - 属于“强制创建并持续更新”范围且状态文件不存在时,按 templates/STATE.md 创建
212
+ - 每次更新是重写,不是追加。状态文件只记录当前状态,不记录历史
213
213
  - 更新时机:任务开始、关键决策落定、子任务完成、遇到/解除阻塞、任务完成
214
- - 长流程中 STATE.md 过时就立即重写,不等任务结束
215
- - 恢复时先看当前用户消息,确认仍是同一任务再按 STATE.md 接续;否则按当前消息、活跃方案包与代码事实重建主线,并立即重写 STATE.md
216
- - `.helloagents/` 里只有 `STATE.md` 时,它只是恢复锚点,不是项目规则或自动授权
217
- - 若宿主进入压缩/恢复前置阶段,且当前任务属于 STATE.md 适用范围,必须先确认 STATE.md 已同步到最新
218
- - 自检:如果现在上下文被压缩,下一轮能否凭 STATE.md 找回进度?不能 → 该更新了
214
+ - 长流程中状态文件过时就立即重写,不等任务结束
215
+ - 恢复时先看当前用户消息;如果仍是同一任务,再参考状态文件;否则按当前消息、活跃方案包与代码事实重新判断任务,并立即重写状态文件
216
+ - 当前项目只有状态文件时,它只是恢复参考,不是项目规则或自动授权
217
+ - 若宿主进入压缩/恢复前置阶段,且当前任务属于状态文件适用范围,必须先确认状态文件已同步到最新
218
+ - 自检:如果现在上下文被压缩,下一轮能否凭状态文件找回进度?不能 → 该更新了
219
219
  - “关键上下文”只保留恢复所需的信息,已不再相关的决策和变更移除
220
220
  - DESIGN.md — 项目级稳定 UI 契约(仅 UI 项目),`~plan` / `~auto` / `~prd` 创建或更新;不存在且当前任务涉及 UI → 按 templates/DESIGN.md 创建;不替代单次需求的 `plan.md`
221
221
  - plans/{feature}/ — 活跃方案包。`~plan` / `~auto` 生成:`requirements.md` + `plan.md` + `tasks.md` + `contract.json`;`~prd` 生成:`prd/` 目录(多维度文档)+ `tasks.md` + `decisions.md` + `contract.json`
@@ -223,7 +223,7 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
223
223
  - archive/YYYY-MM/ — 已归档的方案包(整个 plans/{feature}/ 目录移入)
224
224
  - archive/_index.md — 归档索引
225
225
 
226
- ### 知识沉淀(受 kb_create_mode 控制,0=关闭/1=已激活项目或全局模式中编码自动/2=已激活项目或全局模式中始终)
226
+ ### 知识记录(受 kb_create_mode 控制,0=关闭/1=已激活项目或全局模式中编码自动/2=已激活项目或全局模式中始终)
227
227
  - context.md — 项目架构、技术栈、目录结构、模块索引
228
228
  - guidelines.md — 编码约定(仅含非显而易见的约定)
229
229
  - CHANGELOG.md — 变更历史
@@ -242,17 +242,17 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
242
242
  主线判断依据优先级:
243
243
  1. 当前用户最新消息、显式 `~command`、本轮已确认的范围与结论
244
244
  2. 当前活跃方案包 / PRD、代码与验证证据
245
- 3. 当前 `STATE.md`(始终取当前项目存储中的 `state_path`;恢复快照,只用于补齐最近进度)
246
- 4. 其他知识沉淀与历史归档
245
+ 3. 当前状态文件(`state_path`,只用于补齐最近进度)
246
+ 4. 其他知识记录与历史归档
247
247
 
248
248
  ### .helloagents/ 文件读取优先级
249
249
  以下文件在任务需要时按需读取,按优先级分层:
250
250
  说明:
251
- - Tier 1 `STATE.md` 始终读取当前项目存储中的 `state_path`
251
+ - Tier 1 始终读取当前 `state_path`
252
252
  - Tier 2 / Tier 3 中的 `.helloagents/...` 路径默认按项目级存储路径解析;`project_store_mode=repo-shared` 时按共享知识/方案目录解析
253
253
 
254
- Tier 1 — 恢复当前链路时优先读取:
255
- - 当前 `STATE.md` → 恢复快照(始终取当前项目存储中的 `state_path`;先确认当前消息仍是同一任务,再用它找回最近进度)
254
+ Tier 1 — 恢复当前任务时优先读取:
255
+ - 当前状态文件(`state_path`)→ 先确认当前消息仍是同一任务,再用它找回最近进度
256
256
 
257
257
  Tier 2 — 理解项目时读取:
258
258
  - .helloagents/context.md → 项目架构、技术栈、目录结构、模块索引
package/bootstrap.md CHANGED
@@ -176,14 +176,14 @@
176
176
  - `T0` — 只读分析、创意探索、方案比较 → 自然响应或 `~idea`
177
177
  - `T1` — 低风险小改动、明确实现、显式验证 → 直接执行或 `~build` / `~verify`
178
178
  - `T2` — 多文件功能、新项目、需要结构化产物 → `~plan` 或 `~auto`
179
- - `T3` — 高风险或不可逆链路(权限、安全、支付、数据库、生产发布等)→ 先 `~plan` / `~prd`,再 `~build` / `~verify`,必要时单独确认
179
+ - `T3` — 高风险或不可逆操作(权限、安全、支付、数据库、生产发布等)→ 先 `~plan` / `~prd`,再 `~build` / `~verify`,必要时单独确认
180
180
  - 创意探索 / 方案比较 → `~idea`
181
181
  - 明确实现 / 小范围修复 → `~build`
182
182
  - 为指定模块编写测试 → `~test`
183
183
  - 结构化规划 / 新功能 / 新项目 → `~plan`
184
184
  - 完整产品规格 → `~prd`
185
185
  - 审查 / 执行验证 → `~verify`
186
- - 不确定或希望端到端自动推进时由 `~auto` 自动编排
186
+ - 不确定或希望端到端自动推进时使用 `~auto`
187
187
 
188
188
  当前项目只要已建立 `.helloagents/`(例如执行过 `~wiki`、`~init`,或已进入项目级连续流程),就按项目级完整流程执行。
189
189
 
@@ -209,9 +209,9 @@ hello-* 技能读取路径:`{HELLOAGENTS_READ_ROOT}/skills/{技能名}/SKILL.m
209
209
  - `~plan` 生成 `requirements.md`、`plan.md`、`tasks.md`、`contract.json`
210
210
  - `~prd` 生成 PRD 维度文档、`tasks.md`、`decisions.md`
211
211
  - `~build` 读取现有方案包并做定位,不重复发明方案
212
- - `contract.json` 是方案包的机器契约,至少明确 `verifyMode`、`reviewerFocus`、`testerFocus`;只有在 T3 / UI / 高风险链路确有收益时,才额外声明 `advisor`;进入验证或最终交付前,优先消费它而不是从自然语言描述里回推验证路径
212
+ - `contract.json` 是方案包的机器契约,至少明确 `verifyMode`、`reviewerFocus`、`testerFocus`;只有在 T3 / UI / 高风险流程确有收益时,才额外声明 `advisor`;进入验证或最终交付前,优先消费它而不是从自然语言描述里回推验证路径
213
213
  - 涉及 UI 时,设计约束优先级固定为:当前 `plan.md` / PRD UI 决策 → 逻辑 `.helloagents/DESIGN.md`(实际路径按当前项目存储模式解析) → 通用 UI 规则
214
- - `~idea` 在输出比较与推荐后结束,不进入实现,也不创建 `.helloagents/`、`STATE.md` 或方案包
214
+ - `~idea` 在输出比较与推荐后结束,不进入实现,也不创建 `.helloagents/`、状态文件或方案包
215
215
 
216
216
  ### 4. BUILD — 实现
217
217
  进入实现时,读取 PLAN 阶段标记的技能 SKILL.md(按上方 hello-* 技能查找路径读取 `skills/{技能名}/SKILL.md`),按其规范执行。
@@ -233,10 +233,10 @@ hello-* 技能读取路径:`{HELLOAGENTS_READ_ROOT}/skills/{技能名}/SKILL.m
233
233
  非编码任务(文档 / 方案 / 审查等):
234
234
  - 收集已激活技能的交付检查清单,逐项确认通过
235
235
 
236
- ### 6. CONSOLIDATE — 状态、沉淀与归档
236
+ ### 6. CONSOLIDATE — 状态、资料与归档
237
237
  所有任务:
238
238
  - 有方案包且准备报告完成 → 优先调用 `scripts/closeout-state.mjs write` 写 `.helloagents/.ralph-closeout.json`,记录“需求覆盖”和“交付清单”;每项写明 `PASS` / `BLOCKED` 与简要摘要,再进入最终交付
239
- - `STATE.md` 维护:按上文“流程状态”中的适用边界执行。属于“强制创建并持续更新”范围时,重写当前 `STATE.md`(始终使用当前项目存储中的 `state_path`;“正在做什么”更新为已完成,清空关键上下文 / 下一步 / 阻塞项);属于“已有则更新”范围时,仅在文件已存在时重写;属于“不创建”范围时不生成此文件
239
+ - 状态文件维护:按上文“流程状态”中的适用范围执行。属于“强制创建并持续更新”范围时,重写 `state_path` 指向的文件(“正在做什么”更新为已完成,清空关键上下文 / 下一步 / 阻塞项);属于“已有则更新”范围时,仅在文件已存在时重写;属于“不创建”范围时不生成此文件
240
240
  - 有方案包且任务已完成 → 将整个 `plans/{feature}/` 目录归档到 `.helloagents/archive/YYYY-MM/`,并更新 `archive/_index.md`。清理临时文件(`loop-results.tsv`、`.ralph-breaker.json`、`.ralph-verify.json`、`.ralph-review.json`、`.ralph-closeout.json`)
241
241
  - 按 `kb_create_mode` 同步知识库(0=关闭 / 1=已激活项目或全局模式中编码自动 / 2=已激活项目或全局模式中始终):
242
242
  - `.helloagents/` 不存在则按 templates/ 创建知识库文件(`context.md`、`guidelines.md`、`verify.yaml`、`CHANGELOG.md`、`modules/`)
@@ -262,14 +262,14 @@ hello-* 技能读取路径:`{HELLOAGENTS_READ_ROOT}/skills/{技能名}/SKILL.m
262
262
  所有文件的创建和更新必须按 templates/ 目录中对应模板的格式执行,不可自由发挥格式。
263
263
  说明:
264
264
  - `.helloagents/` 表示项目级存储路径,也是 standby 模式的激活信号
265
- - `STATE.md`、`.ralph-*.json`、`loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/`
266
- - 当前 `STATE.md` 只认当前项目存储中的 `state_path`;支持会话标识时,它会落在 `.helloagents/sessions/{branch}/{session}/STATE.md`,未提供稳定会话标识时则落到 `.helloagents/sessions/{branch}/default/STATE.md`
265
+ - `state_path` 指向的状态文件、`.ralph-*.json`、`loop-results.tsv` 等运行态文件始终保留在项目本地 `.helloagents/`
266
+ - `state_path` 是状态文件的唯一位置。宿主提供会话标识时,写入 `.helloagents/sessions/{branch}/{session}/STATE.md`;没有稳定会话标识时,写入 `.helloagents/sessions/{branch}/default/STATE.md`
267
267
  - 若 helloagents.json 中 `project_store_mode = "repo-shared"`,`context.md`、`guidelines.md`、`CHANGELOG.md`、`verify.yaml`、`DESIGN.md`、`modules/`、`plans/`、`archive/` 改按当前上下文中已注入的“当前项目存储”/“项目知识/方案目录”解析;未注入具体路径时,按当前存储模式自行解析,不要假定这些文件一定实际位于当前工作树中
268
268
  templates/ 查找路径(按优先级;首次确定模板根目录后,本轮复用):
269
269
  按上文相同的技能根目录规则确定;确定根目录后读取其中的 `templates/`。
270
270
 
271
271
  ### 流程状态(不受 kb_create_mode 控制,始终可写)
272
- - STATE.md ≤70 行,项目级恢复快照。它只用于恢复“上次做到哪里”,不是主线任务的唯一判断依据;当前用户消息、显式命令、活跃方案包 / PRD、代码与验证证据优先于 STATE.md
272
+ - 状态文件(`state_path`)— ≤70 行,用来记录“上次做到哪里”。判断当前任务时,当前用户消息、显式命令、活跃方案包 / PRD、代码与验证证据优先于状态文件
273
273
  内容:主线目标、正在做什么、关键上下文(决策/变更/假设)、下一步(具体可执行动作含文件路径)、阻塞项
274
274
  适用边界:
275
275
  - 强制创建并持续更新:`~wiki`、`~init`、`~plan`、`~build`、`~auto`、`~prd`、`~loop`,以及进入统一执行流程/已激活项目的连续任务
@@ -277,14 +277,14 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
277
277
  - 已有则更新:`~verify`、`~review`(兼容别名)、`~test`、`~commit`
278
278
  - 不创建:`~help`、`~idea`、普通问答、一次性只读任务、子代理自身执行过程、压缩/恢复钩子
279
279
  更新规则:
280
- - 属于“强制创建并持续更新”范围且文件不存在时,按 templates/STATE.md 创建
281
- - 每次更新是重写,不是追加。STATE.md 永远反映“此刻”的状态,不是历史
280
+ - 属于“强制创建并持续更新”范围且状态文件不存在时,按 templates/STATE.md 创建
281
+ - 每次更新是重写,不是追加。状态文件只记录当前状态,不记录历史
282
282
  - 更新时机:任务开始、关键决策落定、子任务完成、遇到/解除阻塞、任务完成
283
- - 长流程中 STATE.md 过时就立即重写,不等任务结束
284
- - 恢复时先看当前用户消息,确认仍是同一任务再按 STATE.md 接续;否则按当前消息、活跃方案包与代码事实重建主线,并立即重写 STATE.md
285
- - `.helloagents/` 里只有 `STATE.md` 时,它只是恢复锚点,不是项目规则或自动授权
286
- - 若宿主进入压缩/恢复前置阶段,且当前任务属于 STATE.md 适用范围,必须先确认 STATE.md 已同步到最新
287
- - 自检:如果现在上下文被压缩,下一轮能否凭 STATE.md 找回进度?不能 → 该更新了
283
+ - 长流程中状态文件过时就立即重写,不等任务结束
284
+ - 恢复时先看当前用户消息;如果仍是同一任务,再参考状态文件;否则按当前消息、活跃方案包与代码事实重新判断任务,并立即重写状态文件
285
+ - 当前项目只有状态文件时,它只是恢复参考,不是项目规则或自动授权
286
+ - 若宿主进入压缩/恢复前置阶段,且当前任务属于状态文件适用范围,必须先确认状态文件已同步到最新
287
+ - 自检:如果现在上下文被压缩,下一轮能否凭状态文件找回进度?不能 → 该更新了
288
288
  - “关键上下文”只保留恢复所需的信息,已不再相关的决策和变更移除
289
289
  - DESIGN.md — 项目级稳定 UI 契约(仅 UI 项目),`~plan` / `~auto` / `~prd` 创建或更新;不存在且当前任务涉及 UI → 按 templates/DESIGN.md 创建;不替代单次需求的 `plan.md`
290
290
  - plans/{feature}/ — 活跃方案包。`~plan` / `~auto` 生成:`requirements.md` + `plan.md` + `tasks.md` + `contract.json`;`~prd` 生成:`prd/` 目录(多维度文档)+ `tasks.md` + `decisions.md` + `contract.json`
@@ -292,7 +292,7 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
292
292
  - archive/YYYY-MM/ — 已归档的方案包(整个 plans/{feature}/ 目录移入)
293
293
  - archive/_index.md — 归档索引
294
294
 
295
- ### 知识沉淀(受 kb_create_mode 控制,0=关闭/1=已激活项目或全局模式中编码自动/2=已激活项目或全局模式中始终)
295
+ ### 知识记录(受 kb_create_mode 控制,0=关闭/1=已激活项目或全局模式中编码自动/2=已激活项目或全局模式中始终)
296
296
  - context.md — 项目架构、技术栈、目录结构、模块索引
297
297
  - guidelines.md — 编码约定(仅含非显而易见的约定)
298
298
  - CHANGELOG.md — 变更历史
@@ -311,17 +311,17 @@ templates/ 查找路径(按优先级;首次确定模板根目录后,本轮
311
311
  主线判断依据优先级:
312
312
  1. 当前用户最新消息、显式 `~command`、本轮已确认的范围与结论
313
313
  2. 当前活跃方案包 / PRD、代码与验证证据
314
- 3. 当前 `STATE.md`(始终取当前项目存储中的 `state_path`;恢复快照,只用于补齐最近进度)
315
- 4. 其他知识沉淀与历史归档
314
+ 3. 当前状态文件(`state_path`,只用于补齐最近进度)
315
+ 4. 其他知识记录与历史归档
316
316
 
317
317
  ### .helloagents/ 文件读取优先级
318
318
  以下文件在任务需要时按需读取,按优先级分层:
319
319
  说明:
320
- - Tier 1 `STATE.md` 始终读取当前项目存储中的 `state_path`
320
+ - Tier 1 始终读取当前 `state_path`
321
321
  - Tier 2 / Tier 3 中的 `.helloagents/...` 路径默认按项目级存储路径解析;`project_store_mode=repo-shared` 时按共享知识/方案目录解析
322
322
 
323
- Tier 1 — 恢复当前链路时优先读取:
324
- - 当前 `STATE.md` → 恢复快照(始终取当前项目存储中的 `state_path`;先确认当前消息仍是同一任务,再用它找回最近进度)
323
+ Tier 1 — 恢复当前任务时优先读取:
324
+ - 当前状态文件(`state_path`)→ 先确认当前消息仍是同一任务,再用它找回最近进度
325
325
 
326
326
  Tier 2 — 理解项目时读取:
327
327
  - .helloagents/context.md → 项目架构、技术栈、目录结构、模块索引
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.9-beta.1",
3
+ "version": "3.0.10-beta.1",
4
4
  "description": "Quality-driven orchestration kernel for AI CLIs",
5
5
  "contextFileName": "bootstrap.md",
6
6
  "author": "HelloWind",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "helloagents",
3
- "version": "3.0.9-beta.1",
3
+ "version": "3.0.10-beta.1",
4
4
  "type": "module",
5
5
  "description": "HelloAGENTS — The orchestration kernel that makes any AI CLI smarter. Adds intelligent routing, quality verification (Ralph Loop), safety guards, and notifications.",
6
6
  "author": "HelloWind",
@@ -27,7 +27,13 @@ export function isManagedCodexModelInstruction(line = '') {
27
27
  }
28
28
 
29
29
  export function isManagedCodexNotify(line = '') {
30
- return line.includes('codex-notify')
30
+ const value = String(line || '').replace(/\\/g, '/')
31
+ return value.includes(CODEX_MANAGED_TOML_COMMENT)
32
+ || (
33
+ value.includes('codex-notify')
34
+ && value.includes('/scripts/notify.mjs')
35
+ && /(^|[/\\])helloagents([/\\]|-|$)|[/\\]plugins[/\\]helloagents[/\\]/i.test(value)
36
+ )
31
37
  }
32
38
 
33
39
  export function isManagedCodexBackupInstruction(line = '') {
@@ -51,7 +57,7 @@ function formatManagedCodexNotifyValue(notifyScriptPath) {
51
57
  }
52
58
 
53
59
  function formatManagedCodexNotifyLine(notifyScriptPath) {
54
- return `notify = ${formatManagedCodexNotifyValue(notifyScriptPath)}`
60
+ return `notify = ${formatManagedCodexNotifyValue(notifyScriptPath)} ${CODEX_MANAGED_TOML_COMMENT}`
55
61
  }
56
62
 
57
63
  function removeTopLevelLinesBeingReplaced(toml, lines) {
@@ -20,6 +20,7 @@ import {
20
20
  } from './cli-codex-config.mjs';
21
21
  import {
22
22
  readTopLevelTomlLine,
23
+ readTopLevelTomlBlock,
23
24
  readTomlKeyInSection,
24
25
  removeTomlKeyInSection,
25
26
  ensureTomlKeyInSection,
@@ -98,7 +99,8 @@ function removeCodexMarketplaceEntry(marketplaceFile) {
98
99
  }
99
100
  if (!removedHelloagents) return false;
100
101
  if (!nextPlugins.length) {
101
- removeIfExists(marketplaceFile);
102
+ marketplace.plugins = [];
103
+ safeWrite(marketplaceFile, JSON.stringify(marketplace, null, 2) + '\n');
102
104
  return true;
103
105
  }
104
106
  marketplace.plugins = nextPlugins;
@@ -130,7 +132,7 @@ function cleanupCodexManagedConfig(configPath, { removePluginConfig = false } =
130
132
  let toml = safeRead(configPath) || '';
131
133
 
132
134
  const currentModelInstructions = readTopLevelTomlLine(toml, 'model_instructions_file');
133
- const currentNotify = readTopLevelTomlLine(toml, 'notify');
135
+ const currentNotify = readTopLevelTomlBlock(toml, 'notify');
134
136
  const currentCodexHooks = readTomlKeyInSection(toml, '[features]', 'codex_hooks');
135
137
 
136
138
  const shouldRestoreModelInstructions = isManagedCodexModelInstruction(currentModelInstructions);
@@ -153,7 +155,7 @@ function cleanupCodexManagedConfig(configPath, { removePluginConfig = false } =
153
155
  }
154
156
 
155
157
  const backupModelInstructions = readTopLevelTomlLine(backupToml, 'model_instructions_file');
156
- const backupNotify = readTopLevelTomlLine(backupToml, 'notify');
158
+ const backupNotify = readTopLevelTomlBlock(backupToml, 'notify');
157
159
  const backupCodexHooks = readTomlKeyInSection(backupToml, '[features]', 'codex_hooks');
158
160
 
159
161
  toml = restoreCodexTopLevelConfig(toml, {