Skip to main content

How to use deepseek-harness-desktop

Add full SSH operation capabilities to dsh Web GUI: host management, persistent connection pool, command execution, web terminal, SFTP file transfer, local port forwarding, cluster concurrent execution, and Agent tools for 6 shared host configurations.

This article is auto-derived from indexed fields (wiki / faq / compatibility_json), not freshly AI-generated.

This article is derived from the plugin's already-indexed fields (wiki / faq / compatibility_json / readme), not freshly generated by AI. Source field is noted at the end of each section.

Quick start

dsh-ssh

— source: plugin_wiki.wiki_content

Install & verify

dsh plugin --profile web add @linxin666/dsh-ssh

Run the command above in your DSH Web Profile. Then enable the plugin in the plugin list.

— source: plugins.install

Key points

  • 可靠 Windows 启动:移除 PowerShell 5.1 -WindowStyle Hidden 与 Electron Node 模式的冲突,隐藏窗口仍由 spawn 的 windowsHide 处理;空旧补丁、状态订阅竞态和 IPC 错误不会再把启动页永久留在 8%。
  • 验证过的 Runtime 组合:内置 @deepseek-ai/dsh 0.1.0-rc.7、dshmarket 1.15.0、Web UI 聚合 0.2.3、兼容 rc.7 的 Codex Connect 与 dsh-live-stats 0.1.20,Stable 继续精确锁定而非追随 latest。
  • 托盘与后台自动化需显式选择:默认关闭仍会退出。选择“最小化到托盘并启用后台自动化”后,关闭主窗口才保留 Runtime 和到期任务;显式退出、更新、安全模式和崩溃路径一律完整停止。
  • Host 持久任务调度:Task Board 保存时区、cron 槽位、租约、misfire/running 策略和确定性运行键;启用后台自动化时通过真实 DSH Session 执行并回写 Task Run,Host 不可用时仍回退浏览器调度。
  • 可审计的扩展边界:扩展坞校验 dsh.compatibility 的版本、Desktop API、能力、Surface 与运行时证据,并在 profile 写入 desktop-plugins.lock.json。browser-safe SDK 不导入 Electron 或私有 DSH 模块;预览的外部打开仅传工作区根和相对路径,Host 验证后才交给系统。

— source: plugin_wiki.readme_en (fallback readme_raw)

FAQ

Can others access my SSH console on the LAN?

No. All /api/dsh-ssh/ routes have loopback checks (socket must be 127/8 or ::1, plus same-origin Host/Origin header verification), LAN neighbors are denied direct access; local port forwarding tunnels only listen on 127.0.0.1 and are not exposed to the internet. The check logic is in packages/dsh-ssh/src/routes.ts:43-63.

How are passwords stored? Can others see them?

Stored in plaintext in ~/.dsh/dsh-ssh.json (file permissions 0600, directory 0700, atomic writes), using the same trust model as ssh-skill writing passwords in ssh-config comments. Not actively encrypted because encryption would introduce new key management burden; users should ensure their local account is secure. Storage logic is in packages/dsh-ssh/src/store.ts:18-20.

Will the Agent run commands on hosts I haven't configured?

No. The Agent can only operate on host aliases configured in the GUI or imported from ~/.ssh/config; when an alias is not configured, the tool call will directly error out without fabricating a host. This restriction is documented in packages/dsh-ssh/src/index.ts:58 (the system prompt limitation section).

What if the remote command times out or the output is very large?

exec has a default timeout of 60 seconds (overridable); after timeout, a KILL signal is sent to the remote stream for forced cleanup; if stdout/stderr accumulate over 2MB, output is automatically truncated and marked with "[output truncated]" to prevent a single command from spewing gigabytes and blowing up the process. Constants are in packages/dsh-ssh/src/engine/connection-pool.ts:30-38.

Why must I use an absolute path when uploading files to remote?

Remote mkdir chains and fastPut must be based on the same path resolution, otherwise different implementations might create directories at the root. Relative paths will throw "remotePath must be an absolute path" error at the upload entry point. Code is in packages/dsh-ssh/src/engine/sftp.ts:37-41.

Can I SSH with multiple tabs like an IDE? What happens if the connection drops?

The persistent connection pool maintains one long-lived connection per host, automatically disconnecting after 30 minutes of idle; mid-flight disconnections automatically reconnect on the exec channel (up to 3 times). Note: Automatic replay will replay non-idempotent commands, so for long-running tasks (like deployments, database migrations) please confirm idempotency before use. Implementation is in packages/dsh-ssh/src/engine/connection-pool.ts:222-244.

How do I use jump hosts and cluster execution?

Fill in a proxyJump array in the host configuration (each hop must be a host alias already configured with this plugin), the engine will connect in chain order via forwardOut; cluster execution filters by alias/environment/tags in the "Cluster" tab or ssh_cluster tool (tags use ALL semantics for full match), default concurrency is 8 and is adjustable. Code is in packages/dsh-ssh/src/engine/connection-pool.ts:135-169 and packages/dsh-ssh/src/engine/cluster.ts:19-50.

Will uninstalling the plugin remove my host configurations?

It will not be automatically deleted. ~/.dsh/dsh-ssh.json is a user data file; plugin installation/removal only affects the mounting and unmounting of the engine, routes, and Agent tools; to clean up completely you need to manually delete or rename this file.

— source: plugin_wiki.faq_json

Compatibility

  • DSH: 未声明(package.json 无 dsh.engines;通过 devDependencies 锁到 @deepseek-ai/dsh-* ^0.1.0-rc.7:cordis / host-webserver / client-runtime / client-connection / client-locale / client-ui-settings / client-ui-slots / tools / llm / settings / system-prompt)
  • Node: ^22.19.0 || >=24.0.0(packages/dsh-ssh/package.json:7-9)

— source: plugin_wiki.compatibility_json

Pitfalls

Review the upstream repo before installing. This guide is auto-derived from indexed fields and may lag the latest release. If anything contradicts the official docs, treat the upstream source as authoritative.

— source: general rule