优势 | 说明 |
上下文保留 | 每个子代理在自己的上下文中运行,防止主对话被污染,并使其专注于高级目标。 |
专业化知识 | 子代理可以使用特定领域的详细说明进行微调,从而提高指定任务的成功率。 |
可重用性 | 创建后,子代理可以在不同项目中使用,并与您的团队共享以实现一致的工作流。 |
灵活的权限 | 每个子代理可以具有不同的工具访问级别,允许您将强大的工具限制为特定的子代理类型。 |
/agents
e 在自己的编辑器中编辑系统提示> 使用 code-reviewer 子代理检查我最近的更改
类型 | 位置 | 范围 | 优先级 |
项目子代理 | .codebuddy/agents/ | 在当前项目中可用 | 最高 |
用户子代理 | ~/.codebuddy/agents/ | 在所有项目中可用 | 较低 |
agents/ 目录中包含代理(或插件清单中指定的自定义路径)。/agents 中/agents 界面进行管理(查看、检查)--agents CLI 标志动态定义子代理,该标志接受 JSON 对象:codebuddy --agents '{"code-reviewer": {"description": "代码审查专家。在代码更改后主动使用。","prompt": "您是一位高级代码审查员。专注于代码质量、安全性和最佳实践。","tools": ["Read", "Grep", "Glob", "Bash"],"model": "gemini-3.0-flash"}}'
---name: your-sub-agent-namedescription:描述何时应该调用此子代理tools: tool1, tool2, tool3 # 可选 - 省略则继承所有工具model: gpt-5.1-codex # 可选 - 指定模型别名或 'inherit'permissionMode: default # 可选 - 子代理的权限模式skills: skill1, skill2 # 可选 - 自动加载的技能---在这里编写子代理的系统提示。可以包含多个段落,应该清晰地定义子代理的角色、能力和解决问题的方法。包含具体的说明、最佳实践以及子代理应该遵循的任何约束。
字段 | 是否必需 | 描述 |
name | 是 | 使用小写字母和连字符的唯一标识符 |
description | 是 | 子代理目的的自然语言描述 |
tools | 否 | |
model | 否 | 模型 ID、名称或别名、场景变体 lite / reasoning,或 inherit / default。省略或设为 inherit / default 时,不强制具体模型,继续通过正常的子代理解析链选择模型 |
permissionMode | 否 | 子代理的权限模式。有效值: default、acceptEdits、bypassPermissions、plan、ignore。控制子代理如何处理权限请求 |
skills | 否 | 子代理启动时自动加载的技能名称,逗号分隔 |
mcpServers | 否 | 子代理专属 MCP server 声明。支持引用已有全局 MCP server, 或声明当前子代理私有 inline MCP server。详见下方说明。 |
disallowedTools | 否 | 子代理禁止使用的工具列表(数组或逗号分隔),与 session 级 disallowedTools 取并集生效 |
effort | 否 | 推理强度: minimal / low / medium / high / xhigh / max,省略则继承会话强度 |
maxTurns | 否 | 子代理最大执行轮次(正整数)。优先级:env CODEBUDDY_CODE_SUBAGENT_MAX_TURNS > Agent 工具 max_turns 入参 > 本字段 |
background | 否 | 设为 true 时该子代理总是后台运行(等同调用方传 run_in_background: true);CODEBUDDY_CODE_DISABLE_BACKGROUND_TASKS 启用时降级为同步执行(仅写日志,无用户可见告警) |
initialPrompt | 否 | 该 agent 作为主会话 agent( --agent 或 settings agent)运行时,自动作为首条用户消息的前缀,仅主会话首轮注入 |
memory | 否 | 持久记忆作用域: user(~/.codebuddy/agent-memory/<name>/)、project(<cwd>/.codebuddy/agent-memory/<name>/)、local(不进版本库)。启用后 spawn 时自动注入 MEMORY.md(截断 200 行 / 25KB),显式 tools 白名单自动补 Read/Write/Edit |
tools: Agent 的 agent 才能继续嵌套。CODEBUDDY_CODE_MAX_SUBAGENTS_PER_SESSION 上下调整(正整数,不可关闭);嵌套 spawn 共享同一份预算,/clear 后重置。预算只对 Agent 工具路径的 spawn 计数;workflow / skill 路径直接构造 AgentTask,不过该闸门。<system-reminder> 标签改写为 <\\system-reminder>,行首 Human: / Assistant: 加反斜杠;命中时报告头部会附加 [harness: subagent output matched ...] 标记行。去毒只在命中片段插入反斜杠改写、不删除内容,报告诱导的工具调用仍走正常权限检查。mcpServers 用于给某个子代理声明只在该子代理运行期间可见的 MCP server。它不会写入全局 MCP 配置, 也不会让主对话或其他子代理自动看到。支持两种写法。---name: docs-searcherdescription: 使用已有 docs MCP 做检索tools:- ReadmcpServers:- docs---
docs 必须已经是全局已连接的 MCP server。子代理只借用它, 子代理结束时不会关闭它。---name: browser-checkerdescription: 使用私有 MCP 做浏览器检查tools:- ToolSearch- DeferExecuteToolmcpServers:- browser_private:type: stdiocommand: nodeargs:- /absolute/path/to/browser-mcp-server.jsdefer_loading: true---
来源 | mcpServers 行为 |
用户子代理: ~/.codebuddy/agents/*.md | 允许 inline MCP。 |
项目子代理: .codebuddy/agents/*.md | 允许 inline MCP, 但需要项目本地批准。 |
Plugin agent | 忽略 mcpServers。 |
strictMcpConfig=true | 跳过所有 agent frontmatter/product mcpServers。 |
.codebuddy/settings.local.json:{"enabledMcpjsonServers": ["browser_private"]}
codebuddy --settings '{"enabledMcpjsonServers":["browser_private"]}'
settings.json, 因为项目 MCP 审批只读取项目本地和 CLI scope。ToolSearch 发现工具, 再通过 DeferExecuteTool 调用工具。tools:- ToolSearch- DeferExecuteToolmcpServers:- finance_data:type: stdiocommand: nodeargs:- /absolute/path/to/finance-mcp-server.js
mcpServers:- finance_data:type: stdiocommand: nodeargs:- /absolute/path/to/finance-mcp-server.jsdefer_loading: false
tools 字段里的 Defer(...) / NoDefer(...) 修饰符对单个工具调整延迟加载行为。lite 或 reasoning,再由 /model 或 variantModels 映射到具体模型inherit / default,或省略:不强制具体模型,继续按环境变量、单次调用、按子代理设置、内置声明和主对话模型的顺序解析inherit 时,如果没有更高优先级的配置,子代理最终会继承主对话模型,有助于保持功能和响应风格一致。/agents 命令修改工具访问权限 - 它提供了一个交互式界面,列出所有可用工具,包括任何连接的 MCP 服务器工具,使选择所需工具变得更容易。tools 字段以继承主线程中的所有工具(默认),包括 MCP 工具/agents 编辑)tools 字段时,子代理继承主线程可用的所有 MCP 工具。/agents 命令提供了一个全面的子代理管理界面:/agents
/model 中查看lite / reasoning 场景变体Explore、general-purpose、Plan)也可以按子代理粒度独立指定模型,各子代理互不影响、可自由组合。这解决了以往「只能通过环境变量一刀切、无法区分」的痛点。/agents 面板可视化配置:/agents,用 ↑/↓ 选中一个内置子代理,按 Enter 进入其动作菜单。lite / reasoning。/model 一致)。Tab 在 Global(全局) 与 Project(项目) 两个保存范围间切换,Enter 确认。lite / reasoning;场景变体最终映射到的具体模型和来源可通过 /model:lite / /model:reasoning 查看。来源标签 | 含义 |
env-global | 环境变量 CODEBUDDY_CODE_SUBAGENT_MODEL 一刀切接管(见下方优先级) |
settings-project | 项目级配置( .codebuddy/settings.json) |
settings-user | 全局级配置( ~/.codebuddy/settings.json) |
product-default | 内置默认声明(如 Explore = lite) |
inherit | 无任何声明,继承主对话模型 |
fallback-main | 配置的模型被禁用/本地未知,降级回主对话模型 |
subagents.agents.<子代理名>.model 字段(agents 的 key = 子代理名,model = 模型 ID / 别名 / 变体 / inherit / default)。也可手动编辑 settings.json,详见 设置文档。CODEBUDDY_CODE_SUBAGENT_MODEL(一刀切,对所有子代理统一生效,最高)default / lite / reasoning,单次生效)subagents.agents.<子代理名>.modelsubagents.agents.<子代理名>.modelproduct.json 的 agents[].models[0],如 Explore = lite)CODEBUDDY_CODE_SUBAGENT_MODEL 时,面板仍允许保存 per-Agent 配置(不报错),但会显示「被环境变量统一覆盖」的提示;取消该环境变量后 per-Agent 配置恢复生效。# 创建项目子代理mkdir -p .codebuddy/agentsecho '---name: test-runnerdescription:主动运行测试并修复失败---您是一位测试自动化专家。当您看到代码更改时,主动运行相应的测试。如果测试失败,分析失败原因并修复它们,同时保持原始测试意图。' > .codebuddy/agents/test-runner.md# 创建用户子代理mkdir -p ~/.codebuddy/agents# ... 创建子代理文件
/agents 命令。description 字段description 字段中包含"use PROACTIVELY"或"MUST BE USED"之类的短语。> 使用 test-runner 子代理修复失败的测试> 让 code-reviewer 子代理检查我最近的更改> 请 debugger 子代理调查这个错误
/agents 为该子代理独立调整用户: 找到所有处理身份验证的地方,并更新它们以使用新的令牌格式CodeBuddy Code: [调用 general-purpose 子代理][代理在代码库中搜索身份验证相关代码][代理读取并分析多个文件][代理进行必要的编辑][返回所做更改的详细说明]
/agents 为该子代理独立调整用户: [在计划模式中] 帮我重构身份验证模块CodeBuddy Code:让我先研究一下您的身份验证实现...[内部调用 Plan 子代理探索身份验证相关文件][Plan 子代理搜索代码库并返回发现]CodeBuddy Code:根据我的研究,这是我提议的计划...
lite 场景变体;实际模型由对应的环境变量、项目和用户 variantModels、主模型 relatedModels 及默认编排共同决定用户: 客户端的错误在哪里处理?CodeBuddy Code: [以 "medium" 彻底程度调用 Explore 子代理][Explore 使用 Grep 搜索错误处理模式][Explore 使用 Read 检查可能相关的文件][返回包含绝对文件路径的发现]CodeBuddy Code:客户端错误在 src/services/process.ts:712 中处理...
用户: 代码库的结构是什么?CodeBuddy Code: [以 "quick" 彻底程度调用 Explore 子代理][Explore 使用 Glob 和 ls 映射目录结构][返回关键目录及其用途的概述]
---name: code-reviewerdescription:代码审查专家。主动审查代码的质量、安全性和可维护性。在编写或修改代码后立即使用。tools: Read, Grep, Glob, Bashmodel: inherit---您是一位确保代码质量和安全性高标准的高级代码审查员。被调用时:1. 运行 git diff 查看最近的更改2. 专注于修改的文件3. 立即开始审查审查清单:- 代码清晰易读- 函数和变量命名良好- 没有重复代码- 正确的错误处理- 没有暴露的密钥或 API 密钥- 实现了输入验证- 良好的测试覆盖率- 考虑了性能问题按优先级组织反馈:- 严重问题(必须修复)- 警告(应该修复)- 建议(考虑改进)包含如何修复问题的具体示例。
---name: debuggerdescription:错误、测试失败和意外行为的调试专家。遇到任何问题时主动使用。tools: Read, Edit, Bash, Grep, Glob---您是一位专门从事根因分析的专家级调试器。被调用时:1. 捕获错误消息和堆栈跟踪2. 确定复现步骤3. 隔离故障位置4. 实现最小修复5. 验证解决方案有效调试过程:- 分析错误消息和日志- 检查最近的代码更改- 形成并测试假设- 添加策略性调试日志- 检查变量状态对于每个问题,提供:- 根因解释- 支持诊断的证据- 具体的代码修复- 测试方法- 预防建议专注于修复根本问题,而不仅仅是症状。
---name: data-scientistdescription: SQL 查询、BigQuery 操作和数据洞察的数据分析专家。用于数据分析任务和查询时主动使用。tools: Bash, Read, Writemodel: gpt-5.1-codex---您是一位专门从事 SQL 和 BigQuery 分析的数据科学家。被调用时:1. 理解数据分析需求2. 编写高效的 SQL 查询3. 在适当时使用 BigQuery 命令行工具 (bq)4. 分析并总结结果5. 清晰地呈现发现关键实践:- 编写带有适当过滤器的优化 SQL 查询- 使用适当的聚合和连接- 包含解释复杂逻辑的注释- 格式化结果以提高可读性- 提供数据驱动的建议对于每次分析:- 解释查询方法- 记录任何假设- 突出关键发现- 根据数据建议下一步始终确保查询高效且经济。
> 首先使用 code-analyzer 子代理找到性能问题,然后使用 optimizer 子代理修复它们
description 字段具体且面向行动以获得最佳结果。agentIdagent-{agentId}.jsonlresume 参数提供其 agentId 来恢复之前的代理> 使用 code-analyzer 代理开始审查身份验证模块[代理完成初始分析并返回 agentId: "abc123"]
> 恢复代理 abc123 并继续分析授权逻辑[代理继续使用之前对话的完整上下文]
subagents/ 子目录中resume 参数接受来自之前执行的代理 ID~/.codebuddy/projects/{projectDir}/└── {parentSessionId}/├── tool-results/ ← 主 session 的工具输出文件└── subagents/ ← 子代理数据├── agent-{agentId}.jsonl ← 子代理对话历史└── agent-{agentId}/└── tool-results/ ← 子代理的工具输出文件└── {callId}.txt
resume 参数:{"description": "继续分析","prompt": "现在检查错误处理模式","subagent_type": "code-analyzer","resume": "abc123" // 来自之前执行的代理 ID}
run_in_background: true 参数启动后台代理TaskOutput 工具获取后台任务的状态和结果> 在后台运行 code-analyzer 代理来审查整个代码库[任务已在后台启动。任务 ID: task-abc123]**获取后台任务输出:**使用 `TaskOutput` 工具查询后台任务的状态和结果:
查看后台任务 task-abc123 的状态
**后台任务状态:**| 状态 | 说明 || :--- | :--- || `pending` | 任务已创建,等待执行 || `running` | 任务正在执行中 || `completed` | 任务已成功完成 || `failed` | 任务执行失败 || `cancelled` | 任务被用户取消 || `killed` | 任务被强制终止 |**程序化用法:**如果您使用 Agent SDK 或直接与 Agent 工具交互,可以传递 `run_in_background` 参数:```typescript{"description": "分析代码库","prompt": "审查所有 TypeScript 文件的潜在问题","subagent_type": "code-analyzer","run_in_background": true // 在后台运行}
TaskOutput 工具支持以下参数参数 | 类型 | 说明 |
task_id | string | 必需。后台任务的 ID |
block | boolean | 是否等待任务完成。默认为 true |
timeout | number | 等待超时时间(毫秒)。默认 30000ms,最大 600000ms |
文档反馈