Introduction¶
DeepSeek Harness (DSH) adopts an “everything is a plugin” architecture, and plugins are usually isolated by profile. The desktop version uses the profiles/desktop directory by default and does not provide a setting for switching profiles. As a result, plugins installed in other profiles (such as web) cannot be used directly in the desktop version.
The dsh-profile-bridge plugin creates directory links so that the desktop version points directly to the profile directory containing the plugins, enabling one-click switching.
What Problem It Solves¶
In Harness’s architecture, the plugin system is bound to a profile. The desktop app hardcodes the profile directory as <DSH_HOME>/profiles/desktop and does not provide an entry point for switching profiles. This means:
- Plugins installed in a CLI profile (such as web) are not recognized by the desktop app.
- To use these plugins in the desktop app, you must manually reinstall them, creating a maintenance burden.
This plugin resolves the isolation issue by changing profiles/desktop to a symbolic link or directory junction pointing to the target profile.
Installation¶
Use the official installation command:
dsh plugin --profile desktop add github:2NF/dsh-profile-bridge
After installation, refresh the page (or restart the app) and open the Settings page.
If you encounter a package manager version conflict (for example, the desktop version uses pnpm v11 while the target profile uses v10), you can bypass it using a local link:
1. Create a link in the target profile directory:
- Windows: New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-profile-bridge" -Target "D:\path\to\dsh-profile-bridge"
- macOS/Linux: ln -s /path/to/dsh-profile-bridge ~/.dsh/profiles/desktop/node_modules/dsh-profile-bridge
2. Append the following to the target profile’s cordis.patch.yml:
- insert:
- id: profile-bridge
name: 'dsh-profile-bridge'
Usage¶
- Open Settings → Profiles, where all profiles are listed and the current one is highlighted.
- Select the target profile you want to switch to (such as
web) and click Use It. - The app will close automatically within two seconds while the script completes the directory switch. Manually reopen the desktop app; the plugins will then take effect.
- To revert, click Restore to Standalone Profile. The script will remove the link and restore the backup directory.
How It Works¶
The switching process happens after the app closes, to avoid processes occupying directory files.
- Backup: Rename the current
profiles/desktopdirectory todesktop.fresh-<timestamp>. - Link: Create a directory junction (Junction) on Windows, or a symbolic link on macOS/Linux.
- Merge settings: Merge the desktop version’s initial UI configuration (
ui-chat,ui-settings, etc.) into the target profile’s configuration file, avoiding re-running the onboarding flow.
Notes¶
- App closure: Switching requires closing the app. The script will not reopen it automatically; please start it manually.
- Conflicting runs: Do not run the desktop version and the CLI command
dsh --profile <same profile>at the same time. This may cause exceptions due to file lock conflicts. - Platform differences: macOS/Linux uses symbolic links. The behavior is the same as on Windows, but it has not been validated on real devices.
- Scope: This link applies only to the desktop version. CLI users can use the corresponding profile directly.
- Plugin dependency: If this plugin is not installed in the target profile, the Settings page will disappear after switching. It is recommended to install the plugin on both sides.