dsh-todos
Persistent shared to-do list for DeepSeek Harness: web UI tab + agent tools over one JSON store, writable from both sides
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 22, 2026
- Updated
- Aug 22, 2026
Introduction
dsh-todos
One persistent shared to-do list for DeepSeek Harness (DSH), writable from both sides:
- Owner — a "To-dos" tab in the web GUI: add tasks, change status/priority inline, delete. Active tasks first, settled ones grouped and dimmed.
- Agent — model tools
todos_list/todos_add/todos_update/todos_remove, so your agent can read and maintain the same list.
The store is one JSON file rewritten through a single in-process writer queue; human HTTP requests and agent tool calls never race. Survives restarts.

Model
| Field | Values |
|---|---|
| Status | pending · frozen · cancelled · done |
| Priority | low · normal · high · urgent (highest — renders bold red) |
done and cancelled rows are struck through; sorting is status → priority → age.
Install
cd ~/.dsh/profiles/web
rm -rf node_modules/@deepseek-ai/dsh-todos # drop any stale copy
pnpm add --force "file:/path/to/this/repo"
Add the composition row to ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: dsh-todos
name: '@deepseek-ai/dsh-todos'
Restart DSH web. Verify:
curl -s http://127.0.0.1:3080/todos # -> {"ok":true,"tasks":[...]}
curl -sI http://127.0.0.1:3080/plugins/@deepseek-ai/dsh-todos/client.js # 200
Boot-order note: the host half declares
inject: ['fs','webServer','tools']. If you fork this, keepwebServerin the inject list or your HTTP routes will silently skip at boot.
Configuration
| Key | Default | Meaning |
|---|---|---|
todosPath | /home/<you>/documents/todos.json* | absolute path of the JSON store |
workspaceRoot | /home/<you>/documents* | workspace root used for write-policy scoping |
* The defaults in host.js are the author's paths — set both overrides for
your machine via the plugin's config in your profile composition.
HTTP API
| Route | Body | Purpose |
|---|---|---|
GET /todos | — | full task list + open/total counts |
POST /todos/add | {text, status?, priority?} | create |
POST /todos/update | {id, text?, status?, priority?} | patch one task |
POST /todos/remove | {id} | delete |
Corrupt store files are never overwritten — fix or remove them by hand.
License
MIT — see LICENSE.