The project's README from github.com/Aisland-SJL/dsh-worktable. As one markdown file: README.md.
English · 简体中文
An agent-project workbench for DeepSeek Harness — a sidebar app drawer that turns every project into dockable windows, plus a built-in control room that watches them all in real time.
![]() |
🖥️ Control room — the built-in default project: a live card grid watching every project (working / needs you / done) with glassmorphism cards on a blueprint grid |
![]() |
🧩 Worktable sidebar — the app drawer: projects, shortcuts and the pinned control-room entry |
![]() |
🪟 Our projects — every project opens as a dockable split workspace (resident apps like Travel Atlas included) |
| 🧩 Plugin type | Cordis plugin — host routes + web client, pure additive (no official plugin replaced) |
| 🪟 Workspace engine | Self-built split engine rendered into the host shell overlay seat |
| 💬 Chat pane | Reuses the host conversation — the plugin only selects sessions (sessions.open) |
| 📡 Status data | Mirror of the host session runtime snapshots (subscription-driven) |
| 💾 State | localStorage only (dsh.worktable.*); no workspace files touched |
| 🎨 UI | TypeScript + React (host externals) + vanilla CSS, dark-first with light theme |
Install (pick one):
A · one-liner (recommended) — straight from the GitHub Release tarball, no Git needed:
dsh plugin --profile web add "https://github.com/Aisland-SJL/dsh-worktable/releases/latest/download/dsh-worktable.tgz"
B · local clone (for hacking on the source) — link: accepts a local absolute path only (no spaces in the path):
git clone https://github.com/Aisland-SJL/dsh-worktable.git
dsh plugin --profile web add "link:<absolute path of the cloned dsh-worktable directory>/01_content"
# e.g. cloned into D:\tools → dsh plugin --profile web add "link:D:/tools/dsh-worktable/01_content"
Either way the add command registers dsh-worktable in the profile bundle list (writes to ~/.dsh, may ask for authorization). If the dsh command is missing, use npx @deepseek-ai/dsh instead.
Restart the DSH web process, refresh the GUI
Open the control room: click the pinned 🖥️ control-room card → bind one conversation (join existing or create new) → you get the live card grid
Create projects: sidebar + → pick a layout preset, set a project folder
One package ships the host Cordis plugin and the web client:
/api/worktable/* routes — health, file system, git, file read/write, site serving, mkdir, workspaces, native skin template; WebSocket /api/worktable/term for the terminal pane (PowerShell on Windows)widget-result.json into the project folder on completion; the client mounts the artifact into the addressed window and locks itcd 01_content
npm install
npm run build # lib/index.js + lib/client.js
node --check lib/index.js
01_content — building from the repo root writes lib/ to the wrong place while the host keeps loading the old bundlewindow.__ModuleLoader__.load handshake; react and @deepseek-ai/* stay external04_test/functional-diag.cjs (20 steps, strict gate) plus targeted probes (control room, bind panel, collapsed rail, model inheritance), the path matrix (04_test/pathutil-matrix.cjs) and update-check scenarios (04_test/probe-update-scenarios.cjs)04_test/anchor-dom.test.mjs (8 scenarios, both host conversation-root shapes) and data-home resolution regression 04_test/server-home.test.mjs (3 groups: no-cycle fallback, path expansion, official-branch fixture)Q: After a DeepSeek Harness update, the worktable fails to open / the service fails to start?
Don't panic: your data is safe — projects, bindings and layouts live in the browser (localStorage), and project files stay in your own project folders; upgrading or repairing never touches them. Pick the case that matches:
Case A: Harness works, only the worktable needs updating
Open the worktable "Settings" → click "Check now"; when the amber update badge appears next to the worktable title, click it and choose "Copy AI prompt" to hand the upgrade to your AI assistant;
Or simply re-run the install command (always installs the latest), then restart dsh web and refresh:
dsh plugin --profile web add "https://github.com/Aisland-SJL/dsh-worktable/releases/latest/download/dsh-worktable.tgz"
Case B: Harness itself is down (service fails to start / "Failed to load plugins")
npx @deepseek-ai/dsh web;Help me fix DeepSeek Harness custom-plugin loading (the error is usually "Failed to load plugins" or the service failing to start):
- Run npx @deepseek-ai/dsh web to upgrade to the latest and start; if it works, done.
- If it still fails: open ~/.dsh/profiles/web/package.json, find every dependency starting with link:, and compute their common parent directory (e.g. if all plugins live under D:\projects, the parent is D:\projects).
- Create a node_modules directory junction in that parent pointing to ~/.dsh/profiles/node_modules: mklink /J "\node_modules" "%USERPROFILE%.dsh\profiles\node_modules"; if that parent already has a node_modules, retry one level up.
- Restart dsh web and open http://127.0.0.1:3080 to confirm the worktable is back.
This issue has been reported to the DeepSeek Harness team and is being fixed; upgrading after the fix ships resolves it permanently.
Every window title bar has a small annotate button (chat-bubble with a plus) next to the collapse toggle. Click it, your cursor becomes a blue speech bubble — click anywhere in a window to drop an input box, type what you want changed ("make this text bigger"), and hit ✓. The message is packaged (window number + coordinates + the clicked element + your request), filled into the chat input without sending — press Enter when ready, and the agent works through the annotation protocol (verify with a screenshot or the window, or ask one targeted question instead of guessing).
localStorage) — projects, bindings and views do not sync across machineswidget-result.json in the project folderNo telemetry, no network calls beyond the host APIs and the plugin routes. All user state stays in localStorage. Optional update check: a read-only GET to the GitHub Releases API (automatic at most once a day, plus a manual "Check now" button); nothing is uploaded, and it can be disabled in Settings.
MIT