Gemus — DeepSeek Harness desktop plugin
Connect the Gemus design canvas from the official DeepSeek Harness app.
This bundle includes a Host connection owner and an in-app configuration page. It uses DSH's official MCP client; tools keep their mcp__gemus__* names.
Desktop setup (recommended)
Requires the official DSH Desktop 0.2.1-rc.5 and a Gemus account. Download the official app. The app includes its runtime; no system Node.js, global CLI, or terminal is required.
- In DSH, open Plugins → Add plugin and enter
github:Gemus-AI/gemus-dsh-plugin. - Install and enable Gemus, then open its page in the installed plugins list.
- Choose Domestic (
gemus.cn) or International (gemus.ai) in the plugin. Create a Key on that site, paste it into Gemus Key, and connect. Confirm the displayed actual site, account and personal space. An optional expected account ID is checked for equality; it never grants access. - In a normal DSH chat, ask: “Use Gemus workflow_list to list workflows in my personal space. Do not create workflows or generate content.”
A successful check confirms identity and observed tool registration at the shown time, not continuous online status. A normal chat call verifies actual use. Connection checks spend no Gemus generation credits; DSH chat may consume model credits. Model credentials and working-directory selection belong to DSH and remain separate.
Version 0.2.5 verifies the destination and authenticated site/account before saving or mounting tools, including after reopening. New Keys use mak_cn_… or mak_global_…; strict legacy Keys belong only to International. The connection is saved by DSH's credentials service and restored only after successful identity verification. Failed checks preserve the credential for retry and do not mount tools. Older International servers are compatible only with strict legacy-global Keys; Domestic and tagged Keys require the new identity response. This local storage is not an encrypted keychain and does not protect secrets from other processes running as the same OS user.
Recovery and upgrade
Use Check again after a network failure or exhausted automatic retries. It rebuilds one official MCP instance and checks again. Use Change Key for the wrong account or a revoked Key. Disconnect clears this plugin's stored Key and prevents legacy environment fallback; it does not revoke a Gemus Key or alter other clients.
From 0.1.3, use the native Plugins page to uninstall and reinstall, then enter your Key again. Keep your models, chats, and other plugins. Unknown user YAML overrides are not automatically removed; a conflicting Gemus MCP row must be resolved through the host's existing management UI. No build scripts or allowBuilds grant are needed.
Windows and macOS require separate end-to-end verification. Other DSH releases are outside this version's declared compatibility.
Advanced CLI setup
The existing published installer below is an International legacy path and has no installation identity preflight. Domestic users should use Desktop or the explicit manual environment below. It requires Node.js and a dsh command on PATH:
npx -y @gemus/mcp-proxy@0.1.16 setup-dsh
It configures the web CLI profile, not Desktop. Alternatively:
dsh plugin --profile web add github:Gemus-AI/gemus-dsh-plugin
export GEMUS_KEY="mak_cn_…"
export GEMUS_URL="https://gemus.cn/api/mcp"
dsh --profile web
For International use its own Key and https://gemus.ai/api/mcp. In PowerShell set both $env:GEMUS_KEY = "mak_cn_…" and $env:GEMUS_URL = "https://gemus.cn/api/mcp" before launching dsh --profile web in that same terminal. Child processes inherit the current shell environment. Updating the Windows user environment or a shell startup file requires a new terminal.
Legacy GEMUS_KEY / GEMUS_URL are read together only when no desktop credential record exists. GEMUS_URL is the full MCP URL; the default is https://gemus.ai/api/mcp. Supported destinations are official Gemus HTTPS port 443 /api/mcp endpoints and explicit localhost / 127.0.0.1 / [::1] development /api/mcp endpoints. Unknown hosts, other paths/official ports, URL credentials, query and fragment are rejected before sending a Key. Redirects are refused. Local development is global-only.
The next CLI source release adds installation preflight and optional --expected-user <account ID>. Its launched session carries a one-use setup intent and the verified account ID; the Host verifies again and updates the existing DSH credential through the connection owner. This makes an explicit setup replace a previously saved connection without changing ordinary environment precedence or the disconnect tombstone. Setup-intent fields are removed from the Host environment and are never persisted in shell profiles or user environment. It must be published from merged master and verified before updating live installer pins; this PR does not publish or point users to an unavailable package.
Use dsh --profile web --dump-config to inspect the Gemus layer. For reproducibility, pin github:Gemus-AI/gemus-dsh-plugin#<published-sha>.
What the agent gets
| Tool | Purpose |
|---|---|
edit |
Plan operations, multi-node graphs, focused edits and capability-backed imports |
read |
Canvas, node/model contract, assets, figures, history and PPT read targets |
execute |
Run one or several nodes, then deliver content, renew leases or report client failures |
view_image |
View produced images as pixels |
workflow_list, open_canvas |
Resolve and open an existing workflow |
search, fetch |
Discover and read community work |
ppt_edit, publish_workflow |
Deck authoring and confirmed publishing |
Writes require an explicit idempotencyKey. Use the same key only for an identical retry. Read item status and resource identities; execute.wait reports current progress. ask_user_question is available only in Bridge mode.
Known limits
view_imagedepends on your model route, not on dsh. dsh admits MCP image blocks only after the active model positively declares image input. The default route (deepseek-official/deepseek-v4-flash) declares text only, so every image degrades to[image unavailable: …; model "…" does not declare image input; …]— the model is told it cannot see, rather than shown a blank. Route the agent to a model that declares image input andview_imageworks as it does on any other host; the attachment store it needs is already mounted in this profile.- Prefer letting the canvas do the looking. Independent of the model route,
executeananalyzernode with the image wired to itsreferenceport and read back the structured text report. If that node's model already accepts images (Gemini, Claude, Kimi, GPT, Grok) it sees them directly; otherwise the platform routes that run to its own vision provider. Either way the visual judgement is made by a vision model on the canvas, not by the agent's model, and it costs no image tokens in this session. - Audio and embedded resources are never visible. dsh has no admission path for those blocks;
they are always replaced by a placeholder. Use
open_canvasto hand the result to a browser. - Generations are billed and slow. A call blocks until the job finishes.
toolCallTimeoutMsis raised to 600000 (10 min) by this bundle; the server-side ceiling is 45 min. If a call does time out, the job usually still completes — re-read the canvas withreadrather than re-running, which would spend credits twice. - One key, one account. All work runs as the owner of the
mak_key.
Uninstall
In Desktop, first Disconnect on the Gemus plugin page to clear this plugin's stored Key, then use Uninstall in Plugins. This does not revoke the Key or change other clients.
For the CLI web profile only:
dsh plugin --profile web remove gemus-dsh-plugin
If you used the one-command installer, also drop the saved key: delete the
# >>> gemus >>> … # <<< gemus <<< block from your shell startup file (macOS / Linux), or clear
GEMUS_KEY from your Windows user environment.
Generated from the Gemus monorepo (.dsh-plugin/, scripts/pack-dsh-plugin.mjs) — edit upstream,
not here. Third-party names are used for interoperability only.
Codex-generated images without a corresponding node remain on the local machine and do not land on the canvas.
New workflows use workflow_create({workspaceTarget:"personal"|"active",name,idempotencyKey}); retain the returned workflowId, then use edit.
No comments yet. Be the first to write one.