keep-reminder

August 21, 2026 · View on GitHub

English | 简体中文

npm version license

Inject a user-defined .keep-reminder file into the model context as a <system-reminder> user message.

Quick Start

  1. Install the plugin (choose one):
# A. Official command (backs onto pnpm; install pnpm first)
npm i -g pnpm
dsh plugin --profile web add keep-reminder

# B. Install with npm directly into the profile directory
cd ~/.dsh/profiles/web    # Windows: C:\Users\<you>\.dsh\profiles\web
npm install keep-reminder --save
  1. Mount it in the profile cordis.patch.yml. To load a plugin you must insert it, not target an id. A bare - id: keep-reminder list entry is a patch over an already-loaded entry — it warns entry "keep-reminder" not found and does nothing. Use the insert: form:
- insert:
    - id: keep-reminder
      name: 'keep-reminder'
      config:
        mode: turn              # session | turn | request
        file: '.keep-reminder'  # optional
  1. Create a .keep-reminder file in the session workspace root (see .keep-reminder.example) with the content to remember.
  2. Restart dsh web and start a new session.

What is the "session workspace root"?

It is the session's working directory (cwd); the plugin looks for .keep-reminder only there and does not search upward.

  • Web GUI: the folder you pick when creating the session. If you pick D:\ui-workspace\my-project, put it at D:\ui-workspace\my-project\.keep-reminder.
  • CLI / headless: the current directory where you run dsh (process.cwd()).

Configuration

KeyDefaultDescription
modeturnInjection frequency: session / turn / request
file.keep-reminderFile path; relative to the session working directory, or absolute

Three modes

modeWhen injected
sessionOnce per session (first step of the first turn)
turnOnce per turn (first step)
requestEvery model request

Comparison

AGENTS.md, direct user prompts, and this plugin all convey information to the model, but with different purposes:

DimensionAGENTS.mdUser promptkeep-reminder
Channel<system-reminder> user messageordinary user message<system-reminder> user message
Scopeglobal (~/.dsh) + project directoriesone messageone file in the workspace root
Frequencyonce per session, updated on changeone-shotsession/turn/request
Priorityguidance (below system prompt and direct user instructions)direct user instruction (highest)guidance (same as AGENTS.md)
Maintenanceedit a filewrite each timeedit a file
Live updateyesyes (re-read per injection)
Use caseteam / project conventionstemporary, one-offpersonal "must-remember" reminders

File-state handling

How the plugin treats the .keep-reminder file in each state:

StateBehavior
File missingSilently skipped — no injection, no error
File exists but empty/whitespaceSilently skipped — no injection
File has contentInjected as <system-reminder> per mode
Content modifiedNew content injected next turn/request (re-read live)
File deletedInjection stops from the next turn, silently
File restoredInjection resumes

Replacing deepseek-harness-zh-cn

keep-reminder is a general capability; deepseek-harness-zh-cn is one concrete use of it — put the "Chinese-first" rules into a .keep-reminder file to achieve the same effect (see .keep-reminder.example). The difference:

  • deepseek-harness-zh-cn: works out of the box, rules hard-coded;
  • keep-reminder: fully customizable — change the file to change the rules (not only language).

Development

Build

npm install
npm run build      # compiles src → lib/index.js

Mount locally

During development you can mount the compiled output directly via a file:// URL, with no package install. Remember to use the insert: form:

- insert:
    - id: keep-reminder
      name: 'file:///D:/ui-workspace/keep-reminder/lib/index.js'
      config:
        mode: turn

Adjust the URL to your checkout path.

Restart

npx @deepseek-ai/dsh web

Verify

# Windows
npx @deepseek-ai/dsh web --dump-config | findstr /C:"keep-reminder"

# Linux / macOS
npx @deepseek-ai/dsh web --dump-config | grep keep-reminder

Seeing the keep-reminder row with no not found warning means the plugin is mounted.

License

Apache-2.0