dsh-emacs
An Emacs client for DeepSeek Harness
What it is
An Emacs client for DeepSeek Harness
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add 'git+https://github.com/vritser/dsh-emacs.git#bc26985f28612316c68ca8fc396171040d6273be'
DSH versions accepted
Undeclared
Author and traction
vritser · ★ 49 · Updated 2026-11-05
About this plugin
dsh-emacs — an Emacs client for DeepSeek Harness
Use DeepSeek Harness (dsh) from Emacs: streaming replies, tool calls, workspace sessions, subagent chats, file attachments, and model selection. Requires Emacs 28.1+, with no mandatory third-party Emacs packages.
https://github.com/user-attachments/assets/9ee9fc66-1997-49b7-a921-5753690edafa
The development version (0.9.0 - Unreleased) targets dsh 0.2.2-rc.1. The protocol reference records the 2026-11-05 source audit and adaptations for batched projection updates, explicit session activation and image-reference reads. Browser-cookie authentication is retained. The last live E2E validation used dsh 0.2.1-rc.2 with dsh-emacs 0.8.0; it does not validate this new baseline. Quick start
1. Clone the repository:
2. Add this to your Emacs configuration and evaluate it, or restart Emacs:
3. Run M-x dsh-emacs. It opens the session list and starts a local server if needed, offering to install the dsh CLI when it is missing. 4. Configure a provider with M-x dsh-emacs-add-provider, or use M-x dsh-emacs-open-web for account sign-in and other provider families. Credentials and model settings stay on the dsh server. 5. Press c to create a session, use C-c C-m to choose a model, then type after ❯ and press C-c C-c to send.
For an existing server, configure its address and authentication before connecting. A use-package example is in Customization. For multiple project services, use the development version’s connection lifecycle and optional profile switcher. After disconnecting, run M-x dsh-emacs to reconnect to the configured service. Using it
M-x dsh-emacs opens the session list with Recents first: the 15 most recently updated visible sessions with workspace labels, followed by their usual workspace groups. Set dsh-emacs-session-recents-limit to change the count (zero hides Recents). Set dsh-emacs-session-recents-show-workspace to nil to hide workspace labels. Press RET to open a session, c to create one, and TAB to fold a group or expand available subagents. From a local project, the command locates its existing workspace; from a chat, it locates that session. New sessions open an editable draft while connecting. Opening an existing session in a fresh chat buffer completes only the latest human round (a turn with a user-authored message), fetching extra pages for a long round without moving your draft cursor. C-c C-o cancels an in-progress history load; once finished, it loads 3 earlier user+assistant rounds by default (dsh-emacs-history-rounds). Switching back to a live chat preserves it.
The PTC mode preset ID is now ptc. If your configuration sets dsh-emacs-default-preset to "code", change it to "ptc".
Idle session dots, the New Session placeholder and muted text (timestamps, reply footers, deliverable descriptions, subagent error notices) use the theme's shadow face (grey by default); running session dots are orange. Essential keys User messages stay left aligned with a teal left rail and light inner spacing, with one blank line before and after each question. Answers remain frameless; completion summaries leave a small gap above the answer without changing its font. Ordinary Emacs undo applies only to the input, leaving the transcript intact. Copying a user-message line yields its authored text; pasting does not carry the conversation rail or spacing into the destination. M-x imenu navigates the conversation's questions. Click a folded tool or thinking header, or press RET on it, to expand it. Once a turn ends, continuous thinking and tool cards between replies fold into activity summaries such as Read files and ran commands. Replies stay outside these groups. Successful turns without mid-turn input additionally fold their whole process under Completed…, leaving any final answer visible. Failed and Stopped are non-foldable status rows,
Similar plugins
Mole
🐹 Open-source Mac and PC cleaner. Keep your machine clean, light, and running like new…
DeepSeek-Reasonix
A reliable coding agent for complex software engineering tasks.
dsh-desktop
DSH Desktop product workspace