Skip to main content

Minke/packages/harness-overlay

250Stars28Forks3Issues2Watchers

Adds LM Studio/Ollama local models, Codex sub-agents, file/terminal/web workspace, and keyboard shortcuts with desktop theme synchronization to DeepSeek Harness.

Evidence4/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
TypeScript
License
Apache-2.0
Branch
main
agentdeekseekdesktopdshdsh-pluginharness

Install

cmdweb profile
$ dsh plugin --profile web add github:lencx/Minke#path:packages/harness-overlay

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin lencx/Minke/packages/harness-overlay for me: review the repository at https://github.com/lencx/Minke first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-Line Positioning

Minke's product customization layer, injected into the DeepSeek Harness runtime, adding to Harness: local model bridging (LM Studio, Ollama), executable one-off sub-task Codex sub-agents, file/terminal/web sidebar workspaces, configurable hotkeys, and desktop capabilities such as theme and locale synchronization.

Core Capabilities

  • Through pluggable lifecycle, discovers and manages LM Studio and Ollama local model services; instances started by the user are not reconfigured by the plugin
  • Hosts OpenAI-compatible loopback endpoints (openAICompatible), allowing users to manually connect any self-deployed compatible service
  • Registers Codex CLI sub-agents (provider: codex), delegating self-contained tasks to codex app-server --stdio
  • Provides Files, Terminal, and Web三类可分屏的工作区标签页 (right/bottom containers, tabs can be dragged and configured)
  • Provides desktop hotkey system (8 actions by default, can be rebound and persisted to desktop)
  • Synchronizes locale (zh/en) and theme switching with host Harness, making native desktop windows follow the theme
  • After installation, intercepts developer onboarding hints, bypassing "developer beta" prompts from the user view

Technical Implementation

  • Language: TypeScript + React 19 (JSX on client side, no rendering logic on host side)
  • Key Dependencies: @deepseek-ai/cordis (plugin framework), @deepseek-ai/schemastery (config schema and defaults), @deepseek-ai/dsh-llm-pi-ai (LLM adapter layer, mounted after local services are ready), @deepseek-ai/dsh-subprocess (CLI parsing and subprocess spawn), xterm + codemirror + shiki (terminal/file/web tab rendering)
  • Architecture Pattern: Through cordis.patch.yml with host for 4 combined slots: minke-overlay (product layer), model-runtime (local service lifecycle), subagent-codex (Codex delegation), tool-subagent-codex (Harness tool wrapper); host-side src/index.ts is placeholder only, browser-side implementation in src/client/*, local service processes cleaned via Cordis effect on disposal
  • Entry Files: packages/harness-overlay/src/model-runtime/index.ts (host-side main), packages/harness-overlay/src/client/index.tsx (client-side bootstrap)

Use Cases

People who use DeepSeek Harness daily for coding/writing, want LM Studio or Ollama already running, want to open several file tabs directly in the same window, and switch between terminals and web pages. Also suitable for those who want to integrate Codex CLI one-off tasks into the main Harness conversation without leaving the current session to switch terminals.

Prerequisites & Compatibility

DependencyMinimum VersionDescription
Node>=24Determined by host Minke desktop runtime; build scripts and Electron Forge also require this baseline
PlatformmacOS / Windows / LinuxCross-platform desktop, macOS multi-titlebar/translucent surface adaptation; Win/Linux use platform default styles
Native ModulesNoneOverlay package doesn't directly declare native dependencies; runtime provided by host Electron
DSH VersionNot DeclaredOverlay doesn't write peerDependencies in package.json, controlled by host Minke desktop

Installation

dsh plugin --profile web add github:lencx/Minke/packages/harness-overlay

Configuration Options

ConfigTypeDescriptionDefault
lmStudio.enabledBooleanWhether to enable LM Studio row (only affects UI visibility, not service availability)false
lmStudio.lifecycleEnumexternal=discover only / ensure-running=pull up if missing / managed=reclaim instances started by this plugin on uninstallexternal
lmStudio.commandStringExplicit lms executable path (overrides auto-discovery)""
lmStudio.baseURLStringExplicit loopback Base URL; port 0 will be rejected"" (auto-use http://127.0.0.1:1234/v1)
lmStudio.apiKeyEnvString (credential-ref)Auth environment variable name for LM StudioLM_API_TOKEN
lmStudio.defaultContextWindowIntegerDefault context window for LM Studio models32768
lmStudio.defaultMaxTokensIntegerDefault max_tokens for LM Studio models8192
ollama.enabledBooleanWhether to enable Ollama rowfalse
ollama.lifecycleEnumexternal / ensure-running (managed not supported)external
ollama.commandStringExplicit ollama executable path""
ollama.baseURLStringExplicit loopback Base URL; port 0 will be rejected"" (auto-use http://127.0.0.1:11434/v1)
ollama.defaultContextWindowIntegerDefault context window for Ollama models32768
ollama.defaultMaxTokensIntegerDefault max_tokens for Ollama models8192
openAICompatible[]ArrayManually connected OpenAI-compatible loopback endpoints, including id / displayName / baseURL / apiKeyEnv[]
Hotkeysaction → bindingPersisted via IPC; max 128 entries, rule Mod(+Ctrl/Meta/Alt)?(+Shift)?+Key (see shortcut-contract.ts)palette.open=Mod+K、settings.open=Mod+,、session.new=Mod+N、session.back=Mod+[、session.forward=Mod+]、sidebar.toggle=Mod+S、tabs.toggle=Mod+P、tabs.bottom.toggle=Mod+B
Env Variable MINKE_LM_STUDIO_ENABLED0/1When set together with MINKE_LM_STUDIO_COMMAND, changes lifecycle to ensure-runningNot set
Env Variable MINKE_OLLAMA_ENABLED0/1When set together with MINKE_OLLAMA_COMMAND, changes lifecycle to ensure-runningNot set
Env Variable LM_STUDIO_BASE_URLURLOverride LM Studio Base URLNot set
Env Variable OLLAMA_BASE_URLURLOverride Ollama Base URLNot set

FAQ

Q: Is this only tied to the desktop version, or can it also be installed separately as a DSH plugin?

A: Both work. The Minke desktop app already has this overlay layer composed internally; the code installed by users via dsh plugin ... add is the same code that gets injected into the Harness runtime. The source-of-truth behavior is the same contract (cordis.patch.yml).

Q: I configured a local model but don't see my model in the list. What should I do?

A: Model discovery uses the OpenAI-compatible /v1/models endpoint; LM Studio additionally merges v1 loaded-instance metadata. For LM Studio, first confirm lms server status --json can get the port; if the service is started externally and the current context window doesn't match the configuration, the overlay won't reload it for the user and will prompt to manually reload in the LM Studio client.

Q: What happens after Ollama starts?

A: When the overlay spawns the ollama serve process that follows the host Minke process lifecycle, it will be terminated when this plugin is disposed (different from LM Studio's one-shot CLI behavior; LM Studio's CLI doesn't stop the shared service).

Q: Is the Codex sub-agent the same as "Codex IDE login"?

A: No. The overlay just hands tasks to the codex app-server that's already in PATH via stdio; account login, model selection, and sandbox/workspace settings are handled by Codex CLI itself—the overlay doesn't hold these states.

Q: What data on my computer will the desktop version change?

A: Desktop preferences are stored in ~/.minke; browser session data stays local; DSH's own session and model settings are still managed by Harness's default path. This overlay doesn't write to settings.yaml.

Q: Where do I switch between Chinese and English after installation?

A: It's synchronized with host Harness's locale/change, no need to switch separately in this overlay; native desktop window title bar, menus, etc. will follow the same locale snapshot.

Q: How do I verify my LM Studio service pairing is successful?

A: Find the LM Studio row on the Models page, confirm there's no "CLI not found" hint (meaning lms was auto-discovered), and the model list is not empty; if started externally and the current loaded instance context doesn't match the configured value, you'll get error codes like LM_STUDIO_CONTEXT_TOO_SMALL / LM_STUDIO_CONTEXT_PREPARATION_FAILED.

Difficulty Level

Advanced — requires understanding of local model service ports/context windows, executable file discovery, and DSH's multi-fiber/plugin injection model. Regular users can use it well through the GUI path only, but troubleshooting requires understanding these concepts.

Known Issues & Limitations

  • LM Studio's lms is a one-shot CLI; even with lifecycle set to managed, it leaves an independent shared service process after starting. The overlay only cleans up in the subset where it "confirmed this instance was started" (see README lines 35-43 for details)
  • When LM Studio instance is started externally, the overlay won't reload it for the user—it will error and require the user to reload in the LM Studio client (error codes like LM_STUDIO_CONTEXT_PREPARATION_FAILED)
  • When loopback Base URL is explicitly passed, port 0 is rejected (must be a reachable port)
  • DSH version isn't declared as a peer in package.json, the available range is determined by host Minke desktop runtime; behavior when overlay is installed separately depends on the host's version contract
  • Minke is still in active iteration—features, packaging, and local data schema may change (see repository root README.md lines 24-25)
  • Current pre-release builds on macOS don't have Apple notarization, need xattr -dr com.apple.quarantine to remove (this is a host Minke desktop packaging issue, not in overlay scope)

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/lencx/Minke/packages/harness-overlay)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory