How it behaves
The collection is mounted into dsh web through DSH’s official profile mechanism. The task board uses five states: planning, todo, in progress, completed and failed. Executing a card creates a real DSH agent session and writes the resulting status back to the card. A card may also contain a cron expression for scheduled execution.
The right-side panel reads the project workspace and Git state. It provides a file tree, search, previews for Markdown, HTML, code, diff, CSV, PDF, Office files, images and text, plus source/preview modes, split editing and saving. Its SCM controls can stage, unstage and discard Git changes.
Configuration and storage
Settings are changed in the Web UI and take effect immediately.
| Area |
Documented location or value |
| SSH host configuration |
~/.dsh/dsh-ssh.json |
| SSH authentication |
Keys or passwords; hosts can be imported from ~/.ssh/config |
| Image understanding |
Settings > Plugin configuration > Image understanding |
| Image endpoint |
An OpenAI-compatible vision endpoint, model and key |
| Remote events |
Server-Sent Events (SSE) when the tunnel supports it |
The image tool is named describe_image and accepts a prompt for tasks such as OCR, UI diagnosis or translation.
Requirements
dsh web must already start successfully. Repository installation requires Node.js >= 22 and pnpm; the README states that npm installation has no additional requirements.
Remote access and limits
Mobile pairing uses a one-time, time-limited token. Stop revokes all paired devices. Local-network QR pairing is supported, and a cloudflared public tunnel can provide access from other networks. Cloudflare quick tunnels on trycloudflare.com and Tailscale Serve do not pass through SSE; the plugin falls back to polling, so messages may arrive a few seconds late.
The SSH panel can open an xterm.js terminal, transfer files over SFTP, create local-only tunnels listening on 127.0.0.1, and run one command across filtered hosts. These features operate on the configured remote systems.
Written from the project's own documentation and kept in sync with it. Where the two disagree, the source is authoritative — read the README on GitHub