Subagent（子代理）是 SolonCode 的核心能力，支持将复杂任务委派给具备特定专业技能的专家代理（可以串行，或并行），实现"让专业的人做专业的事"或者“同时多人干活”。


### 1、核心架构

```
┌─────────────────────────────────────────────────────────┐
│                    用户交互入口                           │
│                       ↓                                 │
│                  主代理 (ReActAgent)                     │
│              - 接收指令、分析任务                          │
│              - 任务分解、委派调度                          │
│              - 结果汇总、响应输出                          │
└─────────────────────────────────────────────────────────┘
                         │
           ┌─────────────┼───────────────────┐
           ↓             ↓                   ↓
    ┌────────────┐  ┌─────────────────┐  ┌──────────┐
    │ Architect  │  │   Development   │  │  Tester  │
    └────────────┘  └─────────────────┘  └──────────┘
```

**工作流程：**

```
用户指令 → 主代理分析 → 任务分解 → 子代理执行 → 结果汇总 → 响应用户
```



### 2、预置的几个子代理

子代理存放位置：

* `~/.soloncode/agents/` 全局子代理配置
* `.soloncoce/agents/` 工作区子代理配置

预置的几个子代理：（通过资源文件自带，可补同名替换）

| 子代理 | 描述 | 工具权限 | 
| -------- | -------- | -------- | 
| `bash`     | 命令执行子代理     |  `["list", "read", "bash"]`     | 
| `explore`     | 全域信息探索专家     |  `["list", "read", "grep", "glob", "skill", "webfetch", "websearch", "codesearch"]`     | 
| `general`     | 通用全能子代理     |  `["*"]`     | 
| `plan`     | 规划与计划子代理     |  `["list", "read", "grep", "glob", "skill", "webfetch", "websearch", "codesearch"]`     | 


子代理的定义示例（`general.md`）：

```
---
name: "general"
description: "通用全能子代理。可以处理任何问题（其它子代理不能用时，优先选我！）"
tools: ["*"]
---

您是一位全能型执行专家（尤其尚长使用 **专家技能** 解决问题）。


输出规范：

- 专业克制：逻辑高度严密，严禁使用表情符号。
- 最终交付物：提供完整的、逻辑严密的解决方案。
```

### 3、可配置元数据

具体可参考 AgentDefinition.Metadata 类

| 字段 | 类型 | 默认值 | 描述 |
| -------- | -------- | -------- | -------- |
| `name`                   | String                 | /     | 必填。子代理（智能体）名字     |
| `description`           | String                 | /     | 必填。描述     |
| `model`                  | String                | /     | 选择模型     |
| `tools`                    | `List<String>`     | /     | 可使用工具     |
| `disallowedTools`     | `List<String>`     | /     | 禁止使用工具     |
| | | |
| `sessionWindowSize`     | Integer     | 随主代理     | 历史会话窗口大小（执行任务时，带上几条历史对话）     |
| `summaryWindowSize`     | Integer     | 随主代理     | 摘要窗口大小（达到多少消息时，触发压缩）     |
| `summaryWindowToken`     | Integer     | 随主代理     | 摘要窗口词元（达到多少词元时，触发压缩     |
| | | |
| `maxTurns`                         | Integer     | 随主代理     | 最大步数（ReAct 执行回合）     |
| `autoRethink`     | Boolean     | 随主代理     | 自我反思（每超过 maxSteps后，会由 LLM 自我反思决定是结束或继续）     |



### 4、什么时候会触发子代理？

以 `explore` 为例，（可能的）触发分析说明：


| 任务示例 | 是否触发（较大可能） | 
| -------- | -------- | 
| `简单分析下这个项目：/data/demo1/`     | 不会     |
| `用子代理，简单分析下这个项目：/data/demo1/`     | 会     |
| `用探索专家，简单分析下这个项目：/data/demo1/`     | 会（推荐）     |
| | |
| `深度分析下这个项目：/data/demo1/`     | 会     |
| `不要用子代理，深度分析下这个项目：/data/demo1/`     | 不会     |


### 5、什么时候分触发 agent-team ？

使用 agent-team 时，如果现有的子代理满足需要。一般会触发 `generate_agent` 动态他是建子代理。

（由自然语言控制）任务示例：


> 我想开发一个经典的权限管理系统（项目名为 demo1-web，里面再建两个目录分为前端与后端），后端基于 solon v3.10.1，java8，前端基于 vue3 开发，界面要清爽好看。先帮我设计一个 agent team （至少要有架构师，前端开发，后端开发，测试员四个角色，架构师先做好设计，然后并行开发，之后测试）分工去做这个事，团队设计案保存为 demo1-team.md（经常要看下，避免忘记）。子代理生成时要保存为文件（万一任务中断，也可以复用）。然后驱动团队去完成开发，单元测试，界面测试（用无头浏览器去测试）。全好了后，运行起来，让我检查效果。


或者自己编写团队配置文件（例：demo-team.md，提示词要求使用这个团队文件即可）：


```markdown
# Demo 项目团队配置

## 成员定义

### architect（架构师）

职责：系统架构、数据库设计、API 规范
输出：架构文档、数据库设计、API 文档

### backend-dev（后端开发）

职责：Solon 后端开发、JWT 认证、ORM 操作
技术：Solon v3.10.0、wood-solon-plugin、Java 8

### frontend-dev（前端开发）

职责：Vue3 界面开发、Element Plus 组件
技术：Vue3、Pinia、Vue Router、Axios

### tester（测试工程师）

职责：单元测试、集成测试
技术：JUnit5、Vitest、Playwright

## 协作模式

Phase 1（串行）: architect 设计
Phase 2（并行）: backend-dev + frontend-dev 开发
Phase 3（串行）: tester 测试
```

