DSH 四种 Agent 模式对比
标准模式 · PTC 模式 · 极简模式 · 创造模式 —— 这四种"模式"本质上是 DSH 随附的四个
Agent preset(standard / code / minimal / cordis),
每个 preset 都是一份 agent.cordis.yml 插件组合,决定该会话的 Agent 拥有哪些工具与提示词段落。
01一句话摘要
| 模式 | 定位 | 一句话 |
|---|---|---|
| 标准模式(standard) | 默认的全功能编码 Agent | 工具齐全:Shell、文件系统、检索、Skills、计划、目标、子代理、工作流,全部以原生函数调用呈现。 |
| PTC 模式(code) | 标准模式 + Code Mode 呈现 | 工具以 TypeScript SDK 呈现,模型用一个 run_code 程序组合多步操作,减少往返。 |
| 极简模式(minimal) | 固定提示词的双工具 Agent | 只有持久 bash + str_replace_editor 两个工具,无任何附加能力,提示词完全固定。 |
| 创造模式(cordis) | 标准模式 + 自我修改 | 标准模式全部能力 + Cordis 工具集,可读/改运行中的 Harness、创作新 preset。 |
ℹ️ 关键前提
code 与 cordis 是 standard 的整份副本加增量——PTC 只多一行
tool-presentation,创造模式只多 Cordis 工具集、创作技能与扩展 persona。官方文档明确这是刻意取舍
("整份组装在一个文件里可读"),代价是副本会随上游漂移。
02四种模式卡片
默认 · order 1
标准模式
standard
功能完整的编码 Agent,支持文件编辑、Shell、文件与网页检索、Skills、计划、目标、子代理和工作流。
定位:全功能默认,日用主力
Code Mode · order 2
PTC 模式
code
具备标准模式的全部能力,并通过 Code Mode SDK 呈现工具,让模型用一个 TypeScript 程序组合多步操作。
定位:程序化工具调用,减少往返
双工具 · order 3
极简模式
minimal
仅提供持久 bash 与 str_replace_editor 的双工具编码 Agent。
定位:最小干预,最高确定性
自修改 · order 4
创造模式
cordis
用于创建自定义 Agent preset:具备标准模式的全部能力,并提供运行时检查、插件实验和 preset 创作指导。
定位:用来造 Agent 的 Agent
03一览对比表
| 维度 | 标准模式 | PTC 模式 | 极简模式 | 创造模式 |
|---|---|---|---|---|
| 工具呈现方式 | Native(每个工具一个 schema) | Code Mode:只有 run_code + 生成的 TypeScript SDK |
Native,但只有 2 个工具 | Native |
| 模型可见工具数 | 约 20+(全量) | 1 个 run_codeSDK 内封装全部工具 |
2 个persistent bash、str_replace_editor | 标准全量 + Cordis 工具集 |
| Shell | ✓ | ✓ 经 SDK 调用 | ✓ 持久 bash(PTY,300s 超时) | ✓ |
| 文件系统 | 宿主沙箱 fs + 检索工具 | 同标准 | 裸本地 fs(无沙箱)+ 字符串替换编辑器 | 同标准 |
| Skills | ✓ | ✓ | ✗ | ✓ 自带 2 个创作技能 |
| 计划模式 | ✓ | ✓ | ✗ | ✓ |
| 目标(Goals) | ✓ | ✓ | ✗ | ✓ |
| 子代理 / 工作流 / Ralph | ✓ | ✓ | ✗ | ✓ |
| 后台任务(Jobs) | ✓ | ✓ | ✗ | ✓ |
| Web 检索 | ✓ fetch 关闭,搜索超时 60s | ✓ | ✗ bash 明确"无网络" | ✓ |
| 上下文压缩(compaction) | ✓ 阈值 8192 字符,头 4096 尾 1024 | ✓ | ✗ 无压缩 | ✓ |
| 运行时自我修改 | ✗ | ✗ | ✗ | ✓ Cordis 工具集 |
| Persona(系统提示词) | 模板 + 分层runtime 上下文注入 | 同标准 | 固定完整complete: true,无 runtime 快照、无附加段落 | 扩展版讲解双平面与创作规则 |
| 前提依赖 | 无 | 宿主必须组装 TypeScript codeRuntime否则挂载失败 |
无 | 无 |
04逐模式详解
标准模式 standard —— 全功能默认
组装结构(agent.cordis.yml,共 251 行):
- 身份:persona("You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.")+ agent-instructions(上限 64KB)
- Shell:
tool-bash(Windows 上禁用)/tool-pwsh(非 Windows 禁用),执行器为宿主沙箱 - 文件系统:
tool-fs+tool-fs-search(glob 结果超限时不抽样) - 后台任务:
tool-jobs(仅模型侧控制,注册表在宿主) - Skills:
skill-filesystem(本地技能发现)+tool-skill - 目标:
tool-goal(会话级目标服务,含/goal命令) - 计划模式:
dsh-plan-mode,隔离 realm,含完整 plan-mode 指令 - 压缩:
compaction-basic+/compact命令 + 工具结果剪枝器(阈值 8192 字符,保留头 4096 / 尾 1024) - 委派与工作流:subagent(spawn / fork,可续背景)、
tool-subagent-codex与tool-subagent-claude-code(默认 disabled,需宿主安装 provider 包)、workflow、ralph(maxRounds 64) - 其余:
tool-ask-user、tool-todo(允许并行 in_progress)、tool-web(fetch 关闭、搜索超时 60s)
特点:能力最全、可组合性最强的"日用"模式;所有工具以原生函数调用呈现,模型每一步决策都是一个工具调用,行为可预测、日志完整。
PTC 模式 code —— Code Mode / 程序化工具调用
与标准模式的唯一差异:末尾多一行:
- id: tool-presentation
name: '@deepseek-ai/dsh-agent-tool-presentation'
config:
mode: code
核心机制(Code Mode):
- 呈现:模型不再看到每个工具的 schema,只看到保留的
run_code传输工具 + 一个按当前可见工具集确定性生成的 TypeScript SDK(declare const tools,含精确的ToolArgsMap/ToolOutputMap类型与ToolCallError)。 - 执行:模型写一个 TypeScript 程序(async 函数体,仅可擦除语法),在程序里
await tools.name(args)调用任意工具;"原本要五轮往返的序列变成一次"。 - 强制:
tools:code-only规则——直接调用除run_code外的任何工具都会解析为UNKNOWN_TOOL(在执行创建阶段、策略与审批之前就拒绝)。 - 运行时:每个程序在一个全新的 Node worker 线程中执行(
dsh-code-runtime-worker-thread):
codeRuntime,否则该 preset 挂载即失败(明确指出是哪一行)PTC 的含义:PTC = Programmatic Tool Calling(程序化工具调用)——"写程序调工具"这一范式,DSH 中的 Code Mode 即其实现。
适用:多步、流水线式、需要组合/批处理工具调用的任务(读多个文件 → 改多处 → 跑测试),能显著减少 LLM 往返与上下文开销;代价是每轮运行无状态、调试输出以日志形式呈现。
极简模式 minimal —— 双工具固定提示词
组装结构(agent.cordis.yml,仅 62 行):
- Persona(关键差异):
- id: persona name: '@deepseek-ai/dsh-persona' config: text: You are a helpful software engineer assistant. complete: true # 这是完整系统提示词 includeRuntimeContext: false # 不注入运行时上下文快照complete: true意味着全局身份、Web 定位、工具指导等后续监听器都无法再附加提示词文本;运行时会话上下文快照也被抑制。 - 持久 Shell 组(isolate
terminalsrealm):pty+terminal-bash+persistent-bash(超时 300s;提示词风格与 Claude Code 的 bash 工具一致:状态跨调用持久、无互联网、可访问 apt/pip 镜像、长任务放后台等) - 文件系统组(isolate
fsrealm):fs-local(裸本地文件系统,遮蔽宿主的沙箱提供者,仅对本 preset 生效;cwd 取DSH_CWD或进程 cwd)+str-replace-editor(字符串替换编辑器,要求绝对路径,最大输出 16000 字符)
特点:模型可见工具只有 2 个。没有计划模式、压缩、目标、Skills、子代理、工作流、Web、后台任务、提问工具、todo 工具。上下文无压缩,长会话可能很快触顶。
适用:想要"最小干预、最高确定性"的场景(如评估基准、自动化测试、把 Agent 当纯编码器用),或需要最小上下文开销/最大前缀缓存稳定性的场景。
创造模式 cordis —— 用来造 Agent 的 Agent
与标准模式的差异(agent.cordis.yml,262 行):
- 扩展 persona:说明 Agent 运行在 DeepSeek Harness 上、组合是 Cordis、preset 就是一个
cordis.yml;讲解双平面(HOST 组合 vs AGENT PRESET);规定自定义 preset 应写在${DSH_HOME:-$HOME/.dsh}/.agent-presets/<id>/,绝不编辑/删除随附安装,改随附 preset 必须先复制再改;写组合前必须加载editing-cordis-compositions技能。 - Cordis 工具集:
tool-cordis(@deepseek-ai/dsh-tool-cordis)——读运行中的运行时、挂载临时插件、卸载它。这是信任边界而非沙箱:cordis_mount会对活运行时求值模型写的 JavaScript,且本模式写出的组合会成为其他会话挂载的 preset。 - 两个随附技能(随 preset 自带、解析自身目录):
editing-cordis-compositions:创作/修改组合的完整指南cordis-plugin-development:Cordis 插件开发(含运行时检查、工具注册、宿主/预设平面区分等)
⚠️ 信任等级:等同 shell 访问
文档原话:"把本模式的会话当作 shell 访问权限。"典型用法:让 Agent 帮你"复制一份标准模式、改成一个新 preset",或做插件实验——不是日常编码模式。
05工具能力矩阵(模型可见)
| 能力 / 工具 | 标准 | PTC | 极简 | 创造 |
|---|---|---|---|---|
| bash / pwsh(Shell) | ✓ | ✓ SDK 内 | ✓ 持久 bash,无 pwsh | ✓ |
| 文件读写(fs) | ✓ | ✓ SDK 内 | ✓ 裸本地 fs | ✓ |
| 文件检索(fs-search) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| str_replace_editor | ✗ | ✗ | ✓ | ✗ |
| 后台任务(jobs) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| Skills | ✓ | ✓ SDK 内 | ✗ | ✓ +2 创作技能 |
| 目标(goal) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| 计划模式 | ✓ | ✓ | ✗ | ✓ |
| 子代理(subagent / fork) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| 工作流(workflow) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| Ralph 循环 | ✓ | ✓ SDK 内 | ✗ | ✓ |
| Web 搜索 | ✓ | ✓ SDK 内 | ✗ bash 无网络 | ✓ |
| 提问(ask-user) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| 任务清单(todo) | ✓ | ✓ SDK 内 | ✗ | ✓ |
| 上下文压缩 | ✓ | ✓ | ✗ | ✓ |
| Cordis 自修改工具 | ✗ | ✗ | ✗ | ✓ |
ℹ️ 读表说明
PTC 列所有"✓(SDK 内)"意味着该能力存在,但只能从
run_code 程序内以 await tools.x(...)
调用,不能作为独立函数直接调用。
06关键机制差异
6.1 工具呈现:Native vs Code Mode
- 标准 / 极简 / 创造:
native呈现——每个工具一个函数 schema,模型逐个调用。 - PTC:
code呈现——模型只见run_code+ 生成的 SDK。官方明确说明"不是承诺普遍减负":Code Mode 把"每个工具的 schema"换成"SDK 文本 + 一个传输 schema",token 成本取决于可见工具集规模。 - 呈现是按 agent 声明的(
presentAs),同一进程里 PTC 会话可与原生会话并存,各自看到自己的目录。 - 一个 agent 只能声明一种呈现;重复声明会被拒绝(两个答案 = 矛盾)。
6.2 文件系统与沙箱
- 标准 / PTC / 创造:使用宿主的
fs服务及其策略(沙箱提供者),配合tool-fs-search;Shell 执行器同样是宿主沙箱(bash-sandbox / pwsh-sandbox)。 - 极简:
fs-local遮蔽宿主的沙箱提供者,只对本 preset 生效——裸本地文件系统直接以进程 cwd 为根;编辑走str_replace_editor(要求绝对路径)。
6.3 上下文管理
- 标准 / PTC / 创造:具备完整压缩栈——
compaction-basic自动压缩 +/compact命令 + 工具结果剪枝器(超 8192 字符的结果截为头 4096 / 尾 1024)。 - 极简:完全没有压缩。文件头注释原话:"Context compaction is absent." 长会话无自动折叠。
6.4 提示词组合
- 标准 / PTC / 创造:persona 是模板,运行时上下文({{model}}、{{cwd}}、Web 定位等)由监听器分层叠加;agent-instructions 上限 64KB。
- 极简:persona
complete: true——它是完整系统提示词,任何后续监听器都加不进文本,运行时上下文快照也被抑制(includeRuntimeContext: false)。提示词固定 → 前缀完全稳定,有利于 KV 缓存复用。
6.5 自我修改与信任
- 创造模式是唯一能修改运行中的 Harness 的模式(
tool-cordis)。文档把它的信任姿态明确定级为"等同 shell 访问"。 - 其余三模式都不携带任何自引用工具。
- 所有随附 preset 均为
system信任级别;用户复制创作出的 preset 是user级别(目录权限收紧为属主 0o600 / 0o700,符号链接解引用)。
07如何选择:适用场景建议
日常全功能开发、不确定要什么
能力最全且呈现方式最"标准",行为可预测。
标准模式
多步流水线、批处理、一次组合多次工具调用
一个程序完成原本多轮往返的工作,省上下文、省延迟。
PTC 模式
基准测试、自动化、需要极简确定性的环境
只有 2 个工具、提示词完全固定、无压缩干扰;开销最小。
极简模式
想定制/创作自己的 Agent preset 或插件实验
唯一能读改运行时、复制 preset、获得创作指导的模式。
创造模式
选择注意事项
PTC 有硬前提部署必须已组装 TypeScript
codeRuntime(dsh-code-runtime-worker-thread);否则挂载直接失败。极简无压缩超长会话可能触上下文上限;也无计划模式保护。
创造模式是最高信任会话能力等同 shell,且其产出会成为别处可挂载的 preset。
切换时机preset 在会话创建时固定,只有空白会话(尚未产出任何内容)才能切换;已开始的会话会被拒绝(
agent-preset-locked)。更改默认值只影响此后创建的会话。08如何切换与自定义
- 新建会话:新建会话界面上工作区选择器旁有一枚 preset chip,选择"下一个会话"用哪个模式(暂存值仅对空白会话生效,用完即清)。
- 通用设置:设置 → General 中有一行选择默认 preset(写入
agent-presets.default)。 - 会话标题旁:只读标签,显示本会话正在运行的 preset(不是切换控件)。
- 管理分区:设置页
agent-presets分区可查看名单、复制(唯一创作入口,只能整体复制目录并指定新 id / 可选显示名,之后一切编辑都发生在 preset 自己的文件里)、删除用户 preset;随附 preset 以只读查看器打开。 - 创作途径:复制一个既有 preset 改成自己的,或用创造模式让 Agent 帮你创建。
# 配置示例:把默认模式改为极简
agent-presets:
default: minimal
09常见误解
- "PTC 是省 token 的模式" —— 不必然。Code Mode 把全部工具 schema 换成 SDK 文本 + 传输 schema,token 成本随可见工具集规模而定;官方原话"不是承诺普遍减负"。
- "极简模式更安全" —— 恰好相反。极简的
fs-local是裸本地文件系统,绕过了宿主沙箱提供者(仅限本 preset);它的"少"是功能少,不是权限少。 - "创造模式适合日常使用" —— 不建议。它是最高信任姿态(等同 shell 访问),只为创作 preset / 实验插件而生。
- "模式可以随时切换" —— 只能换下一个会话;当前会话一旦有产出就锁定在其创建时的 preset。
- "极简模式也有 Web / 检索" —— 没有。persistent-bash 的提示词明确写着 "You don't have access to the internet via this tool"。