DeepSeek Harness(dsh)的可视化智能体编排画布:把 LLM/MCP 节点拼成 DAG,在聊天里直接运行,还能把画板导出成 DSH 预设。自带引擎,装好就能跑。
33.5/100
综合分
5
GitHub 星标
118
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-agentflownpm 源 · dsh-plugin-agentflow 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugin-agentflow @ 0.3.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 11:43:30
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 20 条)
- 读取本地文件index.js:58
if (existsSync(path.join(BUNDLED_DIR, 'server.mjs'))) return BUNDLED_DIR; - 发起网络请求index.js:126
const res = await fetch('http://127.0.0.1:' + port + '/', { - 执行外部命令来自配置/变量index.js:166
const child = spawn(process.execPath, ['server.mjs'], { - 发起网络请求runtime/bridge.mjs:92
const res = await fetch(urlOf(info, '/health'), { - 发起网络请求runtime/bridge.mjs:113
const res = await fetch(urlOf(info, '/health'), { - 发起网络请求runtime/bridge.mjs:127
res = await fetch(urlOf(info, '/catalog'), { - 发起网络请求runtime/bridge.mjs:162
res = await fetch(urlOf(info, '/stream'), { - 发起网络请求runtime/mcp.mjs:234
const result = await this.request('tools/list', cursor === undefined ? {} : { cursor }); - 执行外部命令来自配置/变量runtime/mcp.mjs:400
const child = spawn(command, args, { - 发起网络请求runtime/mcp.mjs:557
const res = await fetch(this.url, { - 发起网络请求runtime/mcp.mjs:619
await fetch(this.url, { - 发起网络请求runtime/mcp.mjs:678
const init = await conn.request('initialize', { - 发起网络请求runtime/mcp.mjs:770
const result = await conn.request('tools/call', { - 读取本地文件runtime/server.mjs:548
const file = await fs.readFile(target).catch(() => null); - 读取本地文件runtime/server.mjs:556
const html = await fs.readFile(distIndex); - 读取本地文件runtime/server.mjs:562
const html = await fs.readFile(path.join(ROOT, 'index.html'), 'utf8').catch(() => null); - 写入本地文件runtime/server.mjs:896
await fs.appendFile('/tmp/agentflow-plugin-alive.log', `${new Date().toISOString()} ${stage}${detail ? ' :: ' + detail : ''}\n`); - 发起网络请求runtime/verify.mjs:36
const connectReq = http.request({ - 发起网络请求runtime/verify.mjs:68
const req = https.request( - 发起网络请求runtime/verify.mjs:101
const res = await fetch(url, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
最近更新
在 GitHub 查看全部 →v0.4.12026-10-29
修复 0.4.0 的一个回归:画布样式作用域化时把 html/body/#root 的高度规则也收进了 .af-canvas,导致直接打开 8791 或使用 iframe 回退模式时画布区域高度为 0(一片空白)。现在高度规则只留在引擎 web/index.html,内联模式仍由 CanvasHost 负责。
· 影响面:仅独立页面 / iframe 回退;DSH 内联画布不受影响
· 验证:引擎 72 项、插件 479 项全绿,8791 页面实测节点正常渲染
v0.4.02026-10-29
· 0.4.0:画布变成对话命令
以前画布只能「导出预设」(写 profile、要重启);现在画布变成一条斜杠命令,输入即生效。
· 新增
· 命令热注册:画布右上角「生成命令」→ 得到 /agentflow-;插件监听命令目录,注册/删除都不用重启
· DAG 驱动对话(lib/flow.js):你的话进入口节点;按层强制 spawn teammate(名字=节点 id + 随机后缀),每个节点完成后才能进下一层
· agentflow_node_done:节点完成必须显式声明,插件硬校验(产出 ≥10 字 / 前置已完成 / 已派发 / 只有发起者能标记)——模型不能自己把下游做完
· 状态落盘:工作流状态写 /runs/,DSH 重启后接着跑(换新 teammate 名重新派发)
· 观察器:lib/observe.js 记录每一步的消息形状与工具调用,npm run observe 读成时间线
· /命令 off 退出并中断已派出的 teammate;撞名自动换名重试
· 变更
· 预设生成整链路下线(preset-gen.mjs 删除,persona 规则搬进 orchestrator.mjs);设置页只留「旧预设清理」
· 设置页/菜单生成的命令跟随当前打开的画布
· 节点上配的 model / 推理档 / 技能 / 工具会写进派发指令;MCP 节点在命令模式标注为不执行
· 宿主内联适配并入引擎源,npm run sync 不再覆盖画布适配
· 测试
· 插件 479 项(bridge 91 / client 86 / observe 28 / commands 150 / flow 124)
· 引擎 72 项
需要 DSH 0.2.x + Node 22;目前只在 macOS 验证过。跑到多层画布时 teammate 名额默认 8,README §6 有改法。
v0.3.12026-10-21
· 0.3.1 — 新建画布默认带一张调度根卡
· 新建画布不再是一张白板:createBoard 直接生成一张调度(根)卡(对话入口)
- 默认人格:你是「」的对话入口。…
- 默认完成标准:用户需求确认清楚、后续节点全部执行完成
- id=orchestrator,位置 80/80,子节点仍由用户自己派生
· 根卡沿用既有保护:后端 DELETE/PUT 返回 400、前端禁用删除,画布不会退化
· 引擎测试跟进行为变更(85/85 全绿),插件测试 152/152 全绿
· 客户端 bundle 无变化(sha a28dc3a0…),本次只更新 runtime/boards.mjs 与版本号
重启 DSH 后生效。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成AgentFlow · DSH 插件
在 DeepSeek Harness 里用画布编排智能体工作流,一键生成 /命令 —— 每一步由你定义,而不是塞进一个黑盒循环。
画布
是什么
DSH 自带的智能体是「一个模型 + 一堆工具」的循环,中间怎么想、调什么,你看不见也改不了。
AgentFlow 把它掰开:画布上的每张卡片就是一个智能体步骤。你决定有几步、谁先谁后、谁并行、每步用哪个模型、能不能调 MCP 工具、做完怎么验收。编排好之后把整张画布生成成一个 DSH 命令,在对话里输入 /命令名 就能用。
- 节点:LLM(调模型)/ MCP(直接调工具,不经过模型)/ 调度(根,对话入口)
- 执行:纯 DAG,无上游先跑、同层并行、失败不阻塞其它分支
- 模型:全部走 DSH 自己的模型通道(ctx.llm),推理强度和兜底模型可逐节点配
- 命令:整张画布生成成 /命令名,插件热注册、即时生效,不写 DSH 配置档
安装
从 npm
DSH → 设置 → 插件 → 添加插件 → 输入:
dsh-plugin-agentflow
从 GitHub
CC19990113/dsh-plugin-agentflow
装完重启 DSH。左侧栏出现 AgentFlow 入口,后端由插件自动拉起(默认 127.0.0.1:8791),不需要手动跑命令。
展开完整文档(README 剩余 1 节)
AgentFlow · DSH 插件
在 DeepSeek Harness 里用画布编排智能体工作流,一键生成 /命令 —— 每一步由你定义,而不是塞进一个黑盒循环。
画布
是什么
DSH 自带的智能体是「一个模型 + 一堆工具」的循环,中间怎么想、调什么,你看不见也改不了。
AgentFlow 把它掰开:画布上的每张卡片就是一个智能体步骤。你决定有几步、谁先谁后、谁并行、每步用哪个模型、能不能调 MCP 工具、做完怎么验收。编排好之后把整张画布生成成一个 DSH 命令,在对话里输入 /命令名 就能用。
- 节点:LLM(调模型)/ MCP(直接调工具,不经过模型)/ 调度(根,对话入口)
- 执行:纯 DAG,无上游先跑、同层并行、失败不阻塞其它分支
- 模型:全部走 DSH 自己的模型通道(ctx.llm),推理强度和兜底模型可逐节点配
- 命令:整张画布生成成 /命令名,插件热注册、即时生效,不写 DSH 配置档
安装
从 npm
DSH → 设置 → 插件 → 添加插件 → 输入:
dsh-plugin-agentflow
从 GitHub
CC19990113/dsh-plugin-agentflow
装完重启 DSH。左侧栏出现 AgentFlow 入口,后端由插件自动拉起(默认 127.0.0.1:8791),不需要手动跑命令。
要求:DSH 桌面版 0.2.x、Node 22+。
怎么用
1. 画布列表
画布列表
每张画布可以生成一个 DSH 命令。卡片上会标出「对话入口」(哪张卡是和用户对话的根节点)。
2. 编排
- 拖卡片改位置,从卡片边缘拖线连上下游
- 点卡片改模型、推理强度、兜底模型、技能、MCP 工具
- 「加下游 / 加上游」快速派生新卡
- 编辑自动保存,点「保存」把编排落库;点「生成命令」把画布变成 /命令
3. 验证
顶栏「验证 AgentFlow」会真实跑一遍整张图(会消耗 token),用来看流程通不通。卡片上只显示配置摘要,不堆运行产出。
4. 生成命令
点画布上的「生成命令」(或插件页 → 添加插件 →「从 AgentFlow 画布生成命令」,或设置页 AgentFlow 分区),得到 /agentflow-<slug>:
- 生成即生效:命令由插件热注册,无需重启 DSH,也不写 ~/.dsh/profiles/<profile>/cordis.patch.yml
- 命令名:默认 agentflow-<画布 slug>;同名会覆盖
- 落盘:<数据目录>/commands/<name>.json,只存画布 id
- 跟当前画布:画布内联打开哪张,设置页/菜单就生成哪张(画布会通过 agentflow-board-active 事件回传当前 id);没有回传时才退回索引第一张
在对话输入框里:
| 输入 | 行为 |
| /agentflow-<slug> | 只看画布:返回画布名、节点列表(label / 任务 / 上游)与用法,不消耗 token |
| /agentflow-<slug> 要做的事 | 进入该画布的工作流:你的话作为入口节点(调度卡)的输入,之后对话被画布 DAG 推着走 |
| /agentflow-<slug> off | 退出该画布的工作流 |
5. 输入命令之后,对话怎么走
不是「把画布说明塞给模型让它自觉」,而是插件按 DAG 推进:
1. 你的话进根节点(调度卡;优先认引擎的 type: 'orchestrator'),模型只做这个节点,做完必须调 agentflow_node_done(node_id, output)
2. 插件校验(非空、≥10 字、前置已完成、只有发起这次工作流的智能体能标记),通过后算下一层
3. 这一层有几个节点,就强制为每个节点建一个 teammate:
- teammate 名由插件分配:<节点id清洗>-<本次 run 的随机后缀>。Agent Teams 的 roster 名字永不复用(实测连 DSH 重启后都还记着),所以每次 run 都换后缀;同一 run 内清洗撞名再加 -2
- tools/pre-execute 只放行这一套名字(报错里列出当前能派谁)
- 派发指令里带每个节点的任务、验收标准、上游产出摘要
4. 非根节点必须先真的 spawn 过才能标完成(tools/post-execute 观察到成功的 spawn_teammate 才算),所以模型没法自己把下游做完
5. 每个 teammate 回报后,用它的实际产出去调 agentflow_node_done;一层全部完成才进下一层
6. 全部完成 → 收束并给产出清单;连线成环 → 判定卡住并提示
画布上给节点配的模型 / 推理档 / 技能 / 工具会写进派发指令(spawn_teammate 没法指定模型,所以是「按这套配置干活」的提示,不是强制);type: mcp 的节点在命令模式暂不执行,指令末尾会明确列出「本次不执行:…」,不会静默吞掉。
每一步都会注入一行进行态(已完成 / 已派发待回报 / 待派发)。模型想收工但还没派发时,turn-stopping 会在同一回合先催一次(同一个 turn 不重复刷),超过 120s 再补提醒。
同一张画布已有进行中的工作流时,再输入 /命令 文本 会被拒绝(提示先 off 或等结束),不会静默覆盖。
工作流状态会落到 <数据目录>/runs/<会话>.json:DSH 重启后能接着跑(恢复时会换新的 teammate 名重新派发,因为旧 teammate 已经不在)。/命令 off 除了退出,还会中断已经派出去的 teammate(需要装 Agent Teams;服务不在时只退出不中断)。
teammate 名撞车(概率极低)会自动换名重试一次,并提示模型用新名字重新 spawn。
指令有预算:规则永远先占位,用户输入/节点详情按剩余额度截断并提示「已截断」。没有任务(或只有空白)的占位节点自动跳过;整张画布没有可执行节点时直接判结束,不会留一个永远不动的 run。
前提:Agent Teams(spawn_teammate 等工具)要在 profile 里;没装时命令仍可用,只是派发那一层会停在对话里,由你手动推进。
6. 想跑多层 / 多节点:先调 teammate 名额
画布上每个节点都会建一个 teammate,所以节点多、层数深的画布会很快撞上限。默认上限不是代码里的 16,而是被 profile bundle 压到 8:
| 层 | 值 | 位置 |
| 主包默认 | DEFAULT_MAX_MEMBERS = 16 | @deepseek-ai/dsh-experimental-agent-team/lib/index.js |
| bundle 覆写 | maxMembers: 8 | @deepseek-ai/dsh-experimental-agent-team-profile/cordis.patch.yml |
| desktop profile | bundles 里挂了这个 bundle | ~/.dsh/profiles/desktop/package.json |
要开大,在自己的 profile cordis.patch.yml 末尾追加同 id 覆写(<profile> 换成你的,桌面版是 desktop):
- id: agent-team
config:
maxMembers: 32
maxTasks: 256
maxMessageBytes: 65536
disposalTimeoutMs: 5000
三个坑:
1. config 是整体替换、不深合并(dsh-app-boot 原文 "config is replaced wholesale, not deep-merged")。只写 maxMembers 会把其余键打回 schema 默认,所以四个键必须写全(后三个与 bundle 原值一致)。
2. 必须重启 DSH:TeamService 在构造时读 config,热改不生效。
3. 注意内存:每个 teammate 都是独立 agent(自己的会话与上下文),十几个同时活着时内存和 token 都明显上涨;32 已接近 24 GB 机器的实际承受力。另外名额用完不回收——Agent Teams 的成员名永不复用,所以一次 App 会话里能建的 teammate 总数是有上限的,宽画布建议拆小或分层跑。
画布删掉时对应命令文件会被一起清掉(不再注册也不会留死文件);配置 commands: false 可关掉注册(只生成不挂命令)。历史遗留的预设不再生成,插件设置页只留「旧预设清理」用于删除 profile 里的旧行。
深色模式
深色
主题跟随 DSH:内联(native)模式下画布直接读宿主主题(body[data-ds-dark-theme] / html.dark / 系统偏好),切换时实时推送;iframe 回滚模式仍把主题拼进地址,画布启动时按它初始化。手动切换只在本次会话内生效,DSH 重开时重新读配置。
架构
DSH 桌面 ├── 插件(index.js) │ ├── 工具:agentflow_list / agentflow_run │ ├── 客户端:侧边栏入口、设置页分区、主视图画布 │ │ ├── src/canvas 画布源码(构建时编进客户端 bundle) │ │ └── src/host 宿主桥:API 基地址 / 主题 / 样式注入 │ └── 子进程:node runtime/server.mjs → 127.0.0.1:8791(只提供 API) │ ├── engine.mjs 纯 DAG 执行器 │ ├── llm.mjs 调模型(只走 bridge) │ └── web/dist 独立画布页面(iframe 回滚模式用) └── llm bridge(lib/bridge.js) └── 把 ctx.llm 暴露给引擎,模型调用始终在 DSH 进程内
runtime/ 是打包时从引擎仓库同步过来的副本(npm run sync),所以插件自带完整引擎,装完即用。画布源码(src/canvas/)由同一次同步带来、构建时一起编进客户端 bundle:默认 native 模式下画布直接长在 DSH 主视图里,8791 只负责 API;配成 iframe 则回滚到嵌入 web/dist 独立页面的旧行为。
配置
| 项 | 默认 | 说明 |
| 数据目录 | ~/.dsh/agent-flow-data | 首次启动会自动从 ~/.dsh/agent-flow/data 迁移 |
| 后端端口 | 8791 | 可用 agentflowPort 插件配置改 |
| 旧预设 profile | desktop | 读/删历史预设(/api/presets)用;可用环境变量 AGENTFLOW_PROFILE 指定别的 profile |
| commands | true | 是否把 <数据目录>/commands/*.json 注册成对话命令;关闭则只生成不注册 |
| agentflowRenderMode | native | 画布渲染方式:native 把画布编进客户端 bundle 直接渲染;iframe 回滚到嵌入独立画布页面 |
| agentflowUrl | http://127.0.0.1:8791 | native 下作为 API 基地址;iframe 下作为画布页面地址 |
| observe | true | 观察器:只记每一步的消息形状与每次工具调用,不拦不改 |
| observeDir | <数据目录>/observe | 观察日志落盘目录 |
观察器
打开 observe 后,插件会挂到 agent/pre-step、tools/post-execute、agent/turn-stopping 三个钩子上,把每个智能体的一次对话记成 <observeDir>/<session>.jsonl,一行一个事件(工具耗时取自 tools/execute 的真实执行时间):
| t | 字段 | 说明 |
| step | turn step msgs[] decision{} | 这一步进了哪些消息(只记 source.kind / form / 字符数,不存正文)、最终决策是 enter 还是 reject |
| tool | turn step name args ms isError text | 每一次工具调用;被 pre-execute deny 的也会出现,isError 为真 |
| stop | turn | 模型认为自己干完了(turn-stopping)的地方 |
用途:做「强制工作流」之前,先看清模型实际怎么调工具、在哪收工、被拒之后怎么反应。
纪律:写盘 fire-and-forget,任何异常只 warn——观察器坏了不能连累对话。
限制
- 只在 macOS 上验证过,Windows 的路径与命令未测
- teammate 名额默认 8(bundle 覆写),宽画布先按 §6 调大;名额用完不回收,重启 DSH 才重置
- 运行态是全局的:跑图时切换画布,事件会被丢弃;「停止」不分画布
- 验证跑图会真实调用模型,注意 token 消耗
- 命令只注册已存在的画布:画布删了,对应命令下次扫描时自动消失
- 宿主客户端运行时是 React 18;画布源码来自 React 19,但只使用两者共有的 API(不用 19-only API)
- 画布样式靠 .af-canvas 作用域隔离(Tailwind 的 :root 变量收进容器内),不污染宿主页面
- npm run sync 会清空重建 src/canvas/:为内联渲染做的适配改动会被引擎源码覆盖,改完需要重做
开发
npm run build # 构建客户端 bundle(lib/client.js,含画布)
npm run sync # 从 ~/.dsh/agent-flow 同步引擎到 runtime/,并把画布源码同步到 src/canvas/
npm run check # 语法检查 + tsc --noEmit
npm test # 插件自测(479 项:bridge 91 + client 86 + observe 28 + commands 150 + flow 124)
npm run observe # 把观察日志读成时间线(默认 ~/.dsh/agent-flow-data/observe)
引擎侧测试在 ~/.dsh/agent-flow/test(72 项)。
发布
发布由 GitHub Release 触发,不在本地手动 npm publish:
1. 升 package.json(和 package-lock.json)的版本号
2. 打 tag 并创建 Release:gh release create v0.3.0 --title "v0.3.0" --notes-file notes.md
3. Release 发布后 .github/workflows/publish.yml 自动执行: npm ci → 语法检查 → 构建客户端 → 自测(含客户端 bundle 自测)→ 校验提交的 lib/client.js 与源码构建一致 → 校验 tag 与 package.json 版本一致 → npm publish --provenance
需要仓库 secret NPM_TOKEN:npm granular token,权限选 Read and write (publish and stage),并勾选 Bypass two-factor authentication。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CC19990113/dsh-plugin-agentflow
DeepSeek Harness(dsh)的可视化智能体编排画布:把 LLM/MCP 节点拼成 DAG,在聊天里直接运行,还能把画板导出成 DSH 预设。自带引擎,装好就能跑。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6