dsh-tasks-panel: Add to-do list, calendar history, and Feishu reminders to the DSH sidebar

Preface

People building agent applications often face the same trade-off: where to put the task list. Opening a separate to-do tool means switching back and forth between the current session and that tool; letting the agent just note it down in the conversation means it scatters after two days, and it’s unclear which day things were done. dsh-tasks-panel’s approach is to embed this panel into DeepSeek Harness’s own sidebar: the agent reads and writes tasks via tools, people click to view in the same session, and when a reminder is due, a Feishu message is pushed to the phone one minute before.

Below is an introduction to this plugin. It is maintained by tortoise014, categorized as a client, currently has 1 star on GitHub, version 0.5.4, and MIT license. It does not solve the complexity of task management itself, but only solves the issue of “the task list and current work not being in the same place.”

Is this a suitable choice

Let’s clarify the boundaries first. It does three things: a to-do list with date and time; a monthly calendar that traces task history; and a Feishu group bot push triggered at the due time. It does not handle collaboration, multi-device sync, priority sorting, nor will it replace project management tools. If your need is to break a complete project into assignable subtasks, this panel is not suitable.

It is written as a DSH bundle, installed via command line, no git clone needed. The browser and host communicate via POST /api/dsh-tasks-panel/op, and data is stored entirely in the local dsh_tasks storage domain. Aside from the Feishu push itself, there are no other outbound requests.

Core Features

  1. Sidebar Entry. Adds an icon to the DSH rail. Opening it shows the panel. Back returns to your previous session, plugin page, or Schedules.
  2. To-Do List. Supports adding, completing, reopening, and deleting. Date defaults to today, time defaults to the next 5-minute mark; clicking × clears the date, turning it into a note without a date.
  3. Hover to see today. Stopping the mouse over the sidebar icon floats a schedule of today’s tasks, including overdue and incomplete counts, without needing to open it or switch context.
  4. History Calendar. Adding, completing, reopening, editing, and deleting all record an event in the grid of the current month; clicking a day reads that day’s records. Note that this table only records what happened, not scheduling.
  5. Hover Card Preview. Pointing the mouse at a task or day shows title, note, due date and time, source, associated session, and timestamp. The card avoids sidebar overlap and doesn’t cover it.
  6. Feishu Due-Time Reminder. Paste a group bot webhook in settings once; at the due time, the host pushes ⏰ title / time / note to the phone. After successful push, the task is closed; if you don’t want auto-close, uncheck “Close the task once it is pushed” in settings.
  7. Agent Tool. task_write lets the assistant add and close tasks. The action set is consistent with the UI, so the two paths won’t diverge.

Interface and Details

There are a few design points worth mentioning individually as they directly affect daily usage.

First, the reminder rule is strict: only tasks with both date and time filled in will be reminded. Filling only the date means “do it today,” not a date, and is muted by default.

Second, the host scans every 30 seconds, requiring DSH to be running. So if you close the app, pushing is impossible. Slots for the same date and time are pushed only once, even after restart. Moving a task to a new time re-arms the reminder.

Third, there is a 6-hour grace window. If a time has passed more than 6 hours, the plugin only marks it on the interface and does not push. This way, waking up from a laptop nap won’t dump yesterday’s stuff on you at 9 AM. Tasks skipped by this window remain open; silence does not equal completion.

Fourth, the setting switch saves itself, including the webhook. Otherwise, “clicked the switch then forgot to save” is the source of enabled: false.

Fifth, task_write has no reminder-related actions. Pushing to the phone is initiated by a person, not the agent. The panel shows the last send time and last delivery error. There is a Send a test in settings to confirm the phone receives it before trusting it. For Feishu bots that support signature verification, just paste the secret.

Installation and Enablement

The installation command comes from the README, it is just this one line:

plugin_manager install_bundle target:"dsh-tasks-panel"

If the local checkout is in an absolute path, you can also use target:"<absolute path to a local checkout>". After installation, open the panel. The first time there is a short guide explaining three things: write a task, hover sidebar to see today, paste webhook to enable reminder. The UI and guide are bilingual, following the app’s locale.

Node 20 or higher is required because engines specifies node >=20. There is only one dependency, zod@^3.25.76. The README mentions that when installing via link, pnpm does not install dependencies, so the repository vendored zod@3.25.76 under node_modules/zod; npm installs from the registry, so the published tarball intentionally excludes node_modules.

Where Data is Stored

Everything is in the dsh_tasks storage domain, containing tasks and events tables, plus a global record storing reminder settings. The interface between browser and host is POST /api/dsh-tasks-panel/op. There is no server, no cloud sync; changing machines requires migrating data yourself.

Testing and Maintenance

npm test runs three suites sequentially, all targeting the real bundle, no self-mocking.

  1. node test/host.mjs (38 items), covering storage operations, time normalization, HTTP op interface, and task_write tool.
  2. node test/reminders.mjs (34 items), covering Feishu scheduling, due-time identification, pushing once per slot, 6-hour grace window, auto-complete after delivery, one-time cleanup of previously reminded tasks before 0.5.2, signature, error reporting, and setting guards.
  3. node test/ui.mjs (73 items), rendering the client in jsdom: slot registration, to-do rows, three hover cards, input defaults, first-run guide, settings card, and two switches.

The host suite uses a fake Cordis context and in-memory tables to import index.js. The UI suite loads client.js via a fake window.__ModuleLoader__ then renders into jsdom. GitHub Actions runs the same tests on Node 20 and 22, and publishes to npm via OIDC trusted publishing from tags.

Use Cases and Notes

Suitable for: People whose daily work is within a DSH session, who want the task list and session together, and want to receive a phone reminder at the due time. Also suitable for developers who want to use task_write to let the agent maintain tasks themselves without giving the reminder permission to the agent.

Points to note:

  1. The plugin runs with the permissions of the current DSH process and can read what the host can read. Before installing, you should open the source code and verify that client.js, index.js, and the version you are looking at are consistent.
  2. The license is MIT, you can see LICENSE in the repository.
  3. Feishu push requires a group bot webhook, which is the only step that goes out to the network. Confirm the boundary of the group the webhook belongs to before pasting. After pasting, if no longer used, suggest revoking or deleting. For bots supporting signature verification, just paste the secret into the panel, do not write it into the repository or commit logs.
  4. The repository does not declare a data migration tool. Before changing machines, reinstalling, or clearing dsh_tasks, confirm if you still need the history in tasks and events.
  5. This plugin comes from the community directory. The directory site is an independent site and has no official affiliation with DeepSeek / HF. It is not a project in the official app store, and should not be referenced as an official plugin.

Summary

If the task list is already scattered across several places, or you need a due-time reminder without opening the app, installing a sidebar panel is more convenient than opening another tool. Its scope is small: to-do, history calendar, Feishu due-time reminder, plus task_write. If you want to take a look at the implementation yourself, the directory page is https://www.skillhub.cn/plugins/tortoise014/dsh-tasks-panel, and the source code is at https://github.com/tortoise014/dsh-tasks-panel.

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye