Appearance
功能规格说明:内置子 Agent 支持
创建日期:2025-12-08
用户场景与测试 (必填)
用户故事:基本子 Agent 访问(优先级:P1)
用户可以访问预配置的内置子 agent,而无需创建或配置自己的子 agent 文件。他们可以在安装系统后立即将任务委派给专门的 agent。
为什么是这个优先级:核心功能,无需用户配置即可提供即时价值并展示子 agent 系统的能力。
独立测试:可以通过使用内置子 agent 名称调用 Task 工具来全面测试,验证子 agent 成功执行并交付专门的任务完成。
验收场景:
- 假设全新安装且没有用户配置的子 agent,当用户使用 "Explore" 子 agent 类型调用 Task 工具时,则内置的 explore agent 成功执行并返回搜索结果
- 假设内置子 agent 可用,当用户调用 Task 工具但未提供有效的 subagent_type 时,则系统列出可用的子 agent,包括内置和用户配置的
用户故事:一致的子 Agent 接口(优先级:P2)
内置子 agent 与用户配置的子 agent 工作方式完全相同,在所有子 agent 类型中提供一致的体验。
为什么是这个优先级:确保架构一致性,防止用户对内置和自定义子 agent 产生混淆。
独立测试:可以通过验证内置子 agent 产生与用户配置的子 agent 相同的消息结构、工具限制和执行行为来测试。
验收场景:
- 假设一个内置子 agent 和一个用户子 agent,当两者执行类似任务时,则它们的输出格式、状态报告和生命周期管理是相同的
- 假设内置子 agent 被执行,当任务完成时,则它们创建与用户配置的子 agent 相同的 SubagentBlock 结构
用户故事:Explore 的模型、上下文与工具面对齐 Claude Code(优先级:P2)
作为用户,我希望内置 Explore 的表现与 Claude Code 一致:跑在主会话当前模型上、不携带项目记忆、能用到网页抓取这类新工具,这样它的搜索质量与成本都跟主会话同档,而不是被钉死在快模型和固定的五个工具上。
为什么是这个优先级:Explore 是自动委派最频繁的子代理,它的模型档位直接决定搜索结果质量;白名单把它锁在 Glob/Grep/Read/Bash/LSP 上,导致它读不了 URL(Claude Code 的 Explore 工具池里有 WebFetch/WebSearch)。这两条都是对齐 Claude Code 现有行为的修正,不改架构。
独立测试:在未配置 WAVE_FAST_MODEL 的环境里派一个 Explore 任务,验证它正常跑完(不再报缺少 fastModel)、请求所用模型等于主会话模型、system prompt 与首条消息里没有 AGENTS.md 内容、工具列表里有 WebFetch 而没有 Edit/Write。
验收场景:
- 假设 用户没有显式配置 Explore 的模型,当 主代理派发 Explore,则 Explore 使用主会话当前模型(
model: inherit),thinking 等模型参数与主模型一致,不再叠加 fastModel 的「禁用思考」参数。 - 假设 环境没有配置
WAVE_FAST_MODEL,当 主代理派发 Explore,则 子代理正常启动,不得因缺少 fastModel 而报配置错误。 - 假设 派发 Explore 或 Plan,当 子代理启动,则 不注入项目
AGENTS.md(含CLAUDE.md回退)与.wave/rules的无条件规则(定义文件带omitAgentsMd: true)。 - 假设 Explore/Plan 运行中,当 模型看到工具列表,则 除
Agent、Artifact、ExitPlanMode、Edit、Write以及恒定拒绝的 Task 工具之外的工具都可用,包括WebFetch、WebSearch、Skill、LSP、Bash。 - 假设 Explore/Plan 尝试调用
Write或Edit,则 工具根本不在列表中,调用返回 not found。 - 假设 主模型读
Agent工具描述里的 Explore 条目,则 描述说明它是「定位代码的只读搜索代理」,并明确不应用于 code review、设计文档审计、跨文件一致性检查与开放式分析(它只读片段、会漏掉读取窗口之外的内容)。
边界情况
- 当内置子 agent 名称与用户配置的子 agent 名称冲突时会发生什么?
- 当源文件缺失或损坏时,系统如何处理加载内置子 agent?
- 当内置子 agent 引用不存在的工具时会发生什么?