Introduction

DeepSeek Harness (DSH) adopts a plugin-based architecture to extend functionality. The built-in todo_write tool is mainly used to record an agent’s execution steps in the current session, with a lifecycle limited to a single conversation. When personal to-do items need to be managed across sessions while retaining handoff notes, the dsh-followup-todo plugin provides a solution.

Plugin Overview

This plugin provides users with a cross-session to-do list rather than an agent task list.
* Core Value: Each to-do item includes structured handoff notes (context + inject), so a new session can read them directly and get started.
* Maintainer: Tiaoma123
* Category: Memory
* License: MIT

Core Design: Context + Inject

Each to-do item includes two free-text fields used to build the context for a new session:
* Context (Background): Records established facts, conclusions, file paths, or hard constraints, without a step-by-step process log.
* Inject (Injected Content): Specifies the next action, goal, and acceptance criteria, marking ambiguous points as “to be confirmed”.

Click “Continue” in the panel or the to-do bar above the input box, and the generated handoff prompt is automatically filled into the input box, so the new session starts with complete context.

Installation and Activation

This plugin is not published to npm and must be installed directly from GitHub. The installation command is as follows:

dsh plugin --profile <profile> add github:Tiaoma123/dsh-followup-todo

Notes:
* This package self-mounts via cordis.patch.yml, so it is ready to use immediately after installation without manually editing configuration files.
* Do not mount repeatedly: Repeated mounting causes route conflicts and may trigger an error at startup. If you previously mounted it manually, delete the old configuration first.

Model Tools

The plugin registers four model tools, supporting priority management (P0-P3) and archiving.

  1. todo_add
    • Add a to-do item.
    • Parameters: title (required), priority (default P2), context, inject, and workspace (optional).
  2. todo_list
    • View the list.
    • Parameters: filter (supports open/done/all/archived).
  3. todo_done
    • Mark as completed (the item remains in the list).
  4. todo_archive
    • Mark as completed and archive it (remove it from the active view; it can be reviewed using filter=archived).

Browser-side Interface

This interface is only available in the Web UI; Headless Profile has no UI.
* Session header button: Displays a badge with the number of incomplete items; click it to expand a floating panel.
* Floating panel: Supports adding, checking off, archiving, and deleting items; priority P0-P3 can be selected, and filter tabs can be switched.
* To-do bar above the input box: Shows the to-do count and hints; expanding it lists the items. Clicking an item injects the handoff content into the input box.

Data Storage

Data is stored as JSON files in the user directory, sharded by workspace:
* Path format: ~/.dsh/followup-todos-<base64url(absolute workspace path)>.json
* Users can back up this file directly.

Differences from the Built-in todo_write

  • List ownership: The built-in tool belongs to the agent, while this plugin belongs to the user.
  • Lifecycle: The built-in tool is limited to the current session, while this plugin supports cross-session use, archiving, and review.
  • Storage location: The built-in tool is stored in the session context, while this plugin is stored as a separate JSON file.

Known Limitations and Security Notes

  • HTTP authentication: The new version uses authentication to block unauthorized requests. Older DSH versions fall back to no authentication; if the Web service is exposed to a non-loopback address, you must add access control yourself.
  • Data synchronization: The list refreshes using a 3-second global polling interval, not real-time push, so multiple windows may experience brief delays.
  • UI limitation: Only the Web interface is implemented; Headless Profile cannot use the visual features.

Maintenance Status

This is a personal project with no maintenance commitment. It uses the MIT license and can be freely forked.