Skip to main content

dsh-taskboard

13Stars6Forks0Issues0Watchers

DSH Task Board plugin: five-column Kanban collaboration + 10 taskboard_* agent tools, supports task-project linking, scheduled execution, worktree code isolation, and structured acceptance.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
TypeScript
License
Apache-2.0
Branch
main
dsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add dsh-taskboard

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin cloader/dsh-taskboard for me: review the repository at https://github.com/cloader/dsh-taskboard first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

At a Glance

Add a five-column task board to the DeepSeek Harness (DSH) Web GUI: humans create and accept cards in the browser, AI agents claim, execute, and fill in results through 10 taskboard_* tools in terminal sessions, with bidirectional sync throughout and support for scheduled execution and Git Worktree code isolation.

Core Features

  • Five-column board + SSE real-time refresh: Planned / To Do / In Progress / Pending Acceptance / Completed five columns (plus blocked marker and deleted/archived sub-columns), any write from either side pushes to the other via SSE, board updates without manual refresh (src/shared/protocol.ts:31-44 / src/host/routes.ts:908-909)
  • Tasks bound to project (workspace) boundaries: Each task is bound to a DSH workspace, agents can only claim/execute others' tasks within their own project, cross-project grabbing is prohibited; after claiming, that session holds the lock, others cannot move it (src/host/protocol.ts:71-77 / src/host/tools.ts:208-216 / 552-578)
  • 10 taskboard_ agent tools*: Query board / read card / create card / modify card / move card / comment / list comments / soft delete / acceptance checklist / execution report — any agent session can call, all write operations use ifVersion optimistic concurrency (src/host/tools.ts:280-866)
  • Manual or scheduled execution: Each execution creates a brand new clean session in the task's project, with fixed model and preset; tasks can set cron expressions scanned and triggered by the host process every minute, runs normally even with browser closed (src/host/execution.ts:262-426 / src/host/scheduler.ts:46-98)
  • Git Worktree code isolation: By default each execution runs in a separate worktree at .dsh-worktrees/<taskID>/ + branch task/<title>+<taskID>, settlement collects commits / uncommitted changes / diff stat; non-git projects automatically degrade to original directory (execution record notes reason), one-click --no-ff merge during acceptance (src/host/execution.ts:480-526 / src/host/git.ts:107-298)
  • Acceptance checklist DoD and structured reports: When creating a card, set ≤30 acceptance items, agent uses taskboard_checklist to check off while working (with evidence notes), user sees "☑ n/m" on card with unchecked items highlighted in red; agent uses taskboard_execution_report to submit summary/changed files/self-verification/artifacts/remaining risks (src/shared/protocol.ts:615-656 / src/host/tools.ts:697-866 / README.md:24-26)
  • Task templates + JSON import/export: Built-in three templates — Bug Fix / Release Check / Routine Inspection, any task can "save as template"; top bar "⬇ JSON" for full backup, "⬆ Import" supports dry-run preview (new / override / invalid categorization), auto-backup before full replacement (src/host/templates.ts:15-56 / README.md:26-27)

Technical Implementation

  • Language: TypeScript (ESM, dual-build: host + browser), browser side uses React 18 + JSX (src/client/styles.ts / src/client/board-mount.tsx)
  • Key dependencies: @deepseek-ai/cordis (^4.0.1, host framework), @deepseek-ai/dsh-agent / -workspace / -tools / -system-prompt / -host-webserver (^0.1.0-rc.6, type-only import, not in build output), react ^18.3.1 (src/client browser side)
  • Architecture pattern: cordis dual-sided plugin — Node half (src/index.ts) injects tools + workspaceRegistry + agents + webServer, registers 10 taskboard_* tools, /dsh-taskboard/* JSON API, SSE event stream, execution service, scheduler; Browser half (src/client/index.ts) injects sidebar entry and board view after connection service is ready; bundle is injected via cordis.patch.yml with a plugin row, package.json#dsh.bundle.patch declares patch path
  • Entry files: src/index.ts (host half, exports name = 'dsh-taskboard', inject = ['tools','systemPrompt']) / src/client/index.ts (client half, exports name = 'dsh-taskboard/client', inject = ['connection']) / cordis.patch.yml (bundle layer declaration)

Use Cases

You want agents in DSH to handle a series of structured work — like "weekly routine inspection", "batch bug fixes", "pre-release checklist" — instead of users manually starting new sessions one by one in chat boxes. It's suitable for: teams using DSH but struggling with "which session is running what, how much has been done, how to accept" without a unified view; need to give agents project boundaries and concurrency control; and want to merge session records, commits, checklists, and reports into an acceptance-ready card. Worktree isolation is especially suitable for multiple people/agents modifying the same repository in parallel without conflicts. Regular ad-hoc conversations don't need this.

Prerequisites & Compatibility

DependencyMin VersionNotes
DeepSeek Harness (DSH)>= 0.1.0-rc.6devDependencies locks a set of @deepseek-ai/dsh-{agent,workspace,tools,system-prompt,host-webserver} ^0.1.0-rc.6 (package.json:57-61); type-only import, host must upgrade to corresponding version
NodeNot declaredSource uses node:fs/promises, node:child_process.execFile, node:os.homedir, node:path.join and other built-in APIs (src/host/store.ts:9, src/host/git.ts:171-179, src/host/sdk.ts:22-23)
PlatformmacOS / Windows / LinuxOnly cross-platform system command calls; child_process calls git with windowsHide: true (src/host/git.ts:176)
Native modulesNoneOnly Node built-ins node:fs/promises / node:child_process / node:os / node:path; no native bindings
External command gitAny versionworktree isolation requires git; non-git projects or git not in PATH automatically degrade to original directory (src/host/git.ts:107-111, 213 / src/host/execution.ts:480-526)
@deepseek-ai/cordis^4.0.1peer framework, provided by host DSH

Installation

dsh plugin --profile web add dsh-taskboard

Tip: Official @deepseek-ai/dsh-* packages only go into profile's bundles list, don't plugin add into dependencies, otherwise SDK dual instance shadowing occurs (README.md:50).

Configuration

ConfigTypeDescriptionDefault
DSH_TASKBOARD_MAX_CONCURRENTInteger env varMax concurrent tasks; when full, manual triggers error directly, scheduled tasks retry next window3
DSH_HOMEPath env varOverride ledger and template file root ($DSH_HOME/dsh-taskboard.json and dsh-taskboard-templates.json)~/.dsh
ATB_TRACEString env varSet to 1 to log all taskboard_* tool input/output to stderr for debugging; doesn't affect normal behaviorNot enabled
Task title lengthInput limitTitle 1..200 chars when creating/modifying card, reject if too longMax 200 chars
Execution prompt lengthInput limitTask prompt max 8000 charsMax 8000 chars
Checklist itemsInput limitMax 30 acceptance items per card; each max 200 chars; single checklist add ≤10 items30 / 200 / 10
Execution records retentionInternal policyKeep last 20 execution records per task in ledger, prune excess on each write20

Local file locations: Ledger $DSH_HOME/dsh-taskboard.json, templates $DSH_HOME/dsh-taskboard-templates.json. Full replacement import auto-writes ledger.backup-<timestamp>.json before writing (src/host/store.ts:112-117 / src/host/templates.ts:11).

FAQ

Q: Can tasks be dragged to any column?

A: No arbitrary dragging. The board has a built-in state machine: Planned → To Do / Cancelled, To Do → In Progress / Planned / Cancelled, In Progress → Pending Acceptance / To Do / Cancelled, Pending Acceptance → In Progress / To Do / Completed / Cancelled, Completed → Archived. Tasks being executed (held by session) have drag blocked, popup shows which session is running (src/shared/protocol.ts:50-68 / src/client/controller.ts).

Q: Why does the board card automatically collapse when I click another conversation while agent is executing?

A: This is the "yield" semantics of the sidebar entry: clicking a real session row or new session button in the sidebar temporarily closes the task board; clicking the board entry itself or a card restores it. Fixed a race condition in 0.4.1 where entry was nested inside newSession container causing click event to toggle repeatedly (README.md:70-71).

Q: The "✓ Done" button one-clicks through acceptance, why sometimes it asks for二次确认?

A: When a task has an acceptance checklist but not all items are checked, the button shows二次确认 and displays unchecked item count. Code level prohibits agents from moving tasks to "Completed" — even with full checklist checked doesn't equal done, must be clicked by user in UI (src/host/protocol-text.ts:28 / README.md:23-24).

Q: What's the difference between resume (↻) and immediate execution?

A: Immediate execution always starts a fresh worktree from main branch HEAD; resume keeps the previous worktree and branch (including uncommitted changes and commits), baseline takes current HEAD, evidence only counts this round's additions. Failure/cancellation also leaves evidence (commits and uncommitted as usual). Whether to degrade to original directory on resume failure depends on current isolation setting (src/host/execution.ts:138-146, 320-335 / src/shared/api.ts:100 / README.md:96-105).

Q: I installed DSH Desktop but can't see the board, what to do?

A: 0.4.2 fixed DSH Desktop Web shell removing data-pane attribute causing mount point failure — now using dual selector '[data-pane="conversation"], [class*="centerCol"]' as fallback. Theoretically 0.4.2+ works after restart; if you're on an earlier version, please upgrade to latest (README.md:65-66).

Q: How to move data to another machine?

A: Top bar "⬇ JSON" exports full set (custom format, includes ids/version), on new machine "⬆ Import" selects file for dry-run preview (new / override / invalid categorization), then choose "Merge" or "Full Replace". Full replace auto-backs up before writing to avoid mistakes; exported JSON is backup format and can be directly restored (README.md:26 / src/host/routes.ts:774-844).

Learning Curve

Advanced — the five-column board and manual trigger work out of the box, but to get worktree isolation, scheduled execution, templates, and agent tool system running smoothly requires understanding DSH's "project (workspace)" concept, cron five-field syntax, and Git Worktree basics; normal use just follows popup prompts, deep configuration follows README.

Known Issues & Limitations

  • Worktree isolation is a collaboration convention, not a sandbox: Execution session has full tool permissions, isolation relies on branch conventions, not suitable for running untrusted code (README.md:38). Non-git projects or unavailable git automatically degrade to original directory, execution record notes degradation reason (src/host/execution.ts:480-526)
  • Execution records and diff capped: Each task keeps last 20 executions, ledger won't be inflated by scheduled tasks; commit evidence max 50 items, uncommitted changes max 100 lines; diff capped at 128KB / 2000 lines, beyond that marked truncated (src/host/protocol.ts:401-412 / src/host/git.ts:37-66)
  • Preset parsing failure results in no-op execution: Execution sessions are created based on task's presetId combination, if preset doesn't exist or is corrupted, this execution fails directly, reason written to execution record, task returns to To Do — won't produce half-combined session (src/host/execution.ts:350-358 / README.md:88-89)
  • DSH Desktop shell compatibility: Early DSH Desktop's web shell removed data-pane, from 0.4.2 mount selector compatible with class*="centerCol" fallback; if you installed before 0.4.2 and can't see board, please upgrade (README.md:65-66)
  • Scheduled tasks "squeeze" when concurrent limit is full: After full, scheduled task's due window is preserved, retried next minute, no catch-up; if your tasks are heavy and intervals short, consider lowering frequency (src/host/scheduler.ts:77-86 / README.md:135)
  • Git operations for same repository are serial within process: Create/delete worktree / merge / delete branch for same repository execute serially to avoid git index.lock contention (src/host/git.ts:195-205 / README.md:97)
  • Agent tool call tracing not enabled by default: To debug agent protocol issues, set ATB_TRACE=1, otherwise tool calls don't log except errors (src/host/tools.ts:261-275)

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/cloader/dsh-taskboard)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory