- Home
- Plugin
- Flussi e automazione
- dsh-agent-lines
dsh-agent-lines
lencen/dsh-agent-lines
Linee di messaggi persistenti e indirizzabili per DSH Agent (plugin della community).
Installazione
dsh plugin --profile web add github:lencen/dsh-agent-linesREADME
dsh-agent-lines
English | 中文
GitHub: Lencen/dsh-agent-lines
DeepSeek Harness 社区插件,不是 DeepSeek 官方产品。
100% Vibe Coding。 架构、代码、测试、文档都在 AI agent 会话中完成。它是实验性项目:生产使用前请审阅代码并跑一遍集成测试。
DSH 的 super agent 平替插件。
你不用每次新开会话、手动把背景复制给几个 agent。让一个负责人 agent 带一支长期协作的团队:每个成员有名字、各负责一块,任务和消息不会丢,结果由负责人汇总给你。
什么时候用
如果你遇到这些情况,再考虑安装:
- 你有一个长期项目,不想每次都从头解释背景;
- 你希望几个 agent 长期分工,比如调研、架构、开发、测试、发布、运维;
- 你需要给每个角色一个固定名字,能直接点名派任务;
- 任务做到一半关掉窗口、重启 DSH,消息和上下文还要在;
- 你希望一个负责人 agent 自己拆任务、建团队、追进度、收结果,最后向你汇报。
两种团队长什么样
官方“智能体团队”插件
一个 DSH 会话
└─ 会话里的若干子 agent
- 一个会话就是一个官方团队;
- 子 agent 是任务型成员:围绕任务启动,任务结束后通常释放或复用;
- 子 agent 不是长期角色,不要把它当成有长期记忆的固定成员;
- 官方团队有任务板、任务依赖、网页面板;
- 团队内可以并发处理子任务。
dsh-agent-lines
多个 DSH 会话组成团队
├─ 负责人会话
├─ 开发角色会话
├─ 测试角色会话
└─ 校对角色会话
- 团队由会话组成,不是“一个会话里塞很多子 agent”;
- 每个会话有自己的持久记忆;
- 角色可以在自己的会话里连续做任务,也可以隔一段时间再做;
- 会话满了可以换新会话,但角色不换;
- 负责人在自己的会话里做拆解、调度、验收;
- dsh-agent-lines 自己不提供任务板。
和官方“智能体团队”插件的区别
不是替代关系,是互补关系。一句话:官方插件管“一个会话里的团队”,dsh-agent-lines 管“多个会话组成的长期团队”。
| 维度 | 官方“智能体团队”插件(实验性) | dsh-agent-lines |
|---|---|---|
| 组织单位 | 一个会话 + 会话里的子 agent | 多个 DSH 会话组成团队 |
| 成员性质 | 任务型子 agent,任务结束通常释放/复用 | 长期角色会话,可连续或不连续做任务 |
| 记忆 | 会话有记忆;团队成员子 agent 不是长期角色,换子 agent 可能丢失成员记忆 | 团队每个成员都是独立会话,有持久记忆;会话不删除,记忆不丢 |
| 任务板 | 有,一个团队一个任务板 | 没有自己的任务板 |
| 并发 | 会话内子 agent 并发 | 会话之间并行 |
| 换人 | 换会话就是换团队;会话里换子 agent 就是换成员;换子 agent 会丢成员记忆 | 换会话(交接)可以继承任务与关键记忆;历史会话记忆保留在团队里 |
| 网页面板 | 官方任务/成员面板 | 组织树 + 成员会话台 |
| 适合 | 一次性或短周期多子 agent 协作 | 长期小说、视频、研究、运营团队 |
line 的交接继承的是任务状态和关键记忆(交接单、文件),不是完整复制模型上下文。
DSH 官方“智能体团队”插件目前是实验性的;dsh-agent-lines 是社区插件,不是 DeepSeek 官方产品。
与 DSH 官方“智能体团队”插件的只读融合(0.5.1 起,0.6.0 增部门视图)
用户只给负责人发任务。负责人自动读取官方智能体团队插件的任务和成员,按成员名字自动对应角色;不要求用户导出任务、不要求配置对应关系、不要求点插件按钮。
前提:负责人必须同时是官方智能体团队插件的负责人或成员;否则显示不可用,不降级到用户导出。
只读:不写任务、不改角色、不触发负责人回合;双向写回未批准。
团队类型不限于开发
插件不限定团队类型。本质是“一个负责人 + 若干长期成员”的协作方式。 下面用开发团队做示例;小说、视频、研究、运营团队只换角色和任务,不需要改插件或代码。
- 小说:总编、大纲、写手、编辑、校对、审读;
- 视频:负责人、策划、脚本、剪辑、封面、发布;
- 开发:负责人、开发、测试、验收;
- 研究:负责人、资料、分析、写作、审阅。
第一次不需要自己想清楚角色:直接对负责人说“帮我建个小说创作团队,按小说创作的流程建立工作流程与机制”,它会先给团队结构和流程建议,你确认或补充即可。
版本能力与业务场景
0.6.5:负责人本地操作
场景:负责人在 Web 看板上直接发消息、批准/拒绝 pending、生成 handoff。 用法:dsh-agent-lines board --port 4090 --db $DSH_HOME/agent-lines/lines.db;用启动日志 token。 效果:本地 token 保护;默认 127.0.0.1;POST 后 /api/live 刷新消息数;不硬拦截。
0.6.4:只读 Web 看板
场景:负责人不想每次让模型调工具,想直接在浏览器看团队任务/部门。 用法:dsh-agent-lines board --port 4090,打开 http://127.0.0.1:4090/。 效果:只读;读取 team-board.json / team-board..json / team-metrics.json;默认只绑 127.0.0.1。
0.6.3:统一数据看板
场景:负责人要一个只读数据面,看任务/线/子团队统计和消息趋势。 用法:line_metrics({ days }) 返回任务/线/子团队当前统计、消息 kind/state 与按日趋势、每线 token 当前值。 效果:明确标注官方任务无时间字段、无每任务 token;不伪造趋势。
0.6.2:会话沟通看板
场景:负责人要查看线与线、线与本线官方团队之间的工作消息。 用法:line_communications({ line/taskRef/kind/state/limit }) 只读筛选。 效果:返回消息和关联任务字段;不暴露官方内部子 agent 私聊;不改消息状态。
0.6.1:内部团队策略 + 审计
场景:负责人给角色线派任务时,要限制是否允许建内部团队、最多几人。
用法:line_send 带 subteamPolicy(auto/ask/never)与 maxMembers;看板显示线级策略和审计。
效果:line_team_board.lines[] 显示该线策略;line_department_board 返回 task 策略与 subteamAudit;只记录/展示/审计,不硬拦截官方 spawn。
0.6.0:三级组织 + 部门视图
场景:负责人下面有多条长期角色线,每条线自己也带官方团队。
用法:负责人调用 line_department_board({ line }) 按线懒取该线的官方团队、任务、摘要、消息。
效果:组织树三级;上级只看部门摘要,不合并下级任务板;taskScope 防止同名 task id 串味。
0.5.1:官方团队看板接入 + 主机快照
场景:团队既有长期角色,又想看官方“智能体团队”插件的任务板。
用法:负责人调用 line_team_board;插件自动读官方任务/成员并写 team-board.json。
效果:只读融合;不要求用户导出/配置;同版本补齐 messages/quality/team/approval/deliveries 契约。
0.4.1:管理线看得到跨线消息
场景:成员线之间直接同步,管理线需要知道发生了什么,但不希望每条消息都打断自己。
用法:line_observe({ line: "writer", limit: 20 }) 或 CLI observe --json。
效果:只读 feed,显示 from/to/state/摘要;不注入 prompt、不改消息状态;line_send 语义不变。
0.3.8:什么时候该换线
场景:管理线想知道哪条线快满了、哪条线最近没动静。
用法:line_status / line_list 看 activity.level、turns、steps、lastActivityAt。
效果:给出低/中/高活跃度,不伪造“上下文使用率 78%”;真实窗口等 DSH 上游提供。
0.3.7:换人之前先交接
场景:新写手不知道旧线做到哪、下一步是什么、哪些坑不能踩。
用法:line_handoff({ line: "writer", format: "md" })。
效果:生成结构化交接单(进度、积压、最近消息、生命周期),不调用模型;新线先读交接单再继续。
0.3.6:上下文满了,角色可以换人
场景:写手线连续工作很久,上下文配额耗尽;继续写容易出现前后矛盾。
用法:管理线调用 line_create({ label: "writer", replace: true, force: true, reason: "context full" })。
效果:同一个 label 切到干净 Session,旧 Session 只 retired、不删除;queued/claimed 消息迁移,delivered/acked 不重投;管理线不需要手工改路由。
安装
让 DSH 帮你装(推荐给新手)
在 DSH 新会话里说:
帮我检查并安装 GitHub 上 Lencen/dsh-agent-lines 插件。
只从官方仓库或官方 npm 安装,不要从其他 fork 安装。
安装前先告诉我准备执行什么命令,等我确认后再执行。
安装完成后按插件要求加载;如果需要重启 DSH Web,先告诉我重启后打开哪个地址、
怎么新开会话、第一句该说什么,并提醒当前会话会断开;等我确认后再重启。
重启后当前会话会断开,agent 无法再自动通知你;重启后的步骤会在重启前给你。
手动安装
一条命令安装(推荐,不需要自己找 profile):
curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
bash install.sh
脚本会自动选择 DSH Web 使用的 profile,安装后检查 agent-lines 是否可用;如果判断不了,会列出已有配置并提示你怎么指定。
安装或更新后必须重启 DSH Web。 运行中的进程不会加载新插件代码。插件没有 config 时走零配置:启动一条未绑定 manager,根会话可以调用 line_claim_manager 自己绑定。显式“管理线配置”是可选的,用于固定 manager/worker。
离线或 npm 不可用时,用本地 tarball:
bash install.sh ./dsh-agent-lines-0.6.0.tgz
安装并重启后,不写配置也可以直接使用;需要固定管理线/worker 时,再把下面“管理线配置”粘贴到脚本打印的配置文件。
管理线配置(可选)
- id: agent-lines
name: dsh-agent-lines
config:
agentId: agent-demo
dbPath: /home/me/.dsh/agent-lines/lines.db
allowCreate: true
allowClaim: true
allowSelfSend: false
dedupeWindowMs: 5000
maxReplyDepth: 8
createFrom: manager-line
maxLines: 16
childPreset: standard
lines:
- label: manager-line
sessionId: session-lines-manager
role: 任务对接、拆解与调度
只有 createFrom 指定的线能调用 line_create。worker profile 不要开 allowCreate。
新线 bootstrap
管理线调用 line_create 创建新线时,插件默认排队一条不要求执行任务的 onboarding 消息,让空白 Session 产生第一条消息并出现在侧栏;传 bootstrap: false 可关闭。
line_status / line_list 会返回 materialized、visibleInSidebar、bootstrapQueued;新线在首条消息前可能仍是 blank。
快速开始
- 运行上面的安装脚本。
- 重启 DSH Web,让插件加载。
- 打开任意根会话。零配置路径不需要改 YAML。
- 先调用 line_status;如果当前会话未绑定,调用 line_claim_manager({ confirm: "bind-manager" })。
- 直接说“按首次使用创建团队”,然后等它建好成员线;第一个任务再单独发。
首次使用:组建开发团队
在新根会话里直接复制下面这段。它会先绑定管理线,再创建一支团队;后续任务再单独发,不要让它自己开工。
使用 dsh-agent-lines。先把这个会话设为开发团队的管理线;如果还没绑定,就先完成绑定。
你是开发团队负责人:负责任务拆解与分配、协调沟通、跟踪进度、汇总结果、总结汇报。你只做管理和协调,不执行具体开发任务。
请组建开发团队。成员名字用简短英文,岗位用中文:research(调研)、architecture(架构)、uiux(UIUX)、dev(开发)、test(测试)、acceptance(验收)、release(发布)、ops(运维)。
团队建好后先待命,不要自动开工,等我发第一个任务。
成员名字用英文短名,中文放在岗位上。这个提示词只创建一个团队;0.3 不支持同一插件实例同时多个团队。
可直接复制的调用(由管理线 Session 执行):
line_create({ label: "research", role: "调研" })
line_create({ label: "architecture", role: "架构" })
line_create({ label: "uiux", role: "UIUX" })
line_create({ label: "dev", role: "开发" })
line_create({ label: "test", role: "测试" })
line_create({ label: "acceptance", role: "验收" })
line_create({ label: "release", role: "发布" })
line_create({ label: "ops", role: "运维" })
创建后用 line_list 确认。

真实 DSH Web 演示 profile、通用 label;不含内部数据。
场景:一个管理线 + 多条执行线
负责人先建好团队,后面才是具体任务。
- 负责人按角色建立成员:调研、架构、UIUX、开发、测试、验收、发布、运维。
- 你给负责人一个具体任务,例如“给报表页加 CSV 导出,带测试和一页 runbook”。
- 负责人把任务拆开,派给对应的成员;每条消息都会留在本地。
- 成员收到任务、执行、确认收到,需要时回复负责人。
- 负责人收集结果,处理成员之间的分歧,统一口径。
- 你看到负责人的汇总;每个成员保留自己的上下文和消息记录。
这只是“用提示词组织团队”的方式,不是插件内置的组织架构;怎么拆任务由负责人模型决定。技术细节(消息、状态、工具)在下面的“使用”和“投递语义”。
上下文活跃度
line_status / line_list 返回 activity:turns/steps/decodeTokens/level/lastActivityAt。 level 是活跃度代理(low/medium/high),不是上下文使用率百分比;DSH 当前不暴露上下文窗口。
使用
管理线可以完全由对话驱动:
你是管理线。用
line_create创建 frontend-line、backend-line、ops-line,然后用line_list确认。
工具:
| 工具 | 作用 |
|---|---|
line_status | 只读:当前会话绑定、manager Session 是否存在/live、线列表、修复命令;未绑定也可见;含 activity 活跃度(不是 contextUsage) |
line_claim_manager | 把当前 live 根 Session 绑成 manager;需要 allowClaim: true 和 confirm: "bind-manager";全局工具,不需要 shell |
line_list | 列出线、状态、未读数、当前线和 role |
line_create | 仅管理线:创建新线;同 label 幂等;传 replace:true 可给同 label 换新 Session |
line_handoff | 仅管理线:生成结构化交接单(JSON/Markdown),不调模型 |
line_observe | 仅管理线:只读跨线消息 feed;显示 kind/审批状态,不注入 prompt、不改状态 |
line_manager_ack | 仅管理线:对 pending_approval 的 task 做 approve/reject |
line_team_board | 仅管理线:只读融合看板;自动读 Agent Teams 任务/成员 + lines,无用户导出/配置 |
line_retire | 仅管理线:软下线;拒绝新发送,保留 Session/历史 |
line_rebind | 仅管理线:把线原子切到新的 live Session,可迁移积压 |
line_rename | 仅管理线:改侧栏标题,持久化到 lines.db |
line_move_workspace | 仅管理线:把已有线的 Session 挂到路径完全匹配的工作区 |
line_send | 发到 line 或 agent#line;可选 kind、ccManager、idempotencyKey、replyTo、noReply、forceDistinct、ttlMs |
line_inbox | 读当前线已投递消息 |
line_ack | 确认已处理 |
除 line_status、line_claim_manager 外,line 工具只注册在已绑定线的 Session 上;这两个控制工具是全局的:status 只读,claim 仅限根会话且受 allowClaim 控制。
line_create 在管理线所属工作区(没有工作区时回退当前目录)创建普通 DSH Session;它不会创建独立 OS 进程、profile 或端口,也不转移已有 Session。
上下文满时换人
线不会自动继承旧 Session 的上下文。推荐流程:
- 让旧线写交接单(0.3.7 起可用
line_handoff); - 管理线调用
line_create({ label, replace: true, force: true, reason: "context full" }); - 插件创建干净 Session、同 label 原子切换,旧 Session 标记 retired 但保留;
- queued/claimed 消息迁移到新线;delivered/acked 留在旧 Session,不重投。
migrate: "none" 时若还有 queued/claimed 会直接报 LINE_BACKLOG_NOT_EMPTY,不会静默切走。
创建的线会记录 created_by,进程重启时由管理线恢复。line_create 会解析管理线所属工作区并传 workspaceId(DSH 会自动 attach),所以新线出现在该工作区而不是“未分组”;如果管理线本身不在工作区,则回退 cwd,线保持未分组。传 workspace(已有路径或 id)可指定其他工作区。若某条线的 Session 还从未落盘,首次投递可能 session/not-found;给它发一条任务(或重新创建)即可让它持久化。
CLI:
dsh-agent-lines list
dsh-agent-lines send --from frontend-line --to backend-line --text "hi"
dsh-agent-lines inbox --line backend-line
dsh-agent-lines ack --line backend-line --id msg_...
dsh-agent-lines --json observe --line writer --limit 20
dsh-agent-lines claim --agent agent-demo --line manager --session "$DSH_SESSION_ID"
dsh-agent-lines doctor
用 --db 或 DSH_AGENT_LINES_DB 指向插件同一个数据库。
传输
transport 默认 sqlite(local-first),也是 0.3 唯一发布的 transport;安装插件不需要 Postgres 或 Python 服务。
架构
flowchart LR
U[用户] --> M[管理线 DSH Session]
M -->|line_create / line_send| P[dsh-agent-lines]
P --> Q[(SQLite lines.db)]
P -->|prompt requestId| W1[前端线 Session]
P -->|prompt requestId| W2[后端线 Session]
W1 -->|line_inbox / line_ack| P
W2 -->|line_inbox / line_ack| P
DSH 适配层负责线身份和“把消息送进 Session”;transport 负责持久消息和跨进程存储。默认是本地 SQLite。公开架构说明:English | 中文。
要求
- DSH
>=0.2.1-rc.5 <0.3.0 - Node.js
^22.19.0 || >=24.0.0 - 本地文件系统(NFS/CIFS/SMB/FUSE 会被拒绝)
工作区
DSH 侧边栏按 workspace 的 sessionIds 成员表分组,不是按 cwd。line_create 通过 workspaceRegistry.resolveByPath 找到管理线所属工作区,传 workspaceId,DSH 会在创建时 attachSession,新线就不会落到“未分组”。如果管理线没有 workspace,插件回退 cwd,线仍未分组。
line_move_workspace 把已有线挂到目标 workspace。DSH 只在 Session cwd 与 workspace path 完全一致时允许 attach;否则插件返回 WORKSPACE_ATTACH_FAILED。它不能把 Session 迁移到不同目录(那需要新 Session/交接)。
manager 绑定与 claim
manager 是一条真实的 DSH Session。你打开另一个会话时,它不是 manager,line 工具会刻意不出现;先调用 line_status 看当前绑定和修复命令。
根会话可以直接在对话里绑自己,不需要 shell:
line_claim_manager({ "confirm": "bind-manager" })
插件会校验调用者是 live 根会话、释放旧 manager 租约、重绑 manager,并把选择写入 manager_bindings。不需要改 profile,也不需要重启;需要 allowClaim: true。
运维仍可用 CLI 兜底:
dsh-agent-lines claim --agent agent-demo --line manager --session "$DSH_SESSION_ID"
claim 不会对每个新会话自动执行:需要用户明确要求,或运维显式调用。
消息类型与任务审批
line_send 支持四种 kind:
| kind | 含义 | 非管理线发送 |
|---|---|---|
| info | 信息同步 | 直接投递 |
| request | 请求协助 | 直接投递 |
| task | 派任务 | 进入 pending_approval,管理线 approve 后才投递 |
| alert | 告警 | 直接投递 |
管理线发 task 不进入审批。管理线用 line_observe 看 pending,再用 line_manager_ack({ messageId, decision: "approve" | "reject" }) 决定。
回声与重复保护
- 同
idempotencyKey返回已有消息。 - 不传 key 时,同一
dedupeWindowMs(默认 5 秒)内的相同发送合并为一条;要故意发两条相同正文用forceDistinct: true。 replyTo会让hop递增;超过maxReplyDepth(默认 8)返回LINE_REPLY_DEPTH_EXCEEDED。noReply: true的消息不能被回复;尝试回复返回LINE_NO_REPLY。- 默认禁止自己发自己(
LINE_SELF_SEND_FORBIDDEN);确需给自己留笔记时设allowSelfSend: true。
这是传输层保护,不保证两个 agent 不会主动继续聊天;用 noReply 和 reply depth 约束。
投递语义
queued → claimed → delivered → acked
delivered:目标 DSH Session 已接受 prompt。acked:agent 显式调用line_ack。- 至少一次;靠 DSH 的
requestId幂等让重试在 Session 日志里“有效一次”。不是分布式 exactly-once。 - 接收方离线时消息留在队列;0.3 不自动拉起进程。
- 一个 Session 只能有一个 writer。 不要在另一个 DSH 进程(例如主 Web UI)里打开某条线的 Session;否则会
session/writer-held。关掉另一个视图,或给线独立 Session。
安全
- 插件在 DSH Host 进程内运行,拥有主机权限;只安装可信包。
- 0.3 默认本地 SQLite,不开网络监听。
- 只有
createFrom管理线能建线;maxLines限制增长。 - 对端消息在 prompt 里明确标为 peer content,不是用户指令。
- 详见 docs/SECURITY.md。
限制
- 不做交接;不能把 Session 迁移到不同目录。
- 多线是同进程多 Session,不是进程隔离。
- 一个插件实例只支持一个 manager/团队;同一个 DSH 进程里同时跑开发、小说等多个团队不支持;独立 profile/DB 只是临时 workaround,不是产品模型。
- 没有
line_delete;建线会产生持久行,测试也会留下真实记录。 - 空白线 Session 可能需要第一条任务后才落盘。
- 一个 Session 只能有一个 writer;不要从另一个 DSH 进程打开线 Session。
状态
实验性 0.3.x。DSH 处于 developer preview,API 可能变化;请同时锁定 DSH 与插件版本。
致谢
- 人类 vibecoding:Lencen
- 开发 agent:DeepSeek Harness agent (DSH)
- 使用模型:deepseek v4.1 flash 1017
- 邮箱:iamlencen@qq.com
贡献
见 CONTRIBUTING.md;行为准则 CODE_OF_CONDUCT.md;文档站 lencen.github.io/dsh-agent-lines。
许可
Apache-2.0,见 LICENSE。
Plugin correlati
webnovel-writer
lingfengqaq/webnovel-writer
loopx (dsh-loopx-plugin)
loopx-project/loopx
ouroboros (dsh-plugin)
q00/ouroboros
loopx (dsh-loopx-plugin)
huangruiteng/loopx