GeekRicardo/claude-in-dsh
把 DeepSeek Harness (dsh web) 的一个会话交给本机 Claude Code CLI 驱动。所有 agent 工作都发生在本机 claude 里;dsh web 只负责接收流并用它原生的会话渲染展示 —— 转录、工具卡片、审批、命令面板,没有任何自绘的对话 UI。
catalog 简介 / catalog descriptioncatalog description:在 dsh web 里用本机 Claude Code 驱动会话:原生渲染、权限档、模型/effort、命令面板、broker 托管进程
项目介绍Project Overview
claude-in-dsh 是把 dsh web 会话交给本机 Claude Code CLI 驱动的插件:agent 在本机 claude 进程运行,dsh 用原生转录、工具卡片、审批、提问、计划审核和命令面板渲染。适合想在 dsh 界面里按会话切换 DSH/Claude、复用 Claude 权限档与斜杠命令时使用。需预装并登录 Claude Code CLI 2.1.x;会话一旦用过某引擎即固定归属,直接 pm2 重启会打断进行中的轮次。
claude-in-dsh is a DSH plugin that drives a dsh web session with the local Claude Code CLI. The agent runs in the local claude process, while DSH natively renders transcripts, tool cards, approvals, questions, plan review, models, and slash commands. Use it to switch individual sessions between DSH and Claude Code with Claude permission modes. It requires Claude Code CLI 2.1.x installed and logged in; engine choice is permanent per session, and a direct pm2 restart can interrupt an active turn.
请帮我了解并安装插件:【claude-in-dsh】【https://github.com/GeekRicardo/claude-in-dsh】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:GeekRicardo/claude-in-dsh
把 GeekRicardo/claude-in-dsh 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
claude-in-dsh
把 DeepSeek Harness (dsh web) 的一个会话交给本机 Claude Code CLI 驱动。所有 agent 工作都发生在本机 claude 里;dsh web 只负责接收流并用它原生的会话渲染展示 —— 转录、工具卡片、审批、命令面板,没有任何自绘的对话 UI。
功能
- 引擎选择器:输入框里一个和模型选择器同款的下拉(
DSH | Claude Code),按会话切换。dsh 会话与 Claude 会话严格互斥 —— 一个会话跑过谁,就永远属于谁(从会话日志推断,重启不丢)。 - 原生渲染:Claude 的流被写成 dsh 自己的持久会话事件(
assistant/chunk、assistant/message、tool/call、tool/result…),所以持久化、投影、主题、其他插件(如 dsh-better-tool-ui 的工具行)全部照常工作。子 agent(Agent 工具)渲染为嵌套子调用。 - 权限档替换:切到 Claude 后,dsh 的访问模式选择器被 Claude 的权限档(manual / acceptEdits / auto / bypassPermissions / plan)替换;权限请求(
can_use_tool)桥接到 dsh 原生审批 UI(若你配置了 Claude 的 PermissionRequest hook,则完全遵循你的 hook)。 - 提问桥接:Claude 的
AskUserQuestion不当权限问题处理,而是交给 dsh 的提问服务——你看到的是 dsh 自己那张提问卡片(选项 / 多选 / "其他"自由文本),答案原样回到 Claude。提问一律问人,不受权限档影响。 - 计划审核桥接:Claude 的
ExitPlanMode用 dsh 自己的计划审核卡片审(和 dsh 的exit_plan_mode同一套 id/标签/intent);批准即退出计划模式并把权限档落回监督档,选择继续规划则把你的反馈原样送回模型。 - 模型 / effort:模型座换成 Claude 的模型清单 + reasoning effort;运行中切模型走
set_model控制请求(不重启进程),重连后自动补发。 - 命令面板:Claude 的斜杠命令并入 dsh 面板(只在 Claude 会话出现);与 dsh 撞名的保留前缀加
-claude后缀并标注归属。/mcp/context/usage这类一次性命令带外执行 —— 不起轮次、不进转录,结果开在独立面板里(/mcp按 TUI 样式画出服务器分组列表)。 - 进程与会话托管:Claude 进程由独立 broker(
setsid)持有 —— 插件热更新、dsh 重启都不会中断正在跑的轮次,重连后从字节偏移续读流。会话记录写进~/.claude,终端里claude --resume能看到、也能继续。 - 只有真人发言才唤醒 Claude:dsh 插件系统注入的通知消息(Cordis 运行器等)不会替你烧一轮订阅额度,内容攒到你下次发言时一并带上。
- 订阅用量:官方订阅时输入框下方显示 5h/7d 用量与刷新倒计时(同 id 覆盖 dsh-balance 的座位,切回 DSH 自动还原)。
- 导入对话:工作区 ⋯ 菜单 →「导入 Claude Code 对话」,列出该目录下的本机 Claude 会话,预览(dsh 原生工具卡片样式)后一键接着聊。
- 插话与排队:跑轮次时 Ctrl/Cmd+Enter 插话直接折进 Claude 当前轮;普通 Enter 沿用 dsh 排队语义。
- 粘贴图片:Claude 会话里粘贴的图片存成 dsh 原生附件(转录里直接显示),并以 stream-json image block 随下一条消息送给 Claude —— 不再被「当前模型不支持图片」挡下。
- 断档补播:dsh 自己重启期间 Claude 完成的输出,会在下次打开或下一轮开始前补播进转录(不调用模型)。
前置
- Node.js ≥ 20、pnpm、已启动过一次的 dsh web(存在
~/.dsh/profiles/web) - 本机已安装并登录 Claude Code CLI(2.1.x)
安装
curl -fsSL https://raw.githubusercontent.com/GeekRicardo/claude-in-dsh/main/install.sh | bash
本地开发(用工作区目录而不是 GitHub 快照):
bash install.sh --link /path/to/claude-in-dsh --restart
装完重启 dsh web(pm2:pm2 restart dsh-web)并硬刷新页面。
维护
改代码只改 src/,然后 pnpm build(或 pnpm test,会先 build 再跑 bundle 冒烟测试)。
重启 dsh 用 bash scripts/safe-restart.sh:它先确认没有进行中的 Claude 轮次再重启。直接 pm2 restart 会打断正在跑的轮次,在那个对话里留下 TOOL_OUTCOME_UNKNOWN 红卡(内容随后会被补播,但轮次已断)。
结构
src/ 开发与测试所用的动态包源码(dsh-cordis-mcp 沙盒形态)
host.dynamic.js 宿主半:pre-step 接管、转录投影、broker 运行层、审批桥、RPC
client.dynamic.js 客户端半:composer 座位、工具行、命令、面板(全部复用 dsh 类名)
broker.mjs 进程 broker(宿主运行时会把同一份源码写到 /tmp/ccmode)
client-rig.mjs 离线渲染台架
scripts/build.mjs 从 src 生成 lib(正式 bundle 容器包装,引擎体逐字节一致)
scripts/safe-restart.sh 确认没有进行中的轮次后再重启 dsh-web
lib/ 生成产物:index.js(host, ESM)、client.js(ModuleLoader bundle)
运行时落点
- broker 与进程:
/tmp/ccmode/<sessionId>/(fifoin、追加日志out.log、meta.json) - 每会话持久设置(权限档/模型/effort/Claude 会话 id):
~/.cache/ccmode/state.json - RPC:同源
POST /claude-in-dsh/rpc(仅回环 + 同源,供本插件 client 半使用)
License
MIT
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS