CLI 与 Profile
掌握 dsh 启动器:入口模式、profile 配置层叠加、headless 一次性任务、dsh plugin 与 dump-config
dsh 是 DeepSeek Harness 的启动命令,用于启动 profile。一个 profile 是若干插件组合包 patch 层按顺序叠加的结果,其上再应用用户自己的覆盖配置。本页覆盖启动器的全部入口模式与配置层语义;模型配置与首次启动见安装与启动。
入口模式
| 命令 | 用途 |
|---|---|
dsh --profile <name> | 启动 $DSH_HOME/profiles/<name> 下的 profile |
dsh --profile headless "job" | 运行一个全新的持久化会话,打印最终回答后退出 |
dsh web | --profile web 的别名 |
dsh plugin --profile <name> <pnpm 参数> | 在 profile 目录中转发给 pnpm 管理插件 |
运行命令时所在的目录是默认的 workspace 根目录。web 与 headless 两个 profile 首次使用时会从内置模板自动初始化;其他任何 profile 都必须通过 dsh plugin 创建。
启动器参数与应用参数
启动器只解析自己的 flag,其余内容全部原样交给被启动的 profile。启动器的 flag 必须写在最前面,它无法识别的第一个 token 标志着应用参数的开始:
dsh --profile web --port 8080 # --port 属于 web 应用
dsh --profile headless "run the tests"
dsh --profile web --help # 打印的是 web 应用的帮助
dsh --help # 打印的是启动器自身的帮助内置应用各自的参数如下:
| Profile | 参数 |
|---|---|
web | --host、--port、可重复的 --trusted-host |
headless | 任务文本,作为位置参数 |
web profile 默认在 http://127.0.0.1:3080 提供服务。CLI 目前尚不支持 --host 0.0.0.0,传入会以用法错误退出;--trusted-host 用于添加被 /api 浏览器信任边界接受的具名来源。
dsh web 的别名
dsh web 是 --profile web 的硬编码别名;它后面的参数都属于 web 应用。
Profile 配置层
一个 profile 目录包含:
package.json:记录树外插件依赖,以及 profile manifest(元数据清单)dsh.profile与其按顺序排列的bundles列表;cordis.patch.yml:用户自己的 patch 层。
配置树以空根为起点,按以下顺序叠加,后面的层覆盖前面的层:
dsh.profile.bundles中各组合包的 patch;- profile 自身的
cordis.patch.yml; - home 级的
$DSH_HOME/cordis.patch.yml(跨 profile 共享的机器本地偏好,因此优先级高于单 profile 层); --patch <path>指定的覆盖层,按 argv 顺序。
dsh.profile.bundles 中列出的组合包先从 dsh 安装目录解析(@deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app、@deepseek-ai/dsh-headless),再从 profile 自身的 node_modules 解析;pnpm 会把树外插件安装到该目录。
启动与配置层一览
Headless 一次性任务
dsh --profile headless "任务文本" 创建一个全新的持久化会话,提交任务,等待其完全停稳后,把最后一段非空的 assistant 回复打印到 stdout 并退出。退出码为 0 表示任务 completed,否则为 1。不带任务文本的调用是该应用的用法错误。
headless profile 不挂载 ApiProxy、Host、HTTP 服务器、Web 运行时或浏览器客户端;一次成功运行不会往 stderr 写任何内容,也不会打开监听端口。运行前需要先配置模型凭据(环境变量 DEEPSEEK_API_KEY,可选 DEEPSEEK_BASE_URL)。
检查组合后的配置树
不启动 profile,也能查看组合后的配置:
dsh --profile web --dump-default-config
dsh --profile web --patch ./extra.yml --dump-config--dump-default-config只打印组合包层;--dump-config额外加上 profile 的cordis.patch.yml、home 级的$DSH_HOME/cordis.patch.yml与--patch覆盖层。
两者都会打印注释,标明每一行来自哪个文件、被哪些覆盖层改动过;!!js 表达式保持未求值状态。dump 不运行应用参数提供方,因此会拒绝携带应用参数的调用。
进程关闭与工作区
进程关闭时,插件树最多有 5 秒时间完成 dispose(资源释放)。第一个 SIGINT/SIGTERM 触发优雅退出;SIGTERM 在各类界面都退出 0,SIGINT 返回 130,第二个信号强制立即退出。
所有模式都以调用目录作为默认 workspace 根目录,并加载可用的 AGENTS.md 或 CLAUDE.md 指令。新会话默认使用 workspace-write 权限预设:Bash 与文件系统变更被限制在会话 workspace 与平台临时目录内。
下一步
- 管理插件安装:第三方插件。
- 按会话定制 agent:Agent Preset。
- 程序化调用:Python SDK。