Bundle
internal-skill-workshop
Browse, sign in to, and install Skills from a team Skill Base in DeepSeek Harness.
- Source
- Olina1Ye
- License
- MIT
- Updated
- Updated 11 hours ago
Readme
# internal-skill-workshop
`internal-skill-workshop` is a DeepSeek Harness Web plugin for finding and
installing team Skills from a configured
[Skill Base](https://github.com/ginuim/skill-base) server.
It provides:
- a DSH Settings section for the team Skill Base address;
- an administrator-provided default server address;
- public catalog browsing without an account;
- verification-code sign-in for private team Skills;
- one-click installation into the DSH user Skill directory;
- metadata for the author, version, visibility, type, compatible tools, and tags.
Publishing and Skill administration remain in Skill Base Web, `skb`, or
Companion.
## Install
You need a running Skill Base server that DSH Web can reach. The plugin is a
team catalog client; it does not include or deploy the server.
```sh
dsh plugin --profile web add internal-skill-workshop
```
Restart DSH Web, then open **Settings -> Internal Skill Workshop**.
## Team setup
An administrator can preset one shared server address in the profile's
`cordis.patch.yml`:
```yaml
- id: internal-skill-workshop
config:
baseUrl: https://skills.company.example
```
Every team member using that profile starts with the same address. A member may
save a personal address from the plugin; the personal value takes precedence.
Remote servers must use HTTPS. Loopback HTTP is accepted for local development.
## Member workflow
1. Open **Settings -> Internal Skill Workshop**.
2. Confirm or enter the Skill Base root address without an `/api` suffix.
3. Search immediately to browse public Skills.
4. To see private Skills, choose **Get code**. Sign in on the Skill Base page
and copy the generated verification code back into the plugin.
5. Select a Skill and choose **Install**.
The plugin installs to:
```text
$DSH_HOME/skills/<skill-id>
```
`$DSH_HOME` defaults to `~/.dsh`. The plugin does not accept a path from the
browser and refuses to overwrite an existing Skill directory. Updating and
replacing locally modified Skills are intentionally out of scope for this
release.
## Credentials
The plugin never asks for a Skill Base password. It exchanges a five-minute,
single-use verification code for a Skill Base personal access token (PAT).
The DSH host stores the PAT in:
```text
$DSH_HOME/internal-skill-workshop/credentials.json
```
The file is written with owner-only permissions where the platform supports
them. The PAT is attached to Skill Base requests only by the DSH host and is
never returned to the browser, placed in a URL, or stored in browser
`localStorage`. **Sign out** removes the local PAT.
Skill Base currently issues long-lived PATs through this flow. Signing out of
the plugin removes the local copy but does not revoke the server-side token;
server administrators should remove an exposed or retired PAT from Skill Base.
## API keys and translation
The DSH plugin does not require an API key. Do not paste a Cloudflare or Skill
Base credential into its server-address setting.
If a Skill Base deployment provides a **Translate to Chinese** action on its
publishing page, that is a separate server-side feature. The Skill Base server
operator enables it by supplying these environment variables to the server
process or container:
```dotenv
CLOUDFLARE_ACCOUNT_ID=<Cloudflare account ID>
CLOUDFLARE_API_TOKEN=<token with Workers AI access>
SKILL_BASE_TRANSLATION_TIMEOUT_MS=20000
```
`SKILL_BASE_TRANSLATION_TIMEOUT_MS` is optional and defaults to 20 seconds.
The account ID and token must remain on the server. For Docker deployments,
ensure the deployment explicitly passes them into the application container;
adding them to a host `.env` file alone may not do that.
## Security boundaries
- The browser can call the plugin host only through a loopback-only DSH RPC
channel.
- The host validates the Skill Base URL and rejects remote HTTP, credentials,
query strings, fragments, and redirects.
- Downloaded archives are limited to 50 MB compressed, 100 MB unpacked, and
2,000 entries.
- Skill Base JSON responses are limited to 5 MB, and untrusted Skill IDs are
validated before any local path check.
- ZIP traversal, absolute paths, symbolic links, duplicate paths, files outside
the Skill root, and invalid `SKILL.md` frontmatter are rejected.
- The host sends the browser only the catalog fields rendered by the UI.
- Installation is staged and then atomically renamed into
`$DSH_HOME/skills/<skill-id>`.
## Development
```sh
npm test
npm audit
npm pack --dry-run
```
Install
dsh plugin --profile web add github:Olina1Ye/internal-skill-workshop-plugin
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install internal-skill-workshop from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.