🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智能体集群编排 c2j/dsh-swarmforge

DeepSeek Harness
c2j69 天前有提交已提供中文文档扫描:含敏感能力

用 YAML 定义智能体集群并协同完成任务

26.1/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add c2j/dsh-swarmforge
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 69 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/8) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 58 处,展示前 33 条)
  • 写入本地文件
    src/git/byline.ts:44
    await mkdir(dirname(hookPath), { recursive: true })
  • 写入本地文件
    src/git/byline.ts:45
    await writeFile(hookPath, commitMsgHook, 'utf8')
  • 写入本地文件
    src/git/byline.ts:46
    await chmod(hookPath, 0o755)
  • 读取本地文件
    src/git/byline.ts:52
    return await readFile(path, 'utf8')
  • 读取本地文件
    src/git/operations.ts:159
    content = await readFile(path, 'utf8')
  • 写入本地文件
    src/git/operations.ts:168
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/git/operations.ts:170
    await writeFile(path, `${prefix}${added.join('\n')}\n`, 'utf8')
  • 执行外部命令固定命令
    src/git/runner.ts:16
    execFile(
  • 读取本地文件
    src/git/worktrees.ts:38
    if (registeredPaths(list.stdout).has(await realpath(path))) return { path, created: false }
  • 写入本地文件
    src/git/worktrees.ts:46
    await mkdir(join(projectRoot, '.worktrees'), { recursive: true })
  • 读取本地文件
    src/git/worktrees.ts:63
    return (await stat(path)).isDirectory()
  • 写入本地文件
    src/service/runtime.ts:24
    await Promise.all(directories.map((directory) => mkdir(directory, { recursive: true })))
  • 写入本地文件
    src/service/runtime.ts:27
    await writeFile(join(projectRoot, '.swarmforge', 'roles.tsv'), `role\tworktree\treceive-mode\n${rows.join('\n')}\n`, 'utf8')
  • 读取本地文件
    src/service/runtime.ts:30
    await readFile(tasksPath, 'utf8')
  • 写入本地文件
    src/service/runtime.ts:33
    await writeFile(tasksPath, '', 'utf8')
  • 读取本地文件
    src/service/runtime.ts:39
    const content = await readFile(join(projectRoot, '.swarmforge', 'anchors.tsv'), 'utf8')
  • 写入本地文件
    src/service/runtime.ts:52
    await mkdir(join(projectRoot, '.swarmforge'), { recursive: true })
  • 写入本地文件
    src/service/runtime.ts:54
    await writeFile(join(projectRoot, '.swarmforge', 'anchors.tsv'), `role\tanchor-session\n${rows.join('\n')}\n`, 'utf8')
  • 写入本地文件
    src/service/service.ts:144
    await writeFile(this.taskBodyPath(name), text, 'utf8')
  • 写入本地文件
    src/service/service.ts:154
    await writeFile(join(this.handoffsPath(HANDOFF_PATHS.projectOutbox), file), formatDeliveredHandoff(record), 'utf8')
  • 读取本地文件
    src/service/service.ts:162
    content = await readFile(this.tasksPath(), 'utf8')
  • 读取本地文件
    src/service/service.ts:179
    return await readFile(this.taskBodyPath(name), 'utf8')
  • 删除本地文件
    src/service/service.ts:202
    await unlink(this.taskBodyPath(name)).catch((error: unknown) => { if (!isNotFound(error)) throw error })
  • 读取本地文件
    src/service/service.ts:231
    const files = (await readdir(directory)).sort(compareHandoffFilenames)
  • 写入本地文件
    src/service/service.ts:251
    await writeFile(staging, formatDeliveredHandoff(approved), 'utf8')
  • 写入本地文件
    src/service/service.ts:252
    await rename(staging, pending.path)
  • 写入本地文件
    src/service/service.ts:253
    await rename(pending.path, join(this.handoffsPath(HANDOFF_PATHS.projectOutbox), pending.file))
  • 删除本地文件
    src/service/service.ts:262
    await unlink(pending.path)
  • 写入本地文件
    src/service/service.ts:263
    await writeFile(join(this.options.projectRoot, '.swarmforge', 'notify', `reject-${record.task}`), '', 'utf8')
  • 读取本地文件
    src/service/service.ts:281
    const files = (await readdir(directory)).sort()
  • 读取本地文件
    src/service/service.ts:283
    const content = await readFile(join(directory, file), 'utf8')
  • 读取本地文件
    src/service/service.ts:295
    content = await readFile(source, 'utf8')
  • 读取本地文件
    src/spawn/spawner.ts:93
    const content = await readFile(confPath, 'utf8')
扫描于 2026/10/31(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-loop-testkit@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • YAML定义智能体集群
  • 协同完成任务

README

由 DeepSeek 最新模型翻译生成
dsh-swarmforge 多智能体编排插件,适用于 DeepSeek Harness。 dsh-swarmforge 让你在 dsh 里定义、生成并运行智能体集群。声明一组智能体,给它们分配角色和工具,然后让它们协同完成一项任务。 功能特性 - 声明式集群定义 —— 用 YAML 描述智能体、角色和工具授权。 - 并行执行 —— 智能体并发运行,结果实时流式回传。 - 子代理生成 —— 智能体可以在运行过程中生成子代理,处理子任务。 - 工具授权 —— 精确控制每个智能体能调用哪些工具。 - 会话隔离 —— 每个智能体拥有独立上下文,互不污染。 - 钩子 —— 在智能体生命周期的关键节点挂载钩子,介入执行流程。
展开完整文档(README 剩余 1 节)
dsh-swarmforge

多智能体编排插件,适用于 DeepSeek Harness。

dsh-swarmforge 让你在 dsh 里定义、生成并运行智能体集群。声明一组智能体,给它们分配角色和工具,然后让它们协同完成一项任务。

功能特性

- 声明式集群定义 —— 用 YAML 描述智能体、角色和工具授权。
- 并行执行 —— 智能体并发运行,结果实时流式回传。
- 子代理生成 —— 智能体可以在运行过程中生成子代理,处理子任务。
- 工具授权 —— 精确控制每个智能体能调用哪些工具。
- 会话隔离 —— 每个智能体拥有独立上下文,互不污染。
- 钩子 —— 在智能体生命周期的关键节点挂载钩子,介入执行流程。

安装

npm install dsh-swarmforge

或者用 npx:

npx dsh-swarmforge init

快速开始

在项目根目录创建 swarm.yaml:

name: research-swarm
agents:
- name: planner
role: 把任务拆解成子任务 tools:
- task.create
- task.list
- name: researcher
role: 收集信息 tools:
- web.search
- web.fetch
replicas: 3
- name: writer
role: 汇总结果,撰写报告 tools:
- file.write

运行集群:

dsh swarm run swarm.yaml

配置

顶层字段

| 字段 | 类型 | 说明 |
| name | string | 集群名称,必填 |
| agents | array | 智能体定义列表,必填 |
| provider | string | 服务商,默认继承 dsh 配置 |
| maxConcurrency | number | 同时运行的智能体上限,默认 4 |
| timeout | number | 单个智能体超时时间,单位秒,默认 300 |

智能体字段

| 字段 | 类型 | 说明 |
| name | string | 智能体名称,集群内唯一 |
| role | string | 角色描述,会作为系统提示词注入 |
| tools | array | 允许调用的工具列表 |
| replicas | number | 副本数量,默认 1 |
| model | string | 覆盖默认模型 |
| hooks | object | 生命周期钩子 |

钩子

钩子让你在智能体执行前后插入逻辑:

agents:
- name: researcher
role: 收集信息 hooks: beforeRun: ./hooks/before-run.ts afterRun: ./hooks/after-run.ts onError: ./hooks/on-error.ts

每个钩子文件导出一个默认函数:

export default async function (ctx) {
console.log(智能体 ${ctx.agent.name} 开始运行);
return ctx;
}

子代理

智能体可以在运行时生成子代理:

const subagent = await ctx.spawn({
name: "fact-checker",
role: "核对事实",
tools: ["web.search"],
});

const result = await subagent.run("核对这份报告里的数据");

子代理继承父代理的服务商配置,但拥有独立会话。

命令行

dsh swarm init # 生成示例 swarm.yaml
dsh swarm run <file> # 运行集群
dsh swarm validate <file> # 校验配置
dsh swarm list # 列出当前项目里的集群

API

import { Swarm } from "dsh-swarmforge";

const swarm = new Swarm({
name: "research-swarm",
agents: [
{ name: "planner", role: "拆解任务", tools: ["task.create"] }, { name: "researcher", role: "收集信息", tools: ["web.search"], replicas: 3 }, ], });

swarm.on("agent:start", (agent) => {
console.log(${agent.name} 启动);
});

swarm.on("agent:finish", (agent, result) => {
console.log(${agent.name} 完成:${result.summary});
});

await swarm.run("调研 2025 年边缘计算市场");

事件

| 事件 | 参数 | 触发时机 |
| swarm:start | — | 集群开始运行 |
| swarm:finish | results | 所有智能体结束 |
| agent:start | agent | 单个智能体启动 |
| agent:finish | agent, result | 单个智能体完成 |
| agent:error | agent, error | 单个智能体报错 |
| subagent:spawn | parent, child | 生成子代理 |

许可证

MIT
预览分享卡片长什么样 ↓c2j/dsh-swarmforge
分享 · DeepSeek Harness Hub
c2j/dsh-swarmforge

用 YAML 定义智能体集群并协同完成任务

回到顶部