开源设计工作台 OpenDesign 的守护进程与沙箱渲染架构
OpenDesign(仓库 nexu-io/open-design)是个容易被误读的项目。名字里有「设计」,但它本质上是一套本地优先的运行时:把本机已经装好的编码 Agent 当成推理后端,自己只负责渲染、存储与产物导出。本文只谈它的架构分层,不谈好不好用。
四层可组合平面
OpenDesign 把能力拆成四个可以互相替换的平面:技能(skill)、渲染模板、设计系统(DESIGN.md)、插件。四层之间没有强绑定,换掉其中一层,另外三层不必跟着改。设计系统落在 DESIGN.md 这个约定文件上,意味着配色、字阶、间距这类决策是被文本化的,而不是埋在代码里——这一层直接决定了后续所有产物的视觉一致性,也让设计决策可以进版本库。
Source 到产物的两条轴
一条轴是产物形态,共六类:原型、演示文稿、移动应用、图像、文档、HyperFrame。另一条轴是导出格式,共四种:HTML、PDF、PPTX、MP4。两条轴正交,意味着同一个 Source 可以被不同渲染模板解释成不同形态,再落到不同格式上;这也是它把「渲染模板」单列成一个平面的原因——模板决定形态,导出器只负责格式,两者不需要互相知道。
宿主层与 BYOK
它自己不训模型,而是驱动本机已有的 CLI。官方列出的兼容宿主包括 DeepSeek Harness (dsh)、Claude Code、Codex、Cursor、OpenCode、Qwen、Copilot、Kimi 等 20 多个,同时支持 BYOK 接入任意兼容 OpenAI 的端点。这个设计的直接后果是:模型能力、上下文长度、费用都取决于你自己接的那条链,OpenDesign 只保证渲染与产物这一侧。
前端与守护进程的职责切分
前端是 Next.js 16 App Router + React 18 + TypeScript。守护进程是 Node 24 上的 Express 服务,用 SSE 向界面推送增量状态,用 better-sqlite3 做本地持久化。这个组合说明它把「长任务的进度」当成一等公民:Agent 生成本来就是慢过程,SSE 让渲染进度可以边跑边显示,而 SQLite 落盘保证会话与产物在进程重启后还在。前端与守护进程分开,也让它天然支持多客户端接入同一份本地数据。
桌面外壳与沙箱渲染
桌面端是 Electron 外壳 + 沙箱化渲染器 + sidecar IPC。三层分工很直白:外壳管窗口与生命周期,渲染器跑在不被信任的一侧,真正碰文件系统和模型凭据的部分留在 sidecar,通过 IPC 通信。对一个要读本机项目目录、还要调用本机 CLI 的工具来说,这个隔离设计是必要的:设计产物里难免带上外部内容,渲染器不该因此拿到凭据。
元数据与最小权限
插件的声明面比多数同类工具细。specVersion 固定为 1.0.0;od.kind 区分 skill / scenario / atom / bundle;od.taskKind 区分 new-generation / figma-migration / code-migration / tune-collab;od.mode 覆盖 prototype / deck / live-artifact / image / video / hyperframes / audio / design-system / scenario;另有 od.capabilities[] 与 od.inputs[]。最值得记的是 od.capabilities[] 的默认值:受限安装默认只授予 prompt:inject。也就是说,装上一个插件,它能做的最坏事情被限制在往提示里注入内容,而不是读写磁盘或起进程。命令侧配套 od plugin list,支持 --task-kind / --mode / --tag 三种过滤。
工作流
它的工作流是一条七段链:brief → plugin → direction → design system → artifact → handoff → memory。前半段是意图收敛:brief 记录要什么,plugin 提供可用能力面,direction 定位方向。中段把方向固化成设计系统,再由渲染模板产出 artifact。后半段 handoff 与 memory 负责交接和回收,让下一轮不必从零开始。
安装与运行边界
想真正跑起来,条件比想象中紧。官方命令是 dsh plugin --profile web add nexu-io/open-design,依赖 dsh CLI(npm install -g @deepseek-ai/dsh)。但仓库 package.json 标记为 private、未发布到 npm,所以这条命令是从 GitHub 源安装,不是从 npm 拉包。源码运行要求 Node ~24 与 pnpm 10.33.x。当前 Star 97550,许可 Apache-2.0(捆绑的技能与模板保留各自许可证),最近上游提交 2026/9/22,站点分类为视觉能力,站点安装检查未通过——原因是 engines.node 要求 ~24,高于基线 Node 22.19。
想对照同类插件的形态,可以看 DeepSeek Harness Hub 插件清单。
总结
OpenDesign 真正值得看的是分层:四层平面解耦、六类产物与四种导出正交、权限默认收紧到 prompt:inject、渲染器与凭据侧用 IPC 隔离;想对照同类插件的中文清单与安装形态见 DeepSeek Harness Hub 插件清单。
适合与不适合
适合:愿意为本机 Agent 接一套渲染与产物管线的团队;需要在本地跑、不接受上传素材到托管服务的人;看重 DESIGN.md 这类文本化设计系统、希望设计决策可版本化的人;需要把同一份 Source 导出成 HTML / PDF / PPTX / MP4 多格式的场景。
不适合:想用一条命令装完就用的人——它没发布到 npm,还要求 Node ~24;商用前不愿逐个核对捆绑技能与模板许可证的人;指望装上就让全组或内网模型直接连通的团队,默认只绑回环、默认拦内网端点,这些都要额外配置。
标签:open-design、DeepSeek Harness、Architecture、Local-first、Electron
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。