Introduction¶
When developing and operating within DSH (DeepSeek Harness), we often encounter requirements like jotting down a thought, pasting a screenshot, or leaving a to-do item mid-session without interrupting the workflow. Common practices involve opening another note-taking app or stuffing content into the session context; the former adds an extra switch, while the latter makes the context longer and harder to search.
dsh-sticky-notes is a plugin designed for this scenario: it places an icon in the DSH sidebar; clicking it reveals a sticky note wall. All read and write operations are performed on the local disk, so content is not lost after a page refresh or Harness restart. At the same time, it exposes a tool for model invocation, allowing Sessions or IM bots to write notes onto the wall.
What is it¶
Maintained by LoveStudyXin, it is categorized as “Memory”. The plugin package includes all resources. After installation, it does not depend on additional dependencies, build steps, or configuration. The target DSH version is engines.dsh: ^0.2.1-alpha.2 (requires the build to include the sidebar.panellist slot). It solves the problem of providing a lightweight, searchable, and backupable local sticky note space within the conversation flow, and allows automated tools to write into it.
Core Features¶
The capabilities introduced below come from the plugin README and can be used directly in the panel after installation.
- Sidebar Entry: An icon appears in the left column; click to open the sticky note wall.
- Quick Record: Type in the top input box and press
↵to add a note;⇧↵for a new line,⌘/Ctrl + ↵also works. - Image Notes: Supports pasting screenshots (
⌘V/Ctrl+V), dragging images onto the wall, or selecting files via the attachment button. Each note can have up to 6 PNG/JPG/GIF/WebP images, with a single file size not exceeding 8 MB. Thumbnails are displayed on the paper; clicking shows the full image,Esccloses it. - Visuals: Six paper colors, slight tilt, masonry layout.
- In-place Edit: Click note text to edit; click elsewhere or press
⌘/Ctrl + ↵to save,Escto cancel. - Pin and Delete: Pinning moves the note to the top; a 6-second undo prompt appears after deletion.
- Search: Filters the entire wall; save status is displayed at the bottom.
- Local Backup, Export, Import: A backup of the wall file on disk is performed before each overwrite, keeping up to the 30 most recent backups. One-click recovery is available in the panel header, or export/import as JSON.
The text follows the current DSH language environment (Chinese/English).
Installation and Enablement¶
Install from the terminal:
dsh plugin add github:LoveStudyXin/dsh-sticky-notes
You can also install from the GUI: Open DSH → Plugins / 插件 → Add / 添加, and paste the same address. If using a local checkout directory (changes take effect after refreshing):
dsh plugin add link:/absolute/path/dsh-sticky-notes
After installation, keep the plugin enabled and refresh the page once (if the plugin manager requires a restart, restart DSH). A sticky note icon will appear in the left column; click to open the wall. The plugin includes Chinese installation instructions in INSTALL.md.
Typical Usage¶
Invoking the tool sticky_notes_add within a session¶
The plugin registers a model-facing tool sticky_notes_add on the Host side. Sessions can write notes without opening a browser, which is especially useful for Sessions initiated by IM bots (Feishu, WeChat, etc.) — the user only needs to say “Save this image to the sticky notes”.
Tool parameters are as follows:
| Parameter | Meaning |
|---|---|
text |
Note text; can be omitted if an image is provided. |
color |
amber (default), rose, sky, mint, lilac, tangerine. |
pinned |
Whether to pin, default false. |
imagePaths |
Image file paths, absolute paths or relative to the Session’s working directory, up to 6 images. |
The tool reads the file bytes itself and enforces the same rules as the panel (PNG/JPG/GIF/WebP, single file <= 8 MB, max 6 per note), writes to the same notes.json, performs a backup before overwriting, and returns { noteId, noteCount, images }.
Note that the model does not need to see the image itself. The IM bot places the received image in the workspace first and then passes the path to the model, so even text-only models can save a screenshot they haven’t “seen”.
IM Zero-Token Command /sticky (Optional Patch)¶
Even if the message is just “Save to sticky notes”, the IM message still consumes a model turn. scripts/patch-dsh-im-sticky.mjs patches the installed @xmanrui/dsh-im package in-place, allowing messages starting with /sticky to write text and images directly without going through the Session turn, and reply with the note ID.
# Run in package directory
node scripts/patch-dsh-im-sticky.mjs --check # Report only
node scripts/patch-dsh-im-sticky.mjs # Apply (keeps lib/index.js.dsh-sticky.orig)
node scripts/patch-dsh-im-sticky.mjs --revert # Revert unpatched package
After that, disable and then enable the “IM Bot” plugin (or restart DSH), send /sticky 测试测试小肥鱼 in Feishu, and attach an image if desired. /sticky is not in the plugin’s command panel or /help; it must be typed directly.
This patch modifies a third-party plugin in-place, so upgrading dsh-im will overwrite it. After upgrading, you need to re-run the script (the script validates anchors and refuses to guess for unknown package versions). The patched path bypasses the bot command permission check, so please keep the bot’s allowlist tight. Also, the wall is a single JSON file using a “last write wins” strategy. Saving old content while the sticky note panel is open may overwrite notes written by IM. If the panel is open after an IM write, please reload the panel.
Storage and Limits¶
All data is stored in local files and does not stay in the browser only. Paths are all under $DSH_HOME (default ~/.dsh):
$DSH_HOME/state/sticky-notes/notes.json: The wall itself.$DSH_HOME/state/sticky-notes/images/<id>.<ext>: Byte data of pasted images.$DSH_HOME/state/sticky-notes/backups/notes-<timestamp>-<count>.json: Wall backups before overwriting (kept up to 30, max 1 per 30 seconds during editing). Images referenced by backups are also retained, and missing images won’t appear after recovery.
There are three ways to retrieve or copy data: “Backup” in the panel header lists local backups, note count, and recovery time, with one-click recovery; “Export” downloads the current wall as sticky-notes-<date>.json; “Import” replaces the entire wall with a previously exported (or manually edited) JSON. Entries that cannot be rendered will be skipped, and the server will back up the current wall first. The backup modal also displays the absolute path of notes.json.
Regarding limits: a wall can have a maximum of 5000 notes, and JSON saves are limited to 64 MB per time, with excess discarded during write. The “last write wins” strategy is used when two windows are open for the same wall. config.dataDir in cordis.patch.yml can be used to move the entire directory; it is a plain string (no schema, no ~ expansion), and an absolute path must be provided.
If you need to additionally sync notes to a Feishu Bitable, the plugin provides a one-way, append-only mirror capability (optional): the local file is always the source of truth. Local edits or deletions will not modify already pushed rows in Feishu, and unavailability in Feishu will not block local saving (failures are logged and retried on the next tick). Configuration is done via scripts/setup-feishu-bitable.mjs, which creates a “DSH Sticky Notes” table with fields 文字 / 颜色 / 置顶 / 创建时间 / 图片 and writes to $DSH_HOME/state/sticky-notes/feishu.json. Mirror history is recorded in feishu-sync.json, and restarts will not cause duplicate pushes.
Applicable Scenarios and Notes¶
Suitable for two types of users: developers who want to jot down thoughts and screenshots in their daily DSH sessions without interrupting the context; and automation scenarios that require bots to archive external messages or images to the sticky note wall.
Please note before use: The plugin runs with the permissions of the current DSH process. Before installing, check the source code and license (package.json is marked MIT) to confirm the scope of changes by the patch script before deciding whether to enable it. /sticky and Feishu mirroring are optional capabilities; /sticky modifies the third-party @xmanrui/dsh-im package in-place, so the patch script needs to be re-run after upgrades.
The value of dsh-sticky-notes lies in combining the sticky note wall, local backup, and model tool into one sidebar plugin, preserving a manual entry point for jotting things down while also leaving a write interface for automation. The directory page is at https://www.skillhub.cn/plugins/LoveStudyXin/dsh-sticky-notes , source code is at https://github.com/LoveStudyXin/dsh-sticky-notes .
(The community directory is an independent site with no official affiliation to DeepSeek / Hypi; plugin versions, stars, and licenses are based on the directory page and the original repository.)