用 dsh-ramify 给 DeepSeek Harness 加上创意分支画布

前言

用智能体做落地页、UI 草稿或可预览原型时,常见做法是直接让模型写第一版,再在同一份结果上反复改。方向一旦定死,后面的修订都叠在同一条线上,想并排看几个明显不同的方案,只能自己开新会话、复制粘贴、再靠记忆对比。

DeepSeek Harness(dsh)把这类能力做成插件:官方仓库的定位是「一切皆插件」,由 DeepSeek AI 开源,当前仍是 developer preview,接口可能不兼容地变动。社区站点 DeepSeek Harness 插件库 会收录第三方插件,它是独立目录,与 DeepSeek / 幻方没有官方从属关系。

dsh-ramify 就是这个目录里的一款工具与能力插件。它在 DSH 网页界面里嵌一块树状画布,把多个创作方向、可运行作品和后续修订组织成一棵实时更新的创意树,用来生成、对比和继续分叉。

本文按插件目录页、GitHub 仓库 README、package.json 与源码交叉核对后整理:它是什么、怎么装、怎么用,以及使用时要注意的边界。

这是什么

dsh-ramify 是专为 DeepSeek Harness 写的 dsh-plugin,包名为 @ramify/dsh-ramify,当前版本 0.1.0。GitHub 仓库是 yanglongyun/dsh-ramify,目录页标注维护者为 yanglongyun,许可证为 MIT(LICENSE 中的版权声明为 Copyright (c) 2026 Sider AI)。仓库主要语言是 TypeScript,GitHub 当前显示 9 个 star。

它要解决的问题很具体:Agent 一次给出多个方向后,结果仍散落在对话里,既不好看,也不好比,更不好从某一个节点继续改。Ramify 把这些结果写成画布上的节点,旧方案保留,新修订作为子节点长出来。

插件走 DSH 标准插件清单、Cordis 服务和 Client UI 插槽,不修改 Harness 源码。package.jsondsh.client.platform 声明为 web,界面出现在网页侧栏和覆层里,不是终端 TUI 插件。

核心功能

树状画布,而不是一条对话

README 把工作流程写成五步:

  1. 点击 DSH 左侧栏的 Ramify,打开内置工作台。
  2. 在 Ramify 原生输入框里填写需求,并选择要生成的方案数量。
  3. 插件先创建项目并立刻进入画布,同时把任务交给当前 DSH 会话和模型。
  4. Agent 通过 Ramify 工具持续往画布写方案,节点和预览会实时出现。
  5. 点节点右上角的发散按钮,输入修改要求,就可以从该节点继续生成分支。

过程中不需要复制本机地址,也不需要在 Ramify 里再配一遍模型或 API Key。界面提交走的是 DSH 官方会话输入能力,模型调用仍由当前会话负责。

也可以不点输入框,直接在 DSH 对话里要求 Agent 使用 Ramify。README 给的例子是:

使用 Ramify 为这个 AI 搜索产品探索三个明显不同的落地页方向,做出可预览页面让我比较。

作品类型与预览

节点不只是文本。源码把卡片分成 titlenote 和作品类;作品类型包括 HTML、Markdown、SVG、图片、视频和音频。README 写明这些作品可以在画布上直接预览。

预览有两层,行为不一样:

  • 画布卡片缩略图使用空的 sandbox,不会跑 JavaScript,避免大量作品同时执行脚本把画布拖慢。
  • 右侧详情和新窗口打开的作品不使用 sandbox 或 CSP,可以正常运行脚本、加载外部资源、联网和提交表单。

也就是说,详情页更接近「普通网页」,不是沙箱演示。

本地 runtime 与持久化

架构上分成两块:DSH 网页里的 Ramify 覆层(iframe),以及本机的 Ramify runtime。README 给出的默认地址是:

  • DSH Web UI:http://127.0.0.1:3099(这是插件 README 的示例端口;官方 Harness 文档里 npx @deepseek-ai/dsh web 默认是 3080
  • Ramify runtime:http://127.0.0.1:9519

插件启动时会拉起打包好的 runtime。源码 src/runtime.ts 里子进程环境变量 HOST 设为 0.0.0.0PORT 默认 9519;插件自身通过 http://127.0.0.1:9519 做健康检查和 API 调用。如果该端口上已经有健康的 Ramify 实例,会复用而不是再开一份。卸载插件时,只清理自己拉起的进程。

项目、节点和作品用 SQLite 加本地 artifact 文件保存。dataDir 省略时走操作系统应用数据目录:

  • macOS:~/Library/Application Support/Ramify/
  • Windows:%APPDATA%/Ramify/
  • Linux:${XDG_DATA_HOME:-~/.local/share}/ramify/

升级或重启默认不会清空。前端用轻量轮询感知变更。

注册给模型的工具

插件向当前模型注册一组工具,名称与用途以 README 为准:

工具 用途
ramify_start 启动或连接画布
ramify_project_create 创建项目与根节点
ramify_project_list 列出项目
ramify_project_tree 读取完整创意树
ramify_node_add 添加单个节点或作品占位符
ramify_node_batch 原子化创建多层节点树
ramify_node_complete 写入 HTML、Markdown、SVG 或媒体作品
ramify_node_update 更新标题、文本或树位置
ramify_settings 切换主题和界面语言

源码里 ramify_settings 的主题取值为 light / dark / system,语言取值为 system / zh-CN / en / ja / es / deramify_node_batch 一次最多创建 100 张卡片。系统提示要求:有比较价值的修订写成子节点,而不是覆盖旧方案;不要把 loopback 服务地址当成给用户看的主结果,主界面是 DSH 侧栏里的工作台。

安装与启用

环境要求来自 README:

  • Node.js 22.19 或更高版本
  • DeepSeek Harness 0.1.0-rc.6(仓库写明的当前测试版本)或兼容版本

社区目录页给出的安装命令是:

dsh plugin add github:yanglongyun/dsh-ramify

需要可复现安装时,目录页建议固定 commit 哈希:

dsh plugin add github:yanglongyun/dsh-ramify#commit

#commit 换成实际提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码,装之前应检查源码仓库和许可证。

因为客户端声明是 web,仓库 README 把「当前推荐」写成装进 web profile。先克隆再本地添加:

git clone https://github.com/yanglongyun/dsh-ramify.git
cd dsh-ramify
npm install
npm run build

dsh plugin --profile web add "$PWD"
dsh web --port 3099

README 同时说明:lib/app/dist/ 会提交进仓库,从本地 checkout 或 Git 安装时不必再跑安装期构建脚本。上面的 npm run build 是源码开发路径;若只按目录页的 github: 规格安装,用的是仓库里已经提交的构建产物。

README 另有一节「npm 包发布后」:

dsh plugin --profile web add @ramify/dsh-ramify

截至本文核对时,npm registry 上还没有 @ramify/dsh-ramify 这个包(返回 404),所以不要把这条当成现在就能用的安装方式。

启动后点击 DSH 左侧栏底部的 Ramify。插件会自动启动 runtime,并把工作台嵌进 DSH 覆层;顶部的外部打开按钮只是可选的独立窗口。

需要改端口或数据目录时,可在 profile 的 cordis.patch.yml 里覆盖。仓库自带的默认补丁是:

- insert:
  - id: ramify
    name: '@ramify/dsh-ramify'
    config:
      port: 9519
      startupTimeoutMs: 5000
      shutdownTimeoutMs: 3000

README 还允许增加 dataDir,必须写成绝对路径。

典型用法

装好并打开 Web UI 之后,有两条入口。

第一条是 Ramify 自己的输入框:写清需求、选方案数量,提交后进入画布等节点长出来。看中某一版,再从该节点发散,旧节点保持不动。

第二条是在当前 DSH 会话里直接下指令,让 Agent 调 Ramify 工具。可以沿用 README 的落地页例子,也可以换成 UI 草稿、Markdown 文档或 SVG。Agent 会先 ramify_project_create,再按卡片类型往树上加节点;作品可以先占位,再用 ramify_node_complete 把 HTML / Markdown / SVG / 媒体写进去。

画布更新不需要刷新对话。前端轮询本地 runtime,节点和预览会跟着 API 写入出现。

适用场景与注意事项

比较适合这些情况:

  • 需要同时看多个视觉或结构方向,而不是在同一份稿上改来改去
  • 作品本身能在浏览器里预览(HTML、Markdown、SVG、图片、音视频)
  • 已经在用 DSH 的 Web UI,希望复用当前会话和模型,不想再配一套 API Key

需要注意的边界:

  1. 这是社区插件,不是官方应用商店里的「认证扩展」。 目录站与 DeepSeek / 幻方无官方从属关系。Harness 本身仍是 developer preview。
  2. 权限与安装安全。 插件以当前 dsh 进程权限运行,安装可能执行代码。装前阅读源码和 MIT 许可证;需要可复现时固定 commit。
  3. 只覆盖 Web 客户端。 dsh.client.platformweb,侧栏入口出现在网页界面。官方默认 Web 端口是 3080,插件 README 示例用 3099,按你实际启动命令为准。
  4. runtime 监听地址。 源码把子进程 HOST 设为 0.0.0.0,DSH 侧用 127.0.0.1:9519 访问。如果本机网络环境比较敏感,应清楚这一点,不要想当然认为服务只绑在 loopback。
  5. 详情页没有沙箱。 缩略图不跑 JS;右侧详情和新窗口按普通网页执行,可以跑脚本、联网、提交表单。预览来源不可信时,不要随手点开详情。
  6. 不保存模型密钥,但会持久化作品。 插件不读取、不接收、不保存模型 API Key;项目数据默认写在系统应用数据目录,卸载插件不一定等于删掉这些文件。
  7. npm 包尚未发布。 当前应按 GitHub 源码或目录页的 github:yanglongyun/dsh-ramify 安装,不要去装不存在的 registry 包。

小结

dsh-ramify 把「一次生成多个可预览方案,再从中意的节点继续分叉」做成 DSH 网页里的一块原生画布。它复用当前会话和模型,用 SQLite 把树状修订留在本地,旧方案不会被新修订盖掉。

项目仍是早期版本(0.1.0),测试基线写的是 Harness 0.1.0-rc.6。如果这个工作流正好是你缺的那一块,可以从目录页或仓库自行评估后再装。

  • 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-ramify/
  • GitHub:https://github.com/yanglongyun/dsh-ramify
  • DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

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

小夜