DSH · Agent 模式对比

DSH 四种 Agent 模式对比

标准模式 · PTC 模式 · 极简模式 · 创造模式 —— 这四种"模式"本质上是 DSH 随附的四个 Agent presetstandard / code / minimal / cordis), 每个 preset 都是一份 agent.cordis.yml 插件组合,决定该会话的 Agent 拥有哪些工具与提示词段落。

标准 standard PTC code 极简 minimal 创造 cordis 依据源码配置整理

01一句话摘要

模式定位一句话
标准模式(standard) 默认的全功能编码 Agent 工具齐全:Shell、文件系统、检索、Skills、计划、目标、子代理、工作流,全部以原生函数调用呈现。
PTC 模式(code) 标准模式 + Code Mode 呈现 工具以 TypeScript SDK 呈现,模型用一个 run_code 程序组合多步操作,减少往返。
极简模式(minimal) 固定提示词的双工具 Agent 只有持久 bash + str_replace_editor 两个工具,无任何附加能力,提示词完全固定。
创造模式(cordis) 标准模式 + 自我修改 标准模式全部能力 + Cordis 工具集,可读/改运行中的 Harness、创作新 preset。
ℹ️ 关键前提 codecordisstandard整份副本加增量——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)
  • Shelltool-bash(Windows 上禁用)/ tool-pwsh(非 Windows 禁用),执行器为宿主沙箱
  • 文件系统tool-fs + tool-fs-search(glob 结果超限时不抽样)
  • 后台任务tool-jobs(仅模型侧控制,注册表在宿主)
  • Skillsskill-filesystem(本地技能发现)+ tool-skill
  • 目标tool-goal(会话级目标服务,含 /goal 命令)
  • 计划模式dsh-plan-mode,隔离 realm,含完整 plan-mode 指令
  • 压缩compaction-basic + /compact 命令 + 工具结果剪枝器(阈值 8192 字符,保留头 4096 / 尾 1024)
  • 委派与工作流:subagent(spawn / fork,可续背景)、tool-subagent-codextool-subagent-claude-code默认 disabled,需宿主安装 provider 包)、workflow、ralph(maxRounds 64)
  • 其余tool-ask-usertool-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 SDKdeclare 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):
预算
计算时间 60s · 墙钟上限 600s · 外输出上限 64 MiB · 堆上限 512MB
状态
每次运行状态全新(无跨运行状态,可从会话日志重建)
隔离
"包容"而非安全边界——信任姿态与 bash 相当,但多了独立 isolate、空环境、堆上限与强制终止
并发
SDK 子调用复用原生调度契约:并发安全调用可重叠(默认最多 10 个并行),exclusive 调用作为排序屏障
前提
宿主必须组装 TypeScript 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 terminals realm):pty + terminal-bash + persistent-bash(超时 300s;提示词风格与 Claude Code 的 bash 工具一致:状态跨调用持久、无互联网、可访问 apt/pip 镜像、长任务放后台等)
  • 文件系统组(isolate fs realm):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 内
SkillsSDK 内+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,模型逐个调用。
  • PTCcode 呈现——模型只见 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 codeRuntimedsh-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常见误解

  1. "PTC 是省 token 的模式" —— 不必然。Code Mode 把全部工具 schema 换成 SDK 文本 + 传输 schema,token 成本随可见工具集规模而定;官方原话"不是承诺普遍减负"。
  2. "极简模式更安全" —— 恰好相反。极简的 fs-local裸本地文件系统,绕过了宿主沙箱提供者(仅限本 preset);它的"少"是功能少,不是权限少。
  3. "创造模式适合日常使用" —— 不建议。它是最高信任姿态(等同 shell 访问),只为创作 preset / 实验插件而生。
  4. "模式可以随时切换" —— 只能换下一个会话;当前会话一旦有产出就锁定在其创建时的 preset。
  5. "极简模式也有 Web / 检索" —— 没有。persistent-bash 的提示词明确写着 "You don't have access to the internet via this tool"。

10参考来源