前言¶
在 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 爲準。