前言¶
在 DeepSeek Harness(dsh)里开发智能体时,常见需求是让助手能「看到」并操作一台真实手机上的 App,而不是只在沙箱里写脚本。自行拼装 MCP 客户端、维护 Pinky 的启动命令和 profile 补丁,既要对齐 dsh 版本,又要处理各平台可执行文件路径。
下面介绍社区维护的 dsh-plugin-pinky(retweve)。它是一个纯配置型 dsh 插件:向 profile 插入 dsh 自带的 @deepseek-ai/dsh-mcp-client 行,用于启动本机已安装的 Pinky MCP 服务,使会话中出现 mcp__pinky__* 工具。Pinky 负责连接安卓或 iPhone,风险操作由你在 Pinky 里批准;本插件不打包 Pinky,也与 Pinky 项目无隶属关系。
这是什么¶
- 仓库:retweve/dsh-plugin-pinky(MIT,维护者 retweve)
- 分类:工作流(社区目录:skillhub 插件页)
- 版本(package.json):
0.1.0;要求 dsh>= 0.2.1-rc.2 - 内容:约 40 行
cordis.patch.yml与元数据,无可执行代码;作用是把官方 MCP 客户端挂到 Pinky 的命令行(mcp子命令)上
上游 Pinky 为 Apache-2.0(DIYgod)。插件在 dsh 进程权限下运行;安装前建议自行审阅补丁与许可证。
核心功能¶
安装并启用后,该 profile 下各会话可获得 Pinky 暴露的工具与资源,例如:
- 工具:
phone_connect、phone_observe、phone_tap、phone_type、phone_launch、phone_handoff、phone_release等(在 dsh 中以mcp__pinky__*出现) - MCP 资源服务名:
pinky
行为要点(由 Pinky 在连接时下发说明,此处仅归纳 README 中的描述):
phone_connect开始任务(任务名在 Pinky 中可见),phone_release结束任务。- 动作返回屏幕变化,元素带
[ref]编号便于后续点击;phone_observe可读整屏。 - 支付等敏感步骤在 Pinky 弹出批准卡片,智能体不能代你批准;银行/钱包/密码类 App 默认屏蔽,验证码打码,你可随时接管手机。
user_took_over/paused时智能体通过phone_handoff请你交还;stopped表示你在 Pinky 中按了 Stop——该会话不能再使用这台手机,且 Stop all 后 10 分钟内新会话也不能使用任何手机。
Pinky 在本地运行;批准、屏蔽与打码由 Pinky 本地网关执行,不依赖本插件或提示词。
前置条件¶
- 本机已安装并运行 Pinky,且已在 Pinky 中通过「Add phone」添加并授权手机。启动 MCP 的方式:Windows 为
Pinky.exe mcp,macOS/Linux 为pinkyctl mcp,或使用应用自带的可执行路径。 - dsh 版本不低于
0.2.1-rc.2。 - 手机经 USB 或无线调试连接(Pinky 自带 adb)。
安装与启用¶
在 dsh 桌面版:设置 → 插件 → 使用下列 GitHub 规格安装:
github:retweve/dsh-plugin-pinky
npm 包路径在 README 中写明为发布后可用:
dsh plugin --profile <profile> add dsh-plugin-pinky
若插件管理器提示变更未生效,重启 dsh 并新开一会话。工具列表中应出现 mcp__pinky__*。
配置 Pinky 可执行路径¶
插件按平台解析 Pinky 路径;环境变量 PINKY_BIN 可覆盖默认值:
| 平台 | 默认路径 |
|---|---|
| Windows | %LOCALAPPDATA%\Programs\Pinky\Pinky.exe |
| macOS | /Applications/Pinky.app/Contents/MacOS/Pinky |
| Linux | /opt/pinky/pinky |
便携版或自定义安装时,在 profile 用户补丁 ~/.dsh/profiles/<profile>/cordis.patch.yml(或 --patch 叠加层)中覆盖整行 config。注意:config 为整体替换,需写全每个字段。
- id: mcp-pinky
config:
serverName: pinky
transport: stdio
command: 'D:\Pinky\Pinky.exe'
args:
- mcp
toolCallTimeoutMs: 120000
failOnStartupError: false
补丁中 failOnStartupError: false 表示 MCP 连接失败时 dsh 仍可启动,但需在日志中排查 Pinky 路径或进程状态。
典型用法¶
在新会话中可用自然语言让智能体读屏,例如:
- 英文:“Use Pinky to see what’s on my phone.”
- 中文:「用 Pinky 看看我手机现在什么画面。」
经 phone_connect 建立任务后,再按需调用观察、点击、输入、启动 App 等工具;敏感步骤在 Pinky 等你确认。
常见问题¶
| 现象 | 处理 |
|---|---|
没有 mcp__pinky__* |
Pinky 路径错误或未安装。检查路径,或设置 PINKY_BIN / 覆盖 command;查看 dsh MCP 连接日志。 |
| 工具有但调用失败 | Pinky 未运行,或没有已连接手机。打开 Pinky 并添加/重连手机。 |
device_offline |
手机断连。在 Pinky 中重新连接。 |
stopped |
曾按 Stop。Stop all 后等待 10 分钟再开新任务,必要时新开会话。 |
approval_denied / 超时 |
批准卡片约 60 秒;在 Pinky 中操作,或在 Pinky → 设置 → 安全 中调整规则。 |
卸载¶
在 dsh 插件管理器中移除,或执行 dsh plugin remove。会去掉 bundle 中的 mcp-pinky 行,不影响其他配置。
结尾¶
dsh-plugin-pinky 把「真实手机 + 人工批准」这条链路收成一条 GitHub 安装规格和一份可读补丁,适合已在用 Pinky、又希望 dsh 智能体直接调用 mcp__pinky__* 的开发者。第三方插件请只从信任来源安装。