dsh-claude-desktop:用 claude:// 深链把任务交给 Claude 桌面端

前言

在 DSH 里编排智能体时,常见做法是让插件去 spawn claude CLI,拿结构化 JSON 结果、还能 resume 会话——例如同生态里的 dsh-claude-pilot。另一类需求是:任务要在 Claude 桌面应用里跑,用图形界面看 Claude Code、Cowork,或把 CLI 里已经开好的会话交回桌面端继续。

Claude 桌面端对外没有本地 RPC 端口,也不能用 CDP 遥控 Chromium。维护者 Dobo233 的 dsh-claude-desktop(GitHub:Dobo233/dsh-claude-desktop,社区目录:skillhub 插件页)走的是应用自带的 claude:// 深链:投递 prompt、目录和文件,必要时代按发送键,再从本地会话文件读回回答。插件把「能做什么、不能做什么」写进 README,并给出实测依据;分类为 工作流。

下面介绍它的定位、工具、安装与典型用法。

这是什么

dsh-claude-desktop 是 DSH 插件(Cordis bundle,当前 package 版本 0.1.2,MIT 许可证)。一句话:让 DSH 通过 claude:// 把活交给 Claude 桌面端,并支持从本地 jsonl 读回对话——不是远程遥控已打开窗口里的输入框,也不是 CDP 驱动。

与 dsh-claude-pilot 的分工:

方向 dsh-claude-pilot dsh-claude-desktop
调用方式 spawn claude CLI 调桌面应用深链
结果形态 JSON(cost / turns / session_id 等) 读本地 jsonl + 应用侧会话索引
典型场景 要在 DSH 里干净拿 CLI 结果 要在桌面端 UI 里跑、或 CLI 会话交回桌面

桥的能力可以概括成:投递 + 交接 + 读回,不是往已开对话里插话,也不能 --remote-debugging-port。

能力边界

以下结论来自 README 中的能力表与实测说明。

能做的:

  1. 投递任务到桌面端:例如 claude://code/new?q=…&folder=…,应用日志会出现工作区信任等记录。
  2. 投递 Cowork 任务(带文件):claude://cowork/new,参数 q / folder / file 转发到 /task/new。
  3. 把 CLI 会话交回桌面端:claude://code/continue?session=last 或 UUID,Resume 分支会 importCliSession。
  4. 读回桌面端的回答:桌面端 Claude Code 内部跑真 Claude Code,正文在 ~/.claude/projects/<cwd-slug>/<cliSessionId>.jsonl;应用索引在 %LOCALAPPDATA%/Claude-Data/claude_<pkg>/claude-code-sessions/... 里对照 sessionId 与 cliSessionId。

不能做的:

  • 往已打开的对话里插话:没有 queue 式 IPC。
  • CDP / 远程调试驱动:--remote-debugging-port 在应用 Chromium 开关黑名单里。

另外需要理解 投递 ≠ 发送:深链里的 q 只会 预填输入框,不会自动发出消息;实测里草稿写在 composer-draft,Ctrl+Enter 才会触发 [CCD] session spawn 等日志并真正开跑。Enter 在 Claude Code 输入框里是换行。插件在 submit=true 时会尽力 SendKeys('^{ENTER}'),失败会返回 ok:false 并说明原因。

深链契约(摘要)

插件行为与桌面端 claudeURLHandler 对齐,常用入口如下:

用途 URL 主要参数
新 Claude Code 会话 claude://code/new q(或 prompt)、folder(可重复)、file(可重复)
继续会话 claude://code/continue session=last 或 UUID
等你处理的会话 claude://code/needs-input session
Cowork 任务 claude://cowork/new q、folder、file
新聊天 claude://claude.ai/new surface=chat

协议名默认 claude,由桌面端注册;应用内可用 disableDeepLinkRegistration 关闭注册。

核心工具

DSH 侧通过下列工具与桌面端协作(参数以 README 为准):

工具 作用
desktop_send 投递任务;可选 folder、files[]、surface(code / cowork / claude.ai)、submit、wait
desktop_continue CLI 会话交回桌面;session=last 或 UUID
desktop_open 打开面板或任意深链(entry 或完整 claude://…)
desktop_sessions 列出最近会话(local_<uuid>、cliSessionId、cwd 等)
desktop_read 读某会话最后 N 轮正文
desktop_wait 等会话跑完一轮并读回
desktop_probe 体检:版本、进程、协议注册、配置路径、能力边界

读回不依赖应用进程常驻:jsonl 已在磁盘上,desktop_read(session="last") 即使应用关闭也可读(读的是本地文件,不额外联网;额度以桌面端实际跑的那一轮为准)。

安装与配置

安装

在 PowerShell 中从 GitHub 安装(README 原文命令):

dsh plugin --profile web add github:Dobo233/dsh-claude-desktop

本地开发时可把 <repo-path> 传给同一子命令。插件要求 Node ^22.19.0 || >=24.0.0,peer 依赖 @deepseek-ai/dsh-tools(见 package.json)。

DSH 生态是「一切皆插件」;skillhub.cn 上的社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,投递会在用户桌面端开启真实会话并可能消耗用户额度。

配置项

在 ~/.dsh/profiles/<profile>/cordis.patch.yml 的 config 段或插件项中可调整:

键 默认 说明
dryRun false true 只返回拼好的 URL,不拉起应用
maxPromptChars 6000 prompt 截断长度
protocol "claude" 协议名,一般不改
appPackageId "Claude_pzs8sxrjxfjjc" 定位 Claude-Data\<pkg>
submit false 是否在投递后自动 Ctrl+Enter
submitKeys "^{ENTER}" SendKeys 组合(勿改成仅 {ENTER})
focusDelayMs 1200 投递后等待再抢前台
waitTimeoutMs 180000 wait 最长等待
pollMs 2000 轮询会话索引间隔

安全方面:仅允许 claude:// 前缀 URL;Windows 上通过 rundll32.exe url.dll,FileProtocolHandler 拉起,不经 shell 二次解析;prompt 中控制字符会被清理,超长会截断并在返回值提示。

典型用法

下面示例来自 README,可直接在 DSH 工具调用里复现思路:

desktop_send(prompt="把 README 的第一段改短一点", folder="E:\\path\\to\\repo")
desktop_send(prompt="只回复一行 OK", submit=true)
desktop_send(prompt="跑一下 unit test", folder="E:\\repo", submit=true, wait=true)
desktop_read(session="last", turns=2)
desktop_sessions(limit=5)
desktop_continue(session="6bede325-c04e-405a-8681-85a1e060931d")
desktop_open(entry="needs-input")
desktop_probe()

若要在 DSH 里拿到与 CLI 一致的干净 JSON(cost、turns、session_id),README 建议改用 dsh-claude-pilot 的 claude_run;本插件侧重桌面端交接与读本地 transcript。

适用场景与排错

适合谁:

  • 工作流里要把一步明确交给 Claude 桌面端(Claude Code / Cowork / 新聊天),并在 DSH 里读回最后几轮回答。
  • 需要把 CLI 会话 UUID 推回桌面端继续,而不是只在终端里 resume。

注意:

  • 首次向某目录投递时,桌面端会要求 工作区信任(日志:Saved workspace trust for <dir>)。
  • submit=true 依赖窗口前台与 SendKeys,不稳定时可手动 Ctrl+Enter;带 wait=true 时插件会自动重按发送键(最多 4 轮)。
  • 排错时先跑 desktop_probe:例如 claude:// 未注册需启动过桌面端;找不到 MSIX 包需确认安装的是 Claude 桌面版(包名 Claude_pzs8sxrjxfjjc);输入框有字但未发送是预期——需 submit=true 或手动 Ctrl+Enter。

结尾

dsh-claude-desktop 用官方 claude:// 深链在 DSH 与 Claude 桌面端之间做 投递、会话交接与本地读回,并把不能插话、不能 CDP 的边界写清楚。进一步了解请查看 GitHub 仓库 与 skillhub 目录页。

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

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

Xiaoye