Atuin Threads 与 dsh 接入实战
本文最后更新于:2026年11月11日 上午
背景
Agent harness 越装越多,会话记忆却是各管一段。
claude-code 一套,codex 一套,opencode 又一套。换个 harness 就得重新交代一遍上下文,前面敲过的命令、跑出来的真实输出,全留在上一个窗口里。
Atuin 18.24 给出的答案是 Threads:把各家 harness 的会话建模成 append-only log,复用 Atuin 那套已经跑了几年的端到端加密同步引擎。可以自托管,可以纯本地,捕获是 opt-in。
📝Notes: 当前支持的 harness 名单是 claude-code、codex、copilot、opencode、pi、omp 六个。dsh 不在里面,这个后面单独说。
配套的 atuin mcp 走 stdio,把 shell 历史和 thread 都暴露成工具。接入 dsh 这件事本身,说实话只有一条配置的成本。
本文总结了 DSH 通过 MCP 集成 Atuin 18.24 Threads 功能(修改 Atuin 源码以支持 DSH 不在本文讨论范围)。
本文环境:Ubuntu 26.04 / zsh / Atuin 18.24.4 / dsh web profile(cordis 配置 + HMR)。
先看 atuin mcp 暴露了什么
6 个工具,命名规则 mcp__atuin__<tool>:
| 工具 | 用途 |
|---|---|
atuin_history |
shell 历史查询 |
atuin_output |
读取某条命令的真实输出 |
atuin_output_search |
在命令输出里搜索 |
atuin_threads_list |
列出 thread |
atuin_threads_search |
搜索 thread |
atuin_threads_read |
读取 thread 内容 |
atuin_output 是这批工具里最有价值的一个。历史里只存命令本身,命令到底跑出了什么,得靠 output capture 落盘。
接入 dsh:一条条目
在 profile patch 的 insert 列表里加一条就行:
1 | |
三个关键选择:
- 绝对路径。dsh 拉起 MCP 子进程时用的是清洗过的 env,PATH 里没有
~/.atuin/bin。写atuin三个字母,等来的是 ENOENT。 failOnStartupError: false。MCP 起不来不该把整个 profile 拖下水。- 固定
serverName。工具名前缀由它决定,改了等于所有 prompt 里的mcp__atuin__*全部失效。
总结
DSH profile 加一条 @deepseek-ai/dsh-mcp-client 条目,绝对路径 + 固定 serverName
👍️ 优点:接入成本低,6 个工具覆盖历史、输出、thread 三类查询,加密同步引擎直接复用。
👎 缺点:harness 名单有限,output capture 的生效条件和边界偏多。
以上。
🎉🎉🎉