dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness agent presets: Sisyphus orchestrator (6 expert subagent lanes) + Sisyphus Oracle read-only consultant. Ported from oh-my-openagent workflow.
DeepSeek Harness 智能体预设:Sisyphus(编排者)与 Sisyphus Oracle(只读顾问),移植自 oh-my-openagent(OMO)的 Sisyphus 工作流。
| 预设 | 角色 | 简介 |
|---|---|---|
sisyphus | 编排者 | 分解任务、并行委派给六条专家子代理车道、验证结果、推动任务完成。 |
sisyphus-oracle | 只读顾问 | 诊断、架构设计、权衡评估、安全/性能审查。绝不修改任何内容。 |
本项目是 oh-my-openagent 的 Sisyphus persona 与编排工作流的衍生作品,采用 SUL-1.0 许可(见 LICENSE)。
sisyphus/mcp-switch.js,新增):blender/playwright 的 MCP 工具集(约 50 个 schema)在 sisyphus 会话默认隐藏,保证每次请求的提示词精简;mcp_enable / mcp_disable 按需显示/隐藏。GitHub 工具始终可见。sisyphus-oracle/restrict.js):只读工具掩码现按会话追踪,会话切换到非 sisyphus-oracle 预设(如 router 预设)时自动解除——修复需要 platform shell 的预设首轮装配失败的问题。command-goal 行(人类 /goal 命令 + 模型侧 goal 工具共享同一持久目标域);bash/pwsh 行恢复为一次性 shell(持久 PTY shell 会丢失 run_in_background)。lane-models.js 注释块修复(此前为乱码)并保持完全可移植:所有车道默认 null = 继承会话模型(钉模型见模型策略)。mcp-switch.js 使用 0.1.2-alpha.3 的工具 output 契约注册工具,restrict.js 使用 disposer 式掩码 API(agent-preset/selected 事件),command-goal 随 app 主包附带。在 0.1.2-alpha.4 上构建并验证;旧的 0.1.0-rc.x 系列没有这些 API(见前置条件)。send_message 续接、完成通知):| 车道 | 用途 | toolFilter 白名单要点 |
|---|---|---|
subagent_explore | 内部代码库检索("上下文 grep") | read/glob/grep/lsp/session_* |
subagent_oracle | 硬问题的高 IQ 咨询 | 另含 get_goal/job_list/job_output |
subagent_vision | 图像理解(多模态) | read_image/read/glob/grep |
subagent_librarian | 外部参考检索(文档/开源) | web_search/read/glob/grep |
subagent_metis | 规划前分析:隐藏意图、歧义、AI 失败点 | read/glob/grep/lsp/session_* |
subagent_momus | 对抗式计划评审(PASS / PASS-WITH-FIXES / FAIL) | read/glob/grep/lsp/session_* |
workflow 工具 + team-orchestration skill 的 category-router.js 模板,按任务域在运行时把单元路由到不同模型(视觉→多模态、硬逻辑→重推理、琐碎→便宜模型)。sisyphus/mcp-switch.js)默认隐藏,保持每次请求的提示词精简;mcp_enable / mcp_disable 按需显示/隐藏。GitHub 工具始终可见。restrict.js 插件——监听 agent/created,在 agent 自身作用域调用 tools.restrict({allow: [...]}),屏蔽全部继承的全局工具(MCP github/playwright/blender、write/edit、bash/pwsh、schedule、goals、jobs)。掩码按会话追踪,会话切换到非 oracle 预设(agent-preset/selected)时自动解除。ask)。read、read_image、glob、grep、lsp、web_search、ask_user_question(+ 无害的 agent 级 schedule_*)。DSH 官方自带四个预设。以下是 sisyphus / sisyphus-oracle 与它们的关系:
| 能力 | standard | code | cordis | minimal | sisyphus | sisyphus-oracle |
|---|---|---|---|---|---|---|
| Persona | 短 | 短 | 长(两平面) | 固定(complete: true) | 压缩编排协议(ultrawork 模式) | 只读顾问 |
| bash / pwsh | ✅ | ✅ | ✅ | 持久 PTY | ✅ | ✅(restrict.js 屏蔽) |
| fs 读写 | ✅ | ✅ | ✅ | fs-local | ✅ | 只读(restrict.js) |
| str_replace_editor | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
| 后台任务 | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| goal | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| 计划模式 | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| 压缩 | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| skills | ✅ | ✅ | ✅ + 编辑技能 | ❌ | ✅ | ❌ |
| 子代理委派 | ✅ | ✅ | ✅ | ❌ | ✅ + 6 条角色车道 | ❌ |
| workflow / ralph | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| run_code(Code Mode) | ❌ | ✅ | ❌ | ❌ | ✅(mode: both) | ❌ |
| tool-cordis(自改运行时) | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
| lsp | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| 会话检索 | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| 角色车道(explore/oracle/vision/librarian/metis/momus) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| 注册表级只读强制 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅(restrict.js) |
| 车道模型集中配置(lane-models.js) | ❌ | ❌ | ❌ | ❌ | ✅ | 不适用 |
如何选择:
run_code 批量执行多步操作。sisyphus 是 OMO 的 Sisyphus 工作流向 DSH 平台的移植。两者共享编排哲学,但机制不同:
| 方面 | oh-my-openagent(opencode 插件) | DSH Sisyphus | 说明 |
|---|---|---|---|
| Agent 构建 | 动态(createSisyphusAgent(model, availableAgents, tools, skills, categories)——提示词随模型族变化并注入实时环境) | 静态 persona(手写、模型无关) | DSH 预设是声明式文件,无运行时提示词生成 |
| 委派 API | task() + category(8 类别)+ subagent_type(explore/librarian/oracle/metis/momus) | subagent 工具 + 6 条固定车道(explore/oracle/vision/librarian/metis/momus) | 角色集相同,载体不同 |
| 动态分类路由 | 原生 category 参数调用时选模型 | workflow 脚本 agent(prompt, {provider, model}) 运行时覆盖,category-router.js 模板 | DSH 用 workflow 引擎实现等价能力 |
| Metis / Momus | 预规划顾问 + 计划评审(昂贵模型) | ✅ 移植为 subagent_metis / subagent_momus 车道 | 规划闭环:METIS → 计划 → MOMUS |
| Librarian | 外部参考 agent(GitHub/Context7/Web) | ✅ 移植为 subagent_librarian 车道(web_search) | |
| Vision | multimodal-looker | ✅ subagent_vision 车道 | |
| 技能注入 | 动态 availableSkills 注入 persona | 静态技能引用 + tool-skill | persona 写使用规则,非实时目录 |
| 会话延续 | continuation session id | 持久子代理 id + send_message | 等价 |
| 并行后台探索 | run_in_background + background_output | backgroundMode: continuable + 完成通知 | 等价 |
| 工作流引擎 | 无原生等价(hyperplan = skill 模拟) | 原生 workflow 工具(JS 编排脚本) | DSH 优势 |
| Ralph 循环 | 无原生等价 | 原生 ralph 工具(自引用循环) | DSH 优势 |
| 自我修改 | 无 | tool-cordis(inspect/define/run/stop/undefine 活运行时) | DSH 优势 |
| Code Mode | 无 | run_code(TypeScript SDK 批量执行) | DSH 优势 |
| 只读保证 | 仅 persona | 注册表级(restrict.js 从目录屏蔽工具) | sisyphus-oracle 的 DSH 优势 |
| 许可证 | SUL-1.0 | SUL-1.0(衍生) | 见 LICENSE |
OMO 有而 DSH Sisyphus 没有的:
task() 的原生 category 参数(DSH 需要 workflow 脚本实现等价)。DSH Sisyphus 有而 OMO 没有的:
workflow 引擎、ralph 循环、run_code、tool-cordis 自我修改。将每个预设目录复制到 DSH 用户预设根目录($DSH_HOME/.agent-presets/):
# 在本仓库目录下
Copy-Item .\sisyphus <DSH_HOME>\.agent-presets\sisyphus -Recurse
Copy-Item .\sisyphus-oracle <DSH_HOME>\.agent-presets\sisyphus-oracle -Recurse
预设会以 "Sisyphus" 和 "Sisyphus Oracle" 的名称出现在 Web UI 的预设选择器中。
sisyphus 的 persona 会引用 team-orchestration skill 中的工作流模板(hyperplan、安全研究、并行探索、分类路由):
Copy-Item .\skills\team-orchestration <DSH_HOME>\skills\team-orchestration -Recurse
停止并启动你的 harness 实例(使用你惯常的重启方式——启动命令、服务管理器或 Web UI 的重启操作均可)。新会话会加载新预设。
| 文件 | 必须位于 |
|---|---|
sisyphus/(整个目录) | <DSH_HOME>\.agent-presets\sisyphus\ |
sisyphus-oracle/(整个目录) | <DSH_HOME>\.agent-presets\sisyphus-oracle\ |
skills/team-orchestration/(整个目录) | <DSH_HOME>\skills\team-orchestration\ |
DSH_HOME 是 harness 家目录(启动脚本设置;本仓库参考机器上是 D:\DeepSeek Harness\home)。必须复制整个目录,而不是只复制里面的文件——预设目录携带自己的 lane-models.js、mcp-switch.js 和 restrict.js 兄弟文件,composition 通过相对路径引用它们。
要让 sisyphus 成为所有新会话的默认预设,在 settings.yaml 中设置:
agent-presets:
default: sisyphus
该值在每次创建会话时读取——仅此改动无需重启。你也可以保留官方默认,改为按会话选择预设。
session.create 中传 "agentPreset": "sisyphus"(或 "sisyphus-oracle"):$body = '{"type":"client-request","rpcId":"t","method":"session.create","payload":{"workspaceId":"<ws-id>","agentPreset":"sisyphus"}}'
Invoke-WebRequest -Uri "http://127.0.0.1:3080/api/session.create" -Method POST -ContentType "application/json" -Body $body -UseBasicParsing
agentPreset.select 切换预设(已运行的会话锁定其预设)。lane-models.js(固定车道模型)或预设目录内任何文件需要重启 DSH——composition 在预设挂载时读取。settings.yaml 的改动(默认预设、模型 provider)无需重启即生效。ok: true。subagent_explore/oracle/vision/librarian/metis/momus)以及 workflow、ralph、run_code、cordis_*。{{model}}——应与你的会话模型(或 lane-models.js 的固定值)一致。如果你想用 AI 编码助手(Claude Code、opencode、Cursor 等)帮你部署这些预设,直接粘贴下面的提示词。它自包含:告诉 AI 精确的复制目标、位置和验证方式,无需额外上下文。
Deploy the DSH Sisyphus presets to a DeepSeek Harness installation.
Context:
- The presets are in this repository: the `sisyphus/` and `sisyphus-oracle/`
directories (each is an agent preset = a directory with agent.cordis.yml
plus sibling files), and the `skills/team-orchestration/` directory
(a DSH skill with a SKILL.md and references/).
- DSH_HOME is the harness home directory. On Windows it is typically
D:\DeepSeek Harness\home; on Linux/macOS it is $HOME/.dsh. Find the real
one by checking the launcher scripts for the DSH_HOME environment
variable, or look for the `profiles/` and `sessions/` directories.
Steps:
1. Copy the whole `sisyphus/` directory to <DSH_HOME>\.agent-presets\sisyphus\
(copy the directory itself, not just its files).
2. Copy the whole `sisyphus-oracle/` directory to
<DSH_HOME>\.agent-presets\sisyphus-oracle\.
3. Copy the whole `skills/team-orchestration/` directory to
<DSH_HOME>\skills\team-orchestration\.
4. Restart DSH (stop then start the harness using whatever restart
procedure this deployment normally uses).
Verification (required, report the results):
- Create a session with agentPreset "sisyphus": expect ok:true and no
"failed to mount" error.
- Create a session with agentPreset "sisyphus-oracle": expect ok:true.
- In the oracle session, prompt "List every tool name in your catalog" —
the visible tools must be exactly: read, read_image, glob, grep, lsp,
web_search, ask_user_question, schedule_create, schedule_delete,
schedule_list. There must be NO write/edit/pwsh/mcp__* tools.
- In the sisyphus session, verify the six subagent lanes exist:
subagent_explore, subagent_oracle, subagent_vision, subagent_librarian,
subagent_metis, subagent_momus.
Constraints:
- Do NOT modify any file inside the preset directories after copying.
- Do NOT create a git repo, do not push anything.
- If a copy target already exists, report it and stop rather than
overwriting.
Verify that the DSH Sisyphus presets are correctly deployed on this
DeepSeek Harness installation.
Check:
0. DSH version is ≥ 0.1.2-alpha.3 (check the app package version / `npm ls @deepseek-ai/dsh`);
note this release does NOT run on 0.1.0-rc.x builds.
1. <DSH_HOME>\.agent-presets\sisyphus\ exists and contains
agent.cordis.yml + lane-models.js + mcp-switch.js (plus preset.yml).
2. <DSH_HOME>\.agent-presets\sisyphus-oracle\ exists and contains
agent.cordis.yml + restrict.js (plus preset.yml).
3. <DSH_HOME>\skills\team-orchestration\ exists with SKILL.md and
references/ (hyperplan.js, security-research.js,
parallel-exploration.js, category-router.js).
4. The presets mount: call session.create with each preset id and report
ok:true / any mount errors.
5. sisyphus-oracle tool restriction is active: in an oracle session, ask
"List every tool name in your catalog" and confirm only read-only tools
are visible (no write/edit/pwsh/mcp__*).
6. Lane model config is wired: check that sisyphus/agent.cordis.yml lane
rows reference lane-models.js via agentOptions !!js expressions, and
that lane-models.js has entries for all six lanes.
Report a pass/fail table for each check with the evidence you found.
提示:第二个提示词在 DSH 升级后也很有用——预设 composition 和
restrict.js位于 harness 家目录,升级重写 app 目录不会触碰它们,但重新验证成本很低。
| 要求 | 说明 |
|---|---|
| DSH 版本 | 要求 ≥ 0.1.2-alpha.3;构建并验证于 0.1.2-alpha.4。本版本使用 0.1.2-alpha.3 的工具 output 契约(mcp-switch.js)、disposer 式 tools.restrict + agent-preset/selected 事件(restrict.js)与 app 随附的 @deepseek-ai/dsh-command-goal。0.1.0-rc.x 系列没有这些 API——不要在 rc 构建上运行本版本。 |
| 宿主平面服务 | lsp(LSP)、session-query(会话检索)、schedule、tool-web(web_search)必须挂载在宿主组合(cordis.patch.yml)中。官方 web profile 自带这些。 |
| 插件版本 | profile 插件版本必须与 app 主包版本一致——注意 DSH 官方 AGENTS.md §1 提到的 latest tag 陷阱。 |
| 模型 provider | settings.yaml → llm-pi-ai.providers 中配置的任意 provider(见模型策略)。 |
两个预设都不固定模型。 所有子代理车道与 Oracle 预设都继承父 agent 的模型路由(在会话/agent 创建时快照)——即会话启动时选择的模型(默认取部署默认值)。这让预设跨部署可移植:没有任何 provider 或模型名被硬编码,在任何 DSH 安装上都能工作,无论配置了哪家 LLM provider。
⚠️ 会话中途切换模型不会重路由子代理。 子代理在委派时继承
parent.options.model(已实测:通过session.selectModel切到更重的模型后,父会话自身请求会切换,但已创建的子代理车道保持创建时的模型)。Oracle 预设的顶层 agent 会跟随会话切换(其请求解析当前会话模型);它的子代理车道不会。
1. lane-models.js 中固定配置的 { provider, model } ← 显式单车道覆盖(最高)
2. 否则:父 agent 创建时的模型 ← 默认(会话启动时的模型)
lane-models.js,无需改 YAML每条车道的模型从 sisyphus/lane-models.js(随预设旅行的纯 JS 模块)解析。null = 继承会话模型(默认);{ provider, model } = 固定该车道。编辑文件后重启 DSH:
// sisyphus/lane-models.js
// 将 <your-provider> 替换为你自己的 settings.yaml → llm-pi-ai.providers 中的 key。
module.exports = {
explore: null, // 继承
oracle: { provider: '<your-provider>', model: '<heavy-reasoning-model>' }, // 固定示例
vision: { provider: '<your-provider>', model: '<multimodal-model>' }, // read_image 需多模态
librarian: null,
metis: null,
momus: null,
};
provider 必须是你的 settings.yaml → llm-pi-ai.providers 中的 key。agent.cordis.yml 中的六条车道通过 loader 的 !!js + createRequire 机制读取该文件——你永远不需要编辑 YAML 结构。⚠️ Vision 车道注意:
read_image仅当路由模型声明支持图像输入时才可用。如果会话模型是纯文本,要么把会话切换到支持图像的模型,要么通过lane-models.js把subagent_vision固定为多模态模型。
对于多领域任务,workflow 工具的 agent(prompt, { provider, model }) 支持运行时模型覆盖。team-orchestration skill 内置 references/category-router.js 模板,把每个单元路由到其类别对应的模型。
发布版路由表完全可移植:每个类别默认 null = 继承当前会话模型,零硬编码 provider/模型名。 要启用按域路由,编辑 category-router.js 中的 CATEGORY_ROUTE 表(workflow 脚本运行在沙箱中、无 require,路由表必须内联)。示例配置:
| category | 模型(示例) |
|---|---|
visual-engineering | mimo-v2.5(多模态) |
ultrabrain / deep | deepseek-v4-pro(仅真硬推理) |
artistry / writing / quick / unspecified-low | deepseek-v4-flash |
unspecified-high / 未传 / inherit | 当前会话模型 |
你可能会问:为什么不直接把模型写进 agent.cordis.yml?有三个原因迫使引入间接层——用一个 JS 文件把车道/类别映射到实际模型:
预设是声明式的,不是可执行的。 agent.cordis.yml 是静态 YAML 声明,在预设挂载时读取一次。它不能计算、不能读配置、不能分支——所以"跟随部署的 provider 选择模型"这类逻辑无法在 YAML 本身表达。
硬编码模型名会破坏可移植性。 一个写着 model: deepseek-v4-pro 的预设,在任何 settings.yaml 未定义该模型、或 provider key 不同的部署上都会失败。把映射放在 JS 文件里、默认值为 null(继承会话模型),预设就能在任何地方运行;用户只需编辑一个小文件即可选择固定路由。
两种机制活在两个不同的执行环境中:
lane-models.js 由 DSH loader 在预设挂载时读取:agent.cordis.yml 中每条车道的 agentOptions 是一个 !!js 表达式,通过 createRequire 加载该文件并取对应车道条目。loader 环境有 require,所以映射可以放在独立文件中,不用塞进 YAML。category-router.js 是 workflow 脚本,在 workflow 引擎的沙箱中执行——没有 require、没有文件系统、没有 Node API。因此路由表必须内联在脚本里。这就是它默认全 null(继承)而不是指向外部文件的原因。所以这两个文件是同一个思路应用到两个不同的载体:默认保持预设可移植,同时给用户一个小的、文档完善的、可以固定真实模型的地方。
| 文件 | 载体 | 执行环境 | 为什么需要 JS 文件 |
|---|---|---|---|
lane-models.js | 固定 subagent_* 车道 | DSH loader(有 require) | agent.cordis.yml 是静态 YAML;模型映射必须在挂载时计算,且不触碰 YAML 结构即可用户编辑 |
category-router.js | workflow 运行时路由 | workflow 沙箱(无 require) | workflow 脚本不能读文件,所以表内联;发布版全 null(继承)以保持可移植 |
send_message 续接、完成通知)。restrict.js 插件——监听 agent/created,在 agent 自身作用域调用 tools.restrict({allow: [...]}),屏蔽全部继承的全局工具(MCP github/playwright/blender、write/edit、bash/pwsh、schedule、goals、jobs)。掩码按会话追踪,会话切换到非 oracle 预设(agent-preset/selected)时自动解除。ask)。read、read_image、glob、grep、lsp、web_search、ask_user_question(+ 无害的 agent 级 schedule_*)。# 1) 两个预设都能挂载(ok: true)
$body = '{"type":"client-request","rpcId":"t","method":"session.create","payload":{"workspaceId":"<ws-id>","agentPreset":"sisyphus"}}'
Invoke-WebRequest -Uri "http://127.0.0.1:3080/api/session.create" -Method POST -ContentType "application/json" -Body $body -UseBasicParsing
# 用 agentPreset "sisyphus-oracle" 重复一次
# 2) Oracle 会话不暴露任何修改类工具
# 提示词: "List every tool name in your catalog" → 应只显示
# read/read_image/glob/grep/lsp/web_search/ask_user_question/schedule_*
Q: 我切换会话模型后,为什么子代理还在用旧模型?
A: 子代理继承的是父 agent 的模型路由,在会话/agent 创建时快照(parent.options.model)。切换会话模型只影响父会话自身之后的请求。要改车道模型:新开会话、编辑 lane-models.js、或在 workflow 的 agent() 调用中传 {provider, model}。
Q: 我用的 LLM provider 和示例不同,需要改什么?
A: 默认(继承)行为下什么都不用改——车道跟随会话模型。只有固定车道时,使用你自己的 settings.yaml → llm-pi-ai.providers 中的 provider key。
Q: Oracle 预设真的绝不修改任何东西吗?
A: 是的。restrict.js 在注册表层面从工具目录中屏蔽 write/edit/bash/pwsh 和全部 MCP 工具,加上 persona 约束与宿主审批策略(ask)。已端到端验证:尝试 write 的提示词得到"我的可用函数集中不存在该工具"的回复。
Q: 可以添加自己的车道吗?
A: 可以。复制 sisyphus/agent.cordis.yml 中任意车道块,给它唯一的 toolName 和 id,在 lane-models.js 添加对应条目,(可选)配置 toolFilter 白名单。
Q: 必须安装 team-orchestration skill 吗?
A: 只有使用工作流模板(hyperplan、安全研究、并行探索、分类路由)时才需要。六条子代理车道不依赖它。
Q: 为什么我的 sisyphus 会话里看不到 blender/playwright 的 MCP 工具?
A: sisyphus/mcp-switch.js 默认隐藏两个服务端的全部工具(约 50 个 schema),保证每次请求的提示词精简——这就是 ultrawork 的"上下文节食"。调用 mcp_enable 并传服务端名即可显示(下一次请求生效);mcp_disable 重新隐藏。GitHub 工具永不被隐藏。
Q: 需要哪个 DSH 版本?
A: 至少 0.1.2-alpha.3 —— mcp-switch.js 使用的工具 output 契约、restrict.js 的 disposer 式掩码 API、以及 app 随附的 dsh-command-goal 命令都来自 0.1.2-alpha 系列。参考部署:0.1.2-alpha.4。rc 构建(0.1.0-rc.x)将无法挂载 mcp-switch。
SUL-1.0(Sustainable Use License v1.0)——oh-my-openagent(© YeonGyu-Kim)的衍生作品,上游同样采用 SUL-1.0。完整条款见 LICENSE。
非商业/个人使用免费。商业使用需另行授权。再分发必须保留本声明与原始许可条款。