# DSH Skill Toggle

[繁體中文](https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/README.md) · [npm](https://www.npmjs.com/package/dsh-skill-toggle)

Choose which skills are available in each DSH workspace. No skill-file edits or DSH core patches.

0.1.8 fixes dark-mode controls and contrast during theme changes. 0.1.9 corrects npm's README selection; the program is unchanged.

![English skill manager showing global settings, protected sources and individual controls](<https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/docs/images/settings-en.png>)

*Screenshot cropped from the independent 0.1.7 acceptance environment. Skill names are test data.*

## Install

Verified on **DSH Web 0.2.1-rc.2 with Node 24.18.0**. Other DSH versions and Desktop have not been verified.

```sh
dsh plugin --profile web add dsh-skill-toggle@0.1.9
```

Restart the target DSH process, then refresh the browser. Replace `web` if you use a different profile.

## Use

1. Open **Settings → Skills**, or the Skills shortcut in the conversation header.
2. Choose **Global defaults** or a workspace, then search for a skill.
3. Use the switch for on/off, or the advanced selector for all four modes.

| Mode | Effect |
|---|---|
| Inherit | No override at this level |
| Enabled | No additional restrictions; source rules still apply |
| Manual only | No model discovery/loading; user loading requires source permission |
| Disabled | Block subsequent model and user loading through skill entry points |

Workspace overrides take precedence over global defaults. Enabled never loosens a source restriction.

You can also filter, select several skills and submit one batch. Multi-item restrictive changes confirm the scope and count first. Plugin-supplied and unknown-origin skills stay read-only.

<details>
<summary>Another view: global controls after source access recovers</summary>

![Global Refresh restores controls after source permissions recover](<https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/docs/images/global-health-recovered.png>)

Also from acceptance testing. Once source access is restored, global Refresh recovers the controls without opening every old fault-era conversation.

</details>

## Limits to know

- Disabling affects **future loading**. It does not erase loaded instructions from history or interrupt a model request already sent.
- The built-in `/` picker may retain cached names. Actual loading still checks the policy.
- This is not a file-access sandbox, skill installer/editor/deleter, MCP manager or per-conversation policy system.
- Settings live in `$DSH_HOME/skill-toggle/policy.json`. Stop DSH before manual edits; external writers that ignore the lock protocol can still lose edits.

## More detail

- [Technical reference](<https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/docs/REFERENCE.en.md>): source identity, advanced configuration, storage and development commands.
- [Policy recovery](<https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/docs/RECOVERY.md>): corrupt data, locks and storage errors.
- [Independent 0.1.7 acceptance](<https://cdn.jsdelivr.net/npm/dsh-skill-toggle@0.1.9/docs/verification/2026-10-24/INDEPENDENT-ACCEPTANCE.md>): scope, exact archive hash and untested cases.

MIT licensed. An independent community plugin, not an official DeepSeek product.
