The philosophy of DeepSeek Harness is “everything is a plugin.” If you have installed multiple skins, manually switching them on every launch wastes time. The dsh-skin-rotation plugin solves this problem by providing a complete set of skin rotation strategies and ensuring safe configuration writes.
Core Features¶
This plugin provides the following capabilities:
- Multiple rotation strategies: Supports four modes: random, sequential, weighted, and fixed.
- Skin pool management: You can set a status for each skin (compatible, excluded, incompatible, unavailable).
- History: Records rotation timestamps, trigger methods, and results.
- Fail-safe writes: Uses logging and temporary-file mechanisms to prevent interrupted writes from damaging the configuration.
- Versioned state migration: Automatically migrates configuration during upgrades to avoid losing preferences.
- Local-first: No additional API is required; it runs entirely locally and is recoverable.
Installation and Enablement¶
Install this plugin in a DeepSeek Harness environment.
1. Installation command
dsh plugin --profile web add github:luoyuejun9/dsh-skin-rotation
2. Environment requirements
- DeepSeek Harness version must be
>=0.2.0-rc.2. - Install at least two skins for rotation to be meaningful.
3. Enable
After installation, restart DSH. Open Settings -> Skins, and you will see the plugin’s control card at the bottom of the page.
If you use the desktop application, change the command to
dsh plugin --profile desktop add github:luoyuejun9/dsh-skin-rotation.
Usage¶
Use the skin rotation card at the bottom of the Settings -> Skins page:
1. Enable automatic rotation
Click the “Rotate on launch” toggle. When disabled, the current skin remains unchanged on launch, but you can still trigger rotation manually.
2. Select a rotation mode
Choose a strategy from the mode dropdown:
* random: Randomly selects a skin each time, with an option to avoid recently used skins.
* sequential: Rotates in order and continues from the last position after restart.
* weighted: Selects based on weighted probabilities; higher weight means higher probability of being selected.
* fixed: Uses one fixed skin and does not switch automatically.
3. Manual actions
- Shuffle now: Immediately switches to a new skin.
- Restore previous: Restores the skin from the last successful rotation.
- Avoid recent: In random mode, skips the skins from the last 2–3 successful rotations.
- Adjust weights: In
weightedmode, enter numeric values to adjust each skin’s weight (0 removes it from the rotation pool).
4. Exclude skins
Manage the skin pool using checkboxes. Unchecking a skin sets it to “excluded” status (it will not participate in rotation), but this does not uninstall the skin files. For skins marked “incompatible,” once excluded, they cannot be re-enabled through the plugin.
How It Works¶
- Host-level decision: The rotation logic runs once when the DSH process starts. Hot-reloading the plugin does not trigger rotation; only a full restart recalculates the rotation.
- Editing the patch layer: The plugin does not modify the skin files themselves; instead, it rewrites the content of the
# --- dsh-skin managed ---code block in the configuration files. It updates bothcordis.patch.ymlunderprofileandcordis.patch.ymlunderDSH_HOME(the latter has higher priority). - Compatibility validation: The plugin checks whether a skin satisfies the
@deepseek-ai/dsh*version range and the requirements incompatibility.json, ensuring that skins that could cause crashes are not loaded.
Notes¶
- HTTP restrictions: The plugin’s HTTP endpoint (
/api/dsh/skin-rotation) is limited to same-origin requests. - Incompatible skins: Skins marked incompatible and already excluded cannot be re-enabled in the plugin unless the configuration file is edited manually.
- Patch-only editing: The plugin only modifies the patch layer and does not touch the
skin.jsonfile or the skin manager’s own state files.