# dsh-skill-viewer

> Provides a skill management panel and command-line interface for DSH, supporting hot adding/removing, enabling/disabling, cross-workspace migration, and grouping.

## Metadata

- Author: [@Fishquito7](https://github.com/Fishquito7)
- Repo: <https://github.com/Fishquito7/dsh-skill-viewer.git>
- GitHub: [Fishquito7/dsh-skill-mcp-panel](https://github.com/Fishquito7/dsh-skill-mcp-panel)
- Stars: 86
- Language: JavaScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `deepseek`, `dsh`, `dsh-plugin`, `mcp`, `plugin`, `skills`
- Forks: 8
- Open Issues: 0
- Last push: 2026-08-18T05:43:14.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:Fishquito7/dsh-skill-viewer
```

## Wiki

## One-Sentence Pitch
Add a "Skills" settings panel to DeepSeek Harness, plus a `dsh-skill` command-line tool, letting you toggle, add, remove, migrate, and group-manage skill files directly from the web interface and terminal—without manually editing `SKILL.md` or restarting the gateway.

## Core Features
- Add a "Skills" entry under "Plugins" in the web settings page, displaying registered skill cards with search by name and click-to-expand for full `SKILL.md` content
- Provide enable/disable toggles (closed skills can be re-enabled later), delete buttons, and batch migration buttons; state changes take effect instantly via file renaming, with DSH's built-in listener detecting changes within ~200ms
- Support adding skills from `.md` files, directories with top-level `SKILL.md`, and `.zip` packages; drag-and-drop or click "+" to upload, max 200 files or 8 MB per batch
- Workspace tab bar ("Global" + each workspace, filterable by group) for one-click switching to show only skills in a specific scope; skills with the same name in global and workspace appear as separate rows
- Skill grouping (private display config only for this plugin, stored in `~/.dsh/skills/.system/skill-viewer/groups.json`), does not modify skill files themselves, can filter by group
- Built-in `dsh-skill` CLI: `list`/`add`/`enable`/`disable`/`delete`/`scope`/`migrate`/`update`, works even when gateway is down, hot-reloads changes

## Technical Implementation
- **Language**: TypeScript (ESM, `type: module`)
- **Key Dependencies**: `@deepseek-ai/dsh-typert-protocol` (register Typert remote service), `@deepseek-ai/dsh-home-paths` (resolve user home), `fflate` (ZIP extraction), `yaml` (frontmatter parsing), `zod` (wire schema validation)
- **Architecture Pattern**: Cordis half-zone plugin; `cordis.patch.yml` automatically mounts the `skills-viewer` bundle to `dsh.profile.bundles`; host-side `apply(ctx)` registers a remote service named `skillsViewer` with `typert`, exposing methods (list/workspaces/groups/checkUpdate/saveGroup/deleteGroup/content/setEnabled/migrate/batchMigrate/deleteSkill/addSkill) to the API gateway; client is a browser-side React component (`client.ts`), communicating with the host via Typert protocol; CLI is an independent `node` entry point `lib/cli.js`
- **Entry Files**: `src/index.ts` (host half-zone), `src/client.ts` (Web UI client), `src/cli.ts` (CLI), compiled output in `lib/`

## Use Cases
Users who frequently toggle/add/remove skills without touching YAML or restarting the gateway. For example, after setting up a new workspace, batch-import several skills then enable them as needed, or migrate a debugging skill from a project to global sharing; the CLI is also suitable for directly managing skills in terminal, SSH remote, or when the gateway is unavailable.

## Prerequisites & Compatibility

| Dependency | Min Version | Notes |
|---|---|---|
| DSH (cordis / typert) | 0.1.0-rc.6+ | From `@deepseek-ai/dsh-typert-protocol: ^0.1.0-rc.6` |
| Node.js | Not declared | No `engines` field in `package.json`; source uses built-in APIs like `node:fs/promises`, `AbortController`, `fetch` |
| Platform | macOS / Windows / Linux | Cross-platform; `process.platform === "win32"` branch handles Windows path case-insensitivity |
| Native Modules | None | All dependencies (`fflate`/`yaml`/`zod`/`@deepseek-ai/*`) are pure JS, no `node-pty`, `node:sqlite`, etc. |

## Installation
```bash
dsh plugin --profile web add github:Fishquito7/dsh-skill-viewer
```

## Configuration

| Config | Type | Description | Default |
|---|---|---|---|
| `DSH_HOME` | Env Variable | User home directory, overrides default `~/.dsh` | `~/.dsh` |
| `DSH_AGENTS_HOME` | Env Variable | Legacy user home directory, overrides default `~/.agents` | `~/.agents` |

This plugin requires no additional YAML/Schema editing; `cordis.patch.yml` is automatically appended by `dsh plugin add`, no manual maintenance needed.

## FAQ

**Q: What does this plugin do?**

A: Adds a "Skills" settings panel and `dsh-skill` CLI to DeepSeek Harness, enabling direct enable/disable, add, remove, migrate, and group management of skill files from web and terminal—the underlying mechanism is modifying `SKILL.md`, and DSH's file listener automatically detects changes.

**Q: What will I see after installation?**

A: A "Skills" entry appears under "Plugins" in the settings page: skill card list, status toggles, search bar, workspace tab, group tab, add and migration buttons; the terminal gains the `dsh-skill` command. No manual `cordis.patch.yml` editing needed.

**Q: Is additional configuration required?**

A: No configuration needed. Only two environment variables `DSH_HOME` and `DSH_AGENTS_HOME` can change the user home (defaults `~/.dsh`, `~/.agents`), keep defaults for normal use.

**Q: What sources are supported for adding skills?**

A: Three forms: single `.md` file, directory with top-level `SKILL.md`, `.zip` package; drag-and-drop or click "+" to upload; auto-detects structure; invalid content (missing `SKILL.md`, frontmatter errors, duplicate names in batch, path conflicts) will be rejected with explanation.

**Q: What if a skill with the same name exists in both global and workspace?**

A: Displayed as separate rows by (name + scope) in the UI, independent of each other; CLI's `enable`/`disable`/`delete` with duplicate names across scopes must explicitly use `--global`/`--project`/`--workspace`, otherwise exits with error—no silent operations on the "winning" one.

**Q: Where is data stored? Will it be lost after uninstalling the plugin?**

A: Skill entities are ordinary files: global in `~/.dsh/skills/`, workspace in `<workspace project root>/.dsh/skills/`. Disable = rename `SKILL.md` to `SKILL.md.disabled`, enable = rename back. Uninstalling the plugin does not touch these files; they continue to be discovered by DSH's built-in provider.

**Q: What if Git installation fails?**

A: pnpm v11 disallows git-hosted plugins from running `prepare` scripts by default; add the key pnpm provides in the error to `allowBuilds` in the profile directory's `pnpm-workspace.yaml` and retry; or directly install the release tarball to bypass build script restrictions.

**Q: Why can't bundled skills be modified?**

A: Skills deployed with DSH (`source === "bundled"`) are read-only; both UI and CLI will reject disabling, deleting, and migrating, with prompt "Bundled with deployment, cannot be modified."

## Learning Curve
Beginner — one-click installation, no YAML modifications needed; page features are clickable, CLI's `list`/`enable`/`disable`/`delete`/`add` require no complex parameters.

## Known Issues & Limitations
- Legacy frontmatter fields `disableModelInvocation` / `modelInvocable` will be rejected; must use `disable-model-invocation` / `user-invocable` instead (`src/skill-files.ts:111-113`)
- Bundled skills (`source === "bundled"`) cannot be disabled, deleted, or migrated (`src/index.ts:627`, `src/index.ts:728`)
- pnpm v11 disallows running `prepare` scripts during Git installation by default, reports "git-hosted plugins build on install..."; need to allowlist in profile directory's `pnpm-workspace.yaml` under `allowBuilds`, or install release tarball (`README.md:39-50`)
- `dsh-skill` CLI by default scans only the current directory's anchored project root and user home; managing other workspaces requires `--cwd <workspace path>`; same-name multi-scope operations must explicitly use `--global`/`--project`/`--workspace` (`src/cli.ts:79-80`, `src/cli.ts:493-516`)
- Add skill total size limit 8 MB, max 200 files per batch; zip structure must be "one directory containing `SKILL.md`" or "flat multiple `.md`" files, otherwise entire batch is rejected (`src/index.ts:302-303`, `src/index.ts:821`)
- `dsh-skill update` directly requests the latest version URL from GitHub Releases; will fail when network is unreachable or rate-limited (`src/cli.ts:466`); web端的"检查更新" button failure is silently ignored (`src/client.ts:1082`)

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-skill-viewer](https://deepseek-plugin.org/plugins/Fishquito7/dsh-skill-viewer)
Wiki generated by AI (model: `MiniMax-M2.5`)
