DeepSeek Harness Remote Workspace

DeepSeek Harness Remote Workspace

Travaillez sur un serveur distant comme s'il était local

Connectez un hôte en SSH, choisissez-y un dossier, et travaillez dedans. L'agent lit, écrit, modifie, liste, cherche et exécute des commandes sur la machine distante avec tous les outils qu'il a déjà. La connexion est partagée par toutes les sessions, plusieurs serveurs peuvent être connectés en même temps, et tout s'active depuis Paramètres → Plugins.

Ce que ça fait

Prérequis

Installer

curl -fsSL https://raw.githubusercontent.com/cmukanisa/dsh-remote-ssh/main/install.sh | sh

Ou depuis un clone : git clone https://github.com/cmukanisa/dsh-remote-ssh && cd dsh-remote-ssh && node install.mjs

Installer active le plugin, et l'installation est transactionnelle

Elle vérifie d'abord tous les prérequis, installe, vérifie, et revient à l'état précédent exact si quoi que ce soit ne passe pas — un plugin à moitié installé laisserait un harness démarrer une composition qui désactive les providers livrés sans enregistrer les remplaçants.

  checking
  ✓ node        ·························· v24.14.0 (the harness requires >= 22.19)
  ✓ ssh         ···································· OpenSSH_10.3p1, LibreSSL 3.3.6
  ✓ tailscale   ················ 1.102.3 — the Tailscale SSH transport is available
  ✓ harness     ················································· /Users/you/.dsh
  ✓ writable    ··································· profiles/plugins accepts writes
  ✓ modules     ················· profiles/node_modules/@deepseek-ai/cordis present

  installing
  ✓ copied      ········ dsh-remote-ssh → profiles/plugins/dsh-remote-ssh (8 files)
  ✓ patched     ···································· cordis.patch.yml (8 rows)
  ✓ enabled     ····························· settings.yaml remote-ssh.enabled = true

  verifying
  ✓ files       ······················································ 12 files in place
  ✓ composition ·············································· 8 expected rows
  ✓ setting     ····································· remote-ssh.enabled = true
  ✓ module      ············· registry.js imports and exports RemoteRegistry

  ──────────────────────────────────────────────────────────────────────────────
  Done in 0.1s. Reload the harness page, then workspace "+" → "Serveur distant (SSH)".
OptionEffet
--keep-offinstaller en veille — pour un déploiement où l'activation est auditée séparément
--enableactiver même si un passage précédent l'avait laissé désactivé
--linklier les paquets au lieu de les copier (développement)
--dry-runlancer les vérifications, annoncer les changements, ne rien écrire
--no-colorsortie sans couleur (respecte aussi NO_COLOR)
--uninstallretirer les paquets, les lignes de composition et le réglage
--dsh-home DIRcibler un autre dossier de harness

Utiliser

  1. Rechargez la page du harness.
  2. Cliquez sur + dans l'en-tête des workspaces de la barre latérale — ou sur le bouton 🖥 en bas de la barre latérale, qui ouvre la même boîte de dialogue.
  3. Choisissez Serveur distant (SSH).
  4. Cliquez sur + Serveur et remplissez la connexion : nom, hôte, port, utilisateur, chemin de clé privée, ou un mot de passe.
  5. Naviguez jusqu'au dossier, puis Utiliser ce dossier.

Le dossier apparaît comme un workspace normal. Les sessions qui y sont ouvertes atteignent le serveur, et le profil reste disponible pour toutes les autres sessions.

L'interface suit la langue de votre navigateur : français, anglais ou chinois.

Tailscale

Deux choses différentes s'appellent « se connecter via Tailscale », et le plugin ne les confond pas.

Le formulaire de connexion liste les pairs de votre tailnet ; un clic remplit le nom MagicDNS, l'utilisateur, et le transport quand le pair fait tourner le serveur SSH Tailscale. Un pair signalé hors ligne est nommé avant la tentative, au lieu d'apparaître comme un timeout.

Un travail qui survit au harness

La boucle de l'agent s'exécute dans le harness : le fermer met fin au tour. Ce qui peut continuer, c'est la commande, et tout le secret est de la détacher : le plugin écrit un petit lanceur sur le serveur, le démarre dans sa propre session, et envoie sa sortie dans un fichier de log là-bas.

Rien à configurer : un travail lancé dans un workspace distant est détaché par défaut, et un enregistrement durable par exécution vit dans $DSH_HOME/remotes-sessions.json, partagé par toutes les sessions.

Mettre à jour

Relancez l'installeur. Il réécrit son propre bloc de composition, et sa dernière ligne dit laquelle de deux choses le harness en cours a besoin :

node install.mjs       # ou la commande curl à nouveau

Dépannage

SymptômeCause et correction
does not answer as a POSIX hostUn serveur SSH Windows. Utilisez un hôte Linux/macOS, ou exposez le sshd WSL de cette machine sur son propre port.
Permission denied (publickey)Lancez ssh <hôte> à la main d'abord ; le plugin utilise le même client, le même agent et la même configuration.
Clé d'hôte changéeLe plugin refuse, à raison. Retirez la ligne obsolète de known_hosts quand vous êtes sûr.
glob/grep signalent un programme absentInstallez ripgrep sur le serveur (apt-get install ripgrep, dnf install ripgrep, apk add ripgrep).
Un pair du tailnet expireTailscale le signale hors ligne ; le formulaire de connexion le dit à l'avance.
Le workspace semble vide dans un outil purement localCet outil contourne la couche filesystem et voit donc le miroir local vide. Utilisez l'arborescence de fichiers du workspace.
Failed to load plugins … loaded without registering "…dsh-remote-ssh-ui" après une mise à jourLe harness en cours garde l'identité de paquet lue au démarrage. Redémarrez dsh web ; recharger la page ne suffit pas.

Limites à connaître

Liens