Skip to main content
操作指南

子代理

子代理(又称 Subagent)是 Qoder CN CLI 中专门处理某类任务的 Agent。它可以拥有自己的系统提示词、工具集合、模型配置、权限模式、运行限制和 Hook,适合把代码探索、方案设计、接口审查、测试补齐、迁移评估等工作拆给更聚焦的执行者。

快速开始

  1. 在 TUI 中执行 /agents 打开配置面板。
  2. Tab 切换到 User 或 Project 标签页。
  3. 选择 Create new agent...,输入 Subagent 描述并确认。
  4. 生成后直接在会话中调用它:
    使用 api-reviewer subagent 审查这个 API 设计
    

什么是 Subagent

当一个任务需要跨多个文件探索、需要稳定的领域判断标准,或者不希望把大量搜索过程塞进主会话上下文时,可以使用 Subagent。主会话负责理解用户目标和编排,Subagent 负责完成一个清晰的子任务,并把最终结果返回给主会话。 Subagent 的核心价值:
价值说明
保持主会话聚焦每个 Subagent 有独立的对话上下文、系统提示词、工具注册表、运行记录和压缩流程。它读取、搜索、思考的中间过程不会直接混进主会话
提升专业任务质量可以为不同任务配置专用提示词、工具白名单、禁用工具、MCP 服务、模型、权限和运行上限,让审查、探索、规划等任务有稳定标准
复用团队工作流用户级和项目级 Subagent 可以反复使用,也可以随项目共享,让团队在相同任务上使用一致流程
控制工具和权限边界每个 Subagent 可以拥有自己的工具集合和权限模式,降低高风险任务误用工具的概率
支持复杂任务编排对彼此独立的任务可以并发执行;启用后台 Subagent 会话能力时,也可以把独立任务放到后台执行,完成后再通知主会话
Subagent 的核心特性:
特性说明
上下文隔离每个 Subagent 有独立的对话上下文、系统提示词、工具注册表、运行记录和压缩流程。它读取、搜索、思考的中间过程不会直接混进主会话
能力定制可以为不同任务配置不同的提示词、工具白名单、禁用工具、MCP 服务、模型、权限和运行上限
并发执行对彼此独立的任务,Qoder CN CLI 可以一次调度多个 Subagent 并行工作
后台运行启用后台 Subagent 会话能力时,可以把独立任务放到后台执行,完成后再通知主会话
隔离工作区需要独立改动时,可以使用 worktree 隔离,让 Subagent 在单独的 git worktree 中运行
如果你已经知道具体文件或具体命令,直接使用对应工具通常更高效;Subagent 更适合开放式、多步骤、需要判断和汇总的任务。

内置 Subagent

Qoder CN CLI 会注册一组内置 Subagent。不同版本、运行模式和功能开关下,/agentsBuiltIn 标签页可能显示不同列表,请以实际列表为准。常用内置 Subagent:
名称能力
general-purpose通用研究型 Subagent。适合复杂搜索、多文件分析、调用链追踪和多步骤任务。没有显式指定 Subagent 类型时,调度工具默认使用它
Explore快速只读代码探索。适合查找文件、搜索符号、理解现有实现。它继承可用工具后移除写入、控制类工具,并使用更偏探索的模型配置
Plan只读方案设计。适合在改代码前梳理实现路径、关键文件、依赖顺序和架构取舍
在特定模式或功能开启时,还可能看到:
名称出现场景能力
qoder-guide非 SDK 模式回答 Qoder CN CLI 使用、配置、Skills、Agents、MCP、Hooks 等问题
statusline-setupTUI 模式配置自定义 status line,可能读取 shell 配置、创建脚本并更新设置
SaveMemory记忆管理能力启用时管理跨会话记忆、偏好和事实
内置 Subagent 由 Qoder CN CLI 提供和维护,不能像用户级或项目级 Subagent 那样直接编辑。需要定制行为时,创建同名或新名称的自定义 Subagent,并通过来源优先级覆盖或显式调用。

查看和使用 Subagent

查看可用列表

TUI 方式:在 TUI 中输入:
/agents
/agents 面板按来源分组展示 Subagent,并支持查看详情、创建、启用/禁用、编辑自定义项和重新加载。修改 .qoder/agents/~/.qoder-cn/agents/ 后,可以执行:
/agents reload
Headless 方式:在非交互环境中,可以使用:
qoderclicn agents list
列表会显示所有发现到的 Subagent。若同名 Subagent 被更高优先级来源覆盖,列表会标记 shadowed 项。

来源和优先级

Qoder CN CLI 会从多个来源发现 Subagent。同名定义按优先级覆盖,优先级 从低到高 如下:
优先级来源入口说明
1Built-in(内置)/agents 的 BuiltIn 标签页Qoder CN CLI 自带能力,由 Qoder CN CLI 提供和维护,通常不直接编辑
2User~/.qoder-cn/agents/*.md用户级 Subagent,对当前用户的多个项目生效
3Project.qoder/agents/*.md项目级 Subagent,对当前项目生效,适合随项目共享;受文件夹信任状态影响
4Plugin已安装插件提供插件提供的 Subagent。插件 Subagent 存在时才显示 Plugin 标签页,通常由插件维护
5Flag--agents JSON当前进程临时注入的 Subagent。优先级最高,只对本次命令或会话生效
实际生效的是最高优先级的同名定义;被覆盖的定义会在 qoderclicn agents list 中标记为 shadowed

显式调用

TUI 模式:在 TUI 会话中,最稳定的方式是在输入中直接写出 Subagent 名称:
使用 api-reviewer subagent 审查这个接口设计
也可以在 TUI 输入中使用 @ 提及已经加载的 Subagent:
@api-reviewer 审查这个接口设计,只返回需要修改的点
Headless 模式:通过 qoderclicn -p 传入同样的自然语言请求:
qoderclicn -p "使用 api-reviewer subagent 审查这个接口设计"

隐式调用

使用自然语言直接输入任务内容,让 Qoder CN CLI 帮助你选择合适的 Subagent 处理任务。 TUI 模式:Qoder CN CLI 会根据可用 Subagent 的 description 判断是否有匹配的可用 Subagent:
帮我做一次接口设计审查
Headless 模式:把任务描述传给 qoderclicn -p 后 Qoder CN CLI 同样会根据 Subagent 的 description 判断使用哪个 Subagent:
qoderclicn -p "帮我做一次接口设计审查"
提示:如果某个 Subagent 必须被使用,建议使用显式的调用方式。

作为本次会话主 Agent

--agent 会把某个已加载 Subagent 作为当前会话的主 Agent。此时该定义的 initialPrompt 会作为本次会话的初始提示使用。 TUI 模式:启动 TUI 时指定 --agent
qoderclicn --agent api-reviewer
进入 TUI 后,本次会话会使用 api-reviewer 作为主 Agent。/agents 面板中的运行入口不会切换主会话 Agent,它会通过 @agent-name 触发一次 Subagent 调用。 Headless 模式:-p 一起使用:
qoderclicn --agent api-reviewer -p "审查这个接口设计"

编排多个 Subagent

使用自然语言描述 Subagent 的先后执行顺序,Qoder CN CLI 会按照编排的流程处理任务。 TUI 模式:
先使用 general-purpose subagent 检查实现方案,再使用 api-reviewer subagent 审查 API 设计
Headless 模式:
qoderclicn -p "先使用 general-purpose subagent 检查实现方案,再使用 api-reviewer subagent 审查 API 设计" --max-turns 10
如果多个任务彼此独立,可以明确要求并行调度;如果有依赖关系,像上面这样说明先后顺序。--max-turns 是本次 Headless 查询的总轮次上限;要限制单个 Subagent,请在 Subagent 配置中设置 maxTurns

自定义 Subagent

创建本地持久化 Subagent 定义

方式一:AI 辅助生成(推荐)

这是创建 Subagent 最简单的方式。你只需要用自然语言描述需求,Qoder CN CLI 会自动生成完整的配置文件。 操作步骤:
  1. 在 TUI 中执行 /agents 进入配置面板。
  2. Tab 切换到 UserProject 标签页。
  3. 选择 Create new agent... 并按 Enter
  4. 输入 Subagent 描述,按 Enter 确认。
> /agents
------------------------------------------------------------------------------------------
Agents:  User  [Project]  BuiltIn

-> Create new agent...

Agent list:
No project agents found.

Press Enter to select - Esc to exit - Tab to cycle tabs - Up/Down to navigate
输入描述后,Qoder CN CLI 会自动生成配置:
> /agents
------------------------------------------------------------------------------------------
Agents:  User  [Project]  BuiltIn

Describe the agent:

> Help me review RESTful api design

Press Enter to select - Esc to exit - Tab to cycle tabs - Up/Down to navigate
生成完成后,可以在对应目录找到配置文件继续微调:
# 项目级(Project 标签页)
.qoder/agents/

# 用户级(User 标签页)
~/.qoder-cn/agents/
提示:建议先使用 AI 生成初始 Subagent,再迭代优化,让它符合你的具体需求。这种方式能快速得到一个可定制的基础配置。

方式二:手动编写配置(进阶)

如果你需要完全控制 Subagent 配置,可以手动创建 Markdown 配置文件:
# 项目级,仅当前项目生效,适合提交到仓库
.qoder/agents/api-reviewer.md

# 用户级,在当前用户的所有项目中生效
~/.qoder-cn/agents/api-reviewer.md
Markdown 文件必须以 YAML frontmatter 开头。frontmatter 声明配置,正文就是该本地 Subagent 的系统提示词。
---
name: api-reviewer
description: Review API designs, endpoint naming, request methods, status codes, error responses, and versioning.
tools: [Read, Grep, Glob]
disallowedTools: [Write, Edit]
permissionMode: default
model: inherit
maxTurns: 8
timeoutMins: 10
color: cyan
---

You are an API design reviewer.

Focus on:
- Resource naming and URL structure
- Request method semantics
- Status code and error response consistency
- Pagination, filtering, and versioning

Return concise findings grouped by severity. Include concrete examples when possible.
需要让某个 Subagent 在独立 worktree 中执行时,在 frontmatter 增加:
isolation: worktree
文件名不决定 Subagent 名称;实际名称来自 frontmatter 的 name 字段。

用 --agents 临时注入

--agents 适合 Headless、脚本和一次性自动化。它接收一个 JSON 对象,键是 Subagent 名称,值是定义内容。通过 --agents 注入的 Subagent 只对当前进程生效,并且同名时优先级最高。
qoderclicn \
  --agents '{"api-reviewer":{"description":"Review API designs","prompt":"You are an API reviewer.","tools":["Read","Grep","Glob"],"maxTurns":6}}' \
  -p "使用 api-reviewer subagent 审查 docs/api.yaml"
--agents 使用 prompt 字段作为系统提示词。当前 JSON schema 支持:descriptionprompttoolsdisallowedToolsmcpServersmodeleffortcolormaxTurnsinitialPromptskillspermissionMode。如果需要 timeoutMinstemperaturehooksmemorybackgroundisolation,请使用 Markdown 配置。

配置 Subagent

选择作用域

创建或注入自定义 Subagent 时,可以选择以下作用域:
作用域配置入口
Project.qoder/agents/*.md
User~/.qoder-cn/agents/*.md
Flag--agents

配置工具

toolsdisallowedTools 都可以写成逗号分隔字符串或字符串数组。字符串数组既可以使用 YAML 内联数组,也可以使用 YAML 列表:
tools: Read,Grep,Glob
tools: [Read, Grep, Glob]
tools:
  - Read
  - Grep
  - Glob
常用工具名包括 ReadGrepGlobBashWriteEditWebFetchWebSearchAgent MCP 工具使用完全限定名:
tools:
  - mcp__docs__search
  - mcp__docs__*
  - mcp__*
如果希望某个 Subagent 只能继续调用特定 Subagent,请使用 Agent(name) 表达式:
tools:
  - Read
  - Grep
  - Agent(Explore, Plan)
如果不希望它继续调度任何 Subagent,可以禁用 Agent
disallowedTools: [Agent]
工具集合的处理顺序是:先根据 tools 注册可用工具,再应用 disallowedTools 移除工具。对于 MCP 工具,必须先通过 mcpServers 或全局 MCP 配置发现,再通过 tools 放行,Subagent 才能使用。

配置 MCP

可以引用已经配置好的 MCP 服务:
mcpServers:
  - docs
也可以内联定义只给这个 Subagent 使用的 MCP 服务:
mcpServers:
  docs:
    command: ./scripts/docs-mcp
    args: ["--stdio"]
    include_tools: ["search", "read"]
mcpServers 支持数组格式,也支持对象格式。内联服务字段如下:
字段含义
command启动 stdio MCP 服务的命令
args命令参数数组
env传给 MCP 服务的环境变量
cwdMCP 服务工作目录
url / http_url远程 MCP 服务地址
headers远程请求头
tcpTCP 连接地址
type传输类型,支持 ssehttp
timeout连接或调用超时时间
trust是否信任该 MCP 服务
description服务说明
include_tools只包含指定 MCP 工具
exclude_tools排除指定 MCP 工具

定义 Hook

hooks 写在 Subagent frontmatter 中时,只对该 Subagent 会话生效。支持的事件包括 PreToolUsePostToolUsePostToolUseFailureStopSubagentStartSubagentStopNotification hooks 不支持字符串简写。每个事件的值必须是 matcher 数组;每个 matcher 里再通过 hooks 数组声明一个或多个 Hook。 Subagent 中的 Stop 会映射为 SubagentStop,即在该 Subagent 完成时触发,而不是在主会话结束时触发。
hooks:
  PreToolUse:
    - matcher: Bash
      hooks:
        - type: command
          command: ./scripts/check-subagent-command.sh
          timeout: 30
          statusMessage: Checking command
  Stop:
    - hooks:
        - type: command
          command: ./scripts/subagent-finished.sh
每个事件下是一组 matcher;每个 matcher 中的 hooks 支持以下类型:
type必需字段说明
commandcommand执行本地命令。可选 shelltimeoutifstatusMessage
httpurl调用 HTTP endpoint。可选 headersallowedEnvVarstimeoutifstatusMessage
promptprompt用提示词运行一次模型判断。可选 modeltimeoutifstatusMessage
agentprompt用独立 Hook Agent 执行判断。可选 modeltimeoutifstatusMessage
frontmatter schema 也接受 once,但普通 Subagent frontmatter 中该字段不会作为一次性 Hook 语义保留;需要一次性行为时,请在 Hook 命令或外部状态中自行控制。

配置权限模式

permissionMode 控制 Subagent 工具调用的审批方式。
含义
default使用默认权限策略,需要确认时询问
acceptEdits自动接受编辑类操作
bypassPermissions跳过权限确认。若安全策略禁用该模式,会降级为 acceptEdits
dontAsk不主动询问;需要询问的操作会被拒绝
auto使用自动判断策略处理权限
plan开启该 Subagent 自己的计划状态,适合只读规划场景
permissionMode 建议使用上表中的规范值。运行时会兼容大小写、下划线、连字符等写法;yolo 会被兼容解析为 bypassPermissions,但公开配置建议直接写 bypassPermissions 需要注意:
  • 未声明 permissionMode 时,Subagent 继承父会话当前模式。
  • 父会话已经处于 acceptEditsbypassPermissionsauto 时,Subagent 不能通过自己的配置把权限降得更严格。
  • plan 不会污染主会话计划状态,它只在该 Subagent 的隔离上下文中生效。

配置远程 Subagent

远程 Subagent 通过 Agent Card 加载,不使用 Markdown 正文作为系统提示词,而是根据远程 Agent Card 暴露的能力和描述完成调用。
---
kind: remote
name: docs-helper
description: Answer questions using the remote documentation agent.
agentCardUrl: https://agent.example/.well-known/agent-card.json
---
也可以使用 agentCardJson 内联 Agent Card JSON。远程 Subagent 支持 auth 字段;常用认证类型包括 apiKeyhttpoauth。需要认证时,建议把远程 Subagent 放在用户级配置中,避免把凭据提交到项目仓库。

使用 settings.json 覆盖已有 Subagent

settings.json 不能创建新的 Subagent,只能覆盖已经被发现的同名 Subagent。当前支持覆盖启用状态、模型配置、运行限制、工具白名单,并追加 MCP 服务。
{
  "agents": {
    "overrides": {
      "api-reviewer": {
        "enabled": true,
        "tools": ["Read", "Grep", "Glob"],
        "runConfig": {
          "maxTurns": 6,
          "maxTimeMinutes": 10
        },
        "modelConfig": {
          "model": "auto",
          "generateContentConfig": {
            "temperature": 0.2
          }
        },
        "mcpServers": {
          "docs": {
            "command": "./scripts/docs-mcp",
            "args": ["--stdio"]
          }
        }
      }
    }
  }
}
常见用途:
  • 设置 "enabled": false 暂时隐藏某个 Subagent。
  • 为某个 Subagent 单独调整模型和温度。
  • 为自动化场景限制最大轮次或最长执行时间。
  • 在不修改原始 Markdown 的情况下收紧工具集合。
  • 为已有本地 Subagent 追加 MCP 服务。
插件提供的 Subagent 会应用额外安全策略:插件 Subagent 的 hooksmcpServerspermissionMode 会被移除,isolation 只有 worktree 会被保留。

本地 Subagent 可配置全字段表

以下字段适用于 Markdown frontmatter。未识别字段会被忽略。
字段必需可取值含义
name非空字符串Subagent 名称。建议清晰、稳定、便于自然语言引用
description非空字符串用途说明。Qoder CN CLI 会用它判断何时调用该 Subagent
background布尔值是否默认后台运行。需要当前版本启用后台 Subagent 会话能力
colorred、blue、green、yellow、purple、orange、pink、cyanTUI 运行 Subagent 时展示的颜色
disallowedTools字符串或字符串数组工具黑名单,在工具注册后移除指定工具
effortlow、medium、high、xhigh、max 或正整数推理强度或预算
hooksHook 配置对象仅作用于该 Subagent 会话的 frontmatter hooks
initialPrompt字符串当该定义通过 --agent 作为会话主 Agent 使用时的初始提示;普通 Subagent 调用不会把它当作任务提示注入
isolation推荐使用 worktree隔离方式。worktree 会让 Subagent 在独立 git worktree 中运行;未设置时使用默认工作区
kindlocal、remote类型。省略时按本地 Subagent 处理;远程 Subagent 使用 remote
maxTurns正整数单次 Subagent 调用的最大对话轮次
mcpServers服务名数组、内联服务对象或二者组合为该 Subagent 额外发现 MCP 工具。最终能否使用仍受 tools/disallowedTools 控制
memoryuser、project、local该 Subagent 的持久记忆作用域。只有全局自动记忆能力启用时才生效
model任意模型名或模型别名;常见值 inherit、auto、lite、efficient、performanceSubagent 使用的模型。省略时为 inherit,即继承当前会话模型
permissionModedefault、acceptEdits、bypassPermissions、dontAsk、auto、plan该 Subagent 的权限模式。未声明时继承父会话当前模式
skills字符串或字符串数组限制该 Subagent 可使用的 Skills
temperature数字模型温度。省略时 loader 会写入默认温度配置
timeoutMins正整数单次 Subagent 调用的最长执行时间,单位为分钟
tools字符串或字符串数组;支持 *工具白名单。省略时使用当前可用工具集合;* 表示全部工具

测试效果

创建或修改 Subagent 后,建议按下面顺序验证:
  1. 执行 /agents reload 或重新打开会话。
  2. /agentsqoderclicn agents list 中确认它出现在预期来源下。
  3. 检查 description 是否具体说明了何时应该调用它。
  4. 用显式名称调用一次:
    使用 api-reviewer subagent 审查下面这个接口:
    
    POST /login
    GET /logout
    
  5. 如果配置了只读工具,故意要求它"不要修改文件,只输出审查结果",并确认没有出现写入操作。
  6. 如果配置了 disallowedTools,尝试让它执行被禁用的能力,确认它会换用其他方式或返回限制说明。
  7. 如果配置了 MCP,检查 Subagent 是否能发现目标 MCP 工具,并确认 tools 没有把该工具挡掉。
  8. 如果配置了 background 或要求后台运行,确认任务启动后主会话不会等待完整结果,完成通知会在后续返回。
如果没有被调用,先改用显式名称或 @name;如果仍不可用,查看 /agents 面板中的加载错误。

最佳实践

  • 一个 Subagent 只承担一种清晰职责,不要把审查、实现、测试、发布都塞进同一个提示词。
  • description 写给调度判断使用,正文提示词写给 Subagent 自己使用;两者都要具体。
  • 默认先给只读工具,需要写入时再加入 EditWriteBash
  • 对高风险 Subagent 设置 maxTurnstimeoutMins 和明确的 permissionMode
  • 需要独立改动时使用 isolation: worktree,并在结果返回后检查 worktree 路径和实际 diff。
  • 依赖 MCP 工具时,同时写清 mcpServerstools,避免工具发现了但没有授权使用。
  • 项目级 Subagent 适合提交到版本控制,用户级 Subagent 适合个人偏好和跨项目工作流。
  • 修改配置后先显式调用测试,再依赖隐式调度。
  • 对插件分发的 Subagent,不要依赖 hooksmcpServerspermissionMode 这类会被安全策略移除的字段。

常见问题

Subagent 和主会话有什么区别? Subagent 在独立上下文中运行,使用自己的系统提示词、工具集合、运行限制和权限声明。它的结果会返回给主会话,由主会话继续整理并回复用户。 为什么我创建的项目级 Subagent 没有出现? 确认文件位于 .qoder/agents/<name>.md,frontmatter 至少包含 namedescription,并且当前项目已被信任。修改后执行 /agents reload,并查看 /agents 面板中的加载错误。 为什么同名 Subagent 没有按我预期生效? 同名时高优先级来源会覆盖低优先级来源。优先级是 Built-in < User < Project < Plugin < Flag。可以用 qoderclicn agents list 查看 shadowed 项。 description 和正文提示词有什么区别? description 用于说明何时调用这个 Subagent,影响调度选择;正文提示词是 Subagent 被调用后看到的系统提示词,影响它怎么完成任务。 可以同时使用多个 Subagent 吗? 可以。对于彼此独立的任务,Qoder CN CLI 可以并发调度多个 Subagent;对于有依赖关系的任务,在提示中说明先后顺序。 可以让 Subagent 再调用其他 Subagent 吗? 可以,但需要工具集合里保留 Agent。如果只允许调用特定 Subagent,可以使用 Agent(name)Agent(name1, name2);如果完全不允许继续调度,使用 disallowedTools: [Agent] 为什么 Subagent 不能使用我配置的 MCP 工具? 先确认 MCP 服务已经被 mcpServers 或全局配置发现,再确认 tools 中放行了对应工具名。只写 mcpServers 不等于自动授权所有 MCP 工具。 为什么 Subagent 的权限没有变得更严格? 如果父会话已经处于 acceptEditsbypassPermissionsauto,Subagent 不能通过自己的 permissionMode 把权限降得更严格。未声明 permissionMode 时也会继承父会话当前模式。 后台 Subagent 的结果在哪里看? 后台运行时,主会话会先收到启动结果;任务完成后会通过后续通知返回。不要在完成前根据预期结果编造总结。 可以编辑内置或插件 Subagent 吗? 内置和插件 Subagent 不建议直接编辑。需要定制时,创建用户级或项目级 Subagent;如果使用同名覆盖,注意来源优先级和插件安全策略。