npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@stmol/dsh-prompt-lib

v1.0.1

Published

User-defined prompt library for DeepSeek Harness: a Prompts page in Settings and a composer picker that injects the chosen prompts into a session and its subagents

Readme

@stmol/dsh-prompt-lib

🥷 Keep your own prompts inside DeepSeek Harness, and switch them on for a chat in one click.

  • Settings → Prompts: write, edit and delete your prompts.
  • Chat composer: tick the ones you want for this session. The button shows how many are on.

A prompt that is ticked applies to every model step of that session, and to the subagents it starts.

Install

Published on npm as @stmol/dsh-prompt-lib. Any bundle source works: the npm package, the repository, a tarball, or a local folder.

  • GUI: Settings → Plugins → Add plugin, then @stmol/dsh-prompt-lib.
  • CLI: dsh plugin add @stmol/dsh-prompt-lib.

Restart DSH after the first install; later edits reach the running app through HMR. There are no automatic updates: remove the plugin and add it again.

dsh plugin add link:/path/to/dsh-prompt-lib

A linked checkout keeps its own node_modules, so the plugin's one dependency has to be installed there too:

cd /path/to/dsh-prompt-lib && npm install

Without it the plugin fails to load and nothing appears in Settings.

Usage

  1. Open Settings → Prompts. It is its own page, after Agent presets. Write a title and an instruction, then save.
    • The title is a label for you. The list, the search field and the composer picker use it to keep prompts findable. It is never sent to the model, only the instruction text is.
    • The instruction is stored in the plugin's config, so it survives restarts and is there in every session.
    • Enable in every new chat marks the prompt as a default. It is off unless you turn it on.
  2. In a chat, open the Prompts control in the composer tool row, right of the permissions dropdown. Tick what you want. The button shows the count.
  3. The ticks apply from the next model step. No restart and no new session needed. Tick again, or press Clear, to take them out.

Prompts are matched by an id generated behind the scenes, not by title, so renaming a prompt keeps every session pointed at it.

Defaults for new chats

A prompt can be set to start enabled. Every session that has never been ticked by hand opens with those defaults already on, and the picker shows them ticked, so the count on a fresh chat matches what that chat will use.

The first hand edit to a session, whether that is ticking, unticking or Clear, becomes that session's own choice and takes over from then on. Unticking the last default prompt records "none here" instead of falling back to the defaults you just removed.

Subagents

A session that has ticks of its own uses exactly those, and an empty list counts as a choice. A session with no choice at all takes the choice of the nearest ancestor session, so a subagent inherits from the chat that started it. Only a whole line with no choice anywhere falls back to the defaults for new chats.

Good to know

  • The settings file must be writable. The Prompts page says so up front and disables its controls. In the composer, a write the host refuses shows the reason under the list, so an edit is never dropped silently.
  • The composer control hides itself until the settings remote is mounted and has answered its first read, rather than show a count that is about to change.
  • There are size limits. The editor caps one instruction at 8000 characters. The host applies that same cap, uses at most 100 prompts and reads at most 500 library entries when it renders. Anything past those limits contributes nothing to the model. Settings still shows, edits and keeps every entry.
  • Selections accumulate. The plugin keeps one entry per session that has ever been ticked in, and never prunes them. An entry whose prompts were all deleted still means "inject nothing", so removing it would quietly bring back the defaults for that session.