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
2
3
4
5
6
7
8
insert:
- name: atuin-mcp
module: "@deepseek-ai/dsh-mcp-client"
config:
serverName: atuin
command: /home/casey/.atuin/bin/atuin
args: ["mcp"]
failOnStartupError: false

三个关键选择:

  1. 绝对路径。dsh 拉起 MCP 子进程时用的是清洗过的 env,PATH 里没有 ~/.atuin/bin。写 atuin 三个字母,等来的是 ENOENT。
  2. failOnStartupError: false。MCP 起不来不该把整个 profile 拖下水。
  3. 固定 serverName。工具名前缀由它决定,改了等于所有 prompt 里的 mcp__atuin__* 全部失效。

总结

DSH profile 加一条 @deepseek-ai/dsh-mcp-client 条目,绝对路径 + 固定 serverName

👍️ 优点:接入成本低,6 个工具覆盖历史、输出、thread 三类查询,加密同步引擎直接复用。

👎 缺点:harness 名单有限,output capture 的生效条件和边界偏多。

以上。

🎉🎉🎉

📚️参考文档


Atuin Threads 与 dsh 接入实战
https://ewhisper.cn/posts/27247/
作者
东风微鸣
发布于
2026年11月9日
许可协议