# Integrate the DeepSeek Harness into Paseo Guide

> Source: <https://gist.github.com/robbin/b0b3cc024d88235b1ebeecce5499b5e8>
> Published: 2026-09-11 06:03:22+00:00

2026-09-10 实操记录并逐项验证。环境：macOS（mac-studio.local）、Paseo 0.8.0、DSH `@deepseek-ai/dsh` 0.1.5-rc.1。

DeepSeek Harness（DSH）不是只有浏览器 Web 端口。`dsh web` 只是 `--profile web` 的别名，DSH 的官方入口模式里本来就有一个标准 ACP server：

```
dsh --profile acp     # ACP over stdio，直到客户端断开
```

Paseo 支持「把任意讲 ACP 的 agent 注册成 provider」，所以接入方式就是把 DSH 当通用 ACP provider 加进 Paseo。

数据流：

```
Paseo 客户端（手机 / 桌面 / 浏览器）
        │  relay / 局域网 / Tailscale
        ▼
Paseo daemon
        │  按 command 自己 spawn
        ▼
dsh --profile acp（子进程，每个 agent 一个）
        ▼
DeepSeek API
```

这个结构带来一个额外好处：执行在本机，控制面可以远程。DSH 本身默认只监听 `127.0.0.1:3080`，接进 Paseo 之后，你在外面用手机就能驱动本机的 DSH。

```
npm i -g @deepseek-ai/dsh
dsh --version
```

- npm 上的 `@deepseek-ai/dsh` 本体很小（约 48KB），它是个 launcher；真正的运行时依赖在首次启动某个 profile 时才装进`$DSH_HOME/profiles/` 。

```
dsh web               # 默认 http://127.0.0.1:3080
```

浏览器里进 Settings → Models，填入 DeepSeek API key 并保存。

```
dsh --profile acp --help
```

首次执行会初始化 `~/.dsh/profiles/acp` 并把依赖装好；`--help` 只打印帮助后退出，不会占用 stdin/stdout。

为什么必须先手动跑一次：Paseo 的 ACP 探针有约 20 秒超时，如果让 Paseo 触发首次安装，provider 会以"不可用"告终。

编辑 `~/.paseo/config.json`，在 `agents.providers` 下加一段（改前先备份）：

```
"dsh": {
  "extends": "acp",
  "label": "DeepSeek Harness",
  "description": "DeepSeek Harness (dsh) coding agent over ACP stdio.",
  "command": ["dsh", "--profile", "acp"],
  "env": {},
  "enabled": true
}
```

如果 dsh 不在 daemon 的 PATH 里，`command` 换成绝对路径，例如：

```
"command": ["/Users/<你>/.local/share/fnm/node-versions/<ver>/installation/bin/dsh", "--profile", "acp"]
paseo reload           # provider 改动不需要重启 daemon，不会打断正在跑的 agent
paseo provider ls
paseo provider diagnostic dsh
paseo provider models dsh
```

本次实测输出：

```
DeepSeek Harness (ACP)
  Launcher binary: dsh
  Resolved path:   ~/.local/share/fnm/.../bin/dsh
  Version:         0.1.5-rc.1
  ACP spawn:       ok (0ms)
  ACP initialize:  ok (363ms)
  ACP session/new: ok (45ms; models=4; modes=0)
  ACP cleanup:     ok (29ms)
  Status:          Ready
```

**再做一次真实冒烟：**

```
paseo run --provider dsh --title "冒烟测试" \
  "只回复两个字：ok。不要调用任何工具，不要修改任何文件。"
```

| 能力 | DSH acp profile | Paseo 通用 ACP adapter | 结果 | 
|---|---|---|---|
| 协议 | ACP v1 over stdio | `extends: "acp"` | ✅ | 
| `authenticate` | 立即成功、不需要认证 | Paseo 根本不调用它 | ✅ | 
| 模型选择 | config option id `model` ，category`model` | 读 `model` 类 config option | ✅ 能切模型 | 
| 推理档位 | config option `reasoning_effort` ，category**`thought_level`** | 映射为 thinking 档位 | ✅ 能选档位 | 
| 会话持久化 | `session/list` /`resume` /`close` | 原生支持 | ✅ | 
| 权限 | `session/request_permission` ，只有`allow_once` /`reject_once` | Auto Accept 找 allow 选项 | ✅ | 
| MCP | 支持 stdio / HTTP 声明 | 默认注入自身 MCP | ✅ 实测通过 | 
| 模式（modes） | **没有** | 无 modes 时跳过 `setMode` | ⚠️ 别配 `modeId` | 
| 客户端 fs / 终端 | 不使用，靠自己的工具 | 默认 fs=false | ✅ 互不干扰 |
