Skip to content
dsh.fish
Bundle

dsh-plugin-cmdk

Command palette for DeepSeek Harness (Cmd+K) — new chat, jump to session, switch model and reasoning effort, permissions, slash commands, theme, language and settings, all from one fuzzy-searchable bar.

Source
ivanearisty
License
MIT
Updated
Updated 20 hours ago

Readme

# dsh-plugin-cmdk

A command palette for DeepSeek Harness. Press `⌘K` (`Ctrl+K`), type a few
letters, hit enter — new chat, jump to a session, switch model, change
permissions, run a slash command, flip the theme, open any settings page.

The same bar ChatGPT, Slack, Linear and Notion put on `⌘K`, for the Harness.

## Install

```sh
dsh plugin --profile web add dsh-plugin-cmdk
```

Not on npm yet — until it is, install straight from GitHub:

```sh
dsh plugin --profile web add github:ivanearisty/dsh-plugin-cmdk
```

Client-only — it takes effect as soon as the page reloads.

## Use

| Key | Action |
|---|---|
| `⌘K` / `Ctrl+K` | Open the palette |
| `⌘⇧P`, `⌘/` | Same thing (VS Code / Firefox-safe aliases) |
| `↑` `↓` (or `Ctrl+N` / `Ctrl+P`) | Move |
| `↵` | Run, or open a sub-page |
| `⌫` on an empty query | Back out of a sub-page |
| `Esc` | Close |

## What's in it

Everything is fuzzy-matched, so `swm` finds **Sw**itch **m**odel.

- **Chats** — New chat (and per-workspace), Jump to session (shows running
  state and age), rename the current chat
- **Session** — Switch model, with a sub-page for reasoning effort where the
  model exposes one; change permissions; run any slash command the host offers
- **Views** — jump to any tab the current conversation shows
- **Appearance** — theme, language, sidebar
- **Settings** — open settings, plus a row for every settings page installed

Recently used commands surface first on an empty query.

## How it works

The catalog is **rebuilt on every open** from the harness's live services, so it
can never show a stale session list or an outdated model set. Anything another
plugin adds — a new view tab, a new settings page, a new slash command — shows
up automatically without this plugin knowing about it.

The palette UI is hand-rolled on React and the harness's own design tokens. It
deliberately does **not** depend on `cmdk` or `kbar`: both pull a dialog
library, and a command bar does not justify that weight in the boot bundle.
~30 kB minified, ~9 kB gzipped.

## Permissions and data

Reads and drives only in-page harness services (sessions, workspaces, theme,
locale, model directory, commands). **No network calls, no telemetry, nothing
leaves the browser.** Registers one overlay and one `keydown` listener.

Where the harness keeps a feature's state private, the palette clicks the same
accessible control you would (`role="tab"`, `aria-label`), so an action takes
exactly the path a mouse takes.

## Optional companion

With [`dsh-session-search`](https://github.com/ivanearisty/dsh-session-search)
installed, a **Search messages…** row opens full-text search over every
conversation. Detected at runtime; not required.

## Settings

The plugin registers a `dsh-plugin-cmdk` settings namespace, so it appears as
a card under **Settings → Plugins** like any other installed plugin, and its
section lives in `settings.yaml`:

```yaml
dsh-plugin-cmdk:
  aliasChords: true      # keep the Cmd+Shift+P and Cmd+/ aliases bound
  extraChords: []        # additional KeyboardEvent.code chords, e.g. ["Shift+KeyP"]
```

## Compatibility

- DeepSeek Harness `0.1.x` (developed against `0.1.1-rc.2`), `web` profile.
- Node `^22.19 || >=24`.
- Harness packages are **optional peer dependencies**, resolved from the host
  installation.

## Known limitations

- Chords are fixed in this version (`⌘K`, `⌘⇧P`, `⌘/`) and not yet rebindable.
- Firefox reserves `⌘⇧P` for a private window; `⌘K` is the primary chord for
  exactly that reason, and `⌘/` is the always-safe fallback.
- Model and slash-command pages need an active session; on a blank session
  those rows are correctly absent.

## License

MIT

Install

dsh plugin --profile web add github:ivanearisty/dsh-plugin-cmdk

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source