[中文](README.md) · **English**
# Hermes to DSH
**Browse your local Hermes skills / MCP servers / chats right inside the DeepSeek Harness web sidebar, and inject the selected skills & MCP config into the active agent.**
---
**Hermes to DSH** (`hermes-to-dsh`) is a DSH plugin (`dsh.bundle`) that surfaces your local [Hermes](https://github.com/anthropics/hermes) assets (skills, MCP servers, conversation history) in the DeepSeek Harness web UI as a dockable, resizable sidebar panel. It offers two injection modes:
- **Active** — you tick the skills / MCP servers you actually need; the plugin reads each selected `SKILL.md` + MCP config and injects them into the active agent's system prompt (with a length warning and total cap).
- **Passive** — a contact-style hint; the agent reads skill `SKILL.md` / MCP config on demand only when a capability is missing.
## Features
- **Fixed, draggable/resizable panel** with four-corner grab handles (26px hit area).
- **Two columns**: left = repositories / projects → conversations; right = skills + MCP servers + mode.
- **Global search** across chat name / id, skill name / description, MCP server name.
- **Conversation preview** — open any chat to see `opening X + latest Y` (per-side counts are configurable).
- **Source filter** — filter chats by their `source` (desktop / cron / ...).
- **Message-type filter** — keep only 提问 `user` / 回答 `assistant` / 工具 `tool`; when a type is chosen the panel **auto-fills** the requested count by stepping across other message types.
- **Copy address** — copy the conversation id.
- **MCP detail** — inspect a server's config block before selecting it.
- **Active selection persistence** — writes `~/hermes-active-selection.json` and pings the live session so the agent knows what you chose.
## Capabilities
| Surface | What it provides |
|---|---|
| **UI** | `sidebar.footer.action` sidebar panel (pill toggling a fixed/resizable two-column panel) |
| **Host handlers** | `inspect`, `chatPreview`, `mcpDetail`, `setMode`, `detail` |
| **Injection** | `systemPrompt.section` `hermes:mode` (active → selected SKILL.md full text + MCP config; passive → contact hint) |
## Install
```bash
# bundle: enters the profile layer stack (restart web)
dsh plugin --profile web add github:beimianism/Hermes-to-DSH
# or pure-Cordis, zero-restart via config HMR
dsh plugin add github:beimianism/Hermes-to-DSH
```
> Public `@deepseek-ai/*` and `cordis` deps are intentionally undeclared (injected by the profile pnpm closure).
Requires local [Hermes](https://github.com/anthropics/hermes) data at `%LOCALAPPDATA%\hermes\state.db` (read-only), and `python` on `PATH` for the helper scripts.
## Native architecture (follows startup)
The plugin is a **native bundle + client** that loads automatically on every `dsh web` start — no dynamic plugin or launcher needed:
- **Host half** (`index.js`): registers `ctx.connection.rpc.handle('/hermes', …, {authority:'trusted-host'})` and exposes five endpoints — `inspect` / `chatPreview` / `mcpDetail` / `setMode` / `detail`; `systemPrompt.section('hermes:mode')` injects the active/passive hint (if the host has no `systemPrompt` service — e.g. a pure web profile — the section is skipped silently and everything else keeps working).
- **Client half** (`client/index.js`, generated by `client/_make_native.cjs`): a `__ModuleLoader__.load` bundle, `require('react')`, `host.call` adapted to `ctx.connection.rpc.call('/hermes', …)`, styles injected via `