DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-checklists

m

dsh-checklists

Manifest valid

Session-scoped checklists for DeepSeek Harness — the agent tracks work as a tree, the model always sees a compact digest, and a read-only sidebar tab mirrors it.

UI (client)hasBundlePatch

dsh-checklists

Session-scoped checklists for DeepSeek Harness. The agent owns the list, the model always sees it, and a read-only sidebar tab mirrors it.

The problem this solves is not "having a list". It is having to dictate the list again every session. Here the checklist is created once, injected into the model context on every turn, and updated as work progresses — no reminders needed.

How it works

  1. The agent creates a checklist (checklist_create), optionally from a template.
  2. A compact digest of every checklist is injected into the prompt on each assembly, so the model always knows what is pending.
  3. The agent marks items as it finishes them (checklist_check).
  4. The sidebar tab shows the same tree, read-only, updated every two seconds.

If the agent forgets to mark something, you say so in chat and it fixes it.

Tools

ToolWhat it does
checklist_createCreates a list, from scratch or from a template (release, feature, debug, review)
checklist_addAppends items to an existing list, optionally under a given item
checklist_checkSets one or more items to todo · doing · done · blocked
checklist_nextReturns the next actionable leaf, its path, and how many remain
checklist_editChanges an item's text (not its state)
checklist_listFull tree with ids and states, for when the digest is truncated
checklist_deleteDeletes a list (by id or exact title)
checklist_remove_itemRemoves one item and everything nested under it
checklist_renameRenames a list; titles stay unique within the session
checklist_template_saveSaves a list as a reusable template for future sessions

Items are plain strings. Two leading spaces per level nest them:

["Deploy to staging", "  Smoke tests", "  Rollback plan"]

Install

dsh plugin --profile web add dsh-checklists

From a local build or tarball:

npm install
npm run build
npm pack
dsh plugin --profile dev add ./dsh-checklists-0.4.0.tgz
dsh --profile dev --dump-config        # the tool-checklist row should appear

Install into a test profile first. web and headless are distinct profiles, and so is the desktop app's desktop profile.

Configuration

Override the defaults on the plugin's entry in the profile's cordis.patch.yml:

- id: tool-checklist
  name: dsh-checklists
  config:
    maxDigestLines: 12      # lines of the injected digest
    maxItemsPerList: 200    # per-list item cap
    pruneDays: 14           # prune untouched sessions after N days (0 = never)
    # storageRoot: "D:/data/dsh-checklists"
    # templates:
    #   my-flow: ["Step 1", "  Sub-step", "Step 2"]

Data

$DSH_HOME/storages/dsh-checklist/
├─ sessions/<sessionId>.json    one document per session
└─ templates.json               templates shared across sessions

Writes are atomic (temp file + rename) and serialized per session. A corrupt document degrades to an empty list instead of failing the turn.

The package is dsh-checklists, but its storage directory keeps the dsh-checklist prefix. That path is data, not identity: renaming it would orphan every checklist already saved.

Sidebar tab

Checklist sidebar tab

Open the right sidebar, then the guide (+) and pick Checklist.

ActionHow
CollapseClick a list title, or the ▾ on any item with children
Auto-collapseWhen a new list appears, the others fold and the new one opens
Hide completedThe "Hide done" button, shown only when something is done
Copy as markdown"Copy" — paste into a PR or an issue
Edit an item's textDouble-click the text; Enter saves, Esc cancels

Item states remain agent-only: the tab cannot check anything off. The one write path is text editing, through POST /dsh-checklist/item with expectedText. If the item changed since the tab read it, the host answers 409 rather than overwriting the agent's edit.

HTTP routes

RouteMethodPurpose
/dsh-checklist/stateGETOne session's state (read-only, no-store)
/dsh-checklist/itemPOSTEdit an item's text, with a conflict guard
/dsh-checklist/client-probeGETClient load diagnostics

Language

The panel follows the harness locale: Spanish when locale starts with es, English for everything else. If the locale service is unavailable, it falls back to English instead of breaking.

Text addressed to the model — tool descriptions, rendered results, the digest — is English and is not translated: it is prompt material, not interface copy.

Design notes

  • One writer. The agent writes state; the sidebar writes text. No optimistic state, no two-tab divergence.
  • Digest budget. Each checklist gets an equal share of the line budget. Giving the first list the whole budget starved the rest: with two lists the second showed a single line, and a third never appeared.
  • Pending first. Truncation never hides unfinished work.
  • Client plugins load through window.__ModuleLoader__ and only require('react'). No bundler needed, but a static inject of a service that never resolves parks the plugin silently — apply never runs and nothing appears. Tab types must be registered lazily (ctx.inject([...])).

Verification

npm run typecheck
npm run test      # vitest
npm run smoke     # same checks, in-process, no child processes

npm run smoke exists because some sandboxes deny spawn with EPERM, and then Vitest cannot start its workers. It covers the model, digest, store, public state and both HTTP routes (23 checks) against the compiled lib/.

Known limits

  • No reordering and no drag-and-drop.
  • No edit history (who marked what, when).
  • Text only: there is no "add a checklist item from the panel" affordance.
  • Document format is version: 1; any change must migrate.
  • The tab polls every 2 s while mounted — deliberate, the route is read-only.

License

MIT

Comments

Loading…

Similar plugins

dsh-plugin-focus

by 863683348

Focus board for DeepSeek Harness agents: durable, model-maintained notes in the session workspace that pin the objective, constraints, and decisions across compaction and sessions, with automatic cont

Terminal & ClientsMemory & ContextSessions & MessagesManifest valid

★ 1

↓ 118/wk

MIT

JavaScript

Sep 11, 2026

dsh plugin --profile web add dsh-plugin-focus

by xarleyn

Per-session workspace scoping for DeepSeek Harness — expose only selected directories to agents with focused and isolated enforcement.

Manifest valid

★ 0

MIT

TypeScript

Sep 6, 2026

dsh plugin --profile web add dsh-session-scope

by catsenior507

Assembled context for DeepSeek Harness: a context tree over the session surface with per-node assemble modes (full / key / off), agent-authored presets, and a panel that decides what the model actuall

Terminal & ClientsSessions & MessagesManifest valid

★ 1

MIT

TypeScript

Oct 17, 2026

dsh plugin --profile web add @dsh-external/dsh-client-plugin-context-assembler

by Tpihis

Per-session todo lists for DeepSeek Harness: user-defined columns, completion, batch actions, undo and CSV export, plus agent access through a tool.

Manifest valid

★ 0

MIT

JavaScript

Oct 12, 2026

dsh plugin --profile web add dsh-session-todos

by Som2233

Tag every DeepSeek Harness session as a long-term or short-term task plus its agent mode, and auto-archive it when its window elapses.

Development & InfrastructureSessions & MessagesManifest valid

★ 2

MIT

JavaScript

Oct 7, 2026

dsh plugin --profile web add dsh-session-task-tags

by Neo65536-engineer

Read-only work reports for DeepSeek Harness: reconstruct what an agent task actually did from session logs — tools used, files read/written, commands run, test results, failures, token usage, and whether it finished. Fully offline, no API key, no data leaves your machine.

Tools & CapabilitiesDevelopment & InfrastructureManifest valid

★ 1

MIT

JavaScript

Sep 26, 2026

dsh plugin --profile web add dsh-agent-log