前言¶
在 DeepSeek Harness(dsh)里跑智能体,默认行为是边查边改:读文件、写补丁、调工具,一轮对话里很容易顺手动到仓库。有时你只想问清楚——配置在哪、重试为什么是 3、改这里会坏什么——而不希望模型改任何文件。Cursor 等产品里有 Ask 只读模式;DSH 自带 /plan 等斜杠命令,但没有同类的「只答不改」入口。下面介绍社区插件 dsh-helper-plugin-command-ask(维护者 x102201),它在 Harness 里补上 /ask 模式:一轮只读问答,带引用、禁止编辑,并由工具守卫在模型「忘记规矩」时仍拦截写操作。
这是什么¶
dsh-helper-plugin-command-ask 是挂载在 DSH web profile 上的客户端插件(分类:客户端)。一句话:用 /ask <问题> 触发只读 Q&A,该轮结束后自动回到普通工作模式;也可 /ask off 提前退出。实现上参考了 DSH 内置 /plan 的模式切换方式,以及 Cursor Ask 的交互预期。
插件以 MIT 许可发布,当前 package 版本 0.2.0(README 徽章标注在 dsh 0.1.5-rc.2 环境下有 82 项测试通过)。它不引入额外运行时依赖,纯 ESM,无需构建步骤。
核心功能¶
/ask 斜杠命令¶
在 Composer 中输入 /ask,斜杠菜单会出现 /ask Enter or leave ask mode (read-only Q&A)。典型用法:
/ask why is the retry budget 3? # 只读回答这一问题,随后回到普通模式
/ask # 为下一轮武装 ask 模式(可不带问题)
/ask off # 提前取消(正常一轮结束不必手动 off)
- 作用域:默认
<scope: turn>,只覆盖一轮;Harness 在turn/end时释放模式,下一条不带/ask的消息按普通会话组装。 - 可选 session 作用域(配置项):类似
/plan的「持续 stance」,直到/ask off;进入 standing ask 时会退出 plan 模式,避免两种矛盾立场并存。 - 命令可附带问题,也支持图片、文件等附件(与 README 描述一致)。
只读策略与工具守卫¶
激活期间,请求中会注入 ask:policy 提示段,说明本部署下的只读指引;关闭后该段不再出现。
Read-only guard 默认开启:通过单调的 ctx.tools.guard() 拒绝配置中的 mutating 工具,并在拒绝时提示模型只能基于可读内容作答。若你在 ask 轮里明确要求改文件,模型应解释如何改而不是直接写;被拒绝的工具调用会报告 ask mode is read-only。
状态持久化¶
ask 状态由会话日志中的 /ask 的 command/run、command/done 以及 turn/end 折叠投影得到;插件不写入 Harness 未定义的 session 事件类型。每次切换经 ctx.sessions.flush() checkpoint,重启后可恢复。
插件还提供程序化接口 ctx.askMode:get(agent)、set(agent, active)(走真实命令分发)、isActive(session)。
与 0.1.x 升级相关(若你曾装过旧版)¶
0.1.x 曾持久化 ask/mode 事件,可能导致含该事件的日志无法被当前 Harness 加载。0.2.0 不再写入此类事件;若历史日志需修复,仓库提供 scripts/repair-ask-mode-logs.mjs(见 GitHub README「Upgrading from 0.1.x」)。新安装可忽略本节。
安装与启用¶
前提:dsh plugin 会把参数转给 pnpm,需保证 pnpm 在 PATH 上(例如 corepack enable pnpm)。Node 需 >= 20。
从 GitHub 安装(常用)¶
dsh plugin --profile web add github:x102201/dsh-helper-plugin-command-ask
需要固定版本时可加 revision:github:x102201/dsh-helper-plugin-command-ask#<tag-or-commit>。
从本地目录 link 安装(开发调试)¶
路径须为绝对路径,或相对于你执行命令时的工作目录:
dsh plugin --profile web add link:/absolute/path/to/dsh-helper-plugin-command-ask
link: 会符号链接到 checkout,改 index.js / lib/*.js 后重启 dsh web 即可生效,无需重装。
挂载与重启¶
add 会在 $DSH_HOME/profiles/web 内通过 pnpm 安装,并把声明了 dsh.bundle.patch 的包写入 profile manifest;下次启动时 patch 层插入 host 行 command-ask。安装后重启 web profile:
dsh web
不安装先试跑¶
dsh --profile web --patch <checkout>/examples/standalone.patch.yml
验证¶
dsh --profile web --dump-config | grep -A2 command-ask
在 Web UI 输入 /ask,应看到 Ask mode on (read-only). Use /ask off to leave.;在 ask 轮请求编辑,应只解释不改。也可用仓库脚本 scripts/verify-live.mjs 对运行中的实例做 HTTP RPC 校验(README 有完整参数说明)。
卸载(包名见 package.json 的 name 字段):
dsh plugin --profile web remove dsh-helper-plugin-command-ask
典型用法¶
- 启动
dsh web,在会话 Composer 输入:/ask 重试预算为什么配置成 3? - 阅读带引用的只读回答;该轮结束后直接发:
把 budget 改成 5 并改对应测试—— 无需/ask off,下一轮即为普通编辑模式。 - 若配置了 session 级 ask 或你手动
/ask未带问题武装了下一轮,可在改主意时用/ask off提前退出。
演示 GIF/MP4 见 GitHub 仓库 docs/assets/(在 dsh-helper 工作台录制):同一环境里 /ask 拒绝写文件,随后普通「do it」消息才创建文件。
适用场景与注意¶
适合谁:日常用 DSH web 做仓库内问答、代码走读、故障定位,希望默认零副作用的开发者;习惯 Cursor Ask、希望在 Harness 里用同样心智模型的人。
权限与安全:插件与当前 dsh 进程同权,守卫只拦「配置内的 mutating 工具」,不能替代你对源码与许可证的审查。安装前请阅读 GitHub 仓库 与 MIT 许可证;社区目录 SkillHub 插件页 为独立索引,与 DeepSeek / 幻方无官方从属关系。
生态背景:DSH 主张「一切皆插件」;本插件通过 cordis.patch.yml 向 web bundle 注入 command-ask host,属于客户端扩展,不改变 Harness 核心发行版。
结尾¶
dsh-helper-plugin-command-ask 用一条 /ask 把「只问不改」做成可强制的一轮模式:提示策略 + 工具守卫 + 回合边界自动释放,问完再让智能体动手改代码,流程自然分开。详情与配置、升级说明见 GitHub README(含 中文 README.zh.md)。
- 目录页:https://www.skillhub.cn/plugins/x102201/dsh-helper-plugin-command-ask
- 源码:https://github.com/x102201/dsh-helper-plugin-command-ask