goecho/dsh-generation
Fork agent presets and run tasks on the next generation. Make, not a compiler.
项目介绍Project Overview
dsh-generation 是 DeepSeek Harness 插件,用于复制现有 agent 预设,并在新一代会话中挂载运行任务。它提供 generation_fork 与 generation_run:先复制 standard/minimal/code 等预设,由 Creator 用 fs/bash 编辑,再启动独立 worker 执行自包含任务。适合需要保留代际谱系、避免热改当前会话时使用。注意 fork 和 run 均需人工批准,worker 不能是 cordis,且等同 shell 访问风险。
dsh-generation is a DeepSeek Harness plugin that forks agent presets and runs tasks on a new generation. It provides generation_fork to copy a known-good preset and generation_run to mount that preset in a fresh worker session with a self-contained task. Use it when iterating presets across generations without recomposing the current session. Caveat: forks and runs require human approval, workers cannot be Creator/cordis presets, and enabled Creator access should be treated like shell access.
请帮我了解并安装插件:【dsh-generation】【https://github.com/goecho/dsh-generation】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:goecho/dsh-generation#fb2f69d
把 goecho/dsh-generation 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-generation
English | 中文
A DeepSeek Harness plugin that forks agent presets and runs a task on the next generation.
It is make, not a compiler. Creator mode is already the compiler: it can inspect the runtime, edit files, and author presets. This plugin only records a lineage — copy a known-good preset, let the meta agent edit that copy with ordinary fs / bash, then start a new working session on it.
Install
dsh plugin --profile web add github:goecho/dsh-generation#fb2f69d
Then restart dsh --profile web so the host profile reloads. Pin that commit, or a later SHA from the commit history, after you have read the source. The package is plain JavaScript, so git installs do not need a prepare build allowlist.
Then open a Creator mode (cordis) session — or a copy of that preset whose composition still has a plugin row name: '@deepseek-ai/dsh-tool-cordis'.
dsh plugin add installs into the host profile, so the two tools are registered globally. This plugin then hides them from every non-Creator session (including user copies of standard / minimal / code) and from every agent with origin: subagent, including the workers generation_run starts. Execute still refuses a non-Creator caller.
This repository already has the dsh-plugin, dsh, and deepseek-harness GitHub topics.
Why
DeepSeek Harness splits composition into a Host plane (sandbox, model route, persistence) and an Agent plane (tools, persona, prompt). A session’s preset is locked once a turn has run, so you cannot hot-swap the working agent’s toolset without stranding logged tool calls.
The useful bootstrap is the same as a C compiler: each generation is a new binary. Stage N writes files for stage N+1; you do not patch the process that is currently compiling.
What it is not
- Not a replacement for Creator mode (
cordispreset) orcordis_define/cordis_run - Not a way to recompose the current session, or to give an in-process subagent a different preset
- Not a YAML/JS generator, scorer, or auto-promoter of the default creator
- Not a Host-plane kernel: it does not add services, session event types, or sandbox backends
- It does not depend on
@deepseek-ai/dsh-tools/@deepseek-ai/dsh-llm. Tools are registered as raw definitions so a second copy of those packages cannot split the host’s module identity.
Design
Four rules:
- The kernel stays assembly. No new Host services, no new
SessionEventtypes, no unlockingagent-preset-locked. - A generation is a new process of composition.
generation_runusesagents.create+agentPresets.mount(id), neverrecomposeon the meta session and nevercomposeFrom(in-process children inherit the parent preset). - This plugin is make. It does not write
agent.cordis.yml. Editing uses tools the creator preset already has. - A human is stage3.
forkandrungo throughtools/pre-executeask. Nothing is promoted to the default creator automatically. Lineage is the meta session log (tool/call/tool/result), not a second database.
meta session (cordis + this plugin)
→ generation_fork copy a preset to a new id
→ fs / bash edit the copy (not this plugin)
→ generation_run new agent, mount that id, run the task, dispose
→ summary back into the meta log
→ fork again or stop
Working generations should fork from standard, minimal, or code.
Tools
| Tool | Does | Does not |
|---|---|---|
generation_fork |
agentPresets.copy(from, id); writes purpose into the new preset.yml description; returns id and directory |
Accept composition YAML (authoring stays copy-only); overwrite an existing id |
generation_run |
After approval, create an agent, mount the preset, followup(task), wait until idle, cancel, or a 15-minute timeout, return sessionId, stopReason, tool names used, last assistant text, then dispose |
Run Creator mode as the worker; inherit the meta toolset; leave a half-created agent on failure |
generation_fork
| Argument | Required | Meaning |
|---|---|---|
from |
yes | Preset id to copy. Prefer standard, minimal, or code. |
id |
yes | New preset id (/^[a-z0-9][a-z0-9-]*$/). Must not already exist. |
purpose |
yes | One sentence written into the new preset.yml description. |
Returns { ok, id, from, purpose, path, compositionPath } where path is the preset directory.
generation_run
| Argument | Required | Meaning |
|---|---|---|
preset |
yes | Preset id to mount on the new working session. Must not be cordis. |
task |
yes | Self-contained follow-up for the worker. It does not see meta history. |
Refuses a worker whose composition still has a plugin row name: '@deepseek-ai/dsh-tool-cordis'. Inherits the meta session’s workspace cwd, records origin: subagent and parentSession so logs chain, and does not dump the full worker transcript into the meta context. If the worker never goes idle, it is cancelled after 15 minutes (stopReason: "timeout"). Domain failures keep { ok: false } but render as ERROR: so the model notices.
Returns { ok, sessionId, presetId, stopReason, toolsUsed, lastAssistantText }.
Trust
Treat a Creator session that can fork and run generations as shell access. Mitigation in v1:
- Human approval on every fork and every run
- Worker preset cannot be
cordis, and cannot still carry a@deepseek-ai/dsh-tool-cordisplugin row - Edits belong under the new preset directory
- Model-written JavaScript is never auto-mounted via
cordis_run
Develop
npm test
There are no @deepseek-ai/* runtime dependencies. The tests mock ctx.tools / ctx.agentPresets / ctx.agents. GitHub Actions runs the same npm test on Node 22.
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS