
rootkiller6788/dsh-flow
dsh-flow
A pluginized microkernel architecture for building, orchestrating, and extending multi-agent systems in DeepSeek Harness.
Install
npx @deepseek-ai/dsh plugin --profile web add github:rootkiller6788/dsh-flowRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-flow)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from rootkiller6788/dsh-flow, cleaned of badges and images.
dsh-flow
中文 · English
What stalls long or complex work is usually not "not enough tools". It is that the executor cannot be swapped, the state has no source of truth, and the boundaries have no assertions — a task that has run for hours crashes once and cannot say how far it got; changing how work is executed means changing the core, and so does adding a kind of team source.
dsh-flow solves all three at the level of kernel shape: rules/ is a pure core (no IO, no ctx), execution and sources are declared seams, and kernel.js is the single composition root that decides which implementation this deployment attaches.
It and dsh-agent-teams are two kernel shapes: the same capability surface, the opposite internal shape. That opposition is where this document starts.
Two kernel shapes
In the host's own words, the difference is whether a plugin divides its own internals into services. The host frames this as "everything is a plugin" and "Plugins, not loop changes", which in code comes down to the core / seam split:
| Usual phrasing | The host's own terms | The evidence |
|---|---|---|
| microkernel | Keep core as small as possible and hang every capability off a declared seam; new behaviour goes on an extension point rather than into core | dsh-flow: a rules/ pure core (no IO, no ctx) + three services + one composition root |
| monolithic kernel | No seam; the capabilities all live inside core | dsh-agent-teams: src/ is one flat plane (17 TS modules + 13 under client/), importing each other freely, with no mechanism asserting module boundaries |
A seam comprises three roles — Service Definition / Provider / Consumer — and is only complete with all three. In dsh-flow they line up plainly: runner/interface.js is the definition, manual.js and subagents.js are the two Providers, and tools/ is the Consumer.
Both are DSH plugins, and both attach to seams the host provides — the difference is whether the plugin has seams of its own. Once the functionality is split into core and seam, "add another way to execute" is adding a Provider and "add another kind of team source" is one register() call; on a flat src/, that work is changing the core.
So this is an opposition, not an absorption: the capability surfaces can be aligned (the 13 tools map one to one to agent_teams_*, and the 31 differential checks in pnpm test:diff guard that line), but the two kernel shapes cannot give the same set of guarantees.
What it is like to use
…
