One line: DeepSeek Harness agent in WSL, chat in a Windows browser — install this kit when paths, proxy, clipboard, and “open that file” must cross the OS boundary.
This is a meta-repo (docs + install script + cordis.patch.yml). It does not ship plugin runtimes. Each plugin repo ships English README.md and Chinese README.zh.md.
Prereq: dsh works inside WSL (profile usually web).
curl -fsSL https://raw.githubusercontent.com/173787247/dsh-wsl-kit/master/install.sh \
| KIT_SET=daily bashThen:
- Restart via
scripts/restart-dsh-web.sh(starts dsh on:3080and the Windows relay on:3081) - In Windows open the URL printed by
restart-dsh-web.sh(dsh ≥0.1.2 includes?token=; bare:3081is 401. Not:3080) - Open a new session (old sessions keep the old toolset)
- Optionally merge
cordis.patch.ymlinto your profile (a later pluginconfigreplaces the whole object — restate every key you still need)
| Want | Command |
|---|---|
| Daily (recommended) | KIT_SET=daily bash install.sh |
| Daily + GitHub App / credentials | KIT_SET=github bash install.sh |
| Local LLM + network doctor | KIT_SET=llm bash install.sh |
| Everything | KIT_SET=full bash install.sh (or omit KIT_SET — same as before) |
From a local clone: KIT_SET=daily bash install.sh
| Pain | Tool | Plugin |
|---|---|---|
| Proxy / Node 24 blocks DeepSeek or npm | net_doctor |
dsh-wsl-net |
| Open a Linux path from chat on Windows | (clickable paths) | dsh-wsl-open |
Path convert / slow /mnt/c |
path_convert |
dsh-wsl-path |
| Windows clipboard | wsl_clipboard |
dsh-wsl-clipboard |
| Open a PR / docs URL in Windows | win_open_url |
dsh-wsl-browser |
| Agent forgets it is in WSL | (system prompt inject) | dsh-wsl-env |
Daily = table above + win_launch + dsh-repeat-stop + dsh-tool-budget (9 plugins).
Smoke: in a new session ask “run net_doctor” and “copy this path to the Windows clipboard”.
| Set | Includes | Who |
|---|---|---|
| Daily | env, net, open, repeat-stop, tool-budget, clipboard, path, browser, launch | Most WSL + Windows-browser users |
| GitHub day | Daily + github + cred | Also need PR/Actions status and git push credential hints |
| LLM | env, net, hostsvc, docker, dns, clock, gpu, port, expose, tray, open, path, browser | Local Ollama / vLLM / Unsloth + connectivity |
| Full | Everything in install.sh |
GPU/Docker/clock doctors, tray, portproxy, etc. |
Do not start with Full — get Daily working, then add plugins for specific pains.
GitHub from WSL is credentials + API + browser open + proxy — not one mega-plugin. After KIT_SET=github:
- Create the App per dsh-wsl-github (read-only Metadata / PRs / Actions; webhooks off)
- Before start:
source "$HOME/.dsh/dsh-wsl-github.env" - New session →
github_app_hint/github_repo_status; never paste PEM / PAT into chat
export HTTP_PROXY=http://127.0.0.1:7890 # your port
export HTTPS_PROXY=http://127.0.0.1:7890
export NODE_USE_ENV_PROXY=1
dsh webStill failing → ask the agent to run net_doctor.
Local OpenAI-compatible backends on Windows: add dsh-wsl-hostsvc, run host_reach, merge examples/local-llm-providers.settings.yaml.
Expand all plugins
| Plugin | Role |
|---|---|
| dsh-wsl-env | Inject WSL/Windows facts into the system prompt |
| dsh-wsl-net | net_doctor |
| dsh-wsl-open | Open Linux paths from chat on Windows |
| dsh-repeat-stop | Hard-stop identical tool loops |
| dsh-tool-budget | Cap tool calls per session |
| dsh-wsl-clipboard | wsl_clipboard |
| dsh-wsl-path | path_convert |
| dsh-wsl-browser | win_open_url |
| dsh-wsl-launch | win_launch (allowlisted) |
| Plugin | Role |
|---|---|
| dsh-wsl-github | github_app_hint / github_repo_status |
| dsh-wsl-cred | cred_hint (no secrets) |
| dsh-wsl-notify | win_notify |
| Plugin | Role |
|---|---|
| dsh-wsl-gpu | gpu_doctor |
| dsh-wsl-port | port_doctor |
| dsh-wsl-distro | distro_info |
| dsh-wsl-workspace | wsl_workspace |
| dsh-wsl-picker | wsl_picker |
| dsh-wsl-tray | wsl_tray |
| dsh-wsl-expose | wsl_expose |
| dsh-wsl-hostsvc | host_reach |
| dsh-wsl-clock | clock_doctor |
| dsh-wsl-dns | dns_doctor |
| dsh-wsl-mnt | mnt_doctor |
| dsh-wsl-editor | win_editor |
| dsh-wsl-shot | win_shot |
| dsh-wsl-docker | docker_doctor |
| dsh-wsl-ssh-agent | ssh_agent_hint |
| dsh-wsl-encoding | encoding_doctor |
| dsh-wsl-wslconfig | wslconfig_hint |
| dsh-wsl-download | win_download |
Related: session-contract.
| Track | Notes | Status |
|---|---|---|
| Install drift | check-plugin-versions.sh; install mnt/encoding/ssh-agent |
Done this round |
| Startup health | check-dsh-health accepts 401 + tray 0.2.3 token URL |
Done this round |
| Local LLM probes | hostsvc 0.4.2 apiReady + docker 0.2.2 HTTP 404 |
Done this round |
| Browser / UI relay | port 0.2.2 token + expose 0.2.2 + dsh 0.1.2 auth |
Done this round |
| path/cred floor | Install to sibling 0.2; version-check floors | Done this round |
| Prior verticals | dns/clock/workspace/distro/github → 0.2 | Done previously |
| Thin UX plugins | browser / clipboard / launch / editor / shot / notify / picker |
Deferred |
| MCP / DingTalk / OpenClaw | Separate product lines | Do not force into WSL plugins |
- Plugins share your Harness permissions (files, network, Windows via PowerShell/
cmd). win_launchis allowlisted;cred_hint/ GitHub App never dump secrets into chat.win_notifyblocks on a MessageBox — keep text short and secret-free.
deepseek-harness · dsh-plugin · wsl · windows · github-app
MIT — same as the individual plugins.