terminalkeeper:给 AI 用的持久终端(DSH 工作流插件)

前言

在 DeepSeek Harness(DSH)里让模型跑命令,常见路径是「起进程 → 读输出 → 进程结束」。这对一次性命令够用,但对有状态的交互往往不够:sudo 等密码、ssh 要过二次验证、vim 要按键、长任务要中途看进度,换一场对话还想接着用同一套环境时,普通执行模型会反复断线。

terminalkeeper 是维护者 Mrtime-gege 发布的 DSH 工作流类插件:用私有 tmux 服务端托管多个长期存活的 shell,AI 通过 7 个模型工具驱动,人用 Web 右下角面板随时接手;带锁与归属、SHA-256 哈希链审计、引用库与快照。它是面向个人的真 shell 工具,不是受限沙箱。社区目录页见 SkillHub 条目,源码与文档在 GitHub。

这是什么

一句话:给 DSH 加装持久、可审计、人机可切换的 tmux 终端。

  • 名称:terminalkeeper(npm 包同名)
  • 维护者:Mrtime-gege
  • 许可证:MIT
  • 当前 README 标明版本 0.2.0(待发布;审批后发布)
  • 数据目录:~/.dsh/terminalkeeper
  • 宿主兼容:DSH 0.1.5-rc.1 到 0.2.1-rc.2;Node ≥ 20;平台为 Linux(含 WSL2/容器),README 写明 macOS 不支持

核心能力

七个模型工具

AI 侧统一通过以下工具操作 shell(同一 shell 在一次调用里只能被操作一次,多任务需拆成多次调用):

shell_open、shell_run、shell_send、shell_read、shell_manage、shell_state、shell_audit

等待与异步

等待是一等公民,wait.kind 支持:none、idle、bell、match、exit、file、noproc、cpu。可先异步启动,再读增量,并用 runId 回取退出码。

人的面板与备用 /tk

重启 dsh web 后,右下角出现终端胶囊(显示会话数与锁状态,具体样式以界面为准)。日常新建、切换、锁定、引用库、宏、工作区、审计等应优先用面板。

备用入口为宿主注册的 /tk:面板不可用、远程无浏览器、CLI/TUI 排障时使用;裸 /tk 只打开只读语法菜单,不代为执行。完整语法见仓库 使用指南 · 输入栏 /tk。

审计、引用库与其它

  • 审计链:输入、会话开关、改名、宏与引用库操作进入 SHA-256 封链;删除动作本身也先入链。默认同权限进程可改审计文件;需更强防删改时可按 README 使用 ./install-deps.sh --audit-lock(chattr +a)。
  • 引用库(vault):AI 默认只看到键名;值经宿主侧引用喂给进程,不直接进入模型上下文。AI 仅能做整条裸引用 {{v:键}}(如配合 read -s、sudo -S);嵌进命令、管道或宏会被拒。引用库防的是顺手泄露,不防 shell 内主动读文件。
  • 宏 / 工作区 / 快照:{{m:名}} 在命令中展开;工作区可恢复会话布局;支持屏面与历史快照。
  • 生存性:dsh 重启会话可不丢(systemd scope);关页面、换对话、热重载不影响 tmux 侧会话;整机或 WSL2 关机会连 tmux 一起带走,重要工作需先落盘。

安装与启用

安装不依赖 dsh plugin add github:... 式拼接;README 给出的官方步骤如下。

登记进 profile、安装依赖并检查 tmux(Web 侧可加 --profile web):

npx -y terminalkeeper install [--profile web]

安装后做体检:

npx -y terminalkeeper doctor

装完后须重启一次 dsh web(不是刷新页面)。其它 CLI:--dry-run 预览、uninstall 移除、purge-data 清理数据。想彻底清理数据目录可用 node purge-all.mjs(默认 dry-run,确认后加 --yes)。

安装前建议自行查看 源码仓库 与 MIT 许可证;README 明确:未经独立人工安全审计、由 AI 参与开发,无对话级审批,启发式危险命令护栏可被绕过,不要部署在生产、多用户或存放不可替代数据的机器上。

典型用法

快速上手(人与 AI)

  1. 重启 dsh web 后,在面板点 + 新建 shell,或由 AI 调用 shell_open。
  2. 在 DSH 完全控制模式下写工具可用;工作区/只读模式下写操作由模式闸门拒绝,只读工具仍可用。
  3. 人在面板点锁即可直接打字;AI 用 shell_run 发命令、shell_state 看会话。
  4. 详情面板含总览、概览、运行、安全、事件记录、引用库事件、日志审计、键位帮助等页签。

人用 tmux 接手

底层为私有 socket -L terminalkeeper 的 tmux 会话,人可随时 attach:

tmux -L terminalkeeper attach -t dsh-xxxx

人在面板解锁时,AI 对该 shell 的写操作一律让位,只读不受影响。

README 中的验收流程(装好后自测)

维护者在 README「给 AI 助手的操作卡」中给出验收顺序,摘要如下:

  1. shell_state 应返回 server: running (socket -L terminalkeeper)。
  2. shell_open 打开带 label: "verify" 的会话并拿到 id。
  3. shell_run 执行 echo ok-$((6*7)),屏上出现 ok-42。
  4. shell_manage 关闭该会话。
  5. shell_audit 查看链头,chain: ✓。
  6. 可选:在已有会话输入栏执行 /tk status、/tk help 做备用通道检查;日常仍应以面板和模型工具为主。

参数与 action.kind 的权威定义见 工具与参数。

适用场景与注意

适合:在 Linux 或 WSL2 上本地使用 DSH,需要 AI 驱动真实交互式终端(REPL、TUI、sudo、长任务),同时人要能旁观、锁定或 tmux 接手,并希望输入与会话变更有可检测的审计链。

不适合或需格外谨慎:生产环境、多用户主机、不可替代数据;期望插件提供沙箱或逐条对话授权(README 说明同用户下「已有 shell 再谈授权」逻辑上不成立,真正边界在 DSH 沙箱模式与 OS/部署层隔离)。

要点归纳:

  • 插件与 AI 的 shell 跑在同一 OS 用户下,工具权限即你的权限。
  • 模式闸门:仅完全控制模式允许写工具;手动锁可挡 AI 对指定 shell 的写入。
  • 跨对话不强制隔离 shell,「不要动别人的 shell」是使用约定,不是权限边界。
  • 勿在终端长期输入真凭据;审计如实记录,除密码提示脱敏外,其它明文输出不保证脱敏。

威胁模型与引用库边界见 安全与引用库;网页版文档索引:文档站。

结尾

terminalkeeper 把 DSH 里「一次性命令」扩展成多会话、可等待、可审计、人机可切换的持久终端:tmux 托底,7 个工具供 AI 驱动,面板供人操作,vault 与宏减轻密钥进上下文的风险(仍非沙箱)。若你在上述宿主版本与 Linux 环境下做智能体工作流,可从目录页与 README 的安装、doctor、验收三步开始验证。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye