1
0
Эх сурвалжийг харах

docs: refresh subagent support matrix

Codex 2 долоо хоног өмнө
parent
commit
6b55d9df6b

+ 171 - 58
docs/superpowers/specs/2026-06-05-multi-agent-adaptation-final-spec.md

@@ -64,7 +64,7 @@ webnovel-writer/
 本 spec 解决的是**多智能体适配最终形态**,包含两层含义:
 
 1. **多宿主适配**:同一套 Webnovel Writer 能在 Claude Code、Codex、Cursor、Gemini CLI、OpenCode、GitHub Copilot CLI 等宿主中运行。
-2. **多 subagent 适配**:`context-agent`、`reviewer`、`data-agent`、`deconstruction-agent` 能在不同宿主的 agent/subagent 能力中被正确调度,能力不足时有明确降级规则。
+2. **多 subagent 适配**:`webnovel-context-agent`、`webnovel-reviewer`、`webnovel-data-agent`、`webnovel-deconstruction-agent` 能在不同宿主的 agent/subagent 能力中被正确调度,能力不足时有明确降级规则;旧名只作为迁移 alias
 
 本 spec 不只是“补几个 manifest”,而是规定最终状态下:
 
@@ -90,16 +90,20 @@ webnovel-writer/
    - 现有 Claude Code 安装路径、skill 名称、agent 名称和核心流程不破坏。
    - `/webnovel-init`、`/webnovel-plan`、`/webnovel-write`、`/webnovel-review`、`/webnovel-query`、`/webnovel-dashboard` 继续可用。
 
-3. **Codex / Cursor 原生插件优先**
+3. **Codex / Cursor / Copilot 原生插件优先**
    - Codex 使用 `.codex-plugin/plugin.json` 加载 plugin root 下的 `skills/`。
+   - Codex 使用 `[agents.<name>]` TOML 配置注册可 `spawn_agent` 的写作角色。
    - Cursor 使用 `.cursor-plugin/plugin.json` 加载 plugin root 下的 `skills/`、`agents/`、`hooks`。
+   - Copilot CLI 使用原生 `plugin.json` 或 `.github/plugin/plugin.json` 加载 `agents/`、`skills/`、`hooks`。
 
-4. **Gemini / OpenCode / Copilot 使用生成适配**
-   - 这些宿主能力差异更大,最终形态允许生成宿主原生产物。
+4. **Gemini / OpenCode / Copilot 使用生成/同步适配**
+   - Gemini 使用 generated extension root,输出 `gemini-extension.json`、`skills/`、`agents/`、`commands/`。
+   - OpenCode 使用 generated `.opencode/agents` / `.opencode/skills` / `opencode.json`,JS plugin 只承担 hooks 或自定义工具。
+   - Copilot CLI 使用 generated native plugin artifacts,Claude compatibility 只作为 fallback。
    - 生成产物来自源目录,不手工维护双份。
 
 5. **subagent 调度语义平台化**
-   - skill 中只表达“调用 `context-agent`”,不写死 `Agent(...)`。
+   - skill 中只表达“调用 `webnovel-context-agent`”,不写死 `Agent(...)`。
    - 平台如何调用由 `using-webnovel-writer` 与 adapter 负责。
 
 6. **Python runtime 可移植**
@@ -115,7 +119,7 @@ webnovel-writer/
 2. 不把 Python CLI 改成 MCP server。
 3. 不保证所有宿主有完全一致的 UI 入口。
 4. 不要求不支持 hooks 的宿主强行注入 session bootstrap。
-5. 不要求所有宿主第一阶段都支持完整 `webnovel-write` 多 agent 链。
+5. 不要求未安装最新版本、未信任插件或关闭 subagent 的宿主支持完整 `webnovel-write` 多 agent 链。
 6. 不支持复制粘贴式多份 skill 文档维护。
 
 ---
@@ -171,15 +175,15 @@ Shopify 的核心做法:
 Compound Engineering 的核心做法:
 
 - Claude 是源
-- Codex 原生插件先保证 skills
-- 完整 agents 体验需要 companion converter
+- Codex / Cursor / Copilot 逐步转向原生 plugin manifest
+- agents 体验通过 converter 把 Claude 源 agent 转为宿主原生配置
 - 明确接受不同宿主能力降级
 
 适合 Webnovel Writer 借鉴的点:
 
-- agents 是跨宿主最难部分,可以分阶段完成
-- Codex 第一阶段不必阻塞在完整 agent 原生注册上
-- 文档必须说明“完整写作链需要 subagent 支持”
+- agents 是跨宿主最难部分,必须有 converter、lint 和验收
+- Codex 现在已有稳定 multi-agent 工具,不能再把 Codex 只当 skills-only 宿主
+- 文档必须说明“完整写作链需要 subagent 支持”,同时列出各宿主当前原生入口
 
 ### 3.5 wshobson/agents 模式
 
@@ -188,7 +192,7 @@ wshobson/agents 的核心做法:
 - `plugins/` 是唯一源
 - `tools/adapters/` 生成 Codex、Gemini、OpenCode、Copilot 等宿主产物
 - 对 skill body 大小、工具名、agent 名称冲突、model mapping 做静态检查
-- command 在 Codex 转 skill,在 Gemini 转 TOML
+- command 在 Codex 转 skill,在 Gemini 转 TOML,在 Copilot 转 plugin command 或 skill
 
 适合 Webnovel Writer 借鉴的点:
 
@@ -197,6 +201,28 @@ wshobson/agents 的核心做法:
 - agent 名称应全局唯一,避免跨插件冲突
 - 生成产物必须有 drift check
 
+### 3.6 最新 subagent 能力快照
+
+调研日期:2026-06-05。以下只记录官方文档或官方仓库能确认的能力,不用旧版经验推断。
+
+| 宿主 | 当前 subagent 状态 | 插件/分发状态 | 对 Webnovel Writer 的结论 |
+|------|--------------------|---------------|----------------------------|
+| Claude Code | 原生 subagents。`agents/*.md` 支持 YAML frontmatter;内置 Explore、Plan、general-purpose;插件 `agents/` 会被递归扫描;`/agents` 可管理;普通 subagent 不能再 spawn subagent,fork/agent teams 是更高级路径 | 原生 plugins 支持 skills、agents、hooks、MCP | 继续一级支持。源 `agents/*.md` 可以作为 Claude 原生事实源 |
+| Codex CLI / App | `features.multi_agent` 是 stable 且默认开启;工具为 `spawn_agent`、`send_input`、`resume_agent`、`wait_agent`、`close_agent`;支持 `agents.max_threads`、`agents.max_depth`、`agents.<name>.config_file`、`agents.<name>.description`、`agents.<name>.nickname_candidates`;hooks 支持 `SubagentStart` / `SubagentStop` | 原生 `.codex-plugin/plugin.json` 支持 skills、hooks、MCP、apps;agent role 走 Codex TOML config 层 | 不再视为 skills-only。最终必须生成 Codex agent role config,`webnovel-write` 可作为 full-agent 验收目标 |
+| Cursor | 原生 subagents 可在 editor、CLI、Cloud Agent 中使用;自定义 agent 文件位于 `.cursor/agents/` 或 `~/.cursor/agents/`;Agent 会把 custom subagents 暴露为可用工具;Cursor 2.5 起 subagent 可在具备 Task 权限时启动 child subagents | Cursor plugins 可打包 rules、skills、agents、commands、MCP、hooks;`.cursor-plugin/plugin.json` 是目标分发形态 | 原生支持 full-agent。要同时提供 plugin agents path 与 `.cursor/agents` generated fallback |
+| Gemini CLI | 原生 subagents 默认开启;显式调用用 `@agent_name`;custom agents 位于 `.gemini/agents/*.md` 或 `~/.gemini/agents/*.md`;agent frontmatter 支持 `name`、`description`、`tools`、`mcpServers`、`model`、`temperature`、`max_turns`、`timeout_mins`;subagent 不能再调用 subagent;extensions 可打包 subagents | 原生 extensions 可包含 `gemini-extension.json`、`GEMINI.md`、skills、agents、commands | 确认有原生 subagent。生成 Gemini extension root,full-agent 可顺序执行,但不要设计嵌套 subagent |
+| OpenCode | 原生 agents 分 `primary` 和 `subagent`;subagent 可自动调用或 `@agent` 调用;Markdown agents 位于 `.opencode/agents/` 或 `~/.config/opencode/agents/`;`permission.task` 控制可调用哪些 subagent | JS/TS plugins 用于 hooks、custom tools、事件;agents/skills 走配置和原生目录 | 生成 `.opencode/agents` 与 `opencode.json` 是主路径,JS plugin 只做 bootstrap/hook/custom tool |
+| GitHub Copilot CLI | 原生 custom agents;内置 Explore、Task、General-purpose、Code-review;模型可把任务委托给 subsidiary subagent process;支持 `/agent`、自然语言指定、`copilot --agent=<name>`;插件 agents 使用 `.agent.md` 文件,内置工具含 `task`、`read_agent`、`list_agents` | 原生 `plugin.json` 支持 `agents`、`skills`、`commands`、`hooks`、`mcpServers`、`lspServers`;manifest 可在 `.plugin/`、根 `plugin.json`、`.github/plugin/`、`.claude-plugin/` | 不再以 Claude compatibility 为第一路径。最终生成 Copilot native plugin,Claude metadata 仅 fallback |
+
+来源:
+
+- Claude Code:`https://code.claude.com/docs/en/sub-agents.md`、`https://code.claude.com/docs/en/plugins.md`
+- Codex:`https://developers.openai.com/codex/config-reference`、`https://developers.openai.com/codex/plugins/build`
+- Cursor:`https://cursor.com/docs/subagents`、`https://cursor.com/docs/plugins`
+- Gemini CLI:`https://github.com/google-gemini/gemini-cli/blob/main/docs/core/subagents.md`
+- OpenCode:`https://opencode.ai/docs/agents/`、`https://opencode.ai/docs/plugins/`
+- GitHub Copilot CLI:`https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-plugin-reference`、`https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/invoke-custom-agents`
+
 ---
 
 ## 4. 核心设计原则
@@ -255,7 +281,7 @@ webnovel-writer/dashboard/
 | 使用 `Read` 工具读取文件 | 读取文件 |
 | 使用 `Bash` 运行命令 | 运行命令 |
 | 使用 `Grep` 搜索 | 搜索 |
-| 使用 `Agent` 调用 `reviewer` | 调用 `reviewer` subagent |
+| 使用 `Agent` 工具调用 `webnovel-reviewer` | 调用 `webnovel-reviewer` subagent |
 | 使用 `AskUserQuestion` 询问用户 | 向用户确认 |
 
 Claude Code 专用工具名只允许出现在:
@@ -274,7 +300,7 @@ Claude Code 专用工具名只允许出现在:
 因此最终 skill 应表达为:
 
 ```text
-调用 `context-agent` subagent 生成写作任务书。
+调用 `webnovel-context-agent` subagent 生成写作任务书。
 按当前宿主的 subagent 调度方式执行;若当前宿主不支持 subagent,进入兼容模式或阻断。
 ```
 
@@ -516,14 +542,50 @@ Codex 支持级别:
 |------|------|
 | skills | 原生 `.codex-plugin/plugin.json` 指向 `./skills/` |
 | hooks | 可选;用户需信任 hook |
-| agents | 最终通过 adapter 生成 Codex agent 配置,或由 skill 以 prompt template 调度 |
+| agents | 通过 `[agents.<name>]` TOML 注册可 `spawn_agent` 的角色 |
 | commands | 不单独维护;需要时由 skills 或 generated command-skill 暴露 |
 | tool mapping | `using-webnovel-writer/references/codex-tools.md` |
 
+Codex agent 配置由 adapter 生成,提交源模板,不手写分叉业务文档。
+
+推荐生成:
+
+```text
+config/codex/webnovel-writer-agents.toml
+config/codex/agents/
+├── webnovel-context-agent.toml
+├── webnovel-data-agent.toml
+├── webnovel-deconstruction-agent.toml
+└── webnovel-reviewer.toml
+```
+
+示例:
+
+```toml
+[features]
+multi_agent = true
+
+[agents]
+max_threads = 6
+max_depth = 1
+
+[agents.webnovel-context-agent]
+description = "Assemble chapter writing briefs from outline, contracts, memory, and review feedback."
+config_file = "agents/webnovel-context-agent.toml"
+nickname_candidates = ["Context"]
+
+[agents.webnovel-reviewer]
+description = "Review drafted chapters and return structured blocking/non-blocking issues."
+config_file = "agents/webnovel-reviewer.toml"
+nickname_candidates = ["Reviewer"]
+```
+
 Codex 多 agent 要求:
 
-- 完整 `webnovel-write` 需要 Codex 启用 multi-agent 能力。
-- 若当前 Codex 环境没有 subagent 能力:
+- `features.multi_agent` 是稳定能力,默认开启。
+- 运行时调用使用 `spawn_agent`、`send_input`、`resume_agent`、`wait_agent`、`close_agent`。
+- 完整 `webnovel-write` 需要当前环境未禁用 multi-agent,且 `agents.max_depth` / `agents.max_threads` 足以顺序调用三个写作 subagent。
+- 若当前 Codex 环境被用户或企业配置禁用 subagent 能力:
   - `webnovel-query`、`webnovel-learn`、`webnovel-dashboard` 可执行
   - `webnovel-review` 可进入单 reviewer prompt 兼容模式
   - `webnovel-write` 默认阻断,除非用户显式选择 `--single-agent`
@@ -573,7 +635,9 @@ Gemini CLI 最终采用**生成 extension root** 方式,不直接把仓库根
 
 - 当前仓库 root 不是 plugin root。
 - Gemini extension 需要 `gemini-extension.json` 与 `GEMINI.md` 在 extension root。
+- Gemini 原生支持 custom subagents,extension root 可以直接打包 `agents/`。
 - Gemini 的 skills、agents、commands 发现路径更适合扁平生成。
+- Gemini subagent 不能再调用 subagent,`webnovel-write` 必须由主流程顺序调度 `webnovel-context-agent`、`webnovel-reviewer`、`webnovel-data-agent`,不得设计嵌套 agent 树。
 
 生成产物:
 
@@ -635,7 +699,7 @@ Gemini tool mapping:
 
 ### 6.5 OpenCode
 
-OpenCode 使用 JS 插件 + 生成目录
+OpenCode 使用原生 `.opencode/agents` / `.opencode/skills` / `opencode.json` 作为主路径,JS/TS plugin 只用于 hooks、custom tools、事件监听或 bootstrap
 
 新增:
 
@@ -645,9 +709,10 @@ webnovel-writer/.opencode/plugins/webnovel-writer.js
 
 最终行为:
 
-1. JS 插件将 plugin root 下的 `skills/` 注册到 OpenCode config。
-2. JS 插件将 bootstrap 注入第一条 user message。
-3. Adapter 生成 OpenCode 原生 agents/commands/skills 到 `.opencode/` 或安装目录。
+1. Adapter 生成 OpenCode 原生 agents/skills/config 到 `.opencode/` 或安装目录。
+2. 每个写作 subagent 使用 `mode: subagent`。
+3. `opencode.json` 或 Markdown frontmatter 配置 `permission.task`,控制 primary agent 能调用哪些 subagent。
+4. JS 插件可选,用于注入 bootstrap、注册 custom tools 或响应 OpenCode 生命周期事件,不承载完整业务 prompt。
 
 生成产物:
 
@@ -658,10 +723,29 @@ dist/opencode/webnovel-writer/
 │   │   └── webnovel-writer.js
 │   ├── skills/
 │   ├── agents/
+│   │   ├── webnovel-context-agent.md
+│   │   ├── webnovel-data-agent.md
+│   │   ├── webnovel-deconstruction-agent.md
+│   │   └── webnovel-reviewer.md
 │   └── commands/
 └── opencode.json
 ```
 
+示例 agent frontmatter:
+
+```yaml
+---
+description: Assemble chapter writing briefs from outline, contracts, memory, and review feedback.
+mode: subagent
+permission:
+  read: allow
+  grep: allow
+  bash:
+    "python*": allow
+  edit: deny
+---
+```
+
 OpenCode tool mapping:
 
 | 源语义 | OpenCode |
@@ -676,23 +760,31 @@ OpenCode tool mapping:
 
 ### 6.6 GitHub Copilot CLI
 
-Copilot CLI 第一阶段使用 Claude plugin compatibility;最终可生成 Copilot 原生产物。
+Copilot CLI 使用原生 plugin manifest 和原生 custom agents。Claude plugin compatibility 只作为旧版本 fallback,不作为第一路径。
+
+原生 manifest 可以位于 plugin root `plugin.json`,也可以放在 `.github/plugin/plugin.json`。为避免和 Claude/Codex/Cursor manifest 混杂,Webnovel Writer 推荐由 adapter 生成 Copilot dist。
 
 最终生成产物:
 
 ```text
 dist/copilot/webnovel-writer/
-├── .copilot/
-│   ├── skills/
-│   ├── agents/
-│   └── commands/
-└── plugin.json
+├── plugin.json
+├── agents/
+│   ├── webnovel-context-agent.agent.md
+│   ├── webnovel-data-agent.agent.md
+│   ├── webnovel-deconstruction-agent.agent.md
+│   └── webnovel-reviewer.agent.md
+├── skills/
+├── commands/
+└── hooks/
 ```
 
 支持策略:
 
-- 若 Copilot 原生插件可直接读取 Claude plugin metadata,则优先用 native plugin install。
-- 若需要完整 agents/commands,则使用生成器输出 `.copilot/`。
+- `plugin.json` 声明 `agents`、`skills`、`commands`、`hooks`,默认目录即可时可省略路径字段。
+- agents 使用 `*.agent.md` 文件,文件名决定 agent ID;必须带 `webnovel-` 前缀,避免和 Copilot 内置 `explore`、`task`、`code-review`、`general-purpose` 冲突。
+- 主流程调用 subagent 依赖 Copilot CLI 的 `task` tool;需要读取 agent 定义时使用 `read_agent`,需要枚举时使用 `list_agents`。
+- 若 Copilot 当前版本只能读取 `.claude-plugin/plugin.json`,adapter 可生成 compatibility manifest,但必须标记为 fallback。
 - 不写入共享 `~/.agents/skills`,避免 shadowing 其他宿主插件。
 
 ### 6.7 Factory Droid / Qwen Code
@@ -933,7 +1025,7 @@ allowed-tools: Read Write Edit Grep Bash Agent
 最终正文不应写:
 
 ```text
-必须使用 `Agent` 工具调用 `context-agent`
+必须使用 `Agent` 工具调用 `webnovel-context-agent`
 ```
 
 应写:
@@ -962,7 +1054,7 @@ skills/using-webnovel-writer/references/claude-tools.md
 
 ### 9.5 webnovel-init 改造重点
 
-`webnovel-init` 涉及 `deconstruction-agent`、`AskUserQuestion`、`WebSearch/WebFetch`
+`webnovel-init` 涉及 `webnovel-deconstruction-agent`、用户确认、Web 搜索/网页抓取
 
 最终要求:
 
@@ -1041,11 +1133,11 @@ Agent adapter 负责把源 agent 转为宿主格式。
 | 宿主 | 输出 |
 |------|------|
 | Claude Code | `agents/*.md` 原样 |
-| Cursor | `agents/*.md` 原样或轻度 frontmatter 兼容 |
-| Codex | `.codex/agents/webnovel-writer/<agent>.toml` 或 prompt template |
-| Gemini | `agents/webnovel-writer__<agent>.md`,工具名映射 |
-| OpenCode | `.opencode/agents/<agent>.md`,工具权限块映射 |
-| Copilot | `.copilot/agents/<agent>.md` |
+| Cursor | plugin root `agents/*.md` 原样;同时可生成 `.cursor/agents/<agent>.md` fallback |
+| Codex | `config/codex/webnovel-writer-agents.toml` 与 `config/codex/agents/<agent>.toml`,内容可合并进受信任项目的 `.codex/config.toml` |
+| Gemini | `dist/gemini/webnovel-writer/agents/webnovel-writer__<agent>.md`,工具名映射,禁止嵌套 subagent |
+| OpenCode | `dist/opencode/webnovel-writer/.opencode/agents/<agent>.md`,`mode: subagent` 与 `permission.task` 映射 |
+| Copilot | `dist/copilot/webnovel-writer/agents/<agent>.agent.md` |
 
 ### 10.4 model mapping
 
@@ -1172,8 +1264,9 @@ skills/using-webnovel-writer/references/
 | 网页搜索 | `WebSearch` | web search if enabled | `google_web_search` | web search if enabled | no guaranteed equivalent |
 | 抓取网页 | `WebFetch` | web fetch if enabled | `web_fetch` | web fetch if enabled | `web_fetch` |
 | 询问用户 | `AskUserQuestion` / direct | direct / structured input if available | `ask_user` | direct | direct |
-| 调用 subagent | `Agent` / `Task` | `spawn_agent` or named subagent prompt | `@agent` | `task` / `@agent` | `task` |
-| 任务跟踪 | `TodoWrite` | plan/update if available | no guaranteed equivalent | `todowrite` | todos/sql if available |
+| 调用 subagent | `Agent` / `Task` | `spawn_agent` + `send_input` + `resume_agent` + `wait_agent` + `close_agent` | `@agent` | `task` / `@agent`,受 `permission.task` 控制 | `task` |
+| 读取/枚举 agent | `/agents` | `[agents.<name>]` config | `.gemini/agents` / extension `agents/` | `.opencode/agents` | `read_agent` / `list_agents` |
+| 任务跟踪 | `TodoWrite` | plan/update if available | `write_todos` if available | `todowrite` | todos/sql if available |
 
 ### 12.2 skill 正文约束
 
@@ -1212,9 +1305,9 @@ skills/using-webnovel-writer/references/
 
 核心不变:
 
-- `context-agent` 负责写前 research 与任务书。
-- `reviewer` 负责可验证问题。
-- `data-agent` 负责事实提取与 artifacts。
+- `webnovel-context-agent` 负责写前 research 与任务书。
+- `webnovel-reviewer` 负责可验证问题。
+- `webnovel-data-agent` 负责事实提取与 artifacts。
 - 主流程负责 orchestration、写正文、落库、恢复。
 
 ### 13.2 subagent 能力门槛
@@ -1224,6 +1317,7 @@ skills/using-webnovel-writer/references/
 - 至少支持顺序调用 subagent。
 - subagent 能读取必要文件与运行必要查询命令。
 - subagent 输出能返回主流程。
+- 当前宿主的 subagent 深度、权限和工具 allowlist 允许 `webnovel-context-agent`、`webnovel-reviewer`、`webnovel-data-agent` 三个角色完成各自任务。
 
 不要求:
 
@@ -1231,6 +1325,17 @@ skills/using-webnovel-writer/references/
 - 必须独立工作目录。
 - 必须持久 agent 会话。
 
+宿主差异必须在 adapter 与验收中显式处理:
+
+| 宿主 | 约束 |
+|------|------|
+| Claude Code | 普通 subagent 不再 spawn subagent;`webnovel-write` 必须由主流程顺序调度 |
+| Codex | 受 `features.multi_agent`、`agents.max_depth`、`agents.max_threads` 限制;默认 depth=1 足够主流程调一级 subagent |
+| Cursor | Cursor 2.5 起 child subagent 需要 Task 权限;Webnovel Writer 默认仍按一级顺序调度 |
+| Gemini | subagent 不能调用 subagent;只允许主流程显式 `@agent` 顺序调用 |
+| OpenCode | primary/subagent 调用由 `permission.task` 控制;adapter 必须生成允许列表 |
+| Copilot | 通过 `task` 委托,必要时用 `read_agent` / `list_agents` 确认 agent 可见 |
+
 ### 13.3 single-agent 兼容模式
 
 为低能力宿主预留 `--single-agent`,但默认不启用。
@@ -1307,7 +1412,7 @@ README 快速开始保留 Claude Code 作为推荐路径,但增加:
 1. Claude Code marketplace:保持现状。
 2. Codex plugin:补 `.codex-plugin/plugin.json`,后续申请目录。
 3. Cursor plugin:补 `.cursor-plugin` marketplace。
-4. Gemini/OpenCode/Copilot:先提供生成安装路径,成熟后再考虑原生发布。
+4. Gemini/OpenCode/Copilot:先提供 generated native artifacts 的安装路径,成熟后再考虑官方目录或包发布。
 
 ---
 
@@ -1351,15 +1456,15 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 | 宿主 | 最低验收 |
 |------|----------|
 | Claude Code | 安装插件;`/webnovel-query` 查询 fixture;`/webnovel-review` 审查 fixture;`/webnovel-dashboard` 启动 |
-| Codex | plugin 可读;skills 可列出;`webnovel-query` fixture 通过;`webnovel-review` full/compat 其中一种通过 |
-| Cursor | plugin 可安装;skills/agents 可发现;`webnovel-query` 与 `webnovel-review` 通过 |
-| Gemini | 生成 extension;`gemini extensions install <dist>` 成功;`/webnovel-query` 或 command TOML 通过 |
-| OpenCode | JS plugin 加载;skills 注册;`webnovel-dashboard` 或 query 通过 |
-| Copilot | 生成 `.copilot` artifacts;skill/agent 可发现;query smoke 通过 |
+| Codex | plugin 可读;skills 可列出;`[agents.webnovel-reviewer]` 可加载;`webnovel-query` fixture 通过;`webnovel-review` 通过 `spawn_agent` full-agent 路径或明确 compatibility fallback |
+| Cursor | plugin 可安装;skills/agents 可发现;`.cursor/agents` fallback 可生成;`webnovel-query` 与 `webnovel-review` 通过 |
+| Gemini | 生成 extension;`gemini extensions install <dist>` 成功;extension `agents/` 可发现;`@webnovel-writer__webnovel-reviewer` 或 command smoke 通过 |
+| OpenCode | 生成 `.opencode/agents` / `.opencode/skills` / `opencode.json`;`mode: subagent` agent 可发现;`permission.task` 允许调用 reviewer;`webnovel-dashboard` 或 query 通过 |
+| Copilot | 生成 native `plugin.json` 与 `agents/*.agent.md`;`list_agents` 可见;`read_agent webnovel-reviewer` 成功;query 或 review smoke 通过 |
 
 ### 15.4 写章验收
 
-完整写章验收只要求在支持 subagent 的宿主上通过
+完整写章验收只要求在支持 subagent 的宿主上通过。非 Claude 里优先选择 Codex 或 Cursor 做第一条 full-agent 绿线,再扩展到 Gemini/OpenCode/Copilot。
 
 输入:
 
@@ -1402,13 +1507,15 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 ### Phase 1:原生 manifest 与环境变量兼容
 
-目标:不改变业务流程,先让 Codex/Cursor 能发现 plugin。
+目标:不改变业务流程,先让 Codex/Cursor/Copilot 能发现 plugin,并让 Codex 具备 agent role 配置基线
 
 改动:
 
 - 新增 `.codex-plugin/plugin.json`
 - 新增 `.cursor-plugin/plugin.json`
 - 新增 `.cursor-plugin/marketplace.json`
+- 新增 Copilot native plugin manifest 模板
+- 新增 Codex `[agents.<name>]` role config 模板
 - 新增 `hooks/session-start`
 - 新增 `using-webnovel-writer`
 - skill bash 片段开始迁移到 `WEBNOVEL_PLUGIN_ROOT`
@@ -1417,7 +1524,9 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 - Claude Code 现有安装不破坏。
 - Codex 能列出 skills。
+- Codex 能读取 `webnovel-reviewer` agent role。
 - Cursor 能安装 plugin。
+- Copilot native plugin manifest schema 合法。
 
 ### Phase 2:Skill 瘦身与 Claude-only prose 清理
 
@@ -1462,8 +1571,8 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 - 新增 `scripts/generate_harness_artifacts.py`
 - 生成 Gemini extension root
-- 生成 OpenCode `.opencode`
-- 生成 Copilot `.copilot`
+- 生成 OpenCode `.opencode/agents`、`.opencode/skills`、`opencode.json`
+- 生成 Copilot native `plugin.json`、`agents/*.agent.md`、`skills/`、`commands/`
 - CI 加 drift check
 
 验收:
@@ -1478,11 +1587,11 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 验收顺序:
 
 1. Claude Code:完整 init/query/review/write。
-2. Codex:skills + query + review。
+2. Codex:skills + query + review + 一次 `spawn_agent`
 3. Cursor:skills/agents + query + review。
-4. Gemini:generated extension + query。
-5. OpenCode:plugin JS + dashboard/query。
-6. Copilot:generated skills/agents + query
+4. Gemini:generated extension + agent discovery + query/review
+5. OpenCode:native agents/skills + dashboard/query。
+6. Copilot:native plugin + agents + query/review
 
 ---
 
@@ -1506,7 +1615,7 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 1. Webnovel Writer 不把 Python CLI 改成 MCP。
 2. Claude Code 仍是最佳体验路径。
 3. Codex/Cursor 走原生 plugin manifest。
-4. Gemini/OpenCode/Copilot 最终走生成产物
+4. Gemini/OpenCode/Copilot 走生成的原生 artifacts,不走手写副本
 5. `webnovel-write` 默认不在无 subagent 宿主自动降级。
 6. `webnovel-review` 可以有 compatibility mode。
 7. 所有新 agent 名必须带 `webnovel-` 前缀。
@@ -1520,10 +1629,14 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 - [ ] Claude Code 原安装流程不破坏。
 - [ ] Codex manifest 存在且能加载 `skills/`。
+- [ ] Codex agent role config 可生成,并能注册 `webnovel-context-agent` / `webnovel-reviewer` / `webnovel-data-agent`。
 - [ ] Cursor manifest 存在且能加载 `skills/` / `agents/`。
+- [ ] Cursor `.cursor/agents` fallback 可生成。
 - [ ] Gemini dist 可生成并安装。
-- [ ] OpenCode dist 可生成并加载 JS plugin。
-- [ ] Copilot dist 可生成。
+- [ ] Gemini dist 包含 extension `agents/`,且不生成嵌套 subagent 依赖。
+- [ ] OpenCode dist 可生成 `.opencode/agents`、`.opencode/skills`、`opencode.json`,JS plugin 只作可选 hook/bootstrap。
+- [ ] Copilot dist 可生成 native `plugin.json` 与 `agents/*.agent.md`。
+- [ ] Copilot native plugin schema 合法,agents/skills 可发现。
 - [ ] `using-webnovel-writer` 存在并包含所有宿主 tool mapping。
 - [ ] 所有 skill 使用 `WEBNOVEL_PLUGIN_ROOT` 兼容变量。
 - [ ] 新增/改造后的 skill 正文不写死 Claude-only 工具名。