$DSH_HOME

别名:.dsh、用户数据根、DSH_HOME、harness home

DSH 把所有本机用户数据收在单一根目录下:优先级是「显式配置 > $DSH_HOME 环境变量 > ~/.dsh」,空白的环境变量视为未设置,绝不因此落到当前工作目录。

一句话

DSH 只有一个用户数据根。 会话、profile、技能、预设、凭据、缓存、存储全在它下面,而不是散落在各处。

优先级(高到低)

  1. 显式配置的路径(调用方传进来的 harness home);
  2. $DSH_HOME 环境变量;
  3. ~/.dsh。

两个细节值得记牢:只有空白的 $DSH_HOME 视为未设置(否则一个空覆盖会把数据根解析成当前工作目录,灾难现场);展开时支持 ~、~/ 与 ~\ 前缀。

做界面显示时有个讲究:解析结果如果等于默认根,显示成 ~/.dsh;否则一律显示成 $DSH_HOME——不把用户的绝对路径印到界面上。

里面装什么(实测本机)

目录 / 文件是什么出处
profiles/<name>/每个 profile 一套插件层栈(见 concept/2)profile 装载实现
skills/用户级技能根(SKILL.md 目录)@deepseek-ai/dsh-skill-filesystem 的 roots
.agent-presets/<id>/本地编写的 agent preset,id 即目录名@deepseek-ai/dsh-agent-presets 的 USER_PRESET_DIR
sessions/会话日志会话持久化实现
storages/领域存储(实测可见 workspace.json)@deepseek-ai/dsh-storage-json
cordis.patch.yml机器级用户补丁层,高于每个 profile 自己的层@deepseek-ai/dsh 的 homePatchPath
settings.yaml设置文档(实现写法的默认路径,可用配置改)@deepseek-ai/dsh-settings-file 的 resolveSpec

与另外两个环境变量别混

  • DSH_AGENTS_HOME:技能发现的另一个用户级根(默认 ~/.agents),和 $DSH_HOME 是两件事;
  • DSH_TELEMETRY_DISABLED:任何非空值(包括 0 与 false)都表示关闭——隐私开关宁可误关不可误开。

未核实 / 未声明

  • settings.yaml 在本机不存在:实测本机数据根下只有 .credentials.yaml、dsh-packforge.json 等文件,没有 settings.yaml。代码里的默认路径是权威事实,但「没有这个文件时设置存在哪」本轮未核实。
  • 各目录的完整清单未核实:上表只列了实测能看到或代码明确声明的部分。
  • sessions/ 的具体布局(目录转义规则、压缩格式)属于会话存储的实现细节,见 tutorial/3 里的相关段落,本轮不做断言。

出处

  • 解析规则与显示规则:@deepseek-ai/dsh-home-paths 的 lib/index.js(实测所在包版本 0.1.0-rc.6)。
  • 技能根:@deepseek-ai/dsh-skill-filesystem 的 roots()。
  • 预设根:@deepseek-ai/dsh-agent-presets 的 discovery.js(USER_PRESET_DIR)。
  • 设置文件:@deepseek-ai/dsh-settings-file 的 resolveSpec。

谁引用了这一条

信息表

category
concept.workspace
layer
workspace
spec
~/.dsh/profiles/node_modules/@deepseek-ai/dsh-home-paths/lib/index.js(resolveDshHome / dshHomePath / dshHomeDisplay)
updatedAt
2026-10-02

标签:机制、目录、数据