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 agent presets: Sisyphus (orchestrator) and Sisyphus Oracle (read-only consultant), ported from the oh-my-openagent (OMO) Sisyphus workflow.
| Preset | Role | Summary |
|---|---|---|
sisyphus | Orchestrator | Decomposes work, delegates to six expert subagent lanes in parallel, verifies results, and drives tasks to completion. |
sisyphus-oracle | Read-only consultant | Diagnosis, architecture design, trade-off evaluation, security/perf review. Never edits anything. |
This is a derivative work of oh-my-openagent's Sisyphus persona and workflow philosophy, licensed under SUL-1.0 (see LICENSE).
sisyphus/mcp-switch.js, new): blender/playwright MCP tool sets (~50 schemas) are hidden by default on sisyphus sessions to keep every request's prompt small; mcp_enable / mcp_disable reveal/hide them on demand. GitHub tools stay always visible.sisyphus-oracle/restrict.js): the read-only tool mask is now tracked per session and lifted automatically when the session switches to a preset other than sisyphus-oracle (e.g. a router preset) — fixes first-turn assembly for presets that need a platform shell.command-goal row added (human /goal command + model-facing goal tool over one persisted goal domain); bash/pwsh rows restored to one-shot shells (persistent PTY shells dropped run_in_background).lane-models.js comment block fixed (was mojibake) and kept fully portable: all lanes default to null = inherit the session model (see Model policy for pinning).mcp-switch.js registers tools with the 0.1.2-alpha.3 output contract, restrict.js uses the disposer-based mask API (agent-preset/selected), and command-goal ships inside the app package. Built and verified on 0.1.2-alpha.4; the older 0.1.0-rc.x line lacks these APIs (see Prerequisites).send_message continuation):| Lane | Purpose | ToolFilter highlights |
|---|---|---|
subagent_explore | Internal codebase search ("contextual grep") | read/glob/grep/lsp/session_* |
subagent_oracle | High-IQ consultation for hard problems | + get_goal/job_list/job_output |
subagent_vision | Image understanding (multimodal) | read_image/read/glob/grep |
subagent_librarian | External reference search (docs/OSS) | web_search/read/glob/grep |
subagent_metis | Pre-planning analysis: hidden intentions, ambiguities, AI failure points | read/glob/grep/lsp/session_* |
subagent_momus | Adversarial plan review (PASS / PASS-WITH-FIXES / FAIL) | read/glob/grep/lsp/session_* |
workflow + team-orchestration skill's category-router.js template routes units to different models at runtime by task domain (visual → multimodal, hard logic → heavy model, trivial → cheap model).sisyphus/mcp-switch.js) are hidden by default to keep every request's prompt small; mcp_enable / mcp_disable reveal/hide them on demand. GitHub tools always visible.restrict.js plugin — listens on agent/created, applies tools.restrict({allow: [...]}) on the agent's own scope, masking every inherited global tool (MCP github/playwright/blender, write/edit, bash/pwsh, schedule, goals, jobs). Masks are tracked per session and lifted automatically when the session switches to a non-oracle preset (agent-preset/selected).ask).read, read_image, glob, grep, lsp, web_search, ask_user_question (+ harmless agent-scoped schedule_*).DSH ships four official presets. Here is how sisyphus / sisyphus-oracle relate to them:
| Capability | standard | code | cordis | minimal | sisyphus | sisyphus-oracle |
|---|---|---|---|---|---|---|
| Persona | short | short | long (two-plane) | fixed (complete: true) | compressed orchestrator protocol (ultrawork) | read-only consultant |
| bash / pwsh | ✅ | ✅ | ✅ | persistent PTY | ✅ | ✅ (masked by restrict.js) |
| fs read/write | ✅ | ✅ | ✅ | fs-local | ✅ | read-only (restrict.js) |
| str_replace_editor | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
| background jobs | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| goal | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| plan mode | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| compaction | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| skills | ✅ | ✅ | ✅ + authoring skill | ❌ | ✅ | ❌ |
| subagent delegation | ✅ | ✅ | ✅ | ❌ | ✅ + 6 role lanes | ❌ |
| workflow / ralph | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| run_code (Code Mode) | ❌ | ✅ | ❌ | ❌ | ✅ (mode: both) | ❌ |
| tool-cordis (self-modify) | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ |
| lsp | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| session recall | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| role lanes (explore/oracle/vision/librarian/metis/momus) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| registry-level read-only enforcement | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ (restrict.js) |
| per-lane model config (lane-models.js) | ❌ | ❌ | ❌ | ❌ | ✅ | n/a |
How to choose:
run_code.sisyphus is a port of OMO's Sisyphus workflow to the DSH platform. It shares the orchestration philosophy but differs in mechanisms:
| Aspect | oh-my-openagent (opencode plugin) | DSH Sisyphus | Notes |
|---|---|---|---|
| Agent construction | dynamic (createSisyphusAgent(model, availableAgents, tools, skills, categories) — prompt varies by model family and injects live environment) | static persona (hand-written, model-agnostic) | DSH presets are declarative files; no runtime prompt generation |
| Delegation API | task() + category (8 categories) + subagent_type (explore/librarian/oracle/metis/momus) | subagent tool + 6 fixed lanes (explore/oracle/vision/librarian/metis/momus) | same role set, different carrier |
| Dynamic category routing | native category parameter selects model at call time | workflow script agent(prompt, {provider, model}) — runtime override, category-router.js template | DSH equivalent implemented via workflow engine |
| Metis / Momus | pre-planning consultant + plan critic (expensive models) | ✅ ported as subagent_metis / subagent_momus lanes | planning loop: METIS → plan → MOMUS |
| Librarian | external reference agent (GitHub/Context7/Web) | ✅ ported as subagent_librarian lane (web_search) | |
| Vision | multimodal-looker | ✅ subagent_vision lane | |
| Skill injection | dynamic availableSkills injected into persona | static skill references + tool-skill | persona lists skill usage rules, not a live catalog |
| Session continuity | continuation session id | send_message on durable subagent id | equivalent |
| Parallel background exploration | run_in_background + background_output | backgroundMode: continuable + completion notice | equivalent |
| Workflow engine | no native equivalent (hyperplan = skill simulation) | native workflow tool (JS orchestration scripts) | DSH advantage |
| Ralph loop | no native equivalent | native ralph tool (self-referential loop) | DSH advantage |
| Self-modification | none | tool-cordis (inspect/define/run/stop/undefine live runtime) | DSH advantage |
| Code Mode | none | run_code (TypeScript SDK batch execution) | DSH advantage |
| Read-only guarantee | persona-only | registry-level (restrict.js masks tools from the catalog) | DSH advantage for sisyphus-oracle |
| License | SUL-1.0 | SUL-1.0 (derivative) | see LICENSE |
What OMO has that DSH Sisyphus does not:
category parameter on task() (DSH needs a workflow script for the equivalent).What DSH Sisyphus has that OMO does not:
workflow engine, ralph loop, run_code, tool-cordis self-modification.Copy each preset directory into your DSH user preset root ($DSH_HOME/.agent-presets/):
# from this repository
Copy-Item .\sisyphus <DSH_HOME>\.agent-presets\sisyphus -Recurse
Copy-Item .\sisyphus-oracle <DSH_HOME>\.agent-presets\sisyphus-oracle -Recurse
The presets appear in the web UI's preset picker under the names "Sisyphus" and "Sisyphus Oracle".
sisyphus's persona references the team-orchestration skill for workflow templates (hyperplan, security research, parallel exploration, category routing):
Copy-Item .\skills\team-orchestration <DSH_HOME>\skills\team-orchestration -Recurse
Stop and start your harness instance (however you normally restart DSH — the launcher command, a service manager, or the web UI's restart action). A fresh session will pick up the new presets.
| File | Must be at |
|---|---|
sisyphus/ (whole directory) | <DSH_HOME>\.agent-presets\sisyphus\ |
sisyphus-oracle/ (whole directory) | <DSH_HOME>\.agent-presets\sisyphus-oracle\ |
skills/team-orchestration/ (whole directory) | <DSH_HOME>\skills\team-orchestration\ |
DSH_HOME is the harness home directory (the launcher sets it; on this repo's reference machine it is D:\DeepSeek Harness\home). Keep the whole directory, not just the files inside — the preset directory carries its own lane-models.js, mcp-switch.js and restrict.js siblings that the composition references by relative path.
To make sisyphus the default preset for all new sessions, set it in settings.yaml:
agent-presets:
default: sisyphus
The value is read per session creation — no restart needed for this change alone. You can also keep the official default and pick a preset per session instead.
"agentPreset": "sisyphus" (or "sisyphus-oracle") in session.create:$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 (a session that has run is locked to its preset).lane-models.js (pinned lane models) or any file inside a preset directory requires a DSH restart — the composition is read at preset mount. settings.yaml changes (default preset, model provider) apply without restart.ok: true.subagent_explore/oracle/vision/librarian/metis/momus) plus workflow, ralph, run_code, cordis_*.{{model}} — should match your session model (or the lane-models.js pin).If you want an AI coding assistant (Claude Code, opencode, Cursor, etc.) to deploy these presets for you, paste the prompt below. It is written to be self-contained: it tells the AI exactly what to copy, where, and how to verify — no further context needed.
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.
Tip: the second prompt is also useful after a DSH upgrade — preset compositions and
restrict.jslive in the harness home, so an upgrade that rewrites the app directory does not touch them, but re-verifying is cheap.
| Requirement | Detail |
|---|---|
| DSH version | ≥ 0.1.2-alpha.3 required. Built & verified on 0.1.2-alpha.4. This release uses the 0.1.2-alpha.3 tool output contract (mcp-switch.js), the disposer-based tools.restrict + agent-preset/selected event (restrict.js), and the app-bundled @deepseek-ai/dsh-command-goal. The 0.1.0-rc.x line does not have these APIs — do not run this release on rc builds. |
| Host-plane services | lsp (LSP), session-query (session recall), schedule, tool-web (web_search) must be mounted in your host composition (cordis.patch.yml). These are standard in the shipped web profile. |
| Plugin versions | Profile plugins must match the app's main package version — see DSH's own AGENTS.md §1 for the latest-tag pitfall. |
| Model provider | Any provider configured in settings.yaml → llm-pi-ai.providers (see Model policy below). |
Both presets do NOT pin a model. All subagent lanes and the Oracle preset inherit the parent agent's model route, snapshotted at session/agent creation — the model selected when the session started (defaulting to your deployment default). This keeps the presets portable across deployments: no provider or model names are hardcoded, so they work on any DSH installation regardless of which LLM providers are configured.
⚠️ Switching the session model mid-flight does NOT re-route subagents. Subagents inherit
parent.options.modelat delegation time (verified: aftersession.selectModelto a heavier model, the parent's own requests switch but already-delegated lanes keep the creation-time model). The Oracle preset's top-level agent does follow a session switch (its requests resolve the current session model); its subagent lanes do not.
1. lane-models.js pinned { provider, model } ← explicit per-lane override
2. otherwise: parent agent's model at creation ← default (session's model when session started)
lane-models.js, no YAML editingEach lane's model is resolved from sisyphus/lane-models.js (a plain JS module that travels with the preset). null = inherit the session model (default); { provider, model } = pin that lane. Edit the file, then restart DSH:
// sisyphus/lane-models.js
// Replace <your-provider> with a key from YOUR settings.yaml -> llm-pi-ai.providers.
module.exports = {
explore: null, // inherit
oracle: { provider: '<your-provider>', model: '<heavy-reasoning-model>' }, // pinned example
vision: { provider: '<your-provider>', model: '<multimodal-model>' }, // read_image needs multimodal
librarian: null,
metis: null,
momus: null,
};
provider must be a key in your settings.yaml → llm-pi-ai.providers.agent.cordis.yml read their entry from this file via the loader's !!js + createRequire mechanism — you never edit the YAML structure.⚠️ Vision lane caveat:
read_imageonly works when the routed model declares image input. If the session model is text-only, either switch the session to an image-capable model or pinsubagent_visionvialane-models.jsto a multimodal model.
For multi-domain tasks, the workflow tool's agent(prompt, { provider, model }) supports runtime model overrides. The team-orchestration skill ships references/category-router.js — a template that routes each unit to the model its category deserves.
The shipped route table is fully portable: every category defaults to null = inherit the current session model, with zero hardcoded provider/model names. To enable per-domain routing, edit the CATEGORY_ROUTE table in category-router.js (a workflow script — the table must stay inline because workflow scripts run in a sandbox without require). Example configuration:
| category | model (example) |
|---|---|
visual-engineering | mimo-v2.5 (multimodal) |
ultrabrain / deep | deepseek-v4-pro (heavy reasoning only) |
artistry / writing / quick / unspecified-low | deepseek-v4-flash |
unspecified-high / unset / inherit | current session model |
You may wonder: why not just write the model into agent.cordis.yml directly? Three reasons force an indirection layer — a JS file that maps lanes/categories to actual models:
Presets are declarative, not executable. agent.cordis.yml is a static YAML declaration read once at preset mount. It cannot compute, read config, or branch — so a model choice that should follow the deployment's providers cannot be expressed in the YAML itself.
Hardcoded model names break portability. A preset that says model: deepseek-v4-pro fails on any deployment whose settings.yaml does not define that model or whose provider key differs. By keeping the mapping in a JS file that ships with defaults of null (inherit the session model), the preset runs anywhere; the user only edits one small file to opt into fixed routing.
The two mechanisms live in two different execution environments: