DeepSeek Harness 的交互式长会话后台智能体:启动一个持久可续的子代理,在 Web UI 侧边栏看进度,随时发消息、随时打断——全部走官方子代理接口。
42.7/100
综合分
19
GitHub 星标
322
npm 周下载
—/5
用户评分
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-background-agentsnpm 源 · dsh-background-agents 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 27 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-background-agents @ 0.10.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:48:37
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求lib/index.js:6990
const outcome = await approval.request(req); - 发起网络请求src/room/tools.ts:58
const outcome = await approval.request(req)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-commands@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-storage@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-storage-json@deepseek-ai/dsh-subagent给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 启动持久可续子代理
- 侧边栏查看进度
- 随时发消息与打断
最近更新
在 GitHub 查看全部 →v0.10.22026-10-05
· [0.10.2] - 2026-10-05
· 变更
· 修正上一节的发布日期,发布工具之前把字面字符串 undefined 盖了上去。内容和行为都没变,升版本只是因为 npm 不会重新发布已有版本。
v0.10.12026-10-05
· [0.10.1] - 2026-10-05
undefined
原文(未汉化)
v0.9.132026-10-05
· 变更
· 宿主版本锁定改为 0.2.1-alpha.1,并已按该宿主版本线重新验证。所有 @deepseek-ai/dsh-* 开发/测试依赖现在都锁定 0.2.1-alpha.1,dshWorkshop.compatibility.dshVersions 时间线追加 0.2.1-alpha.1,每个 README 里的兼容性基线都记录 dsh-v0.2.1-alpha.1 宿主。声明的宿主范围(engines.dsh 和 peerDependencies 并集)新增 || >=0.2.0-0 =0.2.1-0 <0.3.0 子句:原来的上界是 <0.2.0,按 semver 会拒绝所有 0.2.x 宿主,连探测用的宿主本身都装不上。范围没有收窄——0.1.x 子句原样保留,位置和顺序都不变。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成👥 dsh-background-agents
- 1024 store channel:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-background-agents(会计入 deepseek1024.com 的安装排行)。
dshfind
🪦 已退役 —— 自 2026-10-05 起停止兼容性更新。 这项能力现在由官方 harness 自身实现:DeepSeek Harness 自带原生可续接子代理 —— subagent 配合 backgroundMode: continuable,外加 send_message / interrupt_agent / list_agents / job_ —— 挂载在 dsh-base 内,无需任何插件。团队房间那部分已抽离到 dsh-team-rooms,它同样因原生 Agent Teams 而退役。👉 请改用原生可续接子代理。 本仓库仍公开供参考,但不会再跟进宿主后续变更。
为 DeepSeek Harness 提供可交互的长会话后台智能体,以及持久的多智能体团队房间 —— 启动一个持久的子智能体,你继续说话,它继续干活。
实时引导对话,跨会话协调团队;借助 harness 自身的存储,一切都能在重启后存活。
展开完整文档(README 剩余 1 节)
👥 dsh-background-agents
- 1024 store channel:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-background-agents(会计入 deepseek1024.com 的安装排行)。
dshfind
🪦 已退役 —— 自 2026-10-05 起停止兼容性更新。 这项能力现在由官方 harness 自身实现:DeepSeek Harness 自带原生可续接子代理 —— subagent 配合 backgroundMode: continuable,外加 send_message / interrupt_agent / list_agents / job_ —— 挂载在 dsh-base 内,无需任何插件。团队房间那部分已抽离到 dsh-team-rooms,它同样因原生 Agent Teams 而退役。👉 请改用原生可续接子代理。 本仓库仍公开供参考,但不会再跟进宿主后续变更。
为 DeepSeek Harness 提供可交互的长会话后台智能体,以及持久的多智能体团队房间 —— 启动一个持久的子智能体,你继续说话,它继续干活。
实时引导对话,跨会话协调团队;借助 harness 自身的存储,一切都能在重启后存活。*
dsh-doctor
DSH Market
English · 简体中文 · Español · Português · हिन्दी
⭐ 如果它帮到了你
这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
兼容性
宿主 0.1.2-alpha.2 及之后的版本对会话事件词表采用 fail-closed 策略,所以这个插件不再往那里写只用于日志的事实事件(background-agents/fact、team-room/fact):事实改走 logger/panel 通道,投影退化为空折叠。更早的 rc 系列(一直到 0.1.1-rc.2)仍保持可忽略标记的约定。客户端那一半现在跟随当前的客户端包(dsh-api-session-controller、dsh-client-web)和当前的子代理 remote(interruptByParent、带客户端生成的 requestId 的 prompt;旧的 history RPC 已经移除 —— 查看结果改为读子会话的 conversation 投影)。
0.1.2-rc.1(适配于 2026-09-04):会话信封保留可忽略字段,只为兼容已存储日志的读取 —— Session.append 仍然无法写入它(第三个参数是 SurfaceIntent,只用于 surface 事件类型,从来不是 options 包),所以事实门控行为不变。
0.1.3-alpha.1(适配于 2026-09-06):CI harness 的 pin 移到 master checkout(d347e7039)—— 即会话持久化服务的 handle 接缝(open → read → close)。已发布的 0.1.2-rc.1 运行时早于 open(),所以冷读 bg_result 会特性探测这个接缝,探测不到就回退到 load() —— 两条线行为一致。2026-09-06 已对照 dsh-v0.1.7-alpha.1 的 master checkout 验证(完整门控链 + profile 安装冒烟测试)。
0.1.5-alpha.1(适配于 2026-09-09):SessionHandleReadResult 现在返回 { eventState, events },所以冷读 bg_result 会从 handle 接缝里解构出 .events(已发布的 load() 回退不变)。CI harness 的 pin 移到公开 tag 提交 5dda764ed3aa(本地 checkout 领先 13 个基础设施提交,CI 无法访问),兼容性探针改为安装 alpha 线。peer 范围放宽到 >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0(预发布元组规则:只写第一段匹配不上 0.1.5-alpha.1),devDeps 固定到 0.1.5-alpha.1。2026-09-09 已对照 dsh-v0.1.7-alpha.1 验证(完整门控链)。此前 0.1.3-alpha.1 的说法作废:那个预发布版本落在两段 peer 范围之外。
0.1.5-rc.1(适配于 2026-09-10):依赖 pin 移到已发布的 0.1.5-rc.1 线;没有接缝变化影响这个插件的行为。
0.1.5-rc.2(适配于 2026-09-11):依赖 pin 移到已发布的 0.1.5-rc.2 线;没有接缝变化影响这个插件的行为。
0.1.6-alpha.2(适配于 2026-09-18):客户端会话服务移除了子代理导航调用,所以该动作现在会报告导航归会话头部所有(ui-subagent 的 lineage seat),而不是静默失败;房间面板从主视图保留(retainedBy.mainView)推导当前会话,因为 SessionListState.current 已移除。agent/created 补漏监听器在自己的 2 s 上限内同步返回,无法读取的子日志会报告 unavailable,而不是空文本。由会话日志事实通道供给的 Dashboard 指标在这一线上仍为 unavailable(非 surface 事实事件仍无法打上 ignore 标记)——持久房间表和面板的投影值才是记录。已验证 2026-09-18(两个 typecheck ruler + 完整测试套件);浏览器可见的那一半尚未经过机器验证。
0.1.7-alpha.1(适配于 2026-10-04):宿主完成了向生产者自有消息归属的迁移——通配的 { kind: 'plugin', plugin } 来源已从类型映射和物理行准入中退役——所以本插件注入的每条通知现在都携带自己的 kind: 'dsh-background-agents',由模块增强声明;投影仍会从旧日志中读出 'plugin' 类型的通知。工具结果是 V4 一等 role: 'tool' 消息(toolCallId/content/isError 位于顶层,没有 { type: 'tool-result' } 包装块),listChildren 回归仅含身份的 SubagentCatalogEntry 行——没有 kind 判别符,没有诊断信息,没有 activity——所以每个直接列出的调用点都按 mode === 'continuable' 分类。客户端侧,IconBranchOutline16 变为 IconBranchOutlineRegular,ISessions.refreshSubagents 变为 refreshProjections(sessionId)。已验证 2026-09-22(两个 typecheck ruler + 完整测试套件 + 构建 + 产物检查);浏览器可见的那一半尚未经过机器验证。
| Surface | Status |
| Harness | DeepSeek Harness dsh-v0.2.1-alpha.1(GitHub tag,已验证 2026-09-25;dev pins 0.1.7-rc.2,peers >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0) |
| Node | ^22.19.0 \|\| >=24.0.0 |
| Platforms | All(宿主工具;可选 Web 侧边栏面板和团队房间,经由 storage-domain 能力) |
| Model | Any(子级继承父级路由;childProvider/childModel 可覆盖) |
你能得到什么
dsh-background-agents 把 DSH 发后即忘的后台任务升级为两个协同的界面:
1. 五个操控工具 —— background_agent 在官方子代理接缝上启动一个持久、可继续的子代理(可选 tool_filter —— 只移除工具,绝不授予新工具;persona;max_depth;childProvider/childModel 路由)。bg_message 投递后续轮次;bg_list 报告状态(带 parentId/depth 时报告后代树);bg_result 读取最新结果文本(回退到推理时标记 textSource: 'reasoning');bg_stop 请求中断。
2. 进度与归档 —— autoReport 在每个子代理轮次后注入一行限流的进度;reportDelivery: wakeup 在父代理空闲时启动一轮。空闲扫描会归档安静的子代理,bg_message 再把它们唤醒(autoArchive: false 则改为停放安静的观察者)。
3. 仪表盘投影 + Web 面板 —— backgroundAgents 会话投影把父代理日志折叠成行;侧边栏面板显示实时状态、跳转、发消息、停止和结果速览。一切都从持久日志重建 —— 不需要单独的数据库。
4. 团队房间(v0.5.0+) —— /room 命令族加上八个 room_ 工具,构建持久的多智能体房间:成员(各自是独立会话)、消息总线(定向/广播)、共享任务板和共享时间线 —— 存储在 team_rooms 存储域(SQLite 或 JSONL),DSH 重启后仍能恢复。跨成员的任务交接走官方审批接缝。
快速开始
1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-background-agents#main"
or from npm (published releases)
dsh plugin --profile web add dsh-background-agents
2. restart and verify the row
dsh --profile web --dump-config | grep -A4 'id: background-agents'
bundle 补丁携带插件行;provider 必填。仓库提交了构建产物(lib/),所以 git 安装不需要构建步骤。插件需要已挂载子代理主干(任何基于 @deepseek-ai/dsh-base 构建的配置档都有)。团队房间在存储域组装处挂载(@deepseek-ai/dsh-storage-domain);五个 bg_ 工具没有它也能用。
然后,在任意会话里,直接问模型 —— 或者直接调用工具:
background_agent "watch the repo for test failures and keep me posted" (label: test-watch)
bg_list
bg_message <agentId> "also check the snapshot tests now"
bg_stop <agentId>
安装与卸载
- git 渠道(最新 main):dsh plugin --profile web add "github:PerryLink/dsh-background-agents#main" —— 已提交 lib/,无需 prepare 或 allowBuilds 步骤。
- npm 渠道(已发布版本):dsh plugin --profile web add dsh-background-agents。
- tarball 渠道:在本仓库执行 pnpm pack,然后 dsh plugin --profile web add ./dsh-background-agents-<version>.tgz。
- 卸载:dsh plugin --profile web remove dsh-background-agents(或从配置档补丁里删掉那一行)。
配置
每个可调项都是经过校验的 Schemastery Config 字段——在 cordis.yml 里改,绝不要在代码里改。只有 provider 是必填项。
| 键 | 默认值 | 含义 |
| provider | (必填) | ctx.subagents 服务商名称,用于可续接的启动(spawn) |
| autoReport | true | 每个子代理回合结束后,向父会话注入一行进度 |
| reportDelivery | quiet | quiet 把该行追加到下一次模型请求;wakeup 在父会话空闲时启动一个回合 |
| reportThrottleMs | 15000 | 同一个子代理两次进度注入之间的最小间隔 |
| reportSummaryMaxChars | 300 | 注入的进度行文本硬上限(超出省略) |
| resultMaxChars | 4000 | bg_result 文本硬上限(超出省略,并标记 truncated) |
| maxBackgroundAgents | 4 | 每个父会话未归档后台智能体的硬上限 |
| autoArchive | true | 空闲归档开关;设为 false 时,清扫永不归档安静的子代理 |
| idleTimeoutMinutes | 120 | 空闲多久后归档安静的子代理(>= 1) |
| idleSweepIntervalMs | 60000 | 归档清扫周期 |
| maxLabelChars | 120 | 显示标签上限(超出省略) |
| childProvider | (继承) | 子代理模型请求的服务商路由 |
| childModel | (继承) | 子代理模型请求的模型 id |
| maxChildDepth | (无) | 启动参数 max_depth 的配置上限 |
| allowedChildTools | (无) | tool_filter 名称的允许列表;为空或缺省 = 不限制 |
| maxRooms | 16 | 整个配置档内团队房间的硬上限 |
| maxMembersPerRoom | 8 | 每个房间成员数的硬上限 |
| maxRoomsPerMember | 4 | 一个成员会话可加入房间数的硬上限 |
| busRetention | 200 | 每个房间保留的总线消息数 |
| timelineRetention | 500 | 每个房间保留的时间线事件数 |
| taskRetention | 50 | 每个房间保留的已完成任务数 |
| maxMessageChars | 4000 | 单条房间消息文本的硬上限(超出直接拒绝,绝不截断) |
| injectRoomBrief | true | 向成员会话注入简短房间简介(加入 + 恢复时) |
| roomOpenTimeoutMs | 15000 | team_rooms 存储域打开可耗时多久,超时后所有房间操作都会显式失败(store-unavailable),而不是一直挂起 |
| allowUnmarkedFacts | false | 在丢弃 ignorable 标记的主机上,强制只记录事实事件(危险:未标记的事实会让会话在别处无法恢复);默认是检测并跳过 |
| observability | true | 每个智能体的成本/状态可观测性开关:每个子代理回合捕获一条 metrics 事实(token、回合墙钟时间、错误标记),并汇总到每行的 metrics 总计,供成本面板使用;false 关闭捕获(面板将指标显示为不可用) |
| inbound.enabled | false | 为外部智能体运行时(OpenAI Agents SDK / CrewAI)启用 stdio JSON-RPC 入站桥。默认关闭(fail-closed)。 |
| inbound.command | (无) | 外部运行时启动命令;启用且存在时,插件会拉起它,并监听以换行分隔的 JSON-RPC 通知。缺失或无法拉起 = 桥接保持休眠(会记录日志)。 |
工具与界面
| 界面 | 类型 | 说明 |
| background_agent | 工具 | 启动可持续、可继续的子代理(label、tool_filter、persona、max_depth) |
| bg_message | 工具 | 按 agent id 向子代理投递后续轮次 |
| bg_list | 工具 | 查看你的智能体状态(或加 recursive: true 查看后代树) |
| bg_result | 工具 | 获取子代理最新的助手输出文本 |
| bg_stop | 工具 | 请求中断当前轮次 |
| /room | 命令 | create\|join\|leave\|list\|send\|tasks\|task add\|assign\|claim\|done\|delete |
| room_list_rooms / room_post / room_read | 工具 | 消息总线:名册、发帖(广播/定向)、读取历史 |
| room_list_tasks / room_create_task / room_claim_task | 工具 | 共享任务板 |
| room_transfer_task / room_complete_task | 工具 | 移交(需审批)与完成 |
| backgroundAgents projection | 会话投影 | 从父日志折叠出的仪表盘行,含每个智能体的 metrics 汇总(token、轮次墙钟时间、错误数) |
| teamRoom projection | 会话投影 | 从 team-room/fact 事件折叠出的共享时间线 |
| Web 侧边栏面板 | 客户端 | 实时状态、跳转、发消息、停止、结果速览、每个智能体的成本/状态汇总、JSON 导出/复制 |
工作原理 —— 以及为什么它能扛住重启
一切都走官方子代理接缝:startContinuable、followup、interrupt、listChildren —— 插件不做自己的生命周期路由,绝不碰别的会话的 Agent,也绝不杀进程树(停止 = 请求中断,清理归 continuation manager 管)。
插件把每条事实写进一条结构化通道和一条模型可见通道:
- background-agents/fact 结构化事实事件 —— registered / message / stop / progress / archived 这些事实,加上每轮的 metrics 采样(token、轮次墙钟时间、错误标志),作为仅日志记录追加到父日志,并带上信封的 ignorable: true 标记;不认识该类型的读取方会跳过这些记录,而不是拒绝整个日志。如果宿主的 Session.append 早于该标记(所有已发布的 rc 线,直到 0.1.0-rc.8 和 0.1.1-rc.2,以及 0.1.2-rc 线(它只为存储日志的读取兼容保留信封字段,仍然无法打上标记)),会静默丢弃它 —— 打标记的修复只存在于 harness master —— 这类未打标记的会话在更严格的构建上无法恢复。插件会在第一次追加之前检测到这种情况(先做对端版本预检,再探测返回的信封),然后跳过事实追加,并给出一次性警告 —— 持久化存储、通知和工具都照常工作,投影则退化为空的事实折叠。
- tool/result 重放元数据 —— 结构化通道出现之前写入的日志里,同样的信息也在(只有当某行没有结构化来源时才折叠)。
- 注入的 user/message 通知(模型可见),来源 { kind: 'dsh-background-agents', form: 'notice' } —— 限流后的进度行和归档通知(规范前缀 [background-agent <id>] …)。
- 官方 subagent-settled 通知 —— 子代理持久化的「已结算」事实。
- Team rooms 也遵循同样的纪律:每条投递的房间消息都是成员自己日志里持久的 user/message,共享时间线则镜像为 team_rooms 存储域里仅记录日志的 team-room/fact 事件。
backgroundAgents 投影会折叠结构化通道,同时保留旧式折叠;每次重新打开时,仪表盘数值和 bg_list 事实都能重建,无需解析人类可读的通知文本。当目录本身不可用时,bg_list 返回明确的 unrecoverable 标记 —— 它绝不会伪造空列表。
与内置子代理工具的关系
harness 核心自带子代理工具(subagent、send_message、interrupt_agent,以及子代理侧的 report 工具)。本插件的 bg_ 工具是它们的会话级搭档;两者可以一起挂载:
| 内置工具 | 本插件 | 区别 |
| subagent(backgroundMode: 'continuable') | background_agent | 同一个 startContinuable 接缝;本插件增加了每个子代理的 tool_filter/persona/max_depth 校验和每会话上限 |
| send_message | bg_message | 投递语义相同;bg_message 面向本会话的后台智能体,并维护投影事实 |
| interrupt_agent | bg_stop | 中断语义相同;bg_stop 还会记录一条结构化停止事实 |
| 子代理侧的 report 工具 | autoReport | 内置工具由子代理模型自己调用;本插件在每个子代理回合结束后自动注入限流后的进度 |
核心工具缺少的东西:bg_list、bg_result、空闲归档,以及每个父级折叠面板投影。
不在范围内:定时触发(调度接缝已存在)、跨机器/远程智能体,以及对官方子代理激活契约的任何改动。
不是本插件
| 项目 | 做什么 | 边界 |
| titanwings/dsh-automation | 在全新的智能体会话里执行定时编码任务 | 它负责任务何时运行(调度)。本插件负责一个长期会话的交互式操控 —— 没有调度接缝,没有 cron。 |
| vlln/dsh-task-status | 后台作业的状态栏(进度 + 输出尾部) | 它展示工具级作业。本插件创建并操控智能体会话;它的仪表盘只是其中一块面板,不是产品本身。 |
| YYTbit/dsh-plugin-agent-dashboard | 多智能体仪表盘技能 | 偏展示。这个插件的每一行都可操作:跳进子会话、发消息、停止 —— 全部走官方控制面。 |
权限与数据
- 权限:workshop manifest 声明了 session:append、subagent:spawn 和 tools:register。
- 数据:团队房间存放在 team_rooms 存储域(SQLite 或 JSONL —— 不需要额外服务);后台智能体的事实数据随父会话日志一起走。没有独立数据库,不走网络。
- 会话日志:background-agents/fact 和 team-room/fact 事件在支持该标记的主机上会带上信封的 ignorable: true 标记(不支持该标记的主机会被检测出来,并跳过事实追加 —— 见 allowUnmarkedFacts);模型可见的进度行和房间投递是真正的 user/message 记录。
安全边界
- 只走官方接缝。 启动、发消息、停止都是 startContinuable / followup / interrupt 之上的薄适配层;停止只是请求中断,绝不杀进程。
- tool_filter 只做限制。 它从子代理的视野里移除工具 —— 绝不授予新工具;名称会对照 allowedChildTools 校验。
- 交接需审批。 room_transfer_task 走官方审批接缝,没有应答方批准时按失败关闭处理。
- 模型可见 ⟺ 已记录。 每条投递到房间的消息,都是成员自己日志里一条持久的 user/message;共享时间线以仅记录用的 team-room/fact 事件镜像。
- 不做调度,不跨机器跑智能体。 子代理是本部署内进程本地的可续会话。
跨生态入站(P2)
外部智能体运行时 —— OpenAI Agents SDK、CrewAI 之类 —— 可以通过一个极简的 基于 stdio 的换行分隔 JSON-RPC 2.0 桥发布到团队房间。这是 JSON-RPC 直连的最小集合,不是官方 ACP 线协议:完整的 ACP 兼容要等上游接缝。
用两个 Config 字段启用它,把 inbound.command 指向一个启动器,让它在 stdout 上每行输出一条 JSON 通知:
cordis.yml (plugin row)
inbound:
enabled: true
command: "python external_runtime.py --room <room-id>"
运行时发出三种通知;method 是事件名,params.name 是外部智能体的显示名:
{"jsonrpc":"2.0","method":"agent_started","params":{"name":"researcher","room":"<room-id>","traceId":"t-1"}}
{"jsonrpc":"2.0","method":"agent_message","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","message":"found the failing test"}}
{"jsonrpc":"2.0","method":"agent_finished","params":{"name":"researcher","room":"<room-id>","traceId":"t-1","status":"ok","usage":{"inputTokens":100,"outputTokens":40}}}
每条事件都对应到房间已有的界面:agent_started 打开任务板卡片,agent_message 投递到消息总线,agent_finished 完成卡片并投递结果。无效消息按失败关闭处理——直接丢弃,并写回 JSON-RPC 错误。外部运行时不是 DSH 会话,所以由房间所有者的成员会话充当发送方;房间没有所有者成员时,事件被丢弃。启动和停止由插件 fiber 通过 disposer 掌管;无法 spawn 的 inbound.command 降级为一条日志警告(桥接保持休眠,其他一切不受影响)。
与其他 DSH 插件的互操作性
已针对 DSH 0.2.0-rc.2(本 README 所面向的运行时)以及 2026-10-05 调研的高星插件集做过验证。
本插件不会干扰其他插件,包括广泛安装的高星插件:
- 无工具名冲突。 每个工具都带命名空间(background_agent、bg_、room_)。插件不注册任何裸名,因此不会遮蔽已发布工具或其他插件拥有的名字——dsh-routing-suite(7000★)正是用这种机制对抗内置的 get_goal / create_goal / update_goal。
- 无服务键冲突。 它只提供一个服务,roomHub。该键不是内置接缝,调研过的高星插件也没有提供它。(dsh-routing-suite 提供 shell,与内置的 @deepseek-ai/dsh-shell 冲突;本插件没有这个问题。)
- 无 slot 冲突。 它不注册任何调研过的高星插件同样声明的客户端 slot 键,因此从不争抢 shadows-shipped-ui 席位(main、conversation.chat.node、plugins.bundle.config、tool.call.toolview)——dsh-agent-teams、dsh-context、dsh-market 和 modlens 正在争夺这些席位。
- 无 HTTP 路由冲突。 它不注册任何 webServer 前缀。(DSH-better-sidebar 3993★ 记录过:前缀重复,比如 /sidebar/api,会让整个插件树在启动时失败。)
- 无补丁层冲突。 bundle 补丁只 insert 自己那一行(id: background-agents);它从不覆盖内置行的 config。覆盖是整对象替换,dsh-purge 和 dsh-infinite-gen-4 就是这样互相抹掉对方的 system-prompt 配置。
- 无全局改动。 它不修改原型、不改写 process.env、不替换全局 fetch dispatcher。(调研到的重手:dsh-market 改写 Date.prototype.getTimezoneOffset 和 13 个环境变量;modlens 改写 HOME / PATH / TMP / OPENAI_BASE_URL / ANTHROPIC_BASE_URL;dsh-context 改写 Element.prototype.scrollIntoView。)
共享事件监听器天生互不干扰。 本插件监听六个事件,高星插件也在用它们——agent/pre-step、agent/request、tools/pre-execute、tools/post-execute、llm/stream、system-prompt/assemble——全部通过 ctx.on() 注册,这是 Cordis 的广播式注册:每个监听器都会执行,谁也无法饿死别人。对于顺序敏感的那几个(agent/pre-step、agent/request、tools/ 属于瀑布流),这里的每个监听器都经由 next() 委托,所以调用链绝不会被短路;改动施加在 next() 产出的值上,而不是取而代之返回。正因如此,即便同装的某个对端会短路,共存依然安全,例如 dsh-agent-teams(1923★)在 agent/request 上就是抛异常返回、从不调用 next()。
运行时实测行为:tests/room-half-guard.spec.ts 驱动构建产物,断言当已有兄弟插件占用 roomHub 时,room 半边会自行退让——不产生 service-key 或工具冲突。
已知限制
- 团队房间要求存储域已组合;没有 @deepseek-ai/dsh-storage-domain 时,/room 命令和 room_ 工具会被禁用(五个 bg_ 工具仍会加载)。
- room 半边的归属是先到先得。 本包的 room 半边与独立的 dsh-team-rooms 包注册同一个 roomHub service key、同样的八个 room_ 工具、同一个 team-rooms 设置槽位、同一个 team_rooms 存储域。Cordis 在每个 isolate scope 内只允许一个 service key 对应一个服务商,所以从 0.9.14 起,本包会检查 roomHub 是否已被提供,若是则让自家 room 半边退让,并记录 team rooms disabled: the roomHub service is already provided。退让后,background_agent 和五个 bg_ 工具照常工作,房间由另一个包提供。两个包谁先挂载都可以。在 ≤ 0.9.13 上没有这道防护:两个 room 半边只能挂载其中一个。
- provider 必须指定一个支持 continuable 的服务商(prepareContinuable);服务商缺失会让 background_agent 失败,直到它出现为止。
- maxBackgroundAgents 是一份共享预算,覆盖会话下每一个 continuable 直接子级,包括内置 subagent 工具启动的那些。
- 一次性子级永远不会被列出或发消息——bg_list 只保留 continuable 行。
- 子级是进程本地的:调度接缝负责「何时」,本插件负责引导一场进行中的对话。
- 成本指标是原始的 token/时长总量,不是货币:harness 不向插件或浏览器暴露任何按模型定价表,所以成本面板和导出从不把 token 换算成钱(适配器未上报 token 计量时显示 —)。
Development
pnpm install # tooling only; harness packages resolve against a sibling checkout
pnpm run typecheck # strict TS, node + client programs
pnpm test # vitest: unit + end-to-end tests (real subagent seam, scripted LLM, jsdom panel)
pnpm run build # lib/index.js (node half) + lib/client.js (web client bundle)
pnpm run gen-aliases # re-map harness package paths after the checkout moves
一个无需密钥的端到端演示,会驱动真实的父会话和一个后台子会话,全程走确定性的脚本化 LLM(不需要 API key;dev/ 已在 gitignore 中——请按你的 checkout 调整路径):
$env:DSH_HOME = 'D:/deepseek-harness/Project/Plugins/dsh-background-agents/dev/dsh-home'
pnpm dsh --profile headless --patch dev/cordis.yml "【父会话】驱动后台 agent 演示"
话题
dsh、dsh-plugin、deepseek-harness、subagent、background-agent、background-agents、agent-dashboard、conversation-steering、team-rooms、multi-agent、message-bus、task-board、collaboration
贡献者
- @PerryLink — 创建者与维护者:官方 subagent 接缝上的后台智能体运行时、团队房间中枢、Web UI 侧边栏面板、会话投影、文档、CI/CD 与发布。
PerryLink DSH 插件家族
本项目是 PerryLink 的 33 个持续维护的 DeepSeek Harness 插件之一——总名单有 42 个,其中 6 个已冻结、3 个已退役;每一个都在下表中保留自己的行,原因写在 Status 列。如果这个插件对你有帮助,其他的多半也一样:
| 插件 | 一句话简介 | Status |
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default | |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command | |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 RETIRED — see the note above |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 FROZEN — see the repo README |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family | |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 FROZEN — see the repo README |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 FROZEN — see the repo README |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review | |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. | 🧊 FROZEN — see the repo README |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. | |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds | |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval | |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble | |
| dsh-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools | |
| dsh-library | Local document knowledge base for DeepSeek Harness. | |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. | |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 FROZEN — see the repo README |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching | |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit | |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges | |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins | |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill | |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
| dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
| dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner | 🚫 RETIRED — corridors carried by dsh-plugin-upgrade |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 FROZEN — see the repo README |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering | 🚫 RETIRED — see the note above |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review | |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline | 🚫 RETIRED — see the note above |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
Install from the DSH Desktop Market
All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.
License
Apache License 2.0 © 2026 dsh-background-agents contributors预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
PerryLink/dsh-background-agents
DeepSeek Harness 的交互式长会话后台智能体:启动一个持久可续的子代理,在 Web UI 侧边栏看进度,随时发消息、随时打断——全部走官方子代理接口。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目