Skip to content

无头跑 DeepSeek Harness:--json 与会话续跑

Headless · --json · --session-id · CI

dsh --profile headless 不开端口。stdout 留给 --json,未知 session id 直接失败,多轮工作拆成多次运行。

终端里用 --json 事件流跑 DeepSeek Harness headless

DeepSeek Harness headless 不是 Web UI

DeepSeek Harness headless 回答的问题和 npx @deepseek-ai/dsh web 不一样。Web 会起本机界面——常见是 http://127.0.0.1:3080/——一直挂着直到你停掉。Headless 一次只跑一个任务,打出答案就退出。它不监听端口,也不在后台留服务。这是脚本和 CI 的面,不是第一次点点看评估的面。

上游文档写的是 dsh --profile headless。从已发布的包出发,同一形状是 npx @deepseek-ai/dsh --profile headless "run the tests"。钉住你核对过的版本——2026 年 9 月 28 日 npm latest 仍是 Pre-release RC——Node 和凭证仍看 安装清单。产品是什么,仍看 DeepSeek Harness 是什么。浏览器第一小时仍看 npx 快速开始。

若 headless 包 README 和本页冲突,以 README 为准。

一个任务,然后退出

sh
npx @deepseek-ai/dsh --profile headless "列出顶层文件,并引用 README 的第一个标题"

默认模式把最终答案打到 stdout。非空的推理增量打到 stderr,带 dsh: reasoning: 标题。退出码 0 表示完成了最终一轮;1 表示中止、出错,或没有可用的一轮。轮次外的失败还会在 stderr 打 dsh: 行。

省略位置参数,或传入单独的 -,可以从 stdin 喂任务:

sh
{ echo "Summarize these changes:"; git diff --stat; } | npx @deepseek-ai/dsh --profile headless

空白的位置参数本身就是用法错误,即便管子里有数据也不会静默吞掉 stdin。把 - 和其他任务词混在一起也是用法错误。dsh --profile headless --help 只打印帮助,不跑任务。

这仍是一次一发。同一次进程里没有交互续聊。多步工作拆成多次运行,或用下面的 --session-id 续。

--json 是机器通道,不是 Trajectory

--json 用换行分隔的 JSON 事件流替换 stdout 上的最终答案行。stderr 只留 dsh: 诊断。流以 session(这次用的身份)开头,以 final 结束。中间可能有 status、text、thinking、tool_call、tool_result。

把它当成给监督进程看的投影,不是无损会话日志。除终结的 final 外,字符串有上限(上游写明约 8 KiB,并带 truncated)。失败之后打开的持久日志,仍走 Trajectory——怎么读 Trajectory 日志 与 可观测性入门。

格式正确的流仍可能描述一次失败:轮次内失败可以以 final(常常是空的)结束,并且没有 error 事件。信 退出码 1 和轮次结束原因。runner 在轮次外抛出的失败会写 error,并且没有 final。

DeepSeek Harness headless 跑完后用 --session-id 续上同一会话

--session-id 拒绝默默开空历史

每次运行默认生成新的 session-… 身份。开了 --json 时,这个 id 出现在开头的 session 事件里——和你启动时的 cwd 一起记下。之后用 --session-id 续那一次对话。

未知 id 会在任务开始前直接失败。它不会发明一份空历史。续跑还会拒绝:记在不同工作目录下的会话、子代理或分叉、缺少 cwd、本进程里已有 Agent 占着这个 id、或 headless 配置组合不了的预设。这些拒绝就是目的:CI 不该静默开别人的对话。

从同一份可丢弃目录续跑。若 Node 或 npx 本身起不来,仍看 npx 与端口 3080——headless 不用 3080,但坏掉的 Node 是同一道门槛。

十分钟核对

1. 凭证和默认模型按 Web 同一套确认。Headless 不会另编一套鉴权故事。
2. 先不带 --json 跑一个无聊任务。预期 stdout 有文本、退出码 0。
3. 再带 --json 跑一次。留下开头的 session id 和启动 cwd。
4. 在同一目录用 --session-id 续一次。先 cd 到别处,应被拒绝。
5. 用 stdin 喂一段短任务。确认空白位置参数不会偷走那根管子。
6. CI 里:退出码为 0,且若用了 --json,流以 final 结束、没有轮次外的 error,才算接受。
7. 推理里可能带敏感路径时,别把 stderr 丢进共享日志。自己改路由。

本文不是什么

  • 不是第二篇 Web 快速开始——仍看 npx 快速开始。
  • 不是 0.1.7 RC 功能清单——0.1.7 RC 操作核对。
  • 不是 Computer Use 或 SSH 远端工作区教程。
  • 不是在说 headless 已经生产认证。上游仍明确预览会破兼容。

接下来去哪

1. 约定与开关:你钉住的标签上的 headless README。
2. 浏览器第一小时:安装 → npx 快速开始。
3. 跑失败之后:怎么读 Trajectory 日志。

在门户继续

读完本文后可前往安装指南、教程与精选插件目录,完成评估闭环。