dsh对比codex的机制

你问得正好:这台机器上我把 DSH 的实际安装包 拆开看了(app.asar 里 18000+ 文件、170 多个 @deepseek-ai/* 插件包),下面讲的是你这台机器上真实存在的机制 ,不是宣传话术。版本 0.2.1-rc.2(Electron 44.7.0 壳),当前 profile 是 desktop。


0. 一句话讲清和 Codex 的根本差别

Codex 是一个产品 :固定的 agent loop + 固定的工具集 + 沙箱 + approval。

DSH 是一个可组装的 agent 运行时(harness):连"agent loop"、"压缩策略"、"沙箱后端"、"Web UI"都是插件。你的 profile 就是一张 YAML 的插件树:

yaml 复制代码
# C:\Users\PC\.dsh\profiles\desktop\package.json
"dsh": { "profile": { "bundles": [
  "@deepseek-ai/dsh-base",       # 核心:agent loop / fs / shell / 工具
  "@deepseek-ai/dsh-web-app",    # 加一层:HTTP + 前端 + Web GUI
  "dsh-wps-plugin"               # 你的 WPS 云文档插件
]}}

然后 cordis.patch.yml 是你的覆盖层 ,最后生效。三层叠加顺序:bundle 层 → 你的 patch → --patch 临时覆盖。

这意味着两件事,是整个 DSH 体验的地基:

  1. 加能力不用等官方发版,写完 YAML 保存即热加载(你笔记里已验证过)。
  2. 能力边界可精确裁剪,同一个模型可以配成"只读代码审查员"或"能开浏览器点按钮的 E2E 机器人"。

配套的工程化命令(CLI 层面很硬):

命令 用途
dsh --dump-config 打印合成后的完整插件树(排查"到底谁生效了")
dsh --dump-config-schema 打印插件配置的 JSON Schema(写 YAML 不用猜字段)
dsh --patch ./x.yml 一次性叠加实验配置,不污染主 profile
dsh rescue --from-default-profile web profile 改崩了,一键恢复出厂
dsh plugin --profile <p> add <pkg> 用 pnpm 往 profile 里装插件

⚠️ 你这台机器上 desktop profile 被 Electron 独占,CLI 不能 --dump-config/boot 它(我试过,报 managed exclusively by the Electron application)。要试验配置就建一个新 profile,或用 GUI 的 Plugins 面板。


1. 上下文与"长任务不崩":四层防线(这是 Codex 最弱、DSH 最强的地方)

你的痛点在 Java 全栈项目上会特别明显:一个 Spring 多模块工程,随便读十几个文件就爆上下文。DSH 是四道防线叠着上:

层 机制 表现
① Spill dsh-spill / spill-policy 工具输出超预算 → 原文落盘,只回一个"定位符 + 摘要"给我。你看到 Output too large, saved to ... 就是它
② 裁剪 compaction-tool-result-pruner 对历史工具结果做头/中/尾 三段裁剪,不调模型、可重放安全。省钱省时
③ 压缩 compaction-basic + token-meter token 计量器驱动,到阈值自动 LLM 摘要;/compact 可手动触发
④ 图像卸载 compaction-image-offload 截屏类历史图片换成占位符再重试,不塞爆 vision 预算

对你的用法建议 :长任务(升级 Spring Boot 版本、批量改 30 个 Vue 组件)不要一个会话硬扛到底 。用 /compact 在"阶段之间"手动压一次,比让它自动压在中途更干净------自动压缩会把中间的 diff 细节糊掉。

另外 dsh-output-retention 会明确告诉你"保留了什么、省略了什么",比静默截断诚实。


2. 会话是一份事件日志,不是一个聊天框

dsh-session 是 event-sourced (事件溯源):每一次工具调用、审批、模型请求都是不可变事件,落成 JSONL;并且有 session-checkpoint-policy ------ 在每次模型请求前、每个工具有副作用前打语义检查点。

实际收益:

  • 崩溃/断电/我卡死 → 会话能恢复到"上一个安全点",不是回到开头。
  • 会话可导出 (session-log-export,带下载对话框)、可做跨会话检索 、可被 @session 引用。
  • Web 侧有 trajectory(轨迹瀑布图) :每个工具耗时一条,一眼看出是 mvn 慢还是我瞎试慢。
  • token-meter + session-stats + turn-outline:每个回合的 token/时长统计(你现在 profile 里 performanceUsage: detailed 已开)。

跨会话记忆(这块默认没开,但强烈建议你开):

yaml 复制代码
# cordis.patch.yml 追加
- insert:
    - id: session-search
      name: '@deepseek-ai/dsh-experimental-session-search'

背后的 session-query-sqlite 是 SQLite FTS5 全文索引 。对你这种"上周那个鉴权 bug 我们怎么改的来着"场景,等于给项目装了长期记忆。配合 @session 引用,可以把旧会话的快照作为标记为不可信的上下文拉进新会话。


3. 权限模型:四档 preset,比 Codex 的 approval 更细

有 /permission 命令(也能在设置里设成新会话默认):

Preset 行为
read-only 只读,任何写/改都被沙箱拒
workspace-write 你现在这档。写只允许工作区 + 临时目录,读不限
danger-full-access 全机可写(写 ~/.dsh、装东西时才用)
auto(EXP) 无沙箱 ,但每次工具调用前用同一个模型做一次授权审查,审查拒绝的才问你

Windows 上的 workspace-write 不是软限制,是 sandbox-windows-acl:受限令牌 + capability SID 写白名单 的真实内核级限制。所以你在 Codex 里习惯的"approval 提示"在这里是两套东西叠加:沙箱(能不能) × 审批策略(要不要问) ,permission-presets 把它们打包成一个下拉框。

auto 那档的取舍很明确:更快、无沙箱、烧额外 token、可能误放行。我建议你只在"纯读代码 + 跑测试"的会话里开,改生产代码别开。


4. Plan / Goal / Todo:三个不同层次,别混用

这是 DSH 独有的三段式,Codex 只有前两个的弱化版:

机制 生命周期 谁驱动 适合什么
todo_write 单回合内 我自己维护 3~8 步的小任务清单,你能看到进度条
/plan → exit_plan_mode 单回合内,带人工审批闸门 我出计划 → 你点批准/驳回 → 批准后我才动手 跨层改动、破坏性重构、你不想被"惊喜"的时候
create_goal → goal 状态机 跨回合,会话级持久 系统自动续轮(goal-round-driver) "把这个模块升到 Java 21 并全绿"这种要跑几十轮的目标

/plan 的用法值得一提,它是个真闸门不是装饰:

复制代码
/plan
(我进入计划模式,只读不写,出 markdown 计划)
(GUI 弹审批卡:Approve / 我自己改口)

驳回时你的反馈会回到工具结果里,我改完再提交一次。这是你审架构改动的最省力位置------审 20 行计划,比审 400 行 diff 便宜得多。

goal 的细节:max_goal_rounds 可限轮;只有同一个阻塞条件连续 3 轮 才算 blocked;update_goal resume 需要你发话才重新武装(这是防我跑飞)。


5. 并行与委派:三种力度,这是全栈开发的放大器

机制 上下文 适合
subagent 全新,只带我写的 prompt 独立的、可自包含的活("审这个 module 的空指针风险")
subagent_fork 继承当前对话 基于我们已经聊过的上下文继续("照刚才的方案把这层也改了")
workflow JS 脚本编排几十个 subagent 批量 × 并行:一个仓库 20 个模块,每个 agent 审一个,结构化返回

三者都是 in-process 子 agent,能 send_message 继续对话、interrupt_agent 打断、list_agents 看整棵树;subagent 的设置里还能限递归深度 、并行容量 、子 agent 可选模型(比如子 agent 全用便宜的跑扫描,主线用强模型做决策)。

workflow 是重点,因为它解决"批量"这个真问题

js 复制代码
// 我写给你看的形态:一个 Spring 多模块仓库的安全+质量双审
phase("扫描");
const mods = ["user-service","order-service","gateway","common"];
const reports = await pipeline(mods,
  m => agent(`审 ${m} 模块:SQL 注入、缺失的 @Transactional、N+1 查询。返回 JSON`, { schema: {...}, label: m }),
  r => agent(`复核上面这份结论,剔除误报:${JSON.stringify(r)}`, { schema: {...} })
);

关键点:并行无屏障 (pipeline 不等所有人)、结构化 schema 校验 (不是自由文本,进不了幻觉)、脚本里没有 fs/网络 (只能靠 agent 干活,边界干净)、可后台跑。

你的场景里,这一招能一次干完:全模块依赖审计、批量补 JUnit 用例、Vue 组件 props/emits 一致性检查、OpenAPI 与 Controller 签名漂移检测。


6. 后台作业与定时:把"慢"从对话里摘出去

机制 用法
run_in_background + job_output/job_list/job_kill mvn clean install、npm run build、pnpm test 全丢后台,我不阻塞,边跑边干别的,完成时我被通知
schedule_* Host 级持久提醒 ,支持 after_seconds / every_seconds / daily / weekly / cron

schedule 的本质是"到期往原会话投一条 prompt ",不是外部 cron job。它适合:每天早上 9 点"跑一遍依赖 CVE 扫描并汇报"、每周五"生成这周 diff 的变更说明"。注意:它触发的是新的对话回合,机器关机就错过(重启只补最近一次)。


7. Skills:能力沉淀的最小单元(你已经有 27 个在用)

扫描优先级(5 级,前覆盖后):

顺序 位置 语义
1 <repo>/.dsh/skills/ 项目专属
2 <repo>/.agents/skills/ 项目内跨 agent 共享
3 customSkillDirs 配置指定
4 ~/.dsh/skills/ 本机 DSH 专属(你现在 1 个:agent-reach)
5 ~/.agents/skills/ 跨 agent 共享(你现在 26 个目录)

机制要点:

  • description 是唯一路由依据------写"什么时候必须用我",不写功能简介。这决定了我会不会加载它。
  • 热生效,放文件夹进去,下一次工具调用后 catalog 自动刷新,不用重启。
  • 正文里可以 references/ 挂子文档,按需读,不占常驻上下文。

⚠️ 一个必须提醒你的坑 :你 ~/.agents/skills 里那 26 个是 Cursor / Codex 的 skill (canvas、autopilot、origin、update-cursor-settings、share、tabbit、new-repo...)。DSH 照读不误,但其中一部分在 DSH 里是半失效的 :origin/share/new-repo 依赖 Codex 的云仓库服务,update-cursor-settings 改的是 Cursor 设置,canvas/autopilot 依赖 Codex 专有运行时。它们现在占着 catalog 位、可能误触发。

建议:把通用 的留共享(create-skill、review、shell),Codex 专有 的挪到 ~/.cursor/skills 或 ~/.codex/skills,别让两个 harness 互相污染。


8. MCP:本机已经接了一个,这是接你后端世界的口子

dsh-mcp-client 支持 stdio 和 streamable-http,带重连策略(reconnect{enabled,maxAttempts,...})和超时。工具自动挂成 mcp__<serverName>__<tool>,另有 mcp-resources 做资源读取。

你这台机器已经装了 Windows-MCP (21 个工具:截屏、鼠标键盘、注册表、PowerShell、文件系统、进程),会在我需要操作桌面/拿系统信息时用上(沙箱里 Get-CimInstance 被拒,就走它的 PowerShell)。

对你 Java/Vue 栈,值得再接的:

MCP 解决的问题
MySQL / PostgreSQL MCP 让我直接看表结构、跑只读 SQL 验证你的 Entity 和真实 schema 是否漂移
Playwright MCP 真正的浏览器 E2E,点你的 Vue 页面、读 console、断言 DOM
Redis / Kafka MCP 排查"消息没消费"这类只有运行时才知道的问题
Jira / Confluence MCP 从需求单直接起活,回写实现说明

配置模板(追加到 profile patch 即可热生效):

yaml 复制代码
- insert:
    - id: mcp-mysql
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: mysql          # 决定工具前缀
        transport: stdio
        command: 'C:\...\mysql-mcp.exe'
        args: ['--dsn','...']
        toolCallTimeoutMs: 60000

9. 内建工具面(我实际拿到的,不是清单宣传)

类 工具 对你有用的点
文件 read write edit glob grep grep/glob 走打包的 ripgrep ,比 Codex 的搜索快且支持 hidden/ignored;read 带行号
文件策略 fs-observation-policy 读后写 (不读不许改)+ 版本守卫(文件被别人改了会拒绝我的编辑,防覆盖)
Shell pwsh 沙箱内执行;环境里有托管 DSH_* 变量可给脚本用
网络 web_search web_fetch 走 DeepSeek 搜索 provider,不依赖你本机那个坏掉的 TLS
交付 present 声明"这是最终产物",GUI 出文件卡(可预览/原生打开)
依赖 load_workspace_dependencies 自带 Python + Node + pnpm(含 numpy/pandas/openpyxl/python-docx/python-pptx/Pillow),跑脚本不污染你的环境
问人 ask_user_question 结构化选项提问,比纯文本追问省一轮
办公 office-* skills + LibreOffice Kit docx/xlsx/pptx 的创建、改、校验、重算公式缓存、渲染成图

默认没开但你可以点名要的(这些包都在,只是没进 profile):

包 给你什么
dsh-experimental-terminal-bundle 让我操作持久 PTY 终端 (mvn spring-boot:run 后保持活着,我能继续往里敲)
dsh-experimental-tool-worktree 让我 git worktree 开新树干脏活,主线工作区不受污染(并行改两个 feature 时神器)
dsh-experimental-agent-team-profile Agent 团队:名册 + 互相发消息 + 共享任务 DAG(比 subagent 更接近"多 agent 协作")
dsh-experimental-session-search 跨会话全文检索(上面第 2 节)
dsh-experimental-ralph-bundle "重复干活用全新 agent"------适合无脑批量(改 200 个 import)
dsh-experimental-inspector-profile 调试 DSH 自己:原始 Session 日志 + Chat 节点检查器

10. 多入口:同一套能力,四种外壳(这条很多人不知道)

入口 命令 用途
Web GUI(你在用的) dsh web 三栏界面,会话树/文件树/终端/浏览器页签/diff 卡
TUI dsh tui 纯终端里跑
Headless dsh headless "跑测试并修失败" 一次任务、打结果、退出。→ 塞进 Jenkins / GitLab CI / pre-commit 的钩子里
ACP dsh acp Agent Client Protocol over JSON-RPC stdio(Zed 等编辑器可直接把 DSH 当 agent 后端)
SDK dsh sdk 同上是 stdio JSON-RPC,带 dsh-sdk-protocol 类型定义 → 你的 Java 进程可以 spawn 它、用 JSON-RPC 驱动,把 DSH 当一个"会写代码的子进程"用

最后一条对你是真机会:不用等官方 Java SDK,JSON-RPC + newline-delimited 的协议自己写个 Java client 就能把 DSH 嵌进你的内部工具链(比如"运维后台一键让 agent 排查线上日志")。


11. GUI 里最该用的五个地方

  1. 右侧 changed-files 卡 :每个文件一个 diff 页签 + 整轮对比。审我改的东西在这里审,不要翻聊天记录。
  2. 右侧文件树 / 终端 / 浏览器页签:文件树能直接开文档预览(Office/PDF/Markdown/代码/图片),浏览器页签是沙箱化的。
  3. 左侧会话树 + 搜索:多级树、按状态点分组,长项目按 feature 分会话比一个大对话强得多。
  4. @ 引用 :@文件(模糊匹配工作区)+ @会话(历史会话快照,标记不可信)。比你手打路径快。
  5. Plugins 面板 (含 Discover 市场):装/停/重试插件,改配置不改文件。你装 MCP、开实验特性优先走这里,比手改 YAML 安全。

12. 给你的 Java / Vue 具体打法(可照抄)

A. 跨层改动(Controller → Service → Mapper → Vue store → 组件)

复制代码
/plan            ← 我先出计划,你在审批卡上改/批
(批准后)todo_write 挂 6 步,逐步执行
(结束)看右侧 changed-files 卡逐文件审

关键:别让我"边想边改"。这类改动最贵的不是写代码,是"改到一半发现方案错了"。

B. 多模块批量审计

workflow + pipeline:每模块一个 agent 审 + 一个 agent 复核,结构化 JSON 回来。20 个模块 ~几分钟,上下文不炸。

C. 慢命令

mvn -T 4 clean verify / pnpm build 一律 run_in_background,我继续做静态分析,job_output 增量收。

D. 大目标(跨几十轮)

create_goal("把 auth 模块迁到 Spring Security 6 并全绿") + max_goal_rounds。我会自动续轮,你只在 diff 上把闸。

E. 前端联调

装 Playwright MCP,让我真点你的页面;配合右侧浏览器页签看状态。比让我"猜 CSS"强一个数量级。

F. 规范沉淀(性价比最高的一件事)

在项目根 写 AGENTS.md(dsh-agent-instructions 会自动加载,支持 AGENTS.md/CLAUDE.md),写清:包结构约定、Result<T> 统一返回、异常码规范、Vue 用 <script setup> + Pinia 的约定、提交信息格式。这比每次在 prompt 里重复要求有效 100 倍 ,而且 Codex / Cursor / Claude Code 全都认这个文件名。

你现在有一个全局的 AGENTS.md(讲这台机器的环境事实),项目规范要另写一份放在 repo 根,两层会叠加。

G. 团队共享

把项目级 skill 放 <repo>/.dsh/skills/(进 git):比如"生成 XxxMapper.xml"、"按我们的 DTO 规范写 VO"。同事拉代码就有,description 写清触发词即可。


13. Codex 心智对照表(迁移时最容易踩的思维惯性)

维度 Codex 习惯 DSH 里要改成
能力扩展 改配置 + 装 MCP 同一个 YAML 里加插件行,bundles/patch 两层,热生效
长任务 一个会话硬扛 /compact 分阶段 + goal 自动续轮 + subagent 隔离
批量 手动重复 prompt workflow 脚本化 fan-out(这是最大的效率差)
审批 approval 模式 /permission 四档,且沙箱是内核级 ACL 不是提示
计划 让它先说 /plan 是带审批闸门的真模式,驳回会回灌给我
记忆 AGENTS.md AGENTS.md + session search 跨会话检索 + @session 引用
事件钩子 hooks.json 没有。等价物:profile 插件 / skills / AGENTS.md
产物交付 说一句"改好了" present + 右侧 diff 卡(这里有结构化交付)
跑在云上 有些任务云端跑 纯本地(除 DeepSeek 模型 API 外,全在你机器上)

14. 这台机器上你需要注意的坑(都是实测)

  1. curl / Invoke-WebRequest 必挂 (Schannel SEC_E_NO_CREDENTIALS)→ 联网只能走 Python / pip / pnpm / 我自己的 web_fetch。你笔记第 2 节写得很清楚。
  2. 写 ~/.dsh 会弹授权 (workspace-write 只管工作区)→ 改 profile 时把多个写操作合并成一条命令,少弹几次。
  3. desktop profile 被 Electron 独占,CLI 不能 dump / boot 它。要试验配置就新建 profile。
  4. ~/.agents/skills 串味(Codex skill 混进 DSH catalog),见第 7 节。
  5. 实验特性默认全关 ,且 auto 权限档是 EXP------别在改生产代码的会话里开 auto。
  6. 改 profile 前先备份 (你已有 cordis.patch.yml.bak-20261020 的习惯,保持)。
  7. 模型 :当前 deepseek-flash + reasoningEffort: high(在 patch 里写死)。真要跑大重构,考虑在设置里临时切到更强档,或给 subagent 单独配模型跑扫描。

如果你只记三件事

  1. /plan 用来省你的审阅成本,goal 用来扛跨轮长任务,workflow 用来吃掉批量 ------ 这三个是 Codex 没有的杠杆。
  2. profile YAML 就是能力清单 ,加/减/换都是改两处文件(package.json 的 bundles + cordis.patch.yml 的 insert),热生效,改崩了 dsh rescue 能救。
  3. 项目根写 AGENTS.md,比任何 prompt 技巧都值钱。

需要我接着做的话,可以任选(说一句就行):

  • 落地配置 :把 session-search + worktree + 持久终端这三个建议插件写进你的 profile(会弹 1~2 次授权)
  • 清理 skills :把 ~/.agents/skills 里 Codex 专有的挪走,只留跨 agent 通用的
  • 起一个模板 :给某个具体 Java/Vue 仓库写一份项目级 AGENTS.md + 2 个团队 skill
  • 写进文件 :把上面这份整理成 DSH-机制手册.md 放工作区,方便以后翻
相关推荐
我才是银古2 天前
OpenGIS 技能插件开发与使用:在 DeepSeek Harness 里按需加载 GIS 知识
ai·gis·dsh
钝挫力PROGRAMER5 天前
Chrome-devtools-mcp:闭环Agent的自我验证
ai·agent·chrome devtools·mcp·dsh
月走乂山8 天前
DSH 桌面版用 DeepSeek 报 REQUEST_EXTENSION 的根因定位与修复
electron·node.js·插件系统·deepseek·bug排查·dsh·deepseek harness
猿来如此呀8 天前
DeepSeek Harness(DSH)保姆级入门与原理详解:从跑到用再到讲得清
dsh
我才是银古9 天前
DeepSeek Harness 插件生态解析
插件·deepseek·dsh
ss27315 天前
DSH v0.2.1-alpha.1 发布:Agent 能自己造插件,Claude Code 也能兼容,插件生态要变天
deepseek·deepseekharness·dsh
也非非也23 天前
DeepSeek没发公告,但它把Agent装进了你的电脑
人工智能·开源·agent·deepseek·dsh
Blockbuater_drug1 个月前
写个 SKILL.md,还是配个 MCP server? Agent 能力扩展的两条路线——原理、操作、效果与四大架构配置选型
mcp server·agent skills·渐进式披露·skill.md·token 优化·dsh·功能选型
roamingcode1 个月前
DeepSeek Harness 记忆召回插件的“PRD”设计拆解
agent·memory·deepseek·harness·dsh·dsh-plugin