dshkit

DeepSeek Harness 全部工具清单,以及它们各自属于哪个包

dsh 面向模型的完整工具目录——bash、run_code、str_replace_editor、glob、grep、lsp、subagent、workflow、ralph、goal、会话查询与 cordis 运行时工具,逐个对应到它们所在的包。

更新于 2026-08-133 min
一句话结论

每个工具都是一个插件包。核心集合是 run_code(@deepseek-ai/dsh-tools)、bash 及其常驻版本、str_replace_editor、fs 的 read/write/edit 系列、glob 与 grep、lsp、subagent 与 workflow 编排、goal 与 todo、会话查询、网页搜索与抓取、调度,以及 cordis_* 运行时工具。你的 agent 实际看得到哪些,由 mode 和 profile 叠的 bundle 决定。

多数介绍文章谈 DeepSeek Harness 时只会说「它有工具」。而仓库里其实带着一份完整目录,读它比读任何综述 都更能说明这个 harness 的设计——每个工具都是独立的包,这才是「一切皆插件」的具体含义。

下面是全集,按职能分组。

执行

工具作用
run_code@deepseek-ai/dsh-tools执行一段 TypeScript 程序。接收 code(一个 async 函数的函数体,只允许可擦除语法,顶层 awaitreturn 可用)和 description
bash@deepseek-ai/dsh-tool-bash执行 bash 命令。每次调用都在全新 shell 里:cwd、变量、函数都不跨调用保留。支持 run_in_background: true
bash(常驻)@deepseek-ai/dsh-tool-bash-persistent接口相同,但状态跨调用保留,含当前目录和导出的环境变量。
pwsh@deepseek-ai/dsh-tool-pwshWindows 上的 PowerShell 对应物,同样每次调用一个全新进程。

run_code 就是 Code 模式(官方中文显示名「PTC 模式」)背后的机制。模型写一段程序,而不是「发一个工具调用、 读结果、再发下一个」、每步都付一次模型往返的代价。

文件系统

工具作用
readwriteeditread_image@deepseek-ai/dsh-tool-fs带行号的文本文件操作。read_image 为支持图像的模型读取 PNG/JPEG/WebP/GIF。
str_replace_editor@deepseek-ai/dsh-tool-str-replace-editor用精确字面串替换来查看、创建、编辑文件。命令:viewcreatestr_replaceinsert
globgrep@deepseek-ai/dsh-tool-fs-search按 glob 模式查找文件,按 ripgrep 正则搜索。最多返回 100 条匹配,超出的写入磁盘。

极简模式恰好就是 dsh-tool-bash-persistent + dsh-tool-str-replace-editor——所以官方描述用的是 「两个工具」,而不是「精简的工具集」。

终端

terminal_openterminal_sendterminal_readterminal_closeterminal_listterminal_signal,全部来自 @deepseek-ai/dsh-tool-terminal

这是常驻 PTY 会话,不是一次性命令,并且支持长任务的后台 job 模式。任何交互式场景都该用它:REPL、 开发服务器、ssh 会话、需要发信号的进程。

代码导航

lsp@deepseek-ai/dsh-tool-lsp)发起语言服务器查询:goToDefinitionfindReferencesgoToImplementationhover。它需要一个已注册的 LSP provider——没有 provider,工具在但无处可问。

这和基于 grep 的导航是实质性的能力差异。经语言服务器的 findReferences 懂类型和作用域,grep 只懂字符串。

子 agent 与编排

工具作用
subagentsubagent_fork@deepseek-ai/dsh-tool-subagent把工作委派给独立 agent。fork 后端会额外注册为 subagent_fork
send_messageinterrupt_agentlist_agents@deepseek-ai/dsh-tool-subagent-control控制后台子 agent——追加消息、打断当前轮、列出在跑的。
report@deepseek-ai/dsh-tool-subagent-report子 agent 向父级汇报结论。仅在可继续的进程内子会话中可见。
job_listjob_outputjob_kill@deepseek-ai/dsh-tool-jobs管理所有类型的后台工作——bash、终端、子 agent。
workflow@deepseek-ai/dsh-tool-workflowagent()pipeline()parallel() 三个原语编排多 agent 工作流。
ralph@deepseek-ai/dsh-tool-ralph面向一个不可变目标跑前台 fresh-agent Ralph 循环,每轮开一个新的子会话。

这一组是 harness 里真正有野心的部分,也是外部覆盖最少的部分, 单开了一篇

计划与目标

工具作用
exit_plan_mode@deepseek-ai/dsh-plan-mode把完整计划以 markdown 提交给人审批后再执行。
create_goalget_goalupdate_goal@deepseek-ai/dsh-tool-goal带续跑轮次的持久化完成目标,支持暂停、恢复、完成、阻塞状态。
todo_write@deepseek-ai/dsh-tool-todo会话内任务列表,状态为 pending/in_progress/completed,每次调用整体替换。

注意持久性上的差别。todo 是会话内的草稿状态;goal 是挂在会话上的持久目标,带阶段和轮次上限。 这不是同一个概念的两个名字。

会话历史

session_searchsession_tracesession_event_readsession_event_searchsession_event_trace,全部来自 @deepseek-ai/dsh-tool-session-query

这些是对工作区内已授权会话的只读查询。正是它们让那份只追加的 session log 不只对你有用、也对 agent 有用:agent 可以去搜索过去某次会话实际做了什么,而不是听人转述。

交互、网页、skill、调度

工具作用
ask_user_question@deepseek-ai/dsh-tool-ask-user暂停等待用户输入。每个问题带一个稳定 id,会在回答里回显。
web_searchweb_fetch@deepseek-ai/dsh-tool-web搜索与抓取。provider 藏在 ctx.web 服务后面,后端可替换。
skill@deepseek-ai/dsh-tool-skill在处理匹配任务前,先加载某个 skill 的完整指令。
schedule_createschedule_listschedule_delete@deepseek-ai/dsh-schedule会话内提醒,可按延迟、固定频率或绝对时间触发。

运行时扩展

cordis_definecordis_runcordis_inspect_listcordis_inspect_querycordis_inspect_selfcordis_stopcordis_undefine,来自 @deepseek-ai/dsh-tool-cordis

它们让 agent 能在运行时定义和管理 Cordis 插件。这就是 Creator 模式背后的机制: cordis_inspect_self 是 agent 检视自己当前所处组装的方式,cordis_define 是它在存盘之前先在内存里 试一个新组装的方式。

怎么看自己这套

上面是「存在什么」。你的 agent 实际有什么,由 mode 和 profile 叠的 bundle 决定:

dsh --profile web --dump-config

每个挂载了的工具包都会作为一行出现,而每一行都能被上面的层 patch——删掉、替换、或者改配置。

常见问题

为什么我的 agent 没有这里列的某个工具?

工具是插件包,而 mode 就是这些包的一种特定组合。极简模式故意只暴露常驻 bash 和 str_replace_editor。跑 dsh --profile <名字> --dump-config 看你的 profile 实际挂载了哪些工具包。

bash 和常驻 bash 有什么区别?

普通 bash 每次调用都在全新 shell 里执行,cwd、变量、函数都不跨调用保留。常驻版本会保留这些状态。

run_code 就是 Code 模式吗?

run_code 是让 Code 模式成立的那个工具——它执行一段 TypeScript 程序体,让模型把多步操作压进一次调用,而不是多轮工具往返。

接着看