oh-my-dsh-slim
v0.5.2
Published
oh-my-opencode-slim-style specialist subagent delegation preset for DeepSeek Harness — ships the preset and seeds it into your DSH home automatically.
Maintainers
Readme
oh-my-dsh-slim
oh-my-dsh-slim preset packaged as a DeepSeek Harness plugin: installing it seeds the full specialist subagent delegation preset into your DSH home automatically — no manual directory copy.
中文说明见下方「中文」部分。
What it is
A DeepSeek Harness plugin that materializes the
oh-my-dsh-slim preset —
orchestrator + 5 specialist roles (oracle / designer / fixer / explorer /
librarian), background-first (continuable) delegation with settlement notices,
subagent_result read-only retrieval, JSON-driven per-role models / effort /
tool permissions, and librarian-scoped context7 + gh_grep MCP — into
$DSH_HOME/.agent-presets/oh-my-dsh-slim.
This package is only the installer/seeder. The preset itself is a standard DSH agent preset directory; see the repo README for the full feature set, configuration guide, and acceptance checklist.
Install (English)
dsh plugin --profile web add oh-my-dsh-slimor one-click from the DSH plugin marketplace. Then create a new session and
pick 极简角色委派 in Settings → Agent Presets (restart dsh web after
the first install).
Seed & upgrade semantics
- Target directory absent → seeds the bundled preset, writes a
.omds-seed.jsonversion marker - Target is git-managed (contains
.git) → left untouched - Target exists without a marker (unknown origin) → left untouched, warning logged
- Bundled version is newer than the seeded one → the old directory is backed up
as
oh-my-dsh-slim.bak-<timestamp>and the new version is seeded - Uninstalling this package does not remove the seeded preset directory
Customization
The preset directory is managed content — do not hand-edit it. Customization
goes through the settings card (Settings → Plugins → Plugin configuration →
oh-my-dsh-slim: per-role enabled/model/effort, advanced maxTokens/temperature)
or, on hosts without the settings channel, through
$DSH_HOME/oh-my-dsh-slim.json — upgrades never touch either. Model, effort
and temperature apply immediately (next delegation); role toggles
and tool permissions take effect after restarting DSH. See the
repo README.
Effort values come from the model catalog: none omits the reasoningEffort
parameter entirely (for models that do not support effort control, e.g. local
LLMs), off explicitly disables reasoning, and the rest (low/medium/
high/max/xhigh/…) are adapter-owned and open-ended. The card offers
exactly the levels the selected model declares; a configuration accepts any
well-formed level token, and a level the chosen model does not declare fails on
the first delegation with an error naming that model's levels.
Multiple configurations (multi-preset, 0.4.0)
The card's top Delegation configuration dropdown manages named
configurations, each backed by its own native agent preset (created through
the seeder's /omds profile RPCs). Choosing "+ New configuration" edits an
in-place draft copied from what you were just editing; Save first asks for
a display name only (the internal id is generated and never changes), then
creates a real preset at
$DSH_HOME/.agent-presets/profile-<prefix>-<hash>/ with its own
profile.json snapshot — which is how configurations stay isolated from each
other and from the bundled one. Set as default for new sessions writes
DSH's native agent-presets default setting (the same write the Agent preset
picker does). Features need the settings channel; preset-only installs keep
single-configuration behavior.
web_fetch (follows the host)
Host DSH 0.1.2+ ships web_fetch by default (built-in SSRF protection); preset
sessions and delegated children inherit it directly. No fetch-provider wiring
or webFetch switch ships with this preset anymore.
Known limits: delegated children cannot escalate sandbox permissions
DSH fixes a delegated child's file policy and approval state at startup, but
the bash/edit/write tool schemas still expose optional
sandbox_permissions / justification fields. Some models fill them
unprompted, triggering parameter-validation errors (invalid justification,
not strictly wider). The bundled sandbox-strip plugin removes the two
fields from role-subagent child calls at the tools/pre-execute waterfall and
appends a [sandbox: stripped ...] note to the result. In this preset's own
top-level sessions it additionally strips only the shapes DSH would always
reject before any approval prompt (empty justification, single-field pairs,
non-widening modes); legitimate escalation requests (strictly wider mode +
non-empty justification) are kept and still prompt for approval. This is a
preset-level workaround — the real fix is upstream (DSH should not expose
escalation fields to children with a fixed permission scope).
Known limits: background subagents and "early close"
DSH is turn-based — a model either outputs or ends its turn, so there is no
mechanism-level way to force it to wait for a background subagent. Some models
close with a final conclusion while a delegated child is still running,
claiming "done" without the child's result. The bundled early-close-context
plugin mitigates this with facts: a live "currently running background
subagents" block in the system prompt (re-rendered every turn), a "Decision
point" reminder on every successful delegation result, and a persona clause
against claiming completion while a child is unsettled. Since 0.3.3 the ledger
is three-state (running → reported → settled): a child's report is
shown as "已回报内容,等待正式完成通知(reported ≠ 完成)" — a report neither
concludes the child's turn nor changes its lifetime, and only the finish
notice (unconditional for every established child, incl. failure/cancel/
token-ceiling) settles it, so the model no longer announces "the subagent is
done" before the finish notice arrives. The model may still end its turn
before the child settles (no force-wait), but it no longer misreports
completion — the settle notice wakes it to integrate the result.
中文
把 oh-my-dsh-slim 预设打包成 DeepSeek Harness 插件:安装后自动把完整的角色委派预设播种到你的 DSH home, 无需手动复制目录。
预设内容:orchestrator + 5 个专职角色(oracle / designer / fixer / explorer /
librarian),后台优先派发(continuable)+ 完成通知唤醒,subagent_result
只读取回结果,JSON 驱动的按角色模型/effort/工具权限,librarian 独享
context7 + gh_grep MCP。
安装
dsh plugin --profile web add oh-my-dsh-slim或在 DSH 插件市场一键安装。装完重启 dsh web,新建会话后在
设置 → Agent 预设 选择「极简角色委派」。
播种与升级语义
- 目标目录不存在 → 自动播种内置预设,写入版本标记
.omds-seed.json - 目录由 git 管理(含
.git)→ 完全不动 - 目录存在但无版本标记(来历不明)→ 完全不动 + 日志警告
- 内置版本更新(插件升级后)→ 旧目录备份为
oh-my-dsh-slim.bak-<时间戳>→ 铺新版本 - 卸载本插件不会删除已播种的预设目录
自定义
预设目录是托管内容,请勿直接手改——所有自定义走设置卡片(设置 → 插件配置 →
oh-my-dsh-slim:角色开关/模型/思考强度、高级 maxTokens/temperature)或旧版
$DSH_HOME/oh-my-dsh-slim.json(无设置服务时),升级永不触碰。
模型/思考强度/温度改完立即生效(下一次委派);角色开关与工具权限需重启
DSH 生效。思考强度取值来自模型目录:none 表示完全不发送
reasoningEffort 参数(适用于不支持思考强度的模型,如本地 LLM);off 表示明确关闭推理;其余档位
(low/medium/high/max/xhigh/…)由各适配器自己定义、集合开放。卡片只列所选模型声明的档位;
配置侧接受任何形状合法的档位 token,而该模型未声明的档位会在第一次委派时报错并列出它真正支持的档位。
完整功能说明、配置指南与验收清单见
仓库 README。
多命名配置(multi-preset,0.4.0)
卡片顶部「委派配置」下拉管理多套命名配置,每套对应一个真实原生 Agent 预设(由播种器
的 /omds profile RPC 创建)。选「+ 新建配置」→ 原地编辑一份复制草稿 → 首次保存只填显示
名称(内部 ID 自动生成、永不改变)→ 生成 $DSH_HOME/.agent-presets/profile-<前缀>-<hash>/
目录 + 自带 profile.json 快照——多套配置互相隔离、也与内置配置隔离。设为新会话默认
写入 DSH 原生 agent-presets 默认设置(与 Agent 预设页点击卡片是同一处写入)。该功能依赖
settings 通道;仅装预设(无 npm 包)时保持单配置行为。
已知边界:委派子代理无法升级沙箱权限
DSH 在启动时固定了子代理的文件策略与审批状态,但 bash/edit/write 工具
schema 仍暴露可选的 sandbox_permissions/justification 字段;部分模型会无意识
填上,触发参数校验错误(invalid justification、not strictly wider)。随预设
分发的 sandbox-strip 插件会在 tools/pre-execute 阶段移除角色子代理调用中的
这两个字段,并在结果末尾附加 [sandbox: stripped ...] 提示。在本预设自己的顶层
会话中,它还会剥离那些在任何审批前都必然被拒的形态(空 justification、单字段
配对、非更宽模式);合法升级请求(更宽模式 + 非空理由)保留,照常请求批准。
这是预设层的临时缓解而非根治——真正修复在上游 DSH(不应向权限固定的子代理暴露
升级字段)。
已知边界:后台子代理与「提前收口」
DSH 是回合制——模型要么输出要么结束回合,机制层面无法强制它等待后台子代理;
部分模型会在子代理仍在运行时输出最终结论(谎称"已完成"而未整合子代理结果)。
随预设分发的 early-close-context 插件用事实供给缓解:system prompt 每回合
注入"当前运行中的后台子代理"块(与宿主 sandbox:policy 同一动态机制)、每次
派发成功的结果附加 "Decision point" 提醒、persona 增加"子代理未 settle 前不得
声称完成"条款。0.3.3 起账本三态(running → reported → settled):子代理的
report("Background subagent X reported:")被明确标注为"已回报内容,等待正式
完成通知(reported ≠ 完成)"——report 既不结束子代理回合也不改变其生命周期,
只有 finish 通知(对每个已建立子代理无条件发送,含失败/取消/token 上限路径)
才算结算,主模型不再提前数十秒宣布"子代理已完成"。模型仍可能在子代理完成前
结束回合(无强制等待),但不再谎报完成——settle 通知会唤醒主模型整合结果。
web_fetch(跟随宿主):宿主 DSH ≥ 0.1.2 默认内置 web_fetch(自带 SSRF 防护),
预设会话与委派子代理直接继承宿主默认;本预设不再自带 fetch provider 接线或 webFetch
开关。
