前言¶
在 DeepSeek Harness(DSH)里跑智能体时,常见做法是每次工具调用都起一个新 shell,工作目录和环境不保留,长命令链要反复拼上下文。若还要在「直接调工具」和「用 TypeScript 程序批量编排工具」之间切换,往往得改宿主源码或打前端补丁。下面介绍社区维护的外部预设插件 dsh-focus-mode,它在不改动 dsh 源码的前提下,提供 Agent 持有的持久 shell、直接工具 schema,以及上游 PTC(Program Tool Calling)执行器。
这是什么¶
dsh-focus-mode 由 Stautaffly 维护,仓库地址为 github.com/Stautaffly/dsh-focus-mode。插件简介为:为 DeepSeek Harness 提供持久 shell 会话,以及 Native 与 PTC 的混合执行能力的外部插件。
它把原先内嵌在特定 dsh 版本里的 focus-mode 实现抽成可安装的 bundle(当前发布版本 0.1.2),通过官方 CLI 安装到指定 Web profile,在新会话里选择 Focus mode 即可使用。该插件未发布到 npm;预构建包在 GitHub Releases 提供。
兼容性以 README 为准:dsh 0.2.1-rc.3,已针对上游 commit 22ddee3792402c3e70ec5f86a63c3e3e895a2f60 验证;运行环境需要 Node.js >=24.9。安装插件不会自动升级宿主 dsh。
DSH 生态采用「一切皆插件」的思路;社区目录页 skillhub.cn/plugins/Stautaffly/dsh-focus-mode 为独立站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
持久 shell 与命令工具¶
exec_command({cmd, session_id?, cwd?, run_in_background?}):打开或复用 Agent 拥有的持久 shell。连续调用之间工作目录与环境保留;cwd仅对新会话生效。write_stdin({session_id, chars?, run_in_background?, close?}):读取新输出或向 shell 发送输入。换行提交输入;单独的 Ctrl-C 中断;close: true关闭 shell 并释放槽位。
Shell 会话保存在进程内存中,dsh 进程重启后会话不保留;已退出但未关闭的会话仍占用配额,直到关闭。
混合执行:直接工具与 PTC¶
run_code使用上游 PTC 执行器。插件提供的工具既进入直接调用的 schema,也进入 program SDK;执行器没有工具名白名单。宿主侧的 scope、步骤准入、限制、审批、守卫、取消与日志仍由宿主说了算。- 直接 schema 与 program SDK 会增大 prompt 体积;PTC 可以把中间结果挡在对话历史之外。
后台任务¶
后台任务监控整个 shell,直到其退出或关闭;job_kill 会关闭该 shell。每个 shell 至多有一个后台监控器。Shell 仍存活或一次 send 已 settle,并不表示某一条单独命令已经结束。
保留的预设能力¶
Focus mode 预设仍保留 agent instructions、时间上下文、compaction、skills、web 工具、deliverables、插件检视与管理,以及 workflows。来自 Agent Teams、session search、worktrees 或 terminal 等插件的额外可见工具会自动继承。
安装与启用¶
使用目标 DSH 应用自带的 CLI,且 profile 已初始化(例如名为 web;也可换成 web-vanilla 等实际名称)。下列命令只影响所选 profile,不会改变当前默认 preset。
1、下载并安装 Release 归档(示例固定 v0.1.2):
dsh plugin --profile web add https://github.com/Stautaffly/dsh-focus-mode/releases/download/v0.1.2/dsh-focus-mode-0.1.2.tgz
2、安装后重启该 DSH 应用,刷新浏览器,在新会话中选择 Focus mode。安装只会增加一个 preset,不会替换你现有的默认 preset。
3、确认 bundle 已被发现:
dsh --profile web --dump-config
输出中应包含 external-preset-focus-mode。README 顶部的兼容性要求仍然适用。
更新与移除¶
更新时从 Releases 选取兼容版本,用对应归档 URL 再执行同样的 dsh plugin --profile ... add <url>,然后重启应用。重复上述 0.1.2 的 URL 只会重装该版本,不会自动跟随后续发布。
移除前请先结束使用该 preset 的会话,再在同一 profile 执行:
dsh plugin --profile web remove dsh-focus-mode
移除后重启应用并刷新浏览器。已有会话仍记录当时的 preset 选择;若要在无此插件的情况下继续,需先换用其他 preset。
配置要点¶
默认每个 Agent 最多 4 个持久 shell 会话,可在 1–64 之间调整。上游 jobs 注册表另有并发 job 上限;仓库内 examples/limits-16.patch.yml 示例同时覆盖两者。
临时打 patch 启动并查看配置:
dsh --profile focus-sandbox --patch ./examples/limits-16.patch.yml --dump-config
dsh --profile focus-sandbox --patch ./examples/limits-16.patch.yml
--patch 仅作用于该次启动。若要永久生效,需把示例中的两行合并进 profile 的 cordis.patch.yml,并保留其他设置;在当前 dsh 版本中,patch 会替换匹配行的整段 config。命令工具嵌在 preset 声明里,因此示例会重写 external-preset-focus-mode 并修改 persistent-shell → focus-commands → config.maxSessionsPerAgent;不支持仅用顶层 preset: focus-mode / id: focus-commands 的 patch。升级 bundle 后请自行对齐复制出的 preset 声明。
| 选项 | 默认值 | 允许范围 |
|---|---|---|
backendType |
shell |
已注册的 terminal backend |
maxSessionsPerAgent |
4 | 1–64 |
maxResultBytes |
262144 | 256–16777216 字节 |
yieldMs |
1000 | 0–60000 ms |
pollMs |
50 | 1–10000 ms |
readLines |
10000 | 1–100000 |
结果字节上限含元数据;截断保留尾部并提示可能丢内容。若需要完整输出,应提高 read/retention 相关设置并重跑命令。终端 send 超时与 scrollback 保留属于 terminal-bash / terminal-pwsh 的配置。
典型用法(行为层面)¶
经过上面的安装步骤后,智能体在 Focus mode 下可以:
1、用 exec_command 在固定 session_id 上跑多步 shell 工作流(例如先 cd,再装依赖,再跑测试),无需每步重建环境。
2、用 write_stdin 与交互式程序对话,或在长时间运行的命令上读增量输出;结束时 close: true 释放会话槽位。
3、用 run_code 写 TypeScript 程序,在单次执行里编排多个已注册工具,并把中间结果留在程序侧,减轻对话历史膨胀。
4、对整 shell 启后台监控,必要时 job_kill 结束;判断单条命令是否结束仍需结合输出与业务逻辑,不能仅凭 shell 仍存活推断。
适用场景与注意¶
适合谁:已在 dsh 0.2.1-rc.3 上跑 Web 智能体、需要持久终端会话或 PTC 编排,且不愿 fork 宿主或改前端的开发者。
权限与安全:插件与工具在当前 dsh 进程权限下运行;安装前应阅读仓库源码与 LICENSE,确认组织策略允许。
限制(README 摘要):
- 兼容性绑定在单一 pre-stable 宿主基线;升级 dsh 需重新验证。
- Shell 会话不跨进程重启;配额在关闭前不会因「命令已结束」自动释放。
- Scrollback 接口缺少单调字节游标等能力,README limitations 节有进一步说明。
插件开发者本地构建需单独准备兼容 commit 的 deepseek-harness 源码 checkout;普通用户按 Release 归档安装即可,无需 git clone 本仓库。
结尾¶
dsh-focus-mode 把持久 shell、exec_command / write_stdin 与 run_code PTC 打包成外部 preset,安装命令明确、与宿主版本钉死,适合在 DSH 里做偏工程化的 Agent 工作流。更多信息见社区目录 skillhub.cn/plugins/Stautaffly/dsh-focus-mode 与 GitHub 仓库 github.com/Stautaffly/dsh-focus-mode。