DeepSeek Harness 术语表:Plugin、Bundle、Profile、Service、Turn、Goal 等
DeepSeek Harness 术语实用速查表:plugin、bundle、profile、service、capability seam、turn、step、round、human command、Ralph loop 等。
DeepSeek-Harness(dsh)沿用了一些常见的 agent 框架词汇,也自造了几个术语。这份术语表用大白话解释两者,并指出每个概念在实践中用在哪里。
核心构件
Plugin(插件)——一个导出 apply(ctx, config) 的 TypeScript/JavaScript 模块,可选导出 name、inject(声明依赖的服务)、以及一个 Config schema。没有独立的 manifest 文件格式——插件就是代码本身。"一切皆插件"到底延伸到哪个程度,见 DeepSeek Harness 架构。
Bundle(插件包)——一个在 package.json 里声明了 dsh.bundle 字段、指向一个 cordis.patch.yml 的 npm 包。Bundle 是分发单位;patch 才是真正的负载。见Profile 与 Bundle 详解。
Profile(配置档案)——$DSH_HOME/profiles/<name>/ 下的一份可运行配置:一份有序的 bundle 列表(dsh.profile.bundles)加上一份个人覆盖层(cordis.patch.yml)。web 和 headless 是保留的、会自动引导的名字。
Service(服务)——一个插件暴露给其他插件用的能力,挂载在 ctx.<serviceName> 上(例如 ctx.tools、ctx.llm、ctx.subagents)。消费方用 inject: ['tools'] 声明硬性依赖,或用 ctx.get('metrics') 做可选查询。
Capability seam(能力接缝)——围绕一个"可替换能力"的完整单元:一个 Service 定义(Cordis 的 Service 抽象类,如 ShellExecutor)+ 一个或多个 Service Provider(具体实现)+ 一个或多个 Consumer(注入该服务的消费者)。例如 shell 这条接缝是 dsh-shell(定义)+ dsh-bash-local / dsh-bash-sandbox(provider)+ dsh-tool-bash(consumer)。这是比"插件"更细粒度的建模单位——也是Cordis 详解背后的核心概念。
cordis.patch.yml——一个 YAML 数组,每一项要么向插件树里 insert 新行,要么按 id 覆盖一行已有行的 config。覆盖是整体替换目标行的配置,而不是深度合并——bundle、profile、机器、--patch 四层的合并顺序见配置指南。
Session 与执行相关词汇
Turn(轮次)——一个 session 消化一次已提交输入的完整周期:模型和它的工具来回轮转,直到模型停止或被某个中断策略打断。
Step(步骤)——一次模型请求,加上它触发的任何工具执行。一个 turn 包含零到多个 step。
Round(回合)——比 turn/step 更外层的策略迭代——一个 goal round,或 Ralph loop 里的一次尝试。
Human command(人类命令)——一条斜杠开头(/xxx)、由 ctx.commands 解释执行的指令。它永远不会变成面向模型的消息——这与"面向模型的 tool"和"原始 shell 命令"都是不同的概念。
Goal(目标)——挂在一个已有 session 上的持久完成目标,有四种状态(active / paused / blocked / complete)和一个轮次数上限。blocked 状态会附带一个策略码和说明。由 dsh-goal 插件实现(ctx.goal),/goal 是它的人类命令入口。
Ralph loop——一种工作流模式:每一个 round 都是一个全新的子 session,不继承父 session 或前一个 round 的对话历史。跨 round 的状态只靠共享工作区,加上一份有边界的结构化"Ralph handoff"报告(status/summary/evidence/next steps/blocker)传递。这是一种模型侧的工具策略,不是同一个 session 里的 goal,也不是通用工作流引擎的功能。
Code Mode——通过 DSH_TOOLS_MODE 可选的两种工具调用策略之一:模型编写代码来以编程方式调用工具,而不是发出原生的结构化工具调用。DSH_TOOLS_MODE=native | code | both 在两者之间选择;其他任何值都会导致启动失败。参见 DeepSeek Harness CLI 速查表。
访问控制相关词汇
Sandbox mode(沙箱模式)——三档之一:read-only(禁止写)、workspace-write(写操作限制在工作区根目录和平台临时目录内——新 session 的默认值)、danger-full-access(完全不隔离)。
Permission preset(权限预设)——沙箱模式 + 审批策略的一个命名组合,以下拉选项的形式呈现给客户端。默认表只有两档:workspace-write(该沙箱模式 + ask 审批)和 danger-full-access(该沙箱模式 + never 审批,即完全不询问)。可以添加自定义预设;custom 这个名字本身是保留的。
Agent-scope(代理作用域)——每个 agent 能看到什么的隔离机制:一个注册(一个工具、一段 prompt 片段、一个变量、一条限制)要么是 global(所有 agent 可见),要么是某个 agent 独有的 scoped。子代理不继承父代理的作用域——"血缘"数据(如 parentSession、delegationDepth)是单独维护的,不通过作用域结构来表达。
沙箱后端和强制力等级的完整细节见 DeepSeek Harness 权限与沙箱。
MCP 与命名
MCP 工具命名——通过 @deepseek-ai/dsh-mcp-client 暴露的工具,在模型看来的名字是 mcp__<serverName>__<rawName>,规范化到 DeepSeek 的 function-name 规则(64 字符、[A-Za-z0-9_-]);冲突时用基于 (serverName, rawName) 的 12 位十六进制哈希做后缀。这与 Claude Code 和 Codex 使用的是同一套"server-qualified"命名形状。
Subagent providers(子代理提供者)——dsh 的委派层(ctx.subagents)是一个命名的 provider 注册表,不是单一实现。已知 provider 包括进程内 spawn/fork、ACP(通过 Agent Client Protocol 驱动的子进程),以及——值得一提的——委派给 Codex 或 Claude Code 本身。各 provider 会声明自己支持哪些可选能力:outputSchema、depthLimit、toolFilter、persona。
框架相关词汇
Fiber(状态机)——每个插件实例都会经历的生命周期:PENDING → LOADING → ACTIVE,LOADING 阶段有一条 FAILED 分支,卸载时是 ACTIVE → UNLOADING → DISPOSED。一个声明了 inject 依赖的插件,会在 PENDING/LOADING 阶段一直等待,直到这些服务存在为止;如果某个依赖消失了,它会自动卸载。
ctx.effect()——在插件的 apply 函数里注册一个需要显式清理的资源(定时器、网络连接)的推荐写法。你返回的清理回调会在插件卸载时自动执行——不需要为它单独手写一条 dispose 路径。
Isolate(隔离)——cordis.yml 里的一种机制,让一组插件拥有某个共享服务的独立实例,而不是所有插件共用进程级的默认实例——比如两组插件需要不同超时设置的 Bash 执行器时会用到。
速查表
| 术语 | 一句话 |
|---|---|
| Plugin | 导出 apply() 的代码模块;无独立 manifest |
| Bundle | 声明 dsh.bundle、分发一份 patch 的 npm 包 |
| Profile | 可运行的配置目录:有序 bundle + 覆盖 patch |
| Service | 挂载在 ctx.<name> 上、可被其他插件注入的能力 |
| Capability seam | Service 定义 + provider + consumer,作为一个建模单位 |
| Turn / Step / Round | Session 消化周期 / 一次模型+工具交互 / 更外层的策略迭代 |
| Human command | 永远不会变成模型消息的 /xxx 指令 |
| Goal | 挂在 session 上的持久化、有状态目标 |
| Ralph loop | 每 round 全新 session、靠结构化 handoff 报告传递状态的工作流 |
| Code Mode | 模型写代码调用工具,而非原生工具调用 |
| Sandbox mode | read-only / workspace-write / danger-full-access |
| Permission preset | 命名的"沙箱模式 + 审批策略"组合 |
| Agent-scope | 一次注册的 global 或 scoped 可见性 |
FAQ
"Turn" 和 "session" 是一回事吗?
不是。Session 是整个持久化的对话/任务容器;turn 是在这个 session 内消化一次已提交输入的一个周期。一个 session 可以包含很多个 turn。
"Capability seam" 和 "plugin" 是同一个意思吗?
不完全是——插件是一个分发/加载单位,而 capability seam 是更细粒度的模型:一个服务定义、它的 provider 实现、以及它的消费者,这几者可能横跨不止一个插件。
Ralph loop 和 "goal" 是一回事吗?
不是——goal 是在单个持续存在的 session 内跟踪的状态;Ralph loop 则刻意让每个 round 都以一个全新、不继承历史的 session 开始,只通过工作区和一份 handoff 报告来协调。
"Agent-scope" 是从哪来的——它和沙箱是一回事吗?
是不同的层。沙箱模式控制操作系统级的执行环境允许什么(文件写入、网络)。Agent-scope 控制某个具体的 agent 实例能不能看到某些注册(工具、prompt 片段),与沙箱无关。
下一步
想了解这份词汇表所描述的微内核全貌,读 DeepSeek Harness 架构:「一切皆插件」到底意味着什么;想了解 dsh 底层的框架,读Cordis 详解。想直接看几个用到这些术语的插件例子,可以逛完整目录或开发与运行时分类。