第 9 章 创造模式:从使用者到扩展者
本章你会学会
- 创造模式到底是什么,不是什么;
- 它比标准模式多了哪些能力;
- 什么时候该用,什么时候不该用;
- 一次完整的“做插件”流程;
- 不会编程的人怎么参与;
- 怎么避免把 DSH 改坏。
9.1 创造模式是什么
创造模式是 DSH 的一个 Agent Preset,内部 id 是 cordis。[3]
它不是:
- 另一个模型;
- 另一套运行时;
- 另一个软件;
- 更聪明的标准模式。
它是:
在标准任务工具之上,额外提供运行时检查、插件管理、以及插件/Preset 开发指引的一种工作模式。
它和标准模式共用:
- 同一个 Agent loop;
- 同一个模型;
- 同一个沙箱/权限系统;
- 绝大部分任务工具。
差别只在“composition(插件组合)”。
9.2 它比标准模式多了什么
通常包括三类能力。
1. 运行时检查
可以查询 DSH 当前真实的:
- Service 方法;
- Config schema;
- Tool schema;
- Skill 列表;
- 界面 Slot / theme token。
这解决了一个大问题:不用猜 API。
2. 插件管理
可以:
- 列出已安装的 Bundle;
- 安装/启用/停用/卸载;
- 修改 profile 的插件选择;
- 查看安装结果和警告。
这些操作会持久化到 profile,影响所有 Session,并在重启后保留。
3. 开发指引
创造模式会挂载一组 authoring Skill,告诉你:
- 怎么写 Cordis 插件;
- 怎么写 Bundle patch;
- 怎么创建/覆盖 Preset;
- 怎么验证插件真的生效。
它还会提供模板和参考资料,按需加载。
9.3 什么时候该用
适合:
- 想给 DSH 加一个工具;
- 想加一个界面/按钮/面板;
- 想做一个自定义模式;
- 想调试“插件为什么没加载”;
- 想把自己的工作流封装成插件。
不适合:
- 日常写代码;
- 普通文件整理;
- 只是想让 Agent 帮你查资料;
- 你不需要扩展 DSH 的时候。
原因:
- 多出的工具和 Skill 会占用上下文;
- 插件安装是高风险操作;
- 日常任务用标准模式更轻。
9.4 安全边界:这是高信任模式
创造模式可以做很多“普通模式不能做”的事,因为:
- 安装插件会在 Host 进程执行代码;
- 修改 profile 会影响所有 Session;
- 插件可能读写文件、访问网络、运行命令;
- 这些代码在 workspace sandbox 之外执行。
所以:
- 插件管理通常需要 full access 或逐次审批;
- 不要给不信任的代码 full access;
- 先在测试 profile/工作区试;
- 重要配置先备份;
- 出问题要能停用/回滚。
创造模式不是“安全模式”,它是“高信任的扩展模式”。
9.5 一次完整的“做插件”流程
下面是一个通用流程,不要求你会写代码,但要求你能描述目标和验收。
第 1 步:描述能力
不要一上来就说“帮我写个插件”。先说清楚:
我想给 DSH 加一个能力:
- 它做什么;
- 在哪里使用(聊天/按钮/面板/工具);
- 输入是什么;
- 输出是什么;
- 怎么验证它成功;
- 不需要做什么。
第 2 步:让它先检查
先不要写代码。
请用运行时检查工具,确认:
1. 这个能力应该挂在哪一层(Host 插件 / Preset 插件 / 纯配置);
2. 可用的 Service / Slot / Tool API;
3. 是否需要新的 Bundle;
4. 有没有现成模板。
把结论和风险列给我。
第 3 步:做最小版本
先做一个最小可用版本。
不要做额外功能、不要做多个变体。
给出文件清单、安装方式、验证步骤。
第 4 步:安装并验证
安装到当前 profile。
安装后告诉我:
- 安装结果(applied / warnings);
- 新增了哪些工具/Skill/界面;
- 怎么验证;
- 怎么卸载。
第 5 步:修复与迭代
只修观察到的问题,不要无限加功能。
第 6 步:收尾
请给出:
- 插件位置;
- 安装/卸载方式;
- 已验证的内容;
- 未验证的内容;
- 已知限制。
9.6 不会编程的人怎么参与
你不需要自己写代码,但你需要做三件事:
- 说清楚目标:用户是谁、在什么场景、输入输出是什么;
- 审查结果:它有没有做你没要求的事?有没有权限过大?
- 验收:按你定义的场景试一遍,不通过就具体反馈。
你可以要求:
不要只告诉我“完成了”。
请给出:
- 改了哪些文件;
- 新增了哪些能力;
- 我怎么手动验证;
- 如果失败,怎么回滚。
9.7 案例:把 GetNote CLI 做成一个 DSH 插件
前面几节讲的是方法。这一节用一个真实项目走一遍:GetNote(得到大脑)工具箱。
做这个插件的直接动机是:在我们开始的时候,官方 @getnote/dsh-plugin 还不支持 DSH Desktop[2]。Desktop 是大多数人日常使用的入口,所以我们需要一个能在本机 Desktop profile 里真正跑起来的版本。
这不是要替代官方插件,而是补上 Desktop 这个入口。也正因为如此,项目优先处理 Desktop 的本地 bundle、locale/icon 展示、CLI 发现和 Plugin Manager 可见性。
它的目标不是“照着某个插件抄几个工具”,而是把本机 getnote CLI 变成一组 Agent 能稳定使用的 Host 工具。代码已经公开:
https://github.com/leether/getnote-toolbox
源码已经公开,并已发布到 npm:@leether/getnote-toolbox。[1]
- GitHub:https://github.com/leether/getnote-toolbox
- npm:https://www.npmjs.com/package/@leether/getnote-toolbox
安装时可以通过 DSH Plugin Manager 使用 npm bundle,也可以在开发时从源码本地 link。
第一步:先审计能力,不要先写工具
先列 CLI 的 --help、输入输出、副作用、认证方式和版本差异,再决定哪些能力值得做成 Tool:
- 高频、需要结构化参数、需要安全护栏的,做成 Tool;
- 低频、复杂、变化快、需要领域判断的,留给 CLI 或 Skill;
- 互逆操作要成对出现,比如 add / remove;
- 不做通用
run_command或任意 HTTP 透传。
这个项目最后有 15 个工具,覆盖搜索、保存、读取、更新、删除、标签、知识库和配额。15 不是目标;每个工具都要能回答“它替模型承担了哪项契约、护栏或归一化工作”。
第二步:把“能跑”变成契约
真正花时间的不是 spawn 一行命令,而是这些细节:
- 19 位笔记 ID 一律按字符串处理,避免 JSON number 丢精度;
- 列表的
limit在旧版 CLI 上可能失效,插件在解析后自行截断; - 删除必须显式
confirm: true,标签删除要用标签 ID; - 参数以数组传给
spawn,不经过 Shell; - 超时、输出体积、登录失效都要给出可操作的错误;
- 用 Config schema 暴露
binaryPath、timeoutMs等字段; - 配一个 Skill,告诉 Agent 什么时候该用哪个工具。
到这一步,插件才从“命令包装”变成“模型可用的接口”。
第三步:假 CLI 做单测,真 CLI 做验收
测试不碰真实账号:仓库里的 fake CLI 覆盖 ID 精度、嵌套响应、旧版 -y 回退、标签回读、知识库 add / remove 等 28 个测试。
然后再用真实 CLI 做一次只读冒烟测试。真实输出可能包含笔记片段,所以:
- 不把输出贴进 issue、聊天或提交;
- 写测试只使用合成 ID;
- 涉及写操作时,先建测试笔记,结束后清理。
第四步:先做隐私和公开审查,再公开
这是这个案例最重要的部分。代码能跑,不等于可以公开。
公开前我们逐项处理了:
- 评测报告:
evals/results/里有当前账号的笔记 ID、标题和对比结果,不能进公开仓库; - 内部草稿:给上游提 issue / PR 的
contrib/文档包含本机路径和操作计划,不公开; - git 历史:旧历史使用个人邮箱;公开版改用全新历史,提交作者用 noreply;
- 包名:本机用户名 scope 改成公开身份 scope,避免把本地账号带出去;
- 环境信息:删除“当前机器已 link 到某个 profile”这类描述;
- 敏感扫描:检查密钥、Token、邮箱、绝对路径、
.env、长数字 ID 和评测输出; - 文件清单:只保留受审的源码、测试、许可证和公开文档。
原则很简单:
先审查,再公开;不是公开后再删。
结果与边界
这个插件现在是公开源码项目,15 个工具、28 个测试,代码使用 MIT。它还有几个明确边界:
- 与官方
@getnote/dsh-plugin使用相同的getnote_*工具名,不能同时安装; - 本机 CLI 版本会影响 ID、
limit和确认 flag,建议固定binaryPath并验证版本; npx兜底会下载最新 CLI,在意供应链风险时应改用本地固定版本;- 它不是一个“万能 GetNote 插件”,很多低频能力仍应交给 CLI 或领域 Skill。
这个案例真正可复用的,不是 15 这个数字,而是四步:能力审计 → 契约设计 → 假 CLI 测试 → 隐私审查后再公开。
延伸阅读:认知篇《从 CLI 到 DSH 插件:一套让 Agent 少走弯路的判断顺序》已经发布,见 cognition.html。
9.8 常见误区
- “创造模式是高级版标准模式”:不是。它是扩展模式。
- “装插件只是改配置”:不是。插件可能执行代码。
- “装了就会自动生效”:不一定,可能需要重载/重启。
- “Preset 可以当沙箱”:不可以。
- “让 Agent 直接改 profile 文件”:不要,用 Plugin Manager。
- “一次做很大”:先最小版本,再迭代。
马上试试
- 新建一个创造模式任务;
- 不要安装任何东西;
- 让它列出当前可用的运行时检查能力;
- 问它:“如果我要加一个只读工具,应该挂在哪一层?为什么?”
- 读它的回答,不执行。
小结
- 创造模式是
cordisPreset,不是模型/运行时。 - 它多出运行时检查、插件管理、开发指引。
- 适合扩展 DSH,不适合日常任务。
- 插件代码在 Host 执行,必须有信任和回滚方案。
- 先最小版本,再验证、再迭代。
- 真实案例:先做能力审计与契约,再做隐私审查,最后公开。
参考
链接均为公开来源;产品行为可能随版本变化。