Local-first HTML review and annotation workspace for coding agents: opens an isolated copy of a file in a browser editor, collects text edits, format changes and element/area comments, and returns a durable handoff the agent can claim and resolve.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:philmingdao/anno#path:/adapters/dsh-native
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
@philmingdao/anno-dsh-native is a native DeepSeek Harness plugin for Anno — a local-first HTML review, editing, and annotation workspace for coding agents.
Unlike @philmingdao/anno-dsh, which bridges the MCP server through the official DSH MCP client, this package runs Anno in-process: the local review HTTP server, the on-disk session store, and the six html_review_* model tools all live inside the Harness process. There is no MCP layer, no child npx process, and no separate server to launch.
What it provides
A loopback-only HTTP review server (
127.0.0.1, ephemeral port).Persistent review sessions under
$ANNO_DATA_DIR(default~/.anno/sessions); the source file is never overwritten and outputs are versioned (-reviewed.html,-reviewed-v2.html, …).Six model tools, registered with DSH's native tool registry:
html_review_start_sessionhtml_review_get_sessionhtml_review_claim_handoffhtml_review_mark_handoff_senthtml_review_list_sessionshtml_review_register_final
A
tool:annosystem-prompt section that teaches the agent the start → review → claim → resolve workflow.
Requirements
- DeepSeek Harness
>=0.1.0-rc.6 <0.2.0 - Node.js 22 or newer
Install
The package is a DSH profile bundle: dsh plugin add installs it and applies its cordis.patch.yml, which inserts the anno-native row into the profile (host) composition.
dsh plugin --profile web add @philmingdao/anno-dsh-native
# or from a source checkout:
dsh plugin --profile web add ./adapters/dsh-native
Then start Harness normally:
dsh web
The tools appear as html_review_* (no MCP namespace prefix). Because the row sits on the host plane, every agent on that profile shares one review server and one session store.
Source checkout
npm install
cd adapters/dsh-native
npm test
dsh plugin --profile web add "$(pwd)"
Use a temporary --dsh-home when testing without changing your normal profiles.
Use
Ask Harness to open or review an HTML file. It calls html_review_start_session with the absolute source path and opens the returned review_url for the user.
When the user clicks 提交给 Agent in the browser editor, the review server prepares the handoff and pushes it straight back into the originating agent conversation: the plugin captures the calling agent when the session is created and, on submission, queues an ordinary follow-up turn (agent.followup) carrying the full review — in-place text edits, format changes, element/area annotations, and page notes — so the agent claims the handoff immediately and resolves it into a verified standalone HTML file via html_review_register_final, without any manual polling.
The receiving turn's prompt instructs the agent to call html_review_claim_handoff first (durable receipt), then html_review_get_session to reload the full session and apply the edits and annotations against the draft HTML, then html_review_register_final. The in-process push is best-effort: if the originating agent is no longer live, the handoff is still persisted on disk and the agent can claim it through the ordinary html_review_* tools.
Architecture
DSH profile composition
-> @philmingdao/anno-dsh-native (cordis plugin + bundle patch)
-> anno-core.js (HTTP server + on-disk session/review/handoff store, node-only)
-> index.js (registers html_review_* tools + tool:anno prompt section)
lib/anno-core.js is deliberately free of DSH imports and is unit-tested directly (npm test). It exposes an onHandoff hook (invoked by the HTTP generate endpoint with the full review payload) and a hasHostTarget predicate (reported as has_host_target on the session projection) so the host binding can deliver handoffs without the core depending on any host runtime.
lib/index.js is the thin Cordis binding that injects tools, systemPrompt, and agents, starts the server as a fiber-owned effect, and registers the tools using raw JSON-Schema definitions directly against the tools registry. It captures the calling agent on html_review_start_session and, through onHandoff, delivers the submission back as an agent.followup notice. It imports no @deepseek-ai/dsh-tools (or any other DSH package) — the follow-up user message is built from the same shape createUserMessage produces, using only node:crypto — so the package keeps zero external dependencies and loads from any location (including a link:-installed source checkout).
Configuration
The anno-native row accepts:
| Field | Default | Meaning |
|---|---|---|
host |
dsh |
Host kind stamped on session records. |
dataDir |
$ANNO_DATA_DIR or ~/.anno |
Root for persisted review sessions. |
assetsDir |
package assets/ |
Directory holding editor.html / handoff.html. |
Uninstall
dsh plugin --profile web remove @philmingdao/anno-dsh-native
Existing review sessions under the data directory are left in place.
License
MIT. The editor UI is the same Anno asset set; see the repository root for the bundled font's SIL Open Font License.
Links
More in this category
Tencent/WeKnora#dsh-weknora★ 35014
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 5944
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 3709
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1141
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
sixtysevenlf/dsh-blender-plugin★ 1019
Lets a DSH agent drive a local Blender over a direct TCP channel with 16 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 186 ops across 28 families.
anysearch-team/anysearch-dsh★ 634
AnySearch-powered real-time web and vertical search provider for DeepSeek Harness.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.