dsh-answer-me-with-html
Answer me with HTML as a DeepSeek Harness plugin: an opt-in, skill-only bundle that answers hard questions with a one-page HTML you can actually read.
The model writes a short Markdown draft; the bundled am CLI writes the CSS, the layout and the SVG
diagram coordinates. About 1/8 of the tokens of hand-written HTML.
What is in here
| Path | Role |
|---|---|
cordis.patch.yml |
The only row: a dedicated @deepseek-ai/dsh-skill-filesystem provider whose single root is skills/ |
skills/answer-me-with-html/ |
The upstream skill, vendored verbatim — SKILL.md, references/, and the dependency-free scripts/am.mjs CLI |
scripts/update-skill.sh |
Re-vendors the folder above from upstream and checks it (npm test) |
scripts/publish-to-npm.sh |
Logs in if needed, then publishes this package to npm |
There is no Host code. The skill reaches the session catalog through the bundled skill root, so nothing
is copied into ~/.dsh/skills and no other profile is affected.
Install
From npm — no build step, and nothing to authorise:
dsh plugin --profile <name> add dsh-answer-me-with-html
Or from a clone, which is how this repository is used for development:
dsh plugin --profile <name> add /path/to/dsh-answer-me-with-html
Or install it from the plugin market / settings UI by pointing at the same directory.
Installing from the git URL also works, but dsh plugin add needs pnpm on your PATH for that, and
GitHub's tarball has no build step to run either way.
Requirements
- Node.js 20+ (the
amCLI runs asnode <skill dir>/scripts/am.mjs; nonpm installstep). - Pages are written to
~/.answer-me-with-html/pages/.
Use
Ask a question the way you always do. The skill decides when a page is worth it:
Explain the TCP three-way handshake Redis or Memcached for our cache?
The skill name is answer-me-with-html, and DSH passes its own base directory into the loaded skill, so
the ${CLAUDE_SKILL_DIR} placeholders in SKILL.md need no edit.
One trap: if you also enable the default
@deepseek-ai/dsh-skill-filesystemprovider, it scans~/.dsh/skillsand~/.agents/skillsat a higher rank than this bundle's root. An older copy of this skill left in either directory then shadows this one — a stale copy, silently.Before deleting that copy, check what else points at it:
ls -la ~/.dsh/skills ~/.agents/skills ~/.claude/skills 2>/dev/null | grep answer-me-with-html
~/.agents/skills/answer-me-with-htmlis often the real copy for other agents (Claude Code, ZCode, Hermes and WorkBuddy typically symlink to it), so deleting it breaks those. Either leave the default provider off — it is off unless something enables it — or update the shared copy too instead of removing it.
Updating the skill
skills/answer-me-with-html/ is a verbatim copy of the upstream skills/answer-me-with-html folder, so an
update is a copy and not a merge:
scripts/update-skill.sh
It clones upstream, and if the copy already matches, says so and exits without touching anything.
Otherwise it re-copies the folder, moves package.json's version to the vendored CLI's version, and runs
the tests. It prints the upstream commit — put that hash in the commit message, because upstream has
shipped code changes without a version bump, and the hash is what identifies the vendored state.
The CLI's own update hint is wrong here. After a week
am rendermay print! Update hint: Answer me with HTML <v> is available ... run npx skills update answer-me-with-html -y. That command belongs to vercel-labs/skills and updates a copy in~/.agents/skills— never the copy this plugin serves. It cannot update this plugin; runscripts/update-skill.shin this repository instead. Upstream has no DeepSeek Harness branch for this (checked in 0.5.0), so the hint keeps saying it.
License
MIT. The vendored skill and CLI are MIT, © QingYunA — see LICENSE.
No comments yet. Be the first to write one.