ARTICLE · 1138294
dsh插件推荐 - dsh-TUI:把 DeepSeek Harness 搬进终端,像素鲸鱼加实时状态行,一条命令装上
PORT SLOT · 接口槽
dsh-TUI
把 DeepSeek Harness 的交互面搬进终端的插件——纯挂载、不改宿主一行源码,底栏那一行实时读数补上了终端里最缺的判断依据。
约 3502 字
约 9 分钟
分享一个dsh插件;
dsh 有网页版还有桌面版,而把 Agent 放进终端里跑,是很多人的习惯。
这个插件就是解决这个问题,一个非常好看的命令行界面,喜欢在命令行使用的小伙伴可以试试;
它叫 dsh-TUI。
一句话说清它是干什么的:把 DeepSeek Harness 的整个交互面搬进终端。而且是纯插件挂载,不改宿主一行源码。
MIT 协议,TypeScript 写的,界面用 React 19 配 Ink 和 Yoga 渲染,打成一个 npm 包,Windows、macOS、Linux 都能跑。
一、先说清楚它是个什么东西
先说最直接的:你在浏览器里用的那一整套,它全给你搬到了终端里。
装法很朴素,就两行:
插入 · 两行
sh
npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui
dsh-tui
dst 是同一个程序的短别名。它挂在一个独立的 profile 上,所以 dsh-tui 和 dsh --profile dsh-tui 是一回事,你想回原来的界面,原来的那条命令也还在。
这里有个细节值得单独说。
它是插件,不是分支,也不是魔改版。它不 patch DeepSeek Harness 的源码,走的是宿主留出来的挂载点。所以哪天你不想用了,卸掉就是卸掉——不留补丁、不改配置、不影响你原本那套。
而且它和 Web GUI、ACP、headless 共用的是同一份会话数据。
这点很重要。你在终端里聊了一半的会话,回头打开浏览器还能接着看;反过来也一样。它不是另起一套系统,它只是同一套系统的另一个门面。

先搞清楚一个关系:它给的是界面,不是引擎。
模型怎么调、工具怎么跑、会话怎么存、上下文怎么压缩,这些全都还是 DSH 自己的事。
二、它补的是官方留出来的那个空位
这里得交代一下背景。
DeepSeek Harness 官方的界面是 Web UI。命令行那条 dsh,管的是启动和配置,不是一个交互式的终端界面。
所以从它开源那天起,终端这一块就是空的。
空到什么程度呢——官方文档里写过 github:deepseek-harness/turtle-ui 这样一个仓库名,但那个仓库在 GitHub 上是 404。文档跑在了实现前面。
想用终端,就只能等社区。而社区确实有人动手了,做了好几版出来。
dsh-TUI 是其中被官方点名的那一个。
DSH 的官方负责人 Tianyi Cui(@tianyi) 公开推荐过它,原话是它「从 DeepSeek Harness 内测期间就持续开发,做得非常用心,补齐了 DSH 缺失的 TUI 界面」。
这里有两个信息量。
一个是时间:内测期就动手了,也就是官方还没开源、很多东西还在晃的时候。这种时候做插件,基本等于一边写一边追着上游跑。
另一个是口径:项目自己的说明里写得很清楚——「在 DeepSeek Harness 官方负责人推荐的社区插件里,dsh-TUI 是第一个」。
这话是有分量的。
因为它不是自封的。除了负责人推荐,它也被 DeepSeek Harness 官方渠道收录过,还上过 GitHub Trending 的 TypeScript 榜。
顺带说一句更大的背景:官方公开过一组数据,大约六成的 DSH 用户至少用一个第三方插件。
这个数字放在别的生态里不太常见。
它说明 DSH 那套「一切皆插件」的设计是真的成立了——官方把边界划得很清楚,自己不做的地方,留给了社区。dsh-TUI 就是长在这个缝里的一棵。
三、真正让我服气的,是底下那一行
回到那个问题:你在终端里看不见它。
dsh-TUI 给的答案,是屏幕最底下那一行。
工作状态配着一个活动动画,你能一眼看出它是在跑还是停着。旁边是上下文进度条,用了多少、还剩多少,一直摆在那儿。再过去是 TPS,也就是每秒吐多少 token;缓存命中率;effort 档位;token 数;还有一栏会话成本估算,子代理的开销也一起算进去。尾巴上是 Git 和会话的元信息。
这一行就是你在一整屏黑底白字里唯一能确定「它正常吗」的地方。
你想想看,长会话里最怕的是什么?不是它答错,是你不知道它还剩多少余量。
我特别喜欢上下文进度条那条。
不是因为它好看,是因为它把一件很虚的事变得可判断了——以前你只能凭感觉猜「是不是快撑不住了」,现在你看得见它爬到哪儿了,什么时候该 /compact,是你自己决定,而不是等它撞墙。
还有那个双击 Esc。
长会话里跑偏是常事:它理解错了你的意思,一路往下做了五轮,你才发现不对。
在别的终端工具里,这时候一般只有两个选择——忍着,或者重开一个会话把前面重讲一遍。
dsh-TUI 的做法是:双击 Esc,从历史里挑一条消息,从那个点重新开一条路。
前面的上下文不用重讲,原来的那条线也还在。
这个动作我第一眼看到的时候愣了一下——原来「后悔」这件事在终端里是可以被设计出来的。
说真的,我们好像已经默认接受了另一套:跑废了就重开,重开就把前面重讲一遍。
默认久了,就不觉得这是个问题了。
聊到这儿你可能会想,这些东西一直刷新,长会话不会卡吗?
会,如果实现得笨的话。
它这块的做法我看了挺久:屏幕外的消息行只留一个「测量过的高度」占位,那些子树根本不参与布局计算。所以你聊到两百轮,每一帧要算的东西还是屏幕上看得见的那点。
代价是代码复杂度上去了,换来的是长会话不掉帧。
这类东西用户不会夸,但一旦没有,你马上就感觉得到。
除了这些,日常要用的它基本都齐了:流式 Markdown、结构化的工具卡、/ 和 @ 补全、#L12-14 这种行号范围引用、历史搜索、中英双语界面。
图片能在支持的终端里直接缩略显示,Mermaid 代码块会画成字符图,LaTeX 公式输出成 Unicode——不是渲染成图,是拿字符拼出来的那种。
还有个 Ctrl+B 侧面板,终端够宽的时候能分出一栏放 todo 和后台任务。
第一次运行它会拉你走一个四步向导:填 API key、选语言和主题、挑模型和工作目录、定快捷键。这东西看着不起眼,但它决定了你装完那五分钟是顺手还是抓瞎——尤其是快捷键那一步,选错了后面每天都要别扭。
后面要改,/setup 可以再跑一遍。
会话这块也有个统一的管理器:/resume 翻历史会话,/home 回主界面,/agentview 看子代理在干什么,/bg 把活丢到后台,还有一个常驻的会话列表。
日常动作最常用的那几个都在:/new 开新会话、/compact 压上下文、/export 导出、/btw 插一句不打断主线的题外话。模型能热切换,不用重启。
你要是同时开着 VS Code,还有个挺方便的小通道——编辑器里选中的那段代码能直接落到终端的输入框里,不用来回复制粘贴。

这些东西单拎出来没有一个是新鲜功能,别家终端工具都有。
但它们是齐的,不是凑的。
四、几个反着来的决定
看完功能表,我想说几个它做得不太一样的地方。
第一个,它给终端工具做了一只宠物。
启动的时候,顶栏有一只像素鲸鱼,三种动画,点一下还能唤醒,第一个任务跑起来之后它就定格不动了。
坦率的讲,第一眼我以为这是玩心。
后来想想不是。终端工具最大的问题是「冷」——你打开它,面对的是一屏等着你敲字的黑。那只鲸鱼实际承担的是一个欢迎页的作用,它告诉你的手「可以开始了」,然后在你进入正题之后安静退场。
这个设计不解决任何效率问题,但它解决心情。
第二个,是它的边界感。
它在说明里反复强调一件事:自己只负责交互与呈现,会话日志才是唯一真源。
翻译成人话就是——你写下的东西归宿主管,它只负责让你看见。
这是个很克制的选择。因为「只负责呈现」意味着它放弃了很多插件最爱干的事:自己存一份状态、自己搞一套存储、自己定义一套会话格式。那些做法短期都有好处,长期都是坑——要么和宿主的升级打架,要么你换工具的时候数据带不走。
它没走这条路,所以它能和浏览器、headless 那几种形态共用同一套数据。
第三个,是它对 Windows 输入的处理。
这段在它的说明里占了相当长的篇幅,我看着有点意外。
原生 Windows 上,终端收到的输入记录会被拆包——一次按键被切成几段送过来。处理不好,这些碎片就会变成一串你看不懂的字符漏进输入框里。
它的做法是:把短时间窗口内被拆开的记录重新拼起来,拼不完整的那些按有界窗口处理(1 秒、64 字节),超出去就按原样放行,绝不无限期地攒着。
鼠标上报、拖放的 file:// 路径、终端主动发来的各种查询应答,它都做了针对性的认领和还原,而且强调只在确实有查询在途的时候才认领。
更少见的是,它还写明了哪些结论是「有证据支持」的,哪些只是「大概率没问题」。
这种透明度在开源项目里不多见。
第四个,它能把别人的会话历史搬过来。
一条 dsh-tui migrate,可以从 Claude Code、Codex 这些工具把历史会话导进来。只读源库、可以重复跑、结构保留。
换工具最烦的就是这段历史断档,它把这个成本削掉了一大块。
另外还有一个实验性的东西:dsh-tui --backend claude,用同一套界面去驱动 Claude Code 的命令行。
这块还是实验阶段,我没打算多说。
还有一个我没想到的地方。
它周围已经长出一圈生态了。
现在有一个围绕它的组织,把插件模板、配套的插件市场都放在里面,等于把「在 dsh-TUI 上做插件」这件事也铺好了路。
顺着这个再聊一句——判断一个东西是不是真的立住了,我一般不看它有多少人夸,看有没有人建立在它之上。
有人拿它当上游去做更深一层的整合,也有插件是挂在它上面跑的。
这个信号比任何推荐都实在。
五、我的评价是
先说门槛,都是装之前就该知道的。
Node.js 要 ^22.19 或者 >=24;pnpm 要 10 以上——pnpm 9 会让它启动之后立刻退出,而且几乎不报错,这个坑挺隐蔽;它必须跑在真实终端里,由 Web 那种非终端宿主拉起来的话会自动跳过。
还有一个容易忽略的:它不支持 Git URL 安装,得走 npm 包。源码依赖 workspace 包和子模块,用 git 装会被 pnpm 拦下来。
再一条,如果你还在 DSH 0.1.x 上,先别升到 0.12.0 以上,会被宿主的门禁直接拒掉;旧宿主继续用 0.9.3 那条线就行。
这就是插件形态的代价:宿主一变,它必须跟着变。
DSH 官方自己标的是 developer preview,说明里用全大写写着会有破坏性变更。所以任何「能不能长期依赖」的担心,指向的其实是整个生态,不是这一个插件。
还有一条,它更新之后新功能可能没生效——如果你机器上同时装过全局包,宿主读的可能是旧的那份补丁,得把两边同步到同一个版本。
快捷键这块也得提一句:部分组合键会被终端自己吞掉,macOS 自带的 Terminal.app 就是典型,切到 iTerm2、kitty、WezTerm 这类终端会好很多。
然后有一条我必须单独说。
它不实现独立沙箱。
这不是它的偷懒,是它的定位——它沿用当前 DSH profile 的文件、Shell、沙箱和审批策略。宿主怎么管,它就怎么管。
但作者的 Windows profile 默认是 danger-full-access 加审批 never。也就是没有沙箱,也没有确认。官方说明里写得很直白,要求你在接触敏感凭证或者来路不明的仓库之前,先把权限收紧。
有一说一,这是作者 profile 的默认值,不是插件的功能缺陷。把它说成「这个插件不安全」,是搞错了对象。
但它确实意味着你装完不该直接拿它去翻重要目录。
我跟你说,这一步很多人会跳过。
装完先跑两个命令看一眼:/preset status 和 /permission,确认实际生效的 preset、沙箱和审批到底是什么。这一步花不了一分钟。
还有一个跟安全有关的小缺口:issue #582 里提到,当权限基态就是最高档的时候,底栏反而不显示任何权限指示。也就是说最危险的那一档,恰恰是最没有视觉提醒的那一档。这个问题目前还开着。
项目地址再放一次:github.com/ccch1mneyyy/dsh-TUI
官网在 dshtui.com,上面有新手整合包,会帮你把 Node、pnpm、dsh CLI 和它一起装好。
如果你平时就在终端里跑 Agent,或者你正好也烦那个转圈的光标,值得装上试一次。
不喜欢,卸掉就行,不留东西。
SEATED · 已就位
AI实用talk · Patrick
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
AI实用talk
/ 作者:Patrick/ 这里分享好用的AI工具和skill/ 创作不易,三连支持一下吧~