Skip to content

Repository files navigation

DSH Squad

简体中文 | English

让个人 Agent 组成团队,而不交出工作区、凭据与控制权。

DSH Squad 把运行在不同电脑、网络和地点上的个人 Agent,组成一个可以互相委派任务、离线接收并持续协作的团队,同时让每个人继续拥有和控制自己的 Agent。成员无需开放个人节点端口,也无需共享账号、API Key、工作区访问权或工具权限;Agent 只通过 Relay 交换经过签名的任务和明确发布的结果,实际执行始终发生在接收方自己的 DSH、原生 Session、Skill、凭据与审批边界内。

核心亮点

  • 属于个人,协作于团队:每个 Agent 仍由其所有者独立运行和授权,Squad 不创建共享超级 Agent,也不把远程任务转换成直接的 Shell、Skill、MCP 或凭据访问。
  • 跨地域,无需节点直连:个人节点只需主动连接一个持续在线的 Relay,因此可以位于 NAT、家庭网络、公司内网或不同国家和地区,无需公网 IP 或开放入站端口。
  • 成员离线,任务不丢:Relay 提供经过认证的持久邮箱;接收方恢复在线后继续拉取,重复投递不会重复创建 Session 或执行任务。
  • 信任可以逐人配置:每个 Peer 都有独立的公钥固定、启停状态、委派权限、并发限制和 NEVERSAFETRUSTED 自动执行策略。
  • 原生融入 DSH:任务在接收方已有的 Agent、Session、Skill、工具和 Permission/Approval 中运行,没有第二套 Runtime 或独立管理平台。

工作方式

Alice Agent --签名 Delegation--> Relay 持久邮箱 --> Bob 的 DSH
                                                       |
                                      Bob Personal Agent + 本地 Skill
                                                       |
                         自动完成 --> 显式 Outcome -----+
                         需要本人 --> HumanTodo --> 恢复同一 Session
  • 发送方只提交目标、上下文、完成条件和经过校验的 HTTPS 附件引用。
  • 接收方的 PeerPolicy 决定拒绝、等待本人接受或自动执行。
  • 接收方 Agent 自己选择本地 Skill 和工具;协议没有远程 Skill、Shell、MCP 或 Credential 字段。
  • Relay 只提供受认证的 at-least-once 邮箱。Receiver 使用本地 SQLite、Envelope ID 和 Delegation ID 保证重复投递不重复执行。
  • HumanTodo、原生 Session ID、人工回复、凭据和工作区始终只保存在接收方。
  • 发送方只能看到接收方明确发布的状态、摘要和 Outcome。

同一真人、同一 DSH 内的并行拆解继续使用 DSH 原生 Sub-agent;跨到另一个真人拥有的 Personal Agent 时才使用 Squad。

典型部署:异地组成团队

北京:Alice 的电脑 ──出站 HTTPS──┐
                                 │
上海:Bob 的电脑   ──出站 HTTPS──┼── 公网或企业内网 Relay
                                 │
海外:Carol 的电脑 ─出站 HTTPS──┘

这是一种应用层 Agent 协作网络,而不是 VPN:它不会把成员电脑接入同一个虚拟局域网,也不要求节点之间能够通过 IP 互访。个人节点的 WebUI 应只监听 127.0.0.1;对外只部署 Relay,并通过 HTTPS、精确路由放行和防火墙保护公共入口。

安装

固定运行基线:Node.js 24.18.0、pnpm 10.28.2、DeepSeek Harness 0.1.0-rc.6、Cordis 4.0.1

当前仓库只发布 @dsh-squad/plugin,不包含独立 SPA、第二套 Runtime CLI 或 Docker 编排;Docker 是可选的部署隔离手段,不是运行要求。

从本仓库构建并安装 tarball:

pnpm install --frozen-lockfile
pnpm run pack
dsh plugin --profile web add ./artifacts/dsh-squad-plugin-0.2.0.tgz --offline
dsh web

安装通过插件内的 cordis.patch.yml 同时挂载 Host Plugin 和 Web Client Module。启动后,原生 DSH 侧边栏出现 智能体收件箱(英文界面为 Agent Inbox);其中的设置页可查看本 Node 的 Ed25519 身份并配置 Peer、公钥固定和本地策略。

配置 Node

$DSH_HOME/profiles/web/cordis.patch.yml 中覆盖 dsh-squad 配置。生产 Relay URL 必须使用 HTTPS;仅本机开发允许 loopback HTTP。

- id: dsh-squad
  config:
    displayName: Alice Personal Agent
    pollIntervalMs: 5000
    envelopeTtlMinutes: 60
    execution:
      cwd: /absolute/path/to/alice-workspace
      # SAFE 只自动运行以前缀开头的目标;不确定时等待本人接受。
      safeObjectivePrefixes:
        - summarize
        - analyze
    relay:
      url: https://relay.example.com
      invitation: replace-with-one-time-invitation

Peer 可以在 智能体收件箱 → 设置Agent Inbox → Settings)中添加,也可以在配置中声明。nodeId 必须与 Ed25519 公钥指纹匹配。

- id: dsh-squad
  config:
    peers:
      - nodeId: node_REPLACE_WITH_43_CHARACTER_FINGERPRINT
        displayName: Bob Personal Agent
        publicKey: |-
          -----BEGIN PUBLIC KEY-----
          REPLACE_ME
          -----END PUBLIC KEY-----
        policy:
          canMessage: true
          canDelegate: true
          autoExecute: NEVER
          maxConcurrent: 1
          maxDelegationDepth: 1
          maxRuntimeMinutes: 30

承载 Relay

同一个包可以在任意持续在线的 DSH Node 中启用 Relay Server。邀请在配置加载时写入 Relay SQLite,并在新 Node enrollment 时一次性消费。

- id: dsh-squad
  config:
    displayName: Team Relay
    relay:
      enabled: true
      databasePath: /absolute/path/to/relay.sqlite
      maxMailboxItems: 10000
      maxRequestsPerMinute: 300
      invites:
        - token: replace-with-at-least-16-random-characters
          expiresAt: 2030-01-01T00:00:00.000Z

Relay API 注册在宿主 WebServer 的 /squad/v1 下;它验证 enrollment、请求签名、nonce、时效、收发双方、邮箱容量和速率限制,但不运行 Agent,也不持有私人 Session 或 HumanTodo。

Agent 与 WebUI

插件向 Personal Agent 注册两个原生工具:

  • delegate_to_agent:按 Peer 名称或稳定 nodeId 创建委派;
  • get_delegation_status:读取本 Node 可见的公开状态投影。

智能体收件箱 提供待我处理运行中已发送已完成设置;英文界面对应 Agent InboxWaiting for meRunningSentCompletedSettings。接收方可选择一个或多个 Todo,提交文本或经 SHA-256/大小验证的附件引用,重启后继续处理,并打开对应的原生 DSH Session。

语言

当前版本完整支持简体中文和英文,并接入 DSH 官方全局语言服务:

  • 全新配置没有显式语言偏好时,WebUI 根据浏览器报告的系统语言自动选择;zh 区域变体使用简体中文,en 区域变体使用英文,其他语言回退到简体中文。
  • 可在 DSH 设置 → 通用 → 语言Settings → General → Language)中切换中文English;选择会写入 $DSH_HOME/settings.yaml,Squad 与 DSH 其他界面会立即同步更新。
  • 状态、投递进度、执行策略、已知系统摘要、错误码说明、日期和无障碍标签都会本地化;用户输入、Agent 生成内容以及协议/签名字段保持原文和稳定标识。

这里的“系统语言”来自打开 WebUI 的浏览器,因此从 Windows 浏览器访问 WSL 中的 DSH 时,会跟随 Windows/浏览器语言,而不是 WSL 的 LANG

安全边界

  • Node 首次启动生成并本地保存 Ed25519 身份;数据库会绑定身份,密钥或 DB 被替换时失败关闭。
  • Envelope 使用严格 Zod schema、canonical bytes 和 Ed25519 签名;相同 ID 不同 payload 视为冲突。
  • Relay 邮箱请求使用短时签名、nonce 防重放和 recipient 隔离。
  • 附件仅接受 HTTPS,拒绝私网/loopback/重绑定地址,并校验声明大小与 SHA-256。
  • 远程 objective/context 始终作为不受信任任务数据进入接收方原生 Agent,不绕过 DSH Permission/Approval。
  • 进程在执行期间中断时标记 EXECUTION_INTERRUPTED,不会猜测并自动重放未知外部副作用。

MVP 的 Relay 是受信任内容中转方,不提供端到端加密;生产部署仍必须使用 TLS。

禁用

在 profile patch 中禁用条目并重启 DSH:

- id: dsh-squad
  disabled: true

Squad Host route、Agent tools 和 Client Slot 会一起移除,原生 Harness Shell、Session、Settings 和工作区仍可使用。

开发与验收

pnpm verify:pins
pnpm format:check
pnpm typecheck
pnpm build
pnpm test
pnpm smoke:delegation

smoke:delegation 会构建真实 tarball,安装到 Alice、Bob、Relay 三套隔离 DSH Home,并用真实 Chromium 验证:WebUI 配对、Bob 离线投递、Relay/Node 重启、接收端专属 Skill、HumanTodo 部分完成、相同 Session 恢复、Outcome 隐私边界和插件可逆禁用。

许可证

本项目使用 MIT License。版本变更见 CHANGELOG.md

About

让分布在不同设备与网络中的个人 Agent,在各自的工作区与权限边界内组成可持久委派的团队。 DSH-native delegation for personal Agents across devices and networks, without giving up local workspaces, credentials, or control.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages