Introduction¶
Teams using the DeepSeek Harness Web GUI usually encounter two specific problems. The first is a lack of a task destination: tasks can only be described orally in the chat; once the window is closed and context is lost, the tasks are gone. A dedicated task panel requires starting another service, which is fragmented from the GUI. The second is a lack of an interface for the agent to hand over tasks: who picks up the task, how far it goes, and how results are written back—all rely on verbal agreement in the chat; progress and results are not traceable. Below is an introduction to the dsh-kanban plugin maintained by hfanshu, which incorporates both of these into the Web GUI: a multi-column kanban board for task management, and a set of native tools plus scheduled delivery to let AI pick up work and write back status.
What is this¶
dsh-kanban is a hot-swappable task kanban plugin for the DeepSeek Harness Web GUI, categorized as a workflow plugin in the documentation. It provides task management, drag-and-drop sorting, status tracking, and persistent storage, on top of which it integrates automatic task execution and synchronization with Feishu and other remote tables. The license is MIT, the repository version is 1.1.0, and the required Node version is ^22.13.0 || >=24.0.0.
Core Features¶
- Multi-column Kanban: Defaults to five columns:
planned(Planned),todo(To Do),in-progress(In Progress),review(Under Review),done(Done); column definitions can be changed incordis.patch.yml. - Drag-and-Drop Sorting: Cards can be dragged between columns, modifying
statusandorder. - Task Attributes: Four priority levels: Low/Medium/High/Urgent, due date, description, tags.
- SQLite Persistence: Path is
$DSH_HOME/dsh-kanban.db,DSH_HOMEdefaults to~/.dsh; Log mode WAL +synchronous=NORMAL. The plugin will checkpoint and close the connection upon uninstallation. - Automatic Tasks: A timer retrieves tasks from the “To Do” column and dispatches them to the AI; the AI writes back status via six native
kanban_*tools (kanban_list / claim / progress / comment / complete / fail). - Remote Sync: Dual backends for Feishu Bitable and WeCom Documents (Smart Table), supporting manual import/export, scheduled auto-pulling, and automatic push-back upon completion.
Installation and Enablement¶
The installation command comes from the repository README:
# Install from GitHub source code (recommended)
dsh plugin --profile web add github:hfanshu/dsh-kanban
# Or install from a local directory (development mode)
dsh plugin --profile web add link:/path/to/dsh-kanban
The official notes require DeepSeek Harness ≥ 0.2.1-rc.3 because the plugin uses sessionController for dispatch, session/event event hooks, and native tool registration. After installation, start the Web GUI and find the “Task Kanban” entry in the sidebar or top navigation.
Plugin configuration is written to cordis.patch.yml. The name in the actual repository file is dsh-kanban-plugin, defaulting to five columns:
- insert:
- id: kanban
name: 'dsh-kanban-plugin'
config:
enabled: true
maxTasks: 1000
columns:
- id: planned
title: '待规划'
color: '#9ca3af'
- id: todo
title: '待办'
color: '#60a5fa'
- id: in-progress
title: '进行中'
color: '#a78bfa'
- id: review
title: '评审中'
color: '#fbbf24'
- id: done
title: '已完成'
color: '#34d399'
The example configuration block in the README only lists three columns and sets name to dsh-kanban, which is inconsistent with the current repository file; follow the repository file.
How Automatic Tasks Run¶
The mechanism for automatic tasks is described in README.zh.md, following this order.
- When the plugin starts, it registers six native model tools and a system prompt workflow guide.
- When the timer triggers, the scheduler picks the first task from the “To Do” column and dispatches it to the AI based on the configured execution method: the default is “create a new independent session for each task”, using
sessionController.create()to open a new chat for the task and attaching it to the project it belongs to; the other option is “dispatch to an existing session”, usingagent.followup()to append the task to the current idle session, or the latest session if none are idle. - The AI executes the task in the session, using
kanban_*tools to report progress and record results. - Event-driven fulfillment: When a round ends cleanly -> task automatically moves to “Under Review” with an AI result summary, and after manual review, it is dragged to “Done”; if AI explicitly marks failure -> stays in “In Progress” for retry; infrastructure errors -> automatically returns to the next cycle of “To Do” for retry.
- For tasks with an execution session, clicking the card on the kanban board jumps directly to the corresponding chat.
Note a boundary: when there are no active sessions and the mode is “dispatch to existing session”, the task remains in “To Do” and retries in the next cycle; the “create independent session” mode does not depend on open sessions.
Operating Tasks via HTTP API¶
The plugin exposes interfaces with the /api/dsh-kanban prefix, with a unified response body of { "success": true, "data": ... } or { "success": false, "error": "..." }.
# Get all tasks (returned grouped by status)
curl http://localhost:3080/api/dsh-kanban/tasks
# Create task
curl -X POST http://localhost:3080/api/dsh-kanban/tasks \
-H "Content-Type: application/json" \
-d '{"title": "New Task", "priority": "high"}'
# Move task
curl -X PATCH http://localhost:3080/api/dsh-kanban/tasks/{task_id}/move \
-H "Content-Type: application/json" \
-d '{"status": "in-progress", "order": 0}'
# Delete task
curl -X DELETE http://localhost:3080/api/dsh-kanban/tasks/{task_id}
There are four more endpoints for the agent-oriented task protocol, with the accompanying skills/manage-task/SKILL.md providing the standard workflow:
# Claim task: move from todo/planned to in-progress, and emit task:claimed event
curl -X POST http://localhost:3080/api/dsh-kanban/tasks/claim \
-H "Content-Type: application/json" \
-d '{"taskId": "abc123", "message": "Start processing"}'
# Report intermediate progress: no status change, emit task:executing event
curl -X POST http://localhost:3080/api/dsh-kanban/tasks/progress \
-H "Content-Type: application/json" \
-d '{"taskId": "abc123", "message": "Data reading complete, writing code"}'
# Record result: emit task:comment event
curl -X POST http://localhost:3080/api/dsh-kanban/tasks/comment \
-H "Content-Type: application/json" \
-d '{"taskId": "abc123", "message": "Changes, verification conclusion, remaining risks"}'
# Complete task: move to done, emit task:completed event
curl -X POST http://localhost:3080/api/dsh-kanban/tasks/complete \
-H "Content-Type: application/json" \
-d '{"taskId": "abc123", "message": "Complete and verified"}'
SKILL.md explicitly requires “claim before acting”: only claim tasks in todo or planned status, only one at a time, and failures must be explicitly marked instead of leaving the task in an intermediate state. The value of this agreement lies in turning “who is working, where they are, and what the result is” into structured state, rather than scattered in the chat.
Feishu Sync Configuration¶
The prerequisite for Feishu integration is an Enterprise Self-Built App on the Feishu Open Platform and a Bitable; the app needs bitable:app permission and a published version. Fill in credentials and field mapping in cordis.patch.yml:
feishu:
appId: 'cli_xxxxxxxxxx'
appSecret: 'xxxxxxxxxxxxxxxxxxxx'
appToken: 'abc123def456'
tableId: 'tblXXX'
fieldMapping:
title: '标题'
description: '描述'
status: '状态'
priority: '优先级'
tags: '标签'
assignee: '负责人'
dueDate: '截止日期'
project: '项目'
The field names in the Bitable must match fieldMapping exactly (case-sensitive). There are three sync interfaces:
# Check Feishu connection status
GET /api/dsh-kanban/feishu/status
# Import tasks from Feishu to the kanban
POST /api/dsh-kanban/feishu/sync-from
# Export tasks from kanban to Feishu
POST /api/dsh-kanban/feishu/sync-to
There is also a GUI entry: the kanban interface has “Sync from Feishu” and “Sync to Feishu” buttons. Status values are automatically mapped; for example, Feishu’s “Planned, Planning” maps to kanban planned, “Under Review, Review” maps to review, and other values (including Failed/Cancelled) fall back to todo. README.zh.md also mentions the WeCom Documents (Smart Table) backend, requiring self-built app corpid and secret, trusted IP configuration, and accessible smart table documents. This part has no separate documentation; only the Feishu implementation is in feishu.ts in the repository, so it is recommended to refer to the source code for WeCom details.
Applicable Scenarios and Notes¶
Who it’s for: Developers already using DSH Web GUI to manage projects, who want a persistent task panel, and want AI to claim and write back status according to a fixed protocol. It is also suitable for teams needing to align task tables with Feishu Bitables.
Things to note:
- The plugin runs with the current DSH process permissions; automatic tasks will create sessions and execute commands under this process identity in the corresponding projects. Before installation, read the source code once to ensure
kanban_*tools and dispatch logic meet expectations. - The license is MIT, but the repository has few stars and update frequency is unknown; choosing it implies bearing the responsibility for future maintenance judgments.
- Automatic tasks rely on
sessionControllerandsession/event, requiring DSH ≥ 0.2.1-rc.3; lower versions cannot be installed or have incomplete functionality. - Regarding historical migration, the first startup will automatically import
dsh-kanban.json(and auto-task / feishu old config files), renaming original files to.bak.USAGE.mdstill mentions old JSON storage and old naming in the five columns, which is inconsistent with the SQLite description inREADME.zh.md; for judgment, refer to README and currentcordis.patch.yml. - When the API returns 401, the troubleshooting suggestion in related materials is to confirm that
dsh-authplugin is installed and enabled, and a valid JWT token is held.
Summary¶
The value of dsh-kanban lies in connecting the kanban board, AI execution, and remote tables into a single chain: humans create tasks, AI claims and executes them, status automatically flows to review, and results can be synced to Feishu. If you are already running multiple sessions in parallel in DSH Web GUI, it saves the mental burden of remembering to-dos in the chat window. See directory page at https://www.skillhub.cn/plugins/hfanshu/dsh-kanban , source code at https://github.com/hfanshu/dsh-kanban .