dsh-workspace-mesh
Verifieddsh-workspace-mesh Β· v0.2.0 Β· Apache-2.0 Β· Web UI
Workspace mesh for DeepSeek Harness: declare which workspace lives on which host, dispatch tasks by workspace across paired DSH instances, and control the remote host lifecycle. The agent loop never leaves the owning machine.
Install
dsh plugin add dsh-workspace-mesh Confirm the layer applied with dsh --profile default --dump-config β see the install guide.
Source
Tags
Readme
dsh-workspace-mesh
Workspace mesh for DeepSeek Harness β the mesh is a grid of workspaces, not of agents.
Not resource remote-access. The agent loop never leaves the machine that owns the workspace; peers only exchange messages. See SPEC.md.
What it does
- Declares which workspace lives on which machine (
assignment.yml). - Exposes four tools to the model:
mesh_list_nodes,mesh_status,mesh_dispatch,mesh_task_status(contract: docs/reference/tools.md). - Dispatches a task to the session of the owning workspace and collects the result.
- Keeps execution local: only
workspace/*andsession/*methods are ever used. No bash, no file access.
Requirements
| dsh | >=0.2.1-rc.2 β declared in dsh.engines and checked when the bundle loads |
| Node.js | >=20 |
| Runtime deps | none; cordis services are detected at runtime (SPEC Β§9.4) |
Install
dsh plugin --profile web add dsh-workspace-mesh
Or load without installing, using an overlay patch (--patch):
- insert:
- id: mesh
name: dsh-workspace-mesh
Local development
pnpm install
pnpm build
dsh plugin --profile web add file:$(pwd)
pnpm verify runs the same gate as CI: build + typecheck + tests.
The full picture β the pack cloud dev chain, the local install, the released-package install β
is in docs/how-to/development.md.
Settings page
The browser half registers a read-only dashboard into the native settings navigation
(settings.section, id mesh) and a live-configuration card on the plugin's own detail page
(plugins.detail.section). It renders transport state, the peer roster, workspace placement and
recent tasks, and writes configuration through two routes registered inside Connection's fence:
| Route | Method | Purpose |
|---|---|---|
/api/mesh/state |
GET | Read-only snapshot |
/api/mesh/config |
POST | Validate + persist a config patch, apply the hot subset |
The same browser half also registers a Workspace mesh entry in the left rail: it lists every workspace this instance can reach, which machine owns it and whether that machine is online, and it can send that workspace a message. Remote workspaces are virtual there β nothing is copied, the agent loop runs on the owning machine.
Payloads, error codes and the hot/restart split: docs/reference/http-api.md. Configuration keys and their defaults: docs/reference/config.md.
Status
The tool surface, task board, roster derivation, settings page and config layering work and are covered by tests.
Cross-machine dispatch works over the peer's own web API (kind: "typert"): configure peers and
give each assignment a remote cwd, then mesh_dispatch creates a session on the owning machine
and collects the reply. Without peers the plugin still loads and mesh_dispatch reports
unavailable while the other three tools stay usable. The peer token rotates when the peer
restarts β see docs/reference/config.md Β§3 and
docs/explanation/roadmap.md.
Docs
docs/README.md is the only index. Start there.
License
Apache License 2.0 (Apache-2.0) β see LICENSE and NOTICE.
The reasoning behind that choice is in docs/explanation/decisions.md D11.