dsh-task2docker-studio: Dispatch heavy tasks to your own SSH server

前言

在 DeepSeek Harness(DSH)里和智能体协作时,常见两类瓶颈:本机算力或内存不够(大模型推理、长时间构建、批量任务),以及不敢在本机直接执行不受信任或实验性代码。常见做法是手动 SSH 上去跑命令、自己写 scp/rsync 传文件、另开终端盯日志——步骤分散,Agent 也很难把「登记机器 → 传代码 → 隔离执行 → 跟状态 → 拉回产物」串成稳定流程。

下面介绍社区插件 dsh-task2docker-studio(维护者 CarryChang,GitHub 分类为工作流相关能力)。它在 DSH 侧提供一组工具,把任务下发到你已经能通过 SSH 连上的机器:可选 Docker 容器隔离运行,配合 scp 传文件,并用状态与日志接口跟随任务。设计上厂家中立,不绑定特定云 API;同一套逻辑还以开放 Agent Skills 形式提供,可装进 Claude Code、Cursor、Copilot 等环境,从 shell 驱动。

这是什么

dsh-task2docker-studio 是面向 DeepSeek Harness 的「Task-to-Docker studio」插件:主机只做控制器——登记 runner、下发任务、跟随结果;计算发生在你可控的远程机上。

两类典型场景(README 原文表述):

  • 主机弱于目标环境:模型放不下、构建太慢、批任务太大时,改在能扛住的 server 上跑。
  • 安全执行:不可信或实验代码在远端一次性 Docker 容器里跑(推荐设镜像以隔离),与本机打字环境分离。

指定镜像时任务以 detached 容器运行;否则在 runner 上以后台进程方式执行。插件 MIT 许可;仓库 CarryChang/dsh-task2docker-studio,社区目录页见 SkillHub 条目。DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系,下文安装与配置均以仓库 README 为准。

核心功能

插件向 Agent 暴露的工具如下(名称与用途来自 README 表格):

工具 作用
t2d_register_runner 登记 runner:名称、host、port、user、认证(key / sshpass),可选默认镜像
t2d_list_runners 列出已登记 runner(仅凭证指针,不输出密钥)
t2d_remove_runner 移除 runner
t2d_copy_to 经 scp 将本机文件/目录推到 runner
t2d_copy_from 从 runner 拉回产物
t2d_run 向 runner 下发命令 → 生成可跟踪 job(容器或原生);可用 mounts 把 host 路径挂进容器
t2d_status 轮询 job:RUNNING / SUCCEEDED / FAILED / STOPPED 及退出码
t2d_logs 查看或有限时间跟随任务输出
t2d_stop 停止 job

内置 skill(task2docker-studio)描述推荐闭环:list → register → copy_to → run(含 mounts)→ status → logs → copy_from → stop,并覆盖容器与原生执行、文件传输与密钥处理规则。

后端通过注入的 SshClient 与 runner 通信,无厂商 SDK;skills/dsh-task2docker-studio/ 下另有 stdlib-only 的 scripts/t2d.mjs CLI,与插件共用同一套 dispatch 逻辑。

安装与启用

在 DSH 中安装(README 给出的命令,勿自行改写 URL 形式):

dsh plugin --profile web add https://github.com/CarryChang/dsh-task2docker-studio

登记 runner 可在对话中即时完成,例如:

> 我有一台服务器 203.0.113.10,root + 公钥免密,名字叫 gpu-box,帮我登记,之后训练都丢它上面跑

也可在 profile 的 cordis.yml 中预置,启动即就绪:

- id: task2docker
  name: dsh-task2docker-studio
  config:
    stateDir: ''                 # 默认 ~/.dsh-task2docker(runners.json + jobs.json)
    sshTimeoutSec: 60
    runners:
      - name: gpu-box
        host: 203.0.113.10
        user: root
        auth: key
        defaultImage: nvidia/cuda:12.4.1-base-ubuntu22.04
      - name: isolated
        host: 203.0.113.20
        auth: sshpass
        passwordEnv: ISOLATED_PW # 或 passwordFile: /run/secrets/isolated_pw

凭证:公钥 / agent 路径不落盘秘密;sshpass 方式仅在配置里保存 passwordEnv 或 passwordFile 指针,调用时读取,不写入账本、不出现在工具输出中。密码认证需本机安装 sshpass,README 建议优先密钥。

安装插件前,应按惯例检查仓库源码与 MIT 许可证;插件在当前 dsh 进程权限下运行,会代表你发起 SSH/scp 并在远端执行命令,只应登记你信任且有权使用的机器。

典型用法

README 中的对话示例可直接改写路径与镜像试跑:

> 把 ./train.py 丢到 gpu-box 上用 pytorch:2.4 镜像跑起来,跑完告诉我状态
> 这段不受信任的脚本别在我本机跑,去 isolated 上开个容器执行,只看输出
> run npm ci && npm test on my build server and tail the log

传本地目录、挂载进容器、跟日志、拉回产物的完整表述:

> 把本地 ./src 目录传到 gpu-box 的 /data/src,然后挂载进容器跑 python /data/src/train.py,
> 实时看 60 秒日志,跑完把 /data/out 拉回本地

不依赖 DSH 时,可复制 skills/dsh-task2docker-studio/,用 CLI 走同一流程(README 摘录):

cd skills/dsh-task2docker-studio
node scripts/t2d.mjs register --name gpu-box --host 203.0.113.10 --user root --image pytorch:2.4
node scripts/t2d.mjs run --runner gpu-box --command "python train.py"        # detached container
node scripts/t2d.mjs status --job <id>
node scripts/t2d.mjs logs   --job <id> --tail 80
node scripts/t2d.mjs stop   --job <id>

CLI 运行时位于 skills/dsh-task2docker-studio/scripts/lib/(由 scripts/build-portable.mjs 从与 DSH 解耦的 src/backend/ 生成);按 README 说明,复制文件夹即可使用 CLI,无需再 build 插件本体。

适用场景与注意

适合谁:已有 SSH 可达的自有或租用机器(云主机、GPU 盒子、集群入口节点等),希望在 Agent 对话里统一完成远程训练、构建测试、隔离跑脚本,并能把产物拉回本机的工作流开发者。

README 列出的限制(v0.2 小节,实现细节以当前仓库为准):

  • runner 须从本机 SSH 可达;容器模式要求 runner 上装有 Docker,原生后台执行则不需要。
  • 原生后台跑追踪 PID 与日志文件,不能像容器那样一律拿到容器式 exit code。
  • 密码认证依赖本机 sshpass。
  • 文档中写明尚无专用「大文件传输工具」——除 copy_to / copy_from 外,也可自行对 runner 使用 scp/rsync,或在容器中 mount 路径。

版本演进:README 注明 v0.1 曾面向 OpenBayes / HyperAI GraphQL,v0.2 去掉厂商耦合,泛化为任意 SSH runner + 可选 Docker;与 DeepSeek、Docker 或任何云厂商均无隶属或背书关系。

结尾

dsh-task2docker-studio 把「远程算力 + 可选 Docker 隔离 + scp + 任务状态/日志」收成 DSH 可调用的工具链,主机保持轻量与安全边界。需要查阅分类与简介时可打开 SkillHub 目录页;安装命令、配置字段与架构说明以 GitHub 仓库 README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye