dsh-temp-note
A temp note in the DeepSeek Harness right sidebar. Keep the thought, the snippet, or the decision you are about to lose, without leaving the session — scoped to this session, this workspace, or everything.
中文说明 · Install · Usage · How the polish works
The problem
DeepSeek Harness is a good place to think with an agent, but it has nowhere to think beside it.
- The composer is a microphone, not a notepad. Typing a private reminder there sends it to the model and writes it into the session log. Some notes are for you, not for the turn.
- Workspace files are for the project, not for you. Dropping a
scratch.md into the repo creates diff noise, review comments, and a file that outlives its purpose. .gitignore is a workaround, not a workflow.
- A separate notes app breaks the context. Alt-tabbing to Notion, Obsidian, or a sticky-note widget means losing the conversation, the file, and the thread you were holding.
- One bucket never fits. "Remember this for this chat", "this project always does X", and "I paste this snippet everywhere" are three different lifetimes. A single scratchpad degrades into a graveyard.
What it does
dsh-temp-note adds a Temp Note tab to the right sidebar — the same dock as Files, Chat, and Terminal — plus a note button in the session header.
| |
|---|
| One note, three scopes | Session / Workspace / Global. Default: Workspace. Switching scope switches the note. |
| No note management | No "new note" button, no tree, no titles to invent. One note per scope, auto-created, always there. |
| Autosave | Every keystroke is written to local storage. Reload, switch tabs, switch sessions — it is still there. |
| One-click copy | Copies the whole note to the clipboard, ready for a prompt, an issue, or a PR description. |
| One-click polish | Sends the note through your Harness default model and replaces it with a cleaner Markdown version. Undo is one click away. |
| Local by default | Notes never enter the session log and are not sent to the agent. Only the explicit Polish action sends text, and only to your configured model. |
Scopes
| Scope | Keyed by | Use it for |
|---|
| Session | current session id | "this conversation only" — a private reminder, a hypothesis, a thing to verify before the turn ends |
| Workspace | current workspace directory | project conventions, decisions, reusable commands — shared by every session in that workspace |
| Global | one note for all workspaces | personal snippets you paste everywhere |
The scope is remembered per session, so a new session starts on Workspace and returns to whatever you picked last time. There is deliberately no "create note" action: each scope always has exactly one note.
Install
Requires a DeepSeek Harness 0.2.x build with the Web GUI (verified against 0.2.1-rc.2).
Desktop app
Settings → Plugins → Add plugin, paste:
dsh-temp-note
The Desktop app owns its desktop profile; install through its UI rather than the CLI.
dsh web / CLI
dsh plugin --profile web add dsh-temp-note
Use the profile you actually run (web, or your own name). To install straight from source instead:
dsh plugin --profile web add github:GuihaiHU/dsh-temp-note
# or from a local checkout
git clone https://github.com/GuihaiHU/dsh-temp-note.git
dsh plugin --profile web add /absolute/path/to/dsh-temp-note
Published on npm: dsh-temp-note.
Reload the Web page after installation. The plugin has no build step and no runtime dependencies.
Usage
- Open it. Click the note icon in the session header, or press
+ in the right sidebar and pick Temp Note in the guide. Like any sidebar tab, it can be docked, split, dragged into a floating panel, or made fullscreen.
- Pick a scope.
Session · Workspace · Global. The default is Workspace; the hint under the switcher tells you what the current scope covers.
- Write. Autosave runs on every keystroke. The footer shows the character count and the last save time.
- Copy. One click puts the whole note on the clipboard.
- Polish. One click rewrites the note as cleaner Markdown with your default model. The previous text is kept behind Undo polish.
How the polish works
The plugin's Host half registers one route:
POST /api/dsh-temp-note/optimize
{ "text": "<note>" } -> { "ok": true, "text": "<rewritten note>" }
- It calls
ctx.llm.stream() with the model selected as the default in Settings → Models and a fixed instruction prompt: keep every fact, keep the original language, structure the result as Markdown, return only the note body.
- Requests are accepted only from this machine and from the same origin; the route stores nothing and logs no note text. Notes themselves live in the browser, not in the Host.
- If no default model is configured, the button reports it instead of guessing.
- The route needs the page to be served over HTTP (
dsh web or the Desktop app's Web GUI). Under a file:// renderer the polish button reports that the endpoint is unreachable; notes, scopes, autosave, and copy keep working.
Data and privacy
| What | Where |
|---|
| Note content | browser localStorage: dsh.temp-note.v1.global, …workspace.<encoded path>, …session.<session id> |
| Scope preference | dsh.temp-note.v1.scope.<session id> |
| Note text in the session log | never |
| Note text sent anywhere | only on an explicit Polish click, to your configured model provider |
Clearing the browser's site data clears the notes. Notes are per-browser; they are not synced across devices.
Compatibility
- Built and verified against DSH
0.2.1-rc.2 on macOS.
- Uses the right sidebar type registry (
sidebarRightTabs, sidebarRight) and the conversation.session.header.utilities slot, so it needs a DSH build that ships the right sidebar (0.2.x).
- Host half needs
llm and webServer services; both are part of the Web profile.
- No runtime dependencies, no install scripts, no build step. The browser half is a single hand-written
client.js loaded through __ModuleLoader__.load.
Development
git clone https://github.com/GuihaiHU/dsh-temp-note.git
cd dsh-temp-note
# syntax checks
node --check index.js
node --check client.js
node -e "JSON.parse(require('fs').readFileSync('package.json','utf8'))"
# install this checkout into a profile
dsh plugin --profile web add "$PWD"
Repository layout:
index.js Host half: loopback-only /api/dsh-temp-note/optimize
client.js Browser half: sidebar tab, header button, scopes, storage
cordis.patch.yml Host plugin row inserted into the profile
locale/en.json Plugin Manager display metadata
locale/zh.json
icon.svg
Limitations
- Browser-local storage only; no cross-device sync.
- One note per scope by design.
- The editor is a plain textarea — polished Markdown is not previewed in the tab.
- Polish depends on a configured default model and a reachable HTTP host.
License
MIT