# Dsh

> 指挥本机运行的 dsh（DeepSeek Harness，127.0.0.1:3080）——不用打开网页端。用户说"给 dsh 下指令 / 让 dsh 干活 / 跑个任务 / 新建会话 / 切换模式或模型 / 配置大模型 / 看已装插件 / 建工作目录 / 看 dsh 会话"等时使用。通过 dshctl CLI（~/.local/bin/dshctl）驱动：会话管理、发送指令、模型/模式/权限切换、配置 OpenAI 兼容模型与视觉能力、工作区与目录、审批应答、实时事件流。

- Skill: `qidianyan/dsh` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add qidianyan/dsh`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qidianyan/dsh/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Qidianyan (https://skillmd.com/u/qidianyan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/qidianyan/dsh

---


# 指挥 dsh（DeepSeek Harness）

dsh 是用户本机运行的 agent harness（Web UI 默认 `http://127.0.0.1:3080`，由 `npx @deepseek-ai/dsh web` 启动）。
本 skill 用 `dshctl` 通过其 HTTP API 完成网页端的全部操作，**无需打开浏览器**。

## 第一步永远是检查 Host

```sh
dshctl status
```

连不上时（报"无法连接"）：dsh web 没在运行。告诉用户可用 `npx @deepseek-ai/dsh web` 启动，不要自己替用户启动长驻服务，除非用户明确要求。
地址不同时用环境变量 `DSH_URL=http://host:port` 覆盖。

## 命令速查

```text
dshctl status                          # Host 概览（版本/默认模型/附带会话数）
dshctl sessions [-a]                   # 会话列表（-a 含子代理；后续命令一律用完整 sessionId）

会话与任务
dshctl new [目录] [-p 模式id]          # 新建会话（目录默认 Host cwd）
dshctl send <sid> <文本> [--steer]     # 追加指令（--steer 打断当前 turn 转向）
dshctl ask [-C 目录] [-p 模式id] [-t 秒] "任务…"   # 一条龙：新建+发送+等待+打印回复
dshctl watch <sid> [-v]                # 实时事件流（Ctrl-C / --exit-on-idle 退出）
dshctl log <sid> [-n N] [-v]           # 会话记录（-v 含思考/工具结果/注入上下文）
dshctl rename|fork|cancel|search       # 改名 / 分叉（需已有完成的 turn）/ 取消 / 搜索（可能被部署禁用）

模型与模式
dshctl models [sid]                    # 模型目录（[多模态] = 接受图片）；带 sid 显示该会话当前模型
dshctl use-model <sid> <provider> <model> [effort]   # 切模型（off/high/max 等 effort 见 models 输出）
dshctl add-model --id <路由> --base-url <https://…/v1> [--key …] [--model <id>] [--context 1M] [--vision] [--set-vision]
dshctl vision [show|set <provider> <model>|clear]    # 纯文本对话的可选视觉能力
dshctl providers                       # provider 列表（●=活跃）
dshctl plugins                         # 本机已装 / 已禁用插件
dshctl modes                           # 模式列表（见下方"模式选择指南"）
dshctl use-mode <sid> <模式id>         # 切模式（仅空白会话；建会话时用 -p 更稳）

slash 命令（人类命令通道，不触发模型 turn）
dshctl cmd <sid> /permission <read-only|workspace-write|danger-full-access>
dshctl cmd <sid> /plan [off|消息]      # 进入/退出计划模式
dshctl cmd <sid> /goal <目标>|clear|pause|resume
dshctl cmd <sid> /compact              # 压缩历史

目录与工作区
dshctl mkdir <父目录> <名> [--ws]      # 建文件夹（--ws 同时纳为工作区）
dshctl ws-add <路径>                   # 将已有目录纳为工作区
dshctl workspaces                      # 工作区列表

审批（agent 请求危险操作时）
dshctl approvals <sid>                 # 列待审批（输出 rpcId + approvalId）
dshctl approve <sid> <rpcId> <approvalId>
dshctl reject  <sid> <rpcId> <approvalId>

其他
dshctl skills <sid>                    # 该会话可用的 skills
dshctl raw <method> '<json>'           # 原始 RPC 兜底
```

## 模式选择指南

模式 = agent preset，决定这个会话挂载哪些工具、系统提示和行为。**只在建会话时选择**（`new`/`ask -p`；已开跑的会话锁定，换模式就新开会话）。四个系统模式按能力递增：

### `standard` 标准模式（默认，不确定就用它）
完整编码 agent：bash/pwsh、文件读写与搜索、后台任务、skills（含本地 `~/.claude/skills` 发现）、web 搜索（只搜不抓）、todo、ask-user、计划模式（`/plan` 进入，产出方案经 exit_plan_mode 批准后才动手）、上下文压缩（长对话自动续命 + `/compact`）、子代理委派（subagent/subagent_fork，可后台 continuable）、多步 workflow 编排。
**选它当**：日常编码、改 bug、跑测试、仓库调研、文档撰写——绝大多数任务的默认答案。

### `code` PTC 模式（standard + Code Mode SDK）
在 standard 全部能力之上，工具改以 TypeScript SDK 呈现：模型写一个 TS 程序组合多步操作、`run_code` 一次执行，原本 5 次工具往返合成 1 次。
**选它当**：大批量、重复性、可编程编排的工具操作——批量跨文件修改、系统性重命名/迁移、多阶段数据管道。往返次数多导致 standard 太慢/太贵时升级到它。**不选它当**：两三步就能完成的小任务（多一层编程开销反而慢）。

### `minimal` 极简模式（两工具，最省最可控）
固定系统提示（"You are a helpful software engineer assistant."，无运行时上下文注入），只有两个工具：**持久 bash**（PTY，工作目录/环境变量/函数跨调用保留，300s 超时）+ **str_replace_editor**。没有 web 搜索、子代理、todo、计划模式，**没有上下文压缩**。
**选它当**：小而明确的任务（改个配置、跑几条命令、看个文件）、要最可预测行为、要最省 token。**不选它当**：长对话（无压缩会撑爆上下文）、需要联网检索或多 agent 协作的任务。注意它的文件访问走裸本地 FS（绝对路径可达运行时进程可读的任何位置），配合 `/permission read-only` 可先锁只读。

### `cordis` 创造模式（standard + 自我修改运行时）
在 standard 之上加自指工具集：`cordis_mount` 可读/改自己运行时的插件组合、挂载临时插件实验，附 composition 创作指导 skill，persona 讲清 HOST 平面与 AGENT PRESET 平面的分工。用户自建 preset（如 org-architect）就是这么造出来的，成品落在 `~/.dsh/.agent-presets/<id>/`。
**选它当**：要 dsh 帮你造/改另一个 agent preset、实验插件组合。**风险**：`cordis_mount` 会执行模型写的 JS，等同 shell 权限——仅在用户明确要求时使用，并建议先在 `/permission workspace-write` 下进行。

补充：**计划模式（`/plan`）不是第五种模式**，而是 standard/code/cordis 会话内的一个状态（`dshctl cmd <sid> /plan` 进入、`/plan off` 退出），先出方案、批准后执行。模式在会话间不共享。

## 典型工作流

**跑一个任务并等结果**（最常用）：
```sh
dshctl ask -C ~/myproject "总结这个仓库并指出主要模块"
```
输出即最终回复；会话保留可 `send` 追加。长任务加大 `-t`，或改用 `new` + `send` + 轮询 `log`。

**在指定目录、指定模式下开任务**：
```sh
dshctl mkdir ~/Documents work reports --ws   # 建文件夹并纳为工作区（可选）
dshctl ask -C ~/Documents/work/reports -p standard "…"
```

**接管已有会话**：`dshctl sessions` 找到目标（标题/模式/目录），完整 sessionId 用 `log` 看上文，再 `send` 续聊，或 `fork` 分叉出副本再改。

**切模型/权限**：
```sh
dshctl models <sid>                 # 看可选模型与 effort
dshctl use-model <sid> deepseek-official deepseek-v4-pro high
dshctl cmd <sid> /permission read-only
```

**配置大模型**（用户说「配置一下模型 / 加一个 API / 配多模态」时用，不要打开网页）：
```sh
dshctl status
dshctl add-model --id acme --base-url https://gateway.example/v1 \
  --key "$DSH_MODEL_API_KEY" --model <模型id> --context 1M --vision --set-vision
dshctl models
dshctl vision
```
密钥用 `--key` 或环境变量 `DSH_MODEL_API_KEY`（`--key -` 从 stdin 读）。**不要把密钥写进仓库、不要在回复里回显密钥。** `--vision` 把该模型标为多模态；`--set-vision` 把它设成纯文本对话贴图时的视觉能力（只切当前会话，不改默认对话模型）。省略 `--model` 时会先问接口；多个模型必须指定其一。`--discover` 只列出、不写入。

**看已装插件**：`dshctl plugins`

**处理审批**：任务卡住时（ask 会提示），`dshctl approvals <sid>` 列出，**先问用户**是否批准，再 approve/reject。

## 规则

- **绝不把 "/xxx" 文本用 `send` 发给会话**——那会被当成普通消息交给模型解释执行。slash 命令只走 `dshctl cmd`。
- `approve`（放行危险操作）与 `/permission danger-full-access` 必须先获用户明确同意；默认权限 workspace-write 已够大多数任务。
- 会话 id 一律用完整值（`sessions` 输出的短 id 仅便于人看）。
- watch.mjs 的事件流是只读下行；一切应答走 HTTP（dshctl 已封装）。
- wire 协议以运行实例为准（本套按 0.1.0-rc.x 验证）；若 dsh 升级后 `raw`/其他命令报 bad-request，用 `dshctl raw` 探测新方法名。

