前言¶
在 DeepSeek Harness (DSH) 中,工作流引擎的 maxConcurrentAgents 和 maxTotalAgents 仅作用于工作流内的 agent() 调用。对于工作流之外根级的直接调用,或后台/可继续运行的任务,DSH 缺乏进程级的并发限制。maxParallelToolCalls 限制的是工具调度的并发池,而非活跃运行的任务数。
dsh-subagent-concurrency-limit 插件旨在填补这一空白,它限制同一进程内根级委托准入和本地子代理轮次的并发数。
插件介绍¶
名称: dsh-subagent-concurrency-limit
作者: blauerberg
定位: DeepSeek Harness 工作流插件
核心功能: 限制同一进程中并发运行的子代理运行和本地子代理轮次,根代理不计入限制。
核心功能¶
- 进程级限制: 对同一进程中
delegationDepthOf(agent) > 0的委托工具和本地子代理轮次进行并发控制。 - FIFO 队列: 根代理的委托调用按先进先出 (FIFO) 顺序等待。
- 自定义工具名: 支持通过配置
subagentToolNames指定非标准委托工具名称。 - Cordis Patch 集成: 使用 Cordis Patch 方式集成到 DSH。
- 嵌套与远程支持: 适用于嵌套子代理和远程进程提供商(如 Codex)。
安装与启用¶
安装插件需要指定 profile(示例中使用 web)和特定的 commit hash:
dsh plugin --profile web add github:blauerberg/dsh-subagent-concurrency-limit#01182275695067510a187cb05b46df49e5fe812c
安装后,将配置添加到 profile 的 cordis patch 文件中:
- id: subagent-concurrency-limit
name: dsh-subagent-concurrency-limit
config:
maxConcurrentSubagents: 2
subagentToolNames:
- subagent
启动 profile:
dsh --profile web
使用说明¶
- 并发池: 进程内所有符合条件(委托深度 > 0)的代理共享同一个并发池。
- FIFO 等待: 当并发池满时,根代理的委托调用进入等待队列。
- 嵌套行为: 嵌套的子代理调用同样消耗并发池。如果池已满,子代理调用会立即失败,不会等待,从而避免阻塞正在等待的祖先代理。
- Workflow 调用: 工作流中的
agent()调用和恢复的本地子代理轮次在开始时会使用该并发池。 - 资源释放: 当子代理轮次变为空闲、运行结束或代理被销毁时,许可 (permit) 被释放。
注意事项¶
- 默认限制: 默认并发限制为 2。
- 配置约束:
maxConcurrentSubagents必须是正整数;subagentToolNames必须包含至少一个非空工具名称。 - 根代理不计入: 根代理本身不占用并发配额。
- 远程进程限制: 对于远程进程提供商(如 Codex, Claude Code, ACP),只能统计配置的根级委托准入,以及可观测的
subagent/start和subagent/end边界。远程进程内部的嵌套执行和重启无法被统计。 - 独立限制:
maxParallelToolCalls的限制是独立的,它限制的是工具调用,而非活跃运行的任务。
结语¶
该插件通过控制进程内的并发资源,帮助开发者防止子代理耗尽系统资源。开发者可以在插件目录页查看更多详情,或在 GitHub 仓库查看源码。
目录页: dsh-subagent-concurrency-limit - SkillHub
源码: github.com/blauerberg/dsh-subagent-concurrency-limit