Introduction

The DeepSeek Harness (DSH) community commonly extends client capabilities via plugins. csiroqa/dsh-hotkeys targets DSH’s web usage scenarios, binding operations like switching sessions, sending/clearing drafts, stopping generation, copying sessions, and archiving sessions to the keyboard to reduce mouse movement. It is more suitable for developers who need to frequently operate sessions in DSH and wish to replace some click actions with shortcuts.

What is this

  • Plugin: csiroqa/dsh-hotkeys
  • Maintainer: csiroqa
  • License: MIT
  • Target: DSH web profile
  • Core Goal: Add global shortcuts to the DSH client, and support configuring keybindings, sendMode, and ignoreInputs

Core Features

Session Navigation

  • Switch sessions: Cycle through sidebar order, hold to switch continuously.
  • New session: Same entry as “New Session” in the sidebar.

Drafts & Send

  • Send draft: send is equivalent to the Composer’s accelerator Enter; if the draft is empty but has queued messages, push queued messages into the running turn; automatically intercept send/accept when in progress.
  • Clear draft: Clear only text, keep attached images.

Session Management

  • Stop generation: Stop the current session’s running turn; only interruptable by ordinary sessions and continuable sub-agents; show an in-page notification when not running.
  • Copy session: Fork the current session (increment title) and jump to the new session.
  • Archive session: Call native workspaces.archiveSession to move the current session to “Archived”.

/hotkeys Command

Input /hotkeys in a session to list all currently effective keybindings for the 8 actions, including user-defined overrides.

Trigger Guards

  • Does not trigger during IME composition.
  • Does not trigger on AltGr key presses.
  • Does not trigger on consumed (defaultPrevented) keys.
  • When ignoreInputs is enabled, pure key combos (without Ctrl/Cmd/Alt) do not trigger inside input boxes/text areas.
  • Only allows navigation actions when held.
  • Invalid or duplicate keybindings will warn in the console and specify the action name.

Installation & Enablement

First, prepare the environment:

  • Node.js >= 22
  • pnpm
  • Local deepseek-harness source code checkout (dependencies point to ../deepseek-harness via link:)

Then execute:

git clone https://github.com/csiroqa/dsh-hotkeys.git
cd dsh-hotkeys
pnpm install
pnpm build

Install into the web profile. Since the plugin points to the current repository directory via link:, the command uses the current directory:

dsh plugin --profile web add link:$(pwd)

Restart dsh web and perform a hard refresh (Ctrl+F5) in the browser. If you need to modify the source code later, simply rebuild (pnpm build) and hard refresh for changes to take effect.

Typical Usage

  1. Open any session, use Ctrl+Alt+[ / Ctrl+Alt+] to switch sessions; use Ctrl+Alt+N to create a new session.

  2. After entering a draft, use Ctrl+Enter to send; use Ctrl+. to stop generation; use Ctrl+Shift+F to copy the session.

  3. Use Ctrl+Alt+A to archive the current session; the session will be moved to “Archived” in the sidebar.

  4. Input /hotkeys to view all currently active shortcuts.

The mod in the keybindings is Ctrl on Windows/Linux and on macOS. Keybindings are assumed based on the US keyboard layout; shift characters will be restored.

Configuration

Keybindings, sendMode, and ignoreInputs are persisted via the settings namespace.

You can visually edit them in DSH via “Settings > General > Hotkeys”:

  • Edit keybindings for each action.
  • One action supports multiple keybindings, separated by commas.
  • Input an empty string to disable the action and reset to default.
  • Adjust sendMode.
  • Toggle ignoreInputs.

You can also edit the hotkeys: segment of $DSH_HOME/settings.yaml to configure keybindings, sendMode, and ignoreInputs.

Note: The config segment in cordis.patch.yml does not reach the browser side; please write keybinding configurations to settings.yaml.

When sendMode is set to auto, it behaves consistently with the Composer’s accelerator Enter. ignoreInputs is used to control whether pure key combos trigger inside input boxes/text areas.

Suitable Scenarios & Notes

Suitable for people who frequently use DSH web sessions and want to reduce mouse operations. This plugin was developed and verified against the DSH 0.1.1-rc.2 source code and has been tested and confirmed available in the @deepseek-ai/dsh@0.1.1-rc.2 (npm global/npx install) environment. The platform is Windows / macOS / Linux, with a Node.js version requirement of >= 22.

Please note:

  • The plugin runs under the permissions of the current dsh process. Please check the source code and LICENSE before installing.
  • It depends on the two public services sessions / workspaces, and an untyped conversation.input runtime surface; if ui-conversation is missing, relevant actions will silently degrade.
  • Known limitations: The pick arbitration of the slash menu when open is privately held by the Composer, so send submits the draft directly rather than picking the highlighted item.
  • Shortcuts only take effect on the local page; DSH’s default binding is local and does not involve any network listening.
  • Keybinding configurations are written to $DSH_HOME/settings.yaml, which is a local file; please do not expose the DSH port to the public internet.

License & Links

This project uses the MIT License. When using, modifying, citing, or including this project, please retain the LICENSE file and copyright notice, and indicate the source (the repository link).

Project Repository: https://github.com/csiroqa/dsh-hotkeys