Opens the official Plannotator app (plannotator.ai) so you can review the agent's plan — annotate, approve, or send it back.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-plannotator
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:eightHundreds/dsh-plannotator
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Standalone DeepSeek Harness plugin. When the agent is ready with a plan, it opens the official Plannotator app — the real product, not a lookalike review screen in the chat.
This package is not a fork or patch of the Plannotator monorepo. It uses the Plannotator app you already have installed.
Layout follows dsh-plugin-starter: host plugin, pure lib/ helpers, runtime skill, node:test, CI, and a bundle manifest — zero dependencies, no build step.
index.js host plugin (plan intercept + commands + skill)
lib/ deterministic helpers (unit-test friendly)
skills/plannotator/SKILL.md model-facing skill manual
tests/ node:test suite
cordis.patch.yml bundle patch layer
What you get
When the agent presents a plan, Plannotator opens instead of the built-in review card.
You can also open Plannotator yourself:
| Command | What it does |
|---|---|
/plannotator-review |
Review the current changes, or a pull request if you paste a URL |
/plannotator-annotate |
Annotate a file, folder, or URL |
/plannotator-last |
Annotate the latest assistant reply |
- Enter plan mode with
/plan. - The agent writes a plan.
- Plannotator opens in the browser. The native dsh card should not appear.
- Approve, deny, or dismiss. dsh stays in sync with that decision.
| Reviewer action | What dsh does |
|---|---|
| Approve | Leave plan mode and continue. |
| Approve with notes | Leave plan mode, then inject the notes as a follow-up user message. |
| Deny / annotate | Stay in plan mode. The agent revises with your feedback. |
| Dismiss (close the UI) | Stay in plan mode and wait for your next message. |
Requirements
- dsh
0.1.0-rc.6or a compatible developer preview - Node.js 18+ (dsh itself still wants 22+)
- A
plannotatorCLI that already shipsplannotator opencode-plan(current releases do)
Install the CLI if it is missing:
# macOS / Linux / WSL
curl -fsSL https://plannotator.ai/install.sh | bash
# Windows PowerShell
irm https://plannotator.ai/install.ps1 | iex
Then confirm it is on PATH (or at ~/.local/bin/plannotator):
plannotator --help
Install
dsh plugin --profile web add dsh-plannotator
dsh web
Check that the layer is composed:
dsh --profile web --dump-config # look for "# == dsh-plannotator"
Use /plan, let the agent propose a plan, and review it in Plannotator.
From a .tgz tarball
Each v* tag publishes an npm pack on the GitHub Release. dsh plugin add accepts that .tgz the same way it accepts an npm package — do not use the auto-attached source zip.
Install from the release URL:
dsh plugin --profile web add https://github.com/eightHundreds/dsh-plannotator/releases/download/v0.2.0/dsh-plannotator-0.2.0.tgz
dsh web
Or download dsh-plannotator-<version>.tgz first, then point at the file:
dsh plugin --profile web add ./dsh-plannotator-0.2.0.tgz
dsh web
The same flows are also available as official terminal subcommands (plannotator review, plannotator annotate, plannotator last). The slash commands above wrap those CLIs inside dsh.
From this checkout
git clone https://github.com/eightHundreds/dsh-plannotator.git
cd dsh-plannotator
dsh plugin --profile web add .
dsh web
No install or build step. A local dsh plugin add . stays linked to this checkout.
Dev-load with a --patch overlay (plugin path must be absolute):
# dev.cordis.yml
- insert:
- id: dsh-plannotator
name: /absolute/path/to/dsh-plannotator/index.js
dsh --profile web --patch ./dev.cordis.yml
Uninstall
dsh plugin --profile web remove dsh-plannotator
A broken bundle patch can keep the whole web profile from booting. If dsh web no longer starts after install, remove the plugin and run --dump-config again.
How it works
When the agent leaves plan mode, this plugin opens the official Plannotator app and waits. Approve, deny, or dismiss is then applied back in dsh.
Slash commands and the model-facing skill are registered with ctx.inject(['commands']) / ctx.inject(['skills']) once those host services are active. They are not a one-shot ctx.get at plugin load, and the package skills/ directory is not scanned by dsh — the skill body is embedded at register time.
Configuration
Defaults work with a normal Plannotator install. Override only if the binary is not where the plugin looks.
| Variable | Purpose |
|---|---|
PLANNOTATOR_BIN |
Absolute path to the plannotator executable. |
PLANNOTATOR_DSH_USE_SOURCE=1 |
Run the Plannotator hook server from a local checkout via bun. |
PLANNOTATOR_DSH_SOURCE_ROOT |
Directory to walk upward from when searching for that checkout. |
PLANNOTATOR_DSH_SOURCE_ENTRY |
Exact path to apps/hook/server/index.ts. |
PLANNOTATOR_BUN / BUN |
bun executable used in source mode. |
Without PLANNOTATOR_BIN, the plugin uses ~/.local/bin/plannotator when that file exists, otherwise plannotator on PATH. On Windows it also checks %LOCALAPPDATA%\plannotator\plannotator.exe.
The child process always gets PLANNOTATOR_ORIGIN=dsh and PLANNOTATOR_CWD=<session cwd>. The stock opencode-plan command still hard-codes an OpenCode origin in the UI badge; that is a Plannotator-side limit.
Troubleshooting
| Symptom | What to check |
|---|---|
| Native dsh review card still appears | Plugin layer missing in --dump-config, plan mode not active, or the plan does not start with # …. |
/plannotator-* missing from the slash menu |
Profile still has published 0.1.4 (that build registered nothing). Re-add this checkout: dsh plugin --profile web add . |
plannotator skill missing from the catalog |
Same as above, or the host has no skills service. The package skills/ folder is not auto-discovered. |
Could not find \plannotator`` |
Install the CLI, or set PLANNOTATOR_BIN. |
dsh web never boots after install |
Remove the plugin. Do not add a hard inject: ['planMode'] to the host patch. |
exit_plan_mode is only available in plan mode |
Older builds returned a bare { approved: true } and failed the official schema. Upgrade this plugin. |
| Badge says OpenCode | Expected. The stock CLI labels opencode-plan that way. |
What this plugin does not do
- Change the Plannotator monorepo (native
dshorigin, installer) - Replace
UserQuestionProvideror wrap Claudehooks.json
Development
node --test
References
- dsh-plugin-starter
- Field guide: https://github.com/ciceroyang/dsh-report-studio/blob/main/docs/tutorial-zh.md
License
Links
More in this category
Q00/ouroboros#integrations/dsh-plugin★ 6173
Config-only bundle that mounts Ouroboros through the DSH MCP client, exposing 36 interview, Seed, execution, evaluation, and evolution workflow tools in DSH.
loopx-project/loopx#dsh-loopx-plugin★ 6136
LoopX, a provider-neutral, local-first state kernel and control plane for long-horizon agents: keeps Goal, Todo, gate, evidence, quota, recovery, and handoff state above DeepSeek Harness, while the plugin bootstraps the CLI and skills, admits bounded same-session continuation, and adds a loopback GoalBar for the exact bound loop.
chuspeeism/dashi-taskboard#deepseek-harness★ 3276
Embeds the active installed Codex Taskboard runtime in the DeepSeek Harness sidebar, using its launcher runtime descriptor instead of a fixed port.
NanmiCoder/dsh-agent-teams★ 1893
AgentTeams multi-agent teams.
EthanYoQ/AI-Novel-Writer#dsh-ai-novel-writer★ 1263
Installs a dedicated AI novel-writing preset and workbench: revisioned local project assets, a compact side drawer, and native approval-gated single-file changes.
tong-io/tongflow#dsh-tongflow★ 1035
TongFlow film-crew studio for image, voice, music and video production: the agent writes per-asset TongFlow workflow files (.tongflow.json) that run through TongFlow plugins, with an embedded workflow canvas, a shot/character/take project layout and a manga-drama template; sessions starting with @tongflow open the Studio view.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.