Преглед на файлове

docs: refresh subagent support matrix

Codex преди 3 седмици
родител
ревизия
6b55d9df6b
променени са 1 файла, в които са добавени 171 реда и са изтрити 58 реда
  1. 171 58
      docs/superpowers/specs/2026-06-05-multi-agent-adaptation-final-spec.md

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

@@ -64,7 +64,7 @@ webnovel-writer/
 本 spec 解决的是**多智能体适配最终形态**,包含两层含义:
 本 spec 解决的是**多智能体适配最终形态**,包含两层含义:
 
 
 1. **多宿主适配**:同一套 Webnovel Writer 能在 Claude Code、Codex、Cursor、Gemini CLI、OpenCode、GitHub Copilot CLI 等宿主中运行。
 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”,而是规定最终状态下:
 本 spec 不只是“补几个 manifest”,而是规定最终状态下:
 
 
@@ -90,16 +90,20 @@ webnovel-writer/
    - 现有 Claude Code 安装路径、skill 名称、agent 名称和核心流程不破坏。
    - 现有 Claude Code 安装路径、skill 名称、agent 名称和核心流程不破坏。
    - `/webnovel-init`、`/webnovel-plan`、`/webnovel-write`、`/webnovel-review`、`/webnovel-query`、`/webnovel-dashboard` 继续可用。
    - `/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 使用 `.codex-plugin/plugin.json` 加载 plugin root 下的 `skills/`。
+   - Codex 使用 `[agents.<name>]` TOML 配置注册可 `spawn_agent` 的写作角色。
    - Cursor 使用 `.cursor-plugin/plugin.json` 加载 plugin root 下的 `skills/`、`agents/`、`hooks`。
    - 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 调度语义平台化**
 5. **subagent 调度语义平台化**
-   - skill 中只表达“调用 `context-agent`”,不写死 `Agent(...)`。
+   - skill 中只表达“调用 `webnovel-context-agent`”,不写死 `Agent(...)`。
    - 平台如何调用由 `using-webnovel-writer` 与 adapter 负责。
    - 平台如何调用由 `using-webnovel-writer` 与 adapter 负责。
 
 
 6. **Python runtime 可移植**
 6. **Python runtime 可移植**
@@ -115,7 +119,7 @@ webnovel-writer/
 2. 不把 Python CLI 改成 MCP server。
 2. 不把 Python CLI 改成 MCP server。
 3. 不保证所有宿主有完全一致的 UI 入口。
 3. 不保证所有宿主有完全一致的 UI 入口。
 4. 不要求不支持 hooks 的宿主强行注入 session bootstrap。
 4. 不要求不支持 hooks 的宿主强行注入 session bootstrap。
-5. 不要求所有宿主第一阶段都支持完整 `webnovel-write` 多 agent 链。
+5. 不要求未安装最新版本、未信任插件或关闭 subagent 的宿主支持完整 `webnovel-write` 多 agent 链。
 6. 不支持复制粘贴式多份 skill 文档维护。
 6. 不支持复制粘贴式多份 skill 文档维护。
 
 
 ---
 ---
@@ -171,15 +175,15 @@ Shopify 的核心做法:
 Compound Engineering 的核心做法:
 Compound Engineering 的核心做法:
 
 
 - Claude 是源
 - Claude 是源
-- Codex 原生插件先保证 skills
-- 完整 agents 体验需要 companion converter
+- Codex / Cursor / Copilot 逐步转向原生 plugin manifest
+- agents 体验通过 converter 把 Claude 源 agent 转为宿主原生配置
 - 明确接受不同宿主能力降级
 - 明确接受不同宿主能力降级
 
 
 适合 Webnovel Writer 借鉴的点:
 适合 Webnovel Writer 借鉴的点:
 
 
-- agents 是跨宿主最难部分,可以分阶段完成
-- Codex 第一阶段不必阻塞在完整 agent 原生注册上
-- 文档必须说明“完整写作链需要 subagent 支持”
+- agents 是跨宿主最难部分,必须有 converter、lint 和验收
+- Codex 现在已有稳定 multi-agent 工具,不能再把 Codex 只当 skills-only 宿主
+- 文档必须说明“完整写作链需要 subagent 支持”,同时列出各宿主当前原生入口
 
 
 ### 3.5 wshobson/agents 模式
 ### 3.5 wshobson/agents 模式
 
 
@@ -188,7 +192,7 @@ wshobson/agents 的核心做法:
 - `plugins/` 是唯一源
 - `plugins/` 是唯一源
 - `tools/adapters/` 生成 Codex、Gemini、OpenCode、Copilot 等宿主产物
 - `tools/adapters/` 生成 Codex、Gemini、OpenCode、Copilot 等宿主产物
 - 对 skill body 大小、工具名、agent 名称冲突、model mapping 做静态检查
 - 对 skill body 大小、工具名、agent 名称冲突、model mapping 做静态检查
-- command 在 Codex 转 skill,在 Gemini 转 TOML
+- command 在 Codex 转 skill,在 Gemini 转 TOML,在 Copilot 转 plugin command 或 skill
 
 
 适合 Webnovel Writer 借鉴的点:
 适合 Webnovel Writer 借鉴的点:
 
 
@@ -197,6 +201,28 @@ wshobson/agents 的核心做法:
 - agent 名称应全局唯一,避免跨插件冲突
 - agent 名称应全局唯一,避免跨插件冲突
 - 生成产物必须有 drift check
 - 生成产物必须有 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. 核心设计原则
 ## 4. 核心设计原则
@@ -255,7 +281,7 @@ webnovel-writer/dashboard/
 | 使用 `Read` 工具读取文件 | 读取文件 |
 | 使用 `Read` 工具读取文件 | 读取文件 |
 | 使用 `Bash` 运行命令 | 运行命令 |
 | 使用 `Bash` 运行命令 | 运行命令 |
 | 使用 `Grep` 搜索 | 搜索 |
 | 使用 `Grep` 搜索 | 搜索 |
-| 使用 `Agent` 调用 `reviewer` | 调用 `reviewer` subagent |
+| 使用 `Agent` 工具调用 `webnovel-reviewer` | 调用 `webnovel-reviewer` subagent |
 | 使用 `AskUserQuestion` 询问用户 | 向用户确认 |
 | 使用 `AskUserQuestion` 询问用户 | 向用户确认 |
 
 
 Claude Code 专用工具名只允许出现在:
 Claude Code 专用工具名只允许出现在:
@@ -274,7 +300,7 @@ Claude Code 专用工具名只允许出现在:
 因此最终 skill 应表达为:
 因此最终 skill 应表达为:
 
 
 ```text
 ```text
-调用 `context-agent` subagent 生成写作任务书。
+调用 `webnovel-context-agent` subagent 生成写作任务书。
 按当前宿主的 subagent 调度方式执行;若当前宿主不支持 subagent,进入兼容模式或阻断。
 按当前宿主的 subagent 调度方式执行;若当前宿主不支持 subagent,进入兼容模式或阻断。
 ```
 ```
 
 
@@ -516,14 +542,50 @@ Codex 支持级别:
 |------|------|
 |------|------|
 | skills | 原生 `.codex-plugin/plugin.json` 指向 `./skills/` |
 | skills | 原生 `.codex-plugin/plugin.json` 指向 `./skills/` |
 | hooks | 可选;用户需信任 hook |
 | hooks | 可选;用户需信任 hook |
-| agents | 最终通过 adapter 生成 Codex agent 配置,或由 skill 以 prompt template 调度 |
+| agents | 通过 `[agents.<name>]` TOML 注册可 `spawn_agent` 的角色 |
 | commands | 不单独维护;需要时由 skills 或 generated command-skill 暴露 |
 | commands | 不单独维护;需要时由 skills 或 generated command-skill 暴露 |
 | tool mapping | `using-webnovel-writer/references/codex-tools.md` |
 | 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 要求:
 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-query`、`webnovel-learn`、`webnovel-dashboard` 可执行
   - `webnovel-review` 可进入单 reviewer prompt 兼容模式
   - `webnovel-review` 可进入单 reviewer prompt 兼容模式
   - `webnovel-write` 默认阻断,除非用户显式选择 `--single-agent`
   - `webnovel-write` 默认阻断,除非用户显式选择 `--single-agent`
@@ -573,7 +635,9 @@ Gemini CLI 最终采用**生成 extension root** 方式,不直接把仓库根
 
 
 - 当前仓库 root 不是 plugin root。
 - 当前仓库 root 不是 plugin root。
 - Gemini extension 需要 `gemini-extension.json` 与 `GEMINI.md` 在 extension root。
 - Gemini extension 需要 `gemini-extension.json` 与 `GEMINI.md` 在 extension root。
+- Gemini 原生支持 custom subagents,extension root 可以直接打包 `agents/`。
 - Gemini 的 skills、agents、commands 发现路径更适合扁平生成。
 - 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
 ### 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
 │   │   └── webnovel-writer.js
 │   ├── skills/
 │   ├── skills/
 │   ├── agents/
 │   ├── agents/
+│   │   ├── webnovel-context-agent.md
+│   │   ├── webnovel-data-agent.md
+│   │   ├── webnovel-deconstruction-agent.md
+│   │   └── webnovel-reviewer.md
 │   └── commands/
 │   └── commands/
 └── opencode.json
 └── 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 tool mapping:
 
 
 | 源语义 | OpenCode |
 | 源语义 | OpenCode |
@@ -676,23 +760,31 @@ OpenCode tool mapping:
 
 
 ### 6.6 GitHub Copilot CLI
 ### 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
 ```text
 dist/copilot/webnovel-writer/
 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 其他宿主插件。
 - 不写入共享 `~/.agents/skills`,避免 shadowing 其他宿主插件。
 
 
 ### 6.7 Factory Droid / Qwen Code
 ### 6.7 Factory Droid / Qwen Code
@@ -933,7 +1025,7 @@ allowed-tools: Read Write Edit Grep Bash Agent
 最终正文不应写:
 最终正文不应写:
 
 
 ```text
 ```text
-必须使用 `Agent` 工具调用 `context-agent`
+必须使用 `Agent` 工具调用 `webnovel-context-agent`
 ```
 ```
 
 
 应写:
 应写:
@@ -962,7 +1054,7 @@ skills/using-webnovel-writer/references/claude-tools.md
 
 
 ### 9.5 webnovel-init 改造重点
 ### 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` 原样 |
 | 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
 ### 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 |
 | 网页搜索 | `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` |
 | 抓取网页 | `WebFetch` | web fetch if enabled | `web_fetch` | web fetch if enabled | `web_fetch` |
 | 询问用户 | `AskUserQuestion` / direct | direct / structured input if available | `ask_user` | direct | direct |
 | 询问用户 | `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 正文约束
 ### 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、写正文、落库、恢复。
 - 主流程负责 orchestration、写正文、落库、恢复。
 
 
 ### 13.2 subagent 能力门槛
 ### 13.2 subagent 能力门槛
@@ -1224,6 +1317,7 @@ skills/using-webnovel-writer/references/
 - 至少支持顺序调用 subagent。
 - 至少支持顺序调用 subagent。
 - subagent 能读取必要文件与运行必要查询命令。
 - subagent 能读取必要文件与运行必要查询命令。
 - subagent 输出能返回主流程。
 - subagent 输出能返回主流程。
+- 当前宿主的 subagent 深度、权限和工具 allowlist 允许 `webnovel-context-agent`、`webnovel-reviewer`、`webnovel-data-agent` 三个角色完成各自任务。
 
 
 不要求:
 不要求:
 
 
@@ -1231,6 +1325,17 @@ skills/using-webnovel-writer/references/
 - 必须独立工作目录。
 - 必须独立工作目录。
 - 必须持久 agent 会话。
 - 必须持久 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 兼容模式
 ### 13.3 single-agent 兼容模式
 
 
 为低能力宿主预留 `--single-agent`,但默认不启用。
 为低能力宿主预留 `--single-agent`,但默认不启用。
@@ -1307,7 +1412,7 @@ README 快速开始保留 Claude Code 作为推荐路径,但增加:
 1. Claude Code marketplace:保持现状。
 1. Claude Code marketplace:保持现状。
 2. Codex plugin:补 `.codex-plugin/plugin.json`,后续申请目录。
 2. Codex plugin:补 `.codex-plugin/plugin.json`,后续申请目录。
 3. Cursor plugin:补 `.cursor-plugin` marketplace。
 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` 启动 |
 | 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 写章验收
 ### 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 与环境变量兼容
 ### Phase 1:原生 manifest 与环境变量兼容
 
 
-目标:不改变业务流程,先让 Codex/Cursor 能发现 plugin。
+目标:不改变业务流程,先让 Codex/Cursor/Copilot 能发现 plugin,并让 Codex 具备 agent role 配置基线
 
 
 改动:
 改动:
 
 
 - 新增 `.codex-plugin/plugin.json`
 - 新增 `.codex-plugin/plugin.json`
 - 新增 `.cursor-plugin/plugin.json`
 - 新增 `.cursor-plugin/plugin.json`
 - 新增 `.cursor-plugin/marketplace.json`
 - 新增 `.cursor-plugin/marketplace.json`
+- 新增 Copilot native plugin manifest 模板
+- 新增 Codex `[agents.<name>]` role config 模板
 - 新增 `hooks/session-start`
 - 新增 `hooks/session-start`
 - 新增 `using-webnovel-writer`
 - 新增 `using-webnovel-writer`
 - skill bash 片段开始迁移到 `WEBNOVEL_PLUGIN_ROOT`
 - skill bash 片段开始迁移到 `WEBNOVEL_PLUGIN_ROOT`
@@ -1417,7 +1524,9 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 
 - Claude Code 现有安装不破坏。
 - Claude Code 现有安装不破坏。
 - Codex 能列出 skills。
 - Codex 能列出 skills。
+- Codex 能读取 `webnovel-reviewer` agent role。
 - Cursor 能安装 plugin。
 - Cursor 能安装 plugin。
+- Copilot native plugin manifest schema 合法。
 
 
 ### Phase 2:Skill 瘦身与 Claude-only prose 清理
 ### 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`
 - 新增 `scripts/generate_harness_artifacts.py`
 - 生成 Gemini extension root
 - 生成 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
 - 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。
 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。
 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。
 1. Webnovel Writer 不把 Python CLI 改成 MCP。
 2. Claude Code 仍是最佳体验路径。
 2. Claude Code 仍是最佳体验路径。
 3. Codex/Cursor 走原生 plugin manifest。
 3. Codex/Cursor 走原生 plugin manifest。
-4. Gemini/OpenCode/Copilot 最终走生成产物
+4. Gemini/OpenCode/Copilot 走生成的原生 artifacts,不走手写副本
 5. `webnovel-write` 默认不在无 subagent 宿主自动降级。
 5. `webnovel-write` 默认不在无 subagent 宿主自动降级。
 6. `webnovel-review` 可以有 compatibility mode。
 6. `webnovel-review` 可以有 compatibility mode。
 7. 所有新 agent 名必须带 `webnovel-` 前缀。
 7. 所有新 agent 名必须带 `webnovel-` 前缀。
@@ -1520,10 +1629,14 @@ python -X utf8 webnovel-writer/scripts/webnovel.py --project-root <fixture> wher
 
 
 - [ ] Claude Code 原安装流程不破坏。
 - [ ] Claude Code 原安装流程不破坏。
 - [ ] Codex manifest 存在且能加载 `skills/`。
 - [ ] Codex manifest 存在且能加载 `skills/`。
+- [ ] Codex agent role config 可生成,并能注册 `webnovel-context-agent` / `webnovel-reviewer` / `webnovel-data-agent`。
 - [ ] Cursor manifest 存在且能加载 `skills/` / `agents/`。
 - [ ] Cursor manifest 存在且能加载 `skills/` / `agents/`。
+- [ ] Cursor `.cursor/agents` fallback 可生成。
 - [ ] Gemini dist 可生成并安装。
 - [ ] 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。
 - [ ] `using-webnovel-writer` 存在并包含所有宿主 tool mapping。
 - [ ] 所有 skill 使用 `WEBNOVEL_PLUGIN_ROOT` 兼容变量。
 - [ ] 所有 skill 使用 `WEBNOVEL_PLUGIN_ROOT` 兼容变量。
 - [ ] 新增/改造后的 skill 正文不写死 Claude-only 工具名。
 - [ ] 新增/改造后的 skill 正文不写死 Claude-only 工具名。